{"version":3,"file":"main.901b63fdeb972ba5.js","mappings":"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EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAChCI,WAAWJ,KAAK,CAAC,EAAG,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S,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,KAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,KAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,KAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,KAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MAAS,MACnG,IAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,MAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,MAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,MAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OACnG,OAAS,OAAS,SAKtB8oE,EAAaY,eAAiBtpE,WAAWJ,KAAK,CAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC3G,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAC5G,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACvG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAC5G,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAC5G,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,IAC7G,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAC1G,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IACzG,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACvG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAC5G,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,KAAM,IAC3G,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,IACzG,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,KACzG,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IACzG,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAC1G,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KACzG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KACzG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAC1G,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KACxG,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAC1G,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KACzG,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAC1G,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAM,IAAK,IAC3G,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KACvG,KAAM,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAC1G,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAC3G,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAC7G,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IACzG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IACzG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KACxG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACzG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IACzG,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KACxG,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,GAAI,GAAI,KAAM,GAAI,KAAM,GAC5G,KAAM,KAAM,KAAM,GAAI,GAAI,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,GAAI,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IACxG,KAAM,KAAM,KAAM,KAAM,GAAI,GAAI,KAAM,GAAI,KAAM,KAAM,KAAM,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,KAAM,GAAI,GAC1G,KAAM,GAAI,KAAM,KAAM,KAAM,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,GAAI,GAAI,KAAM,KAC5G,KAAM,KAAM,GAAI,KAAM,GAAI,KAAM,KAAM,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,IAC3G,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KACxG,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAC1G,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACzG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAC3G,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IACzG,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAC1G,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAC3G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAC7G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAC5G,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,KAC1G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KACxG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAC5G,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KACxG,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAC7G,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAC3G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IACzG,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,IAC3G,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAC1G,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAC3G,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,KACxG,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC3G,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KACzG,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,IACzG,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAC5G,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,KAC3G,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KACxG,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,IACxG,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,IAC5G,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KACxG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,KAC1G,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAC5G,KAAM,KAAM,IAAK,KAAM,KAAM,GAAI,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,GAAI,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,GACzG,KAAM,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,GAAI,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,KAAM,GAAI,GAAI,GAAI,KAAM,GAAI,KAC5G,KAAM,KAAM,KAAM,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,KAAM,KAAM,KAAM,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,GAAI,EAC9G,KAAM,EAAG,KAAM,KAAM,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAC7G,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IACzG,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAC5G,IAAK,KAAM,IAAK,KAAM,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAC1G,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACvG,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KACvG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KACvG,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACvG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC3G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,KAC1G,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,IAC5G,KAAM,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,IAC3G,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAC5G,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAC1G,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAC1G,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAC1G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IACxG,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,IAC5G,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KACzG,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,IAC5G,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAC5G,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,GAAI,GAAI,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,GAAI,KAC5G,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,GAAI,GAAI,GAAI,KAAM,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,GAAI,KAAM,GAAI,KAC1G,GAAI,KAAM,KAAM,KAAM,KAAM,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,EAAG,KAAM,EAAG,KAAM,EAAG,KAAM,IAAK,IAAK,IACzG,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,IAC3G,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAC5G,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,KAC1G,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAC7G,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IACzG,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KACzG,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAC1G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC3G,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACzG,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxG,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KACzG,IAAK,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACzG,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,GAAI,KAAM,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACvG,KAAM,KAAM,KAAM,IAAK,GAAI,IAAK,GAAI,KAAM,KAAM,KAAM,KAAM,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IACzG,IAAK,IAAK,IAAK,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KACxG,KAAM,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAC3G,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IACzG,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC1G,KAAM,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC3G,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1G,KAAM,KAAM,KAAM,KAAM,IAAM,IAAK,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAC1G,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACvG,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KACxG,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC3G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,KACvG,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAEjF8oE,CACX,CA5bIA,GA6bJ,MAAAoB,GAAepB,GC9cf,IAAIqB,GAAsC,WACtC,SAASA,EAAqBrmE,EAAMiwB,GAChCv6C,KAAKsqB,KAAOA,EACZtqB,KAAKu6C,OAASA,CAClB,CACAo2C,SAAqBpvE,UAAU0zB,QAAU,WACrC,OAAOj1C,KAAKsqB,IAChB,EACAqmE,EAAqBpvE,UAAUi5B,UAAY,WACvC,OAAOx6C,KAAKu6C,MAChB,EACOo2C,CACX,CAZIA,GAaJ,MAAAC,GAAeD,GCjBf,IAAIlpE,GAAsC,SAASL,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,EAmBI08C,GAA0B,WAC1B,SAASA,IACT,CAWAA,SAASuuC,eAAiB,SAAUv5D,EAAO5D,EAAOo9D,GAI9C,IAAIjc,EAAYv9C,EAAM/T,iBAClBwtE,EAAqBzuC,EAAShH,OAAOw1C,EAAUjc,GACnD,OAAKkc,EAAmBvqF,UACpBquE,EAAYA,EAAU3nD,SACZuL,YACVs4D,EAAqBzuC,EAAShH,OAAOw1C,EAAUjc,IAE5C,IAAI8b,GAAqB9b,EAAWkc,EAC/C,EAQAzuC,EAAShH,OAAS,SAAUw1C,EAAUjc,GAMlC,QALI5tD,EAAKC,EACL6pE,EAAqB,IAAI1vE,MACzBiC,EAAM,EACNgyD,EAAS,EACT0b,GAAoB,EACjB1tE,EAAMuxD,EAAU1xD,aAAa,CAChC,IAAI8tE,EAAW3uC,EAAS4uC,aAAarc,EAAWvxD,EAAKgyD,GACrD,GAAmB,MAAf2b,EAAS,IAA6B,MAAfA,EAAS,GAApC,CAgCA,GAFAD,GAAoB,EACpBD,EAAmBvuF,KAAKyuF,IACnBH,EACD,MAIe,MAAfG,EAAS,IACT3b,EAAS3rD,KAAKC,MAAMqnE,EAAS,GAAG13C,QAChCj2B,EAAMqG,KAAKC,MAAMqnE,EAAS,GAAGz3C,UAG7B87B,EAAS3rD,KAAKC,MAAMqnE,EAAS,GAAG13C,QAChCj2B,EAAMqG,KAAKC,MAAMqnE,EAAS,GAAGz3C,QAdjC,KA7BA,CACI,IAAKw3C,EAED,MAIJA,GAAoB,EACpB1b,EAAS,EACT,IACI,QAAS6b,GAAwBlqE,OAAM,EAAQQ,GAASspE,IAAsBK,GAAyBD,EAAqB9xF,QAAS+xF,GAAuB5pE,KAAM4pE,GAAyBD,EAAqB9xF,OAAQ,CACpN,IAAIgyF,GAAoBD,GAAuBptF,MACnB,MAAxBqtF,GAAkB,KAClB/tE,EAAMqG,KAAKC,MAAMD,KAAK+B,IAAIpI,EAAK+tE,GAAkB,GAAG73C,UAE5B,MAAxB63C,GAAkB,KAClB/tE,EAAMqG,KAAK+B,IAAIpI,EAAKqG,KAAKC,MAAMynE,GAAkB,GAAG73C,SAE5D,CACJ,OACO7xB,IAASV,EAAM,CAAEvf,MAAOigB,GAAS,SAEpC,IACQypE,KAA2BA,GAAuB5pE,OAASN,EAAKiqE,EAAqBvpE,SAASV,EAAGzF,KAAK0vE,EAC9G,SACU,GAAIlqE,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CACA4b,GAAOg/B,EAASgvC,QAEpB,CAgBJ,CACA,OAAOP,CACX,EAgBAzuC,EAAS4uC,aAAe,SAAU1tE,EAAQ+tE,EAAUC,GAChD,IAAIt9E,EAASsP,EAAOL,YAChBW,EAAQN,EAAON,WAEfjc,EAAS,IAAIoa,MAAM,GACvBihC,SAASmvC,aAAaxqF,EAAQq7C,EAASovC,oBAAoBluE,EAAQtP,EAAQ4P,EAAOytE,EAAUC,EAAalvC,EAAS2O,eAAgB3O,EAASqvC,uBAC1H,MAAb1qF,EAAO,KACPuqF,EAAc7nE,KAAKC,MAAM3iB,EAAO,GAAGsyC,QACnCg4C,EAAW5nE,KAAKC,MAAM3iB,EAAO,GAAGuyC,SAEpC8I,EAASmvC,aAAaxqF,EAAQq7C,EAASovC,oBAAoBluE,EAAQtP,EAAQ4P,EAAOytE,EAAUC,EAAalvC,EAASsvC,cAAetvC,EAASuvC,sBACnI5qF,CACX,EACAq7C,EAASmvC,aAAe,SAAUxqF,EAAQ6qF,EAAWC,GACjD,QAASnsE,EAAI,EAAGA,EAAImsE,EAAmBvrF,OAAQof,IAC3C3e,EAAO8qF,EAAmBnsE,IAAMksE,EAAUlsE,EAElD,EACA08B,EAASovC,oBAAsB,SAAUluE,EAAQtP,EAAQ4P,EAAOytE,EAAUC,EAAanoC,GAKnF,QAHIpiD,EAAS,IAAIoa,MAAM,GACnB6pD,GAAQ,EACRriB,EAAW,IAAIjiC,WAAWyiC,EAAQ7iD,QAC/B+qF,EAAWr9E,EAAQq9E,GAAYjvC,EAASgvC,SAAU,CAErD,GAAW,OADPU,EAAM1vC,EAAS0O,iBAAiBxtC,EAAQguE,EAAaD,EAAUztE,GAAO,EAAOulC,EAASR,IACzE,CACb,KAAO0oC,EAAW,GAAG,CAEjB,GAAsB,OADlBU,GAAiB3vC,EAAS0O,iBAAiBxtC,EAAQguE,IAAeD,EAAUztE,GAAO,EAAOulC,EAASR,IAIlG,CACD0oC,IACA,KACJ,CALIS,EAAMC,EAMd,CACAhrF,EAAO,GAAK,IAAIqyC,GAAY04C,EAAI,GAAIT,GACpCtqF,EAAO,GAAK,IAAIqyC,GAAY04C,EAAI,GAAIT,GACpCrmB,GAAQ,EACR,KACJ,CACJ,CACA,IAAIgnB,GAAUX,EAAW,EAEzB,GAAIrmB,EAAO,CAGP,QAFIinB,GAAkB,EAClBF,GAAiBrrE,WAAWJ,KAAK,CAACmD,KAAKC,MAAM3iB,EAAO,GAAGsyC,QAAS5vB,KAAKC,MAAM3iB,EAAO,GAAGsyC,UAClF24C,GAAUh+E,EAAQg+E,KAAW,CAChC,IAAIF,EAKJ,GAAW,OALPA,EAAM1vC,EAAS0O,iBAAiBxtC,EAAQyuE,GAAe,GAAIC,GAASpuE,GAAO,EAAOulC,EAASR,KAM3Fl/B,KAAKwV,IAAI8yD,GAAe,GAAKD,EAAI,IAAM1vC,EAAS8vC,mBAChDzoE,KAAKwV,IAAI8yD,GAAe,GAAKD,EAAI,IAAM1vC,EAAS8vC,kBAChDH,GAAiBD,EACjBG,GAAkB,MAEjB,CACD,GAAIA,GAAkB7vC,EAAS+vC,sBAC3B,MAGAF,IAER,CACJ,CACAD,IAAWC,GAAkB,EAC7BlrF,EAAO,GAAK,IAAIqyC,GAAY24C,GAAe,GAAIC,IAC/CjrF,EAAO,GAAK,IAAIqyC,GAAY24C,GAAe,GAAIC,GACnD,CACA,OAAIA,GAAUX,EAAWjvC,EAASgwC,oBAC9B9sE,GAAOC,KAAKxe,EAAQ,MAEjBA,CACX,EAWAq7C,EAAS0O,iBAAmB,SAAUxtC,EAAQ8xD,EAAQhyD,EAAKQ,EAAOsuC,EAAY/I,EAASR,GACnFrjC,GAAOM,WAAW+iC,EAAU,EAAGA,EAASriD,OAAQ,GAIhD,QAHI0jD,EAAeorB,EACfid,EAAa,EAEV/uE,EAAOhjB,IAAI0pD,EAAc5mC,IAAQ4mC,EAAe,GAAKqoC,IAAejwC,EAASkwC,iBAChFtoC,IAKJ,QAHIxjC,EAAIwjC,EACJlB,GAAkB,EAClBQ,GAAgBH,EAAQ7iD,OACnBuiD,GAAUqJ,EAAY1rC,EAAI5C,EAAO4C,IAAK,CAE3C,GADYlD,EAAOhjB,IAAIkmB,EAAGpD,KACZylC,GACVF,EAASG,UAER,CACD,GAAIA,KAAoBQ,GAAgB,EAAG,CACvC,GAAIlH,EAAS8G,qBAAqBP,EAAUQ,EAAS/G,EAASoI,yBAA2BpI,EAAS8H,iBAC9F,OAAO,IAAIxjC,WAAW,CAACsjC,EAAcxjC,IAEzCwjC,GAAgBrB,EAAS,GAAKA,EAAS,GACvCjkC,GAAOC,UAAUgkC,EAAU,EAAGA,EAAU,EAAGG,GAAkB,GAC7DH,EAASG,GAAkB,GAAK,EAChCH,EAASG,IAAmB,EAC5BA,IACJ,MAEIA,KAEJH,EAASG,IAAmB,EAC5BD,IAAWA,EACf,CACJ,CACA,OAAIC,KAAoBQ,GAAgB,GACpClH,EAAS8G,qBAAqBP,EAAUQ,EAAS/G,EAASoI,yBAA2BpI,EAAS8H,iBACvF,IAAIxjC,WAAW,CAACsjC,EAAcxjC,EAAI,IAEtC,IACX,EAYA47B,EAAS8G,qBAAuB,SAAUP,EAAUQ,EAASC,GAIzD,QAHIR,EAAcD,EAASriD,OACvB+iD,EAAQ,EACRC,EAAgB,EACX5jC,EAAI,EAAGA,EAAIkjC,EAAaljC,IAC7B2jC,GAASV,EAASjjC,GAClB4jC,GAAiBH,EAAQzjC,GAE7B,GAAI2jC,EAAQC,EAGR,WAKJ,IAAIE,EAAeH,EAAQC,EAC3BF,GAAyBI,EAEzB,QADIC,EAAgB,EACXjjC,EAAI,EAAGA,EAAIoiC,EAAapiC,IAAK,CAClC,IAAIkjC,GAAUf,EAASniC,GACnBmjC,GAAgBR,EAAQ3iC,GAAKgjC,EAC7BI,GAAWF,GAAUC,GAAgBD,GAAUC,GAAgBA,GAAgBD,GACnF,GAAIE,GAAWR,EACX,WAEJK,GAAiBG,EACrB,CACA,OAAOH,EAAgBJ,CAC3B,EACAjH,EAASqvC,sBAAwB/qE,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,IAC3D87B,EAASuvC,qBAAuBjrE,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,IAC1D87B,EAAS8H,iBAAmB,IAC5B9H,EAASoI,wBAA0B,GAGnCpI,EAAS2O,cAAgBrqC,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAE/D87B,EAASsvC,aAAehrE,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IACjE87B,EAASkwC,gBAAkB,EAC3BlwC,EAAS8vC,kBAAoB,EAG7B9vC,EAAS+vC,sBAAwB,GAGjC/vC,EAASgvC,SAAW,EACpBhvC,EAASgwC,mBAAqB,GACvBhwC,CACX,CAnSIA,GAoSJ,MAAAmwC,GAAenwC,GCjUf,IAmBIowC,GAA6B,WAC7B,SAASA,EAAYjkD,EAAOC,GACxB,GAA4B,IAAxBA,EAAaloC,OACb,MAAM,IAAIsc,GAEd9iB,KAAKyuC,MAAQA,EACb,IAAIE,EAA6BD,EAAaloC,OAC9C,GAAImoC,EAAqB,GAAyB,IAApBD,EAAa,GAAU,CAGjD,QADIE,IACGA,EAAeD,GAAqD,IAA/BD,EAAaE,IACrDA,IAEAA,IAAiBD,EACjB3uC,KAAK0uC,aAAe,IAAI9nB,WAAW,CAAC,KAGpC5mB,KAAK0uC,aAAe,IAAI9nB,WAAW+nB,EAAqBC,GACxDhqB,GAAOC,UAAU6pB,EAAcE,EAAc5uC,KAAK0uC,aAAc,EAAG1uC,KAAK0uC,aAAaloC,QAE7F,MAEIxG,KAAK0uC,aAAeA,CAE5B,CACAgkD,SAAYnxE,UAAUstB,gBAAkB,WACpC,OAAO7uC,KAAK0uC,YAChB,EAIAgkD,EAAYnxE,UAAUutB,UAAY,WAC9B,OAAO9uC,KAAK0uC,aAAaloC,OAAS,CACtC,EAIAksF,EAAYnxE,UAAUwtB,OAAS,WAC3B,OAAgC,IAAzB/uC,KAAK0uC,aAAa,EAC7B,EAIAgkD,EAAYnxE,UAAUytB,eAAiB,SAAUC,GAC7C,OAAOjvC,KAAK0uC,aAAa1uC,KAAK0uC,aAAaloC,OAAS,EAAIyoC,EAC5D,EAIAyjD,EAAYnxE,UAAU2tB,WAAa,SAAUxpB,GACzC,IAAIuB,EAAKC,EACT,GAAU,IAANxB,EAEA,OAAO1lB,KAAKgvC,eAAe,GAE/B,GAAU,IAANtpB,EAAS,CAET,IAAI4W,IACJ,IACI,QAASqG,EA9EiB,SAASvb,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,CAoE8B6hB,CAASznB,KAAK0uC,cAAeioB,EAAKh0B,EAAGtjC,QAASs3D,EAAGnvC,KAAMmvC,EAAKh0B,EAAGtjC,OAAQ,CACjF,IAAI8vC,EAAcwnB,EAAG3yD,MACrBs4B,EAAMt8B,KAAKyuC,MAAMrjC,IAAIkxB,EAAK6S,EAC9B,CACJ,OACOxnB,IAASV,EAAM,CAAEvf,MAAOigB,GAAS,SAEpC,IACQgvC,IAAOA,EAAGnvC,OAASN,EAAKyb,EAAG/a,SAASV,EAAGzF,KAAKkhB,EACpD,SACU,GAAI1b,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CACA,OAAO40B,CACX,CAGA,QAFIr1B,EAAiBjH,KAAK0uC,aAAa,GACnCrkB,EAAerqB,KAAK0uC,aAAaloC,OAC5Bof,EAAY,EAAGA,EAAIyE,EAAMzE,IAC9B3e,EAASjH,KAAKyuC,MAAMrjC,IAAIpL,KAAKyuC,MAAMW,SAAS1pB,EAAGze,GAASjH,KAAK0uC,aAAa9oB,IAE9E,OAAO3e,CACX,EACAyrF,EAAYnxE,UAAUnW,IAAM,SAAU8gB,GAClC,IAAKlsB,KAAKyuC,MAAM5nB,OAAOqF,EAAMuiB,OACzB,MAAM,IAAI3rB,GAAyB,iDAEvC,GAAI9iB,KAAK+uC,SACL,OAAO7iB,EAEX,GAAIA,EAAM6iB,SACN,OAAO/uC,KAEX,IAAIqvC,EAAsBrvC,KAAK0uC,aAC3BY,EAAqBpjB,EAAMwiB,aAC/B,GAAIW,EAAoB7oC,OAAS8oC,EAAmB9oC,OAAQ,CACxD,IAAIu0B,EAAOsU,EACXA,EAAsBC,EACtBA,EAAqBvU,CACzB,CACA,IAAIwU,EAAU,IAAI3oB,WAAW0oB,EAAmB9oC,QAC5CgpC,EAAqBF,EAAmB9oC,OAAS6oC,EAAoB7oC,OAEzEoe,GAAOC,UAAUyqB,EAAoB,EAAGC,EAAS,EAAGC,GACpD,QAAS5pB,EAAY4pB,EAAY5pB,EAAI0pB,EAAmB9oC,OAAQof,IAC5D2pB,EAAQ3pB,GAAK5lB,KAAKyuC,MAAMrjC,IAAIikC,EAAoBzpB,EAAI4pB,GAAaF,EAAmB1pB,IAExF,OAAO,IAAI8sE,EAAY1yF,KAAKyuC,MAAOc,EACvC,EACAmjD,EAAYnxE,UAAUoxE,SAAW,SAAUzmE,GACvC,IAAKlsB,KAAKyuC,MAAM5nB,OAAOqF,EAAMuiB,OACzB,MAAM,IAAI3rB,GAAyB,iDAEvC,OAAIoJ,EAAM6iB,SACC/uC,KAEJA,KAAKoL,IAAI8gB,EAAM0mE,WAC1B,EACAF,EAAYnxE,UAAU6tB,SAAW,SAAUljB,GACvC,OAAIA,aAAiBwmE,EACV1yF,KAAK6yF,cAAc3mE,GAEvBlsB,KAAKgwC,eAAe9jB,EAC/B,EACAwmE,EAAYnxE,UAAUsxE,cAAgB,SAAU3mE,GAC5C,IAAKlsB,KAAKyuC,MAAM5nB,OAAOqF,EAAMuiB,OACzB,MAAM,IAAI3rB,GAAyB,iDAEvC,GAAI9iB,KAAK+uC,UAAY7iB,EAAM6iB,SAEvB,OAAO,IAAI2jD,EAAY1yF,KAAKyuC,MAAO,IAAI7nB,WAAW,CAAC,KAOvD,QALI8oB,EAAgB1vC,KAAK0uC,aACrBiB,EAAkBD,EAAclpC,OAChCopC,EAAgB1jB,EAAMwiB,aACtBmB,EAAkBD,EAAcppC,OAChCspC,EAAU,IAAIlpB,WAAW+oB,EAAUE,EAAU,GACxCjqB,EAAY,EAAGA,EAAI+pB,EAAS/pB,IAEjC,QADImqB,EAAiBL,EAAc9pB,GAC1B+G,EAAY,EAAGA,EAAIkjB,EAASljB,IACjCmjB,EAAQlqB,EAAI+G,GAAK3sB,KAAKyuC,MAAMrjC,IAAI0kC,EAAQlqB,EAAI+G,GAAI3sB,KAAKyuC,MAAMW,SAASW,EAAQH,EAAcjjB,KAGlG,OAAO,IAAI+lE,EAAY1yF,KAAKyuC,MAAOqB,EACvC,EACA4iD,EAAYnxE,UAAUqxE,SAAW,WAG7B,QAFIvoE,EAAerqB,KAAK0uC,aAAaloC,OACjCssF,EAAuB,IAAIlsE,WAAWyD,GACjCzE,EAAY,EAAGA,EAAIyE,EAAMzE,IAC9BktE,EAAqBltE,GAAK5lB,KAAKyuC,MAAMkkD,SAAS,EAAG3yF,KAAK0uC,aAAa9oB,IAEvE,OAAO,IAAI8sE,EAAY1yF,KAAKyuC,MAAOqkD,EACvC,EACAJ,EAAYnxE,UAAUyuB,eAAiB,SAAUC,GAC7C,GAAe,IAAXA,EACA,OAAO,IAAIyiD,EAAY1yF,KAAKyuC,MAAO,IAAI7nB,WAAW,CAAC,KAEvD,GAAe,IAAXqpB,EACA,OAAOjwC,KAIX,QAFIqqB,EAAerqB,KAAK0uC,aAAaloC,OACjCspC,EAAU,IAAIlpB,WAAWyD,GACpBzE,EAAY,EAAGA,EAAIyE,EAAMzE,IAC9BkqB,EAAQlqB,GAAK5lB,KAAKyuC,MAAMW,SAASpvC,KAAK0uC,aAAa9oB,GAAIqqB,GAE3D,OAAO,IAAIyiD,EAAY1yF,KAAKyuC,MAAOqB,EACvC,EACA4iD,EAAYnxE,UAAU2uB,mBAAqB,SAAUjB,EAAQE,GACzD,GAAIF,EAAS,EACT,MAAM,IAAInsB,GAEd,GAAoB,IAAhBqsB,EACA,OAAO,IAAIujD,EAAY1yF,KAAKyuC,MAAO,IAAI7nB,WAAW,CAAC,KAIvD,QAFIyD,EAAerqB,KAAK0uC,aAAaloC,OACjCspC,EAAU,IAAIlpB,WAAWyD,EAAO4kB,GAC3BrpB,EAAY,EAAGA,EAAIyE,EAAMzE,IAC9BkqB,EAAQlqB,GAAK5lB,KAAKyuC,MAAMW,SAASpvC,KAAK0uC,aAAa9oB,GAAIupB,GAE3D,OAAO,IAAIujD,EAAY1yF,KAAKyuC,MAAOqB,EACvC,EA6BA4iD,EAAYnxE,UAAU6C,SAAW,WAE7B,QADInd,EAAS,IAAIuvB,GACRyY,EAAiBjvC,KAAK8uC,YAAaG,GAAU,EAAGA,IAAU,CAC/D,IAAIE,EAAsBnvC,KAAKgvC,eAAeC,GAC1B,IAAhBE,IACIA,EAAc,GACdloC,EAAO6tB,OAAO,OACdqa,GAAeA,GAGXloC,EAAOT,SAAW,GAClBS,EAAO6tB,OAAO,QAGP,IAAXma,GAAgC,IAAhBE,IAChBloC,EAAO6tB,OAAOqa,GAEH,IAAXF,IACe,IAAXA,EACAhoC,EAAO6tB,OAAO,MAGd7tB,EAAO6tB,OAAO,MACd7tB,EAAO6tB,OAAOma,KAI9B,CACA,OAAOhoC,EAAOmd,UAClB,EACOsuE,CACX,CA7OIA,GA8OJ,MAAAK,GAAeL,GC9Qf,IAAIM,GAA6B,WAC7B,SAASA,IACT,CACAA,SAAYzxE,UAAUnW,IAAM,SAAUsa,EAAGzE,GACrC,OAAQyE,EAAIzE,GAAKjhB,KAAKizF,OAC1B,EACAD,EAAYzxE,UAAUoxE,SAAW,SAAUjtE,EAAGzE,GAC1C,OAAQjhB,KAAKizF,QAAUvtE,EAAIzE,GAAKjhB,KAAKizF,OACzC,EACAD,EAAYzxE,UAAU0T,IAAM,SAAUvP,GAClC,OAAO1lB,KAAKmuC,SAASzoB,EACzB,EACAstE,EAAYzxE,UAAU6sB,IAAM,SAAU1oB,GAClC,GAAU,IAANA,EACA,MAAM,IAAI5C,GAEd,OAAO9iB,KAAKquC,SAAS3oB,EACzB,EACAstE,EAAYzxE,UAAUivB,QAAU,SAAU9qB,GACtC,GAAU,IAANA,EACA,MAAM,IAAIsrB,GAEd,OAAOhxC,KAAKmuC,SAASnuC,KAAKizF,QAAUjzF,KAAKquC,SAAS3oB,GAAK,EAC3D,EACAstE,EAAYzxE,UAAU6tB,SAAW,SAAU1pB,EAAGzE,GAC1C,OAAU,IAANyE,GAAiB,IAANzE,EACJ,EAEJjhB,KAAKmuC,UAAUnuC,KAAKquC,SAAS3oB,GAAK1lB,KAAKquC,SAASptB,KAAOjhB,KAAKizF,QAAU,GACjF,EACAD,EAAYzxE,UAAUiJ,QAAU,WAC5B,OAAOxqB,KAAKizF,OAChB,EACAD,EAAYzxE,UAAUsF,OAAS,SAAUO,GACrC,OAAOA,IAAMpnB,IACjB,EACOgzF,CACX,CArCIA,GAsCJ,MAAAE,GAAeF,GCzBf,IAAIlyE,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GAyBzCuxE,GAA2B,SAAUpxE,GAGrC,SAASoxE,EAAUF,EAAS9yD,GACxB,IAAIle,EAAQF,EAAON,KAAKzhB,OAASA,KACjCiiB,EAAMgxE,QAAUA,EAChBhxE,EAAMksB,SAAW,IAAIvnB,WAAWqsE,GAChChxE,EAAMosB,SAAW,IAAIznB,WAAWqsE,GAEhC,QADIvsE,IACKd,EAAY,EAAGA,EAAIqtE,EAASrtE,IACjC3D,EAAMksB,SAASvoB,GAAKc,EACpBA,EAAKA,EAAIyZ,EAAa8yD,EAE1B,IAASrtE,EAAY,EAAGA,EAAIqtE,EAAU,EAAGrtE,IACrC3D,EAAMosB,SAASpsB,EAAMksB,SAASvoB,IAAMA,EAGxC3D,SAAMovB,KAAO,IAAIqhD,GAAYzwE,EAAO,IAAI2E,WAAW,CAAC,KACpD3E,EAAMqvB,IAAM,IAAIohD,GAAYzwE,EAAO,IAAI2E,WAAW,CAAC,KAC5C3E,CACX,CACAkxE,OApBAryE,GAAUqyE,EAAWpxE,GAoBrBoxE,EAAU5xE,UAAUkuB,QAAU,WAC1B,OAAOzvC,KAAKqxC,IAChB,EACA8hD,EAAU5xE,UAAUgwB,OAAS,WACzB,OAAOvxC,KAAKsxC,GAChB,EACA6hD,EAAU5xE,UAAUsvB,cAAgB,SAAU5B,EAAQE,GAClD,GAAIF,EAAS,EACT,MAAM,IAAInsB,GAEd,GAAoB,IAAhBqsB,EACA,OAAOnvC,KAAKqxC,KAEhB,IAAI3C,EAAe,IAAI9nB,WAAWqoB,EAAS,GAC3CP,SAAa,GAAKS,EACX,IAAIujD,GAAY1yF,KAAM0uC,EACjC,EACAykD,EAAUC,UAAY,IAAID,EAAU7D,GAAaa,oBAAqB,GAC/DgD,CACX,CAxCIA,CAwCFH,IACF,MAAAK,GAAeF,GClEf,IAyBIG,GAAiC,WACjC,SAASA,IACLtzF,KAAKyuC,MAAQ0kD,GAAUC,SAC3B,CAQAE,SAAgB/xE,UAAUkQ,OAAS,SAAU8gB,EAAUwR,EAAgBrW,GAKnE,QAJIzmB,EAAKC,EACLurB,EAAO,IAAIigD,GAAY1yF,KAAKyuC,MAAO8D,GACnCghD,EAAI,IAAI3sE,WAAWm9B,GACnBr8C,GAAQ,EACHke,EAAYm+B,EAAgBn+B,EAAI,EAAGA,IAAK,CAC7C,IAAI4tE,EAAa/gD,EAAKvD,WAAWlvC,KAAKyuC,MAAMxZ,IAAIrP,IAChD2tE,EAAExvC,EAAiBn+B,GAAK4tE,EACL,IAAfA,IACA9rF,GAAQ,EAEhB,CACA,IAAKA,EACD,OAAO,EAEX,IAAI+rF,GAAczzF,KAAKyuC,MAAM8C,SAC7B,GAAgB,MAAZ7D,EACA,IACI,QAASgmD,GAtDiB,SAAStsE,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,CA4CsC6hB,CAASimB,GAAWimD,GAAeD,GAAWr0F,QAASs0F,GAAansE,KAAMmsE,GAAeD,GAAWr0F,OAAQ,CAC9H,IAAIu0F,GAAUD,GAAa3vF,MACvBid,GAAIjhB,KAAKyuC,MAAMxZ,IAAIsd,EAAS/rC,OAAS,EAAIotF,IAEzCjjD,GAAO,IAAI+hD,GAAY1yF,KAAKyuC,MAAO,IAAI7nB,WAAW,CAAC5mB,KAAKyuC,MAAMkkD,SAAS,EAAG1xE,IAAI,KAClFwyE,GAAcA,GAAYrkD,SAASuB,GACvC,CACJ,OACOhpB,IAASV,EAAM,CAAEvf,MAAOigB,GAAS,SAEpC,IACQgsE,KAAiBA,GAAansE,OAASN,EAAKwsE,GAAW9rE,SAASV,EAAGzF,KAAKiyE,GAChF,SACU,GAAIzsE,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CAUJ,IARImrC,GAAW,IAAI6/C,GAAY1yF,KAAKyuC,MAAO8kD,GAEvCzgD,GAAa9yC,KAAK+yC,sBAAsB/yC,KAAKyuC,MAAMoC,cAAckT,EAAgB,GAAIlR,GAAUkR,GAC/F/Q,GAAQF,GAAW,GACnBG,GAAQH,GAAW,GAEnBI,GAAiBlzC,KAAKmzC,mBAAmBH,IACzCI,GAAkBpzC,KAAKqzC,oBAAoBJ,GAAOD,GAAOE,IAC7D,IAASttB,EAAY,EAAGA,EAAIstB,GAAe1sC,OAAQof,IAAK,CACpD,IAAI3b,GAAWsoC,EAAS/rC,OAAS,EAAIxG,KAAKyuC,MAAML,IAAI8E,GAAettB,IACnE,GAAI3b,GAAW,EACX,MAAMqa,GAAkBC,sBAE5BguB,EAAStoC,IAAYjK,KAAKyuC,MAAMkkD,SAASpgD,EAAStoC,IAAWmpC,GAAgBxtB,GACjF,CACA,OAAOstB,GAAe1sC,MAC1B,EAWA8sF,EAAgB/xE,UAAUwxB,sBAAwB,SAAUrtB,EAAGzE,EAAGqyB,GAE9D,GAAI5tB,EAAEopB,YAAc7tB,EAAE6tB,YAAa,CAC/B,IAAI/T,EAAOrV,EACXA,EAAIzE,EACJA,EAAI8Z,CACR,CAMA,QALIwY,EAAQ7tB,EACR8tB,EAAIvyB,EACJwyB,EAAQzzC,KAAKyuC,MAAMgB,UACnB3sC,EAAI9C,KAAKyuC,MAAM8C,SAEZiC,EAAE1E,aAAenlB,KAAK2uB,MAAMhF,EAAI,IAAI,CACvC,IAAII,EAAYH,EACZI,EAAYF,EAIhB,GAFAA,EAAQ3wC,GADRywC,EAAQC,GAGEzE,SAEN,MAAMzqB,GAAkBC,sBAE5BivB,EAAIE,EAIJ,QAHIE,GAAI5zC,KAAKyuC,MAAMgB,UACfa,GAAyBiD,EAAMvE,eAAeuE,EAAMzE,aACpD+E,GAAa7zC,KAAKyuC,MAAM+B,QAAQF,IAC7BkD,EAAE1E,aAAeyE,EAAMzE,cAAgB0E,EAAEzE,UAAU,CACtD,IAAI+E,GAAaN,EAAE1E,YAAcyE,EAAMzE,YACnC4B,GAAQ1wC,KAAKyuC,MAAMW,SAASoE,EAAExE,eAAewE,EAAE1E,aAAc+E,IACjED,GAAIA,GAAExoC,IAAIpL,KAAKyuC,MAAMoC,cAAciD,GAAYpD,KAC/C8C,EAAIA,EAAEm/C,SAASp/C,EAAMrD,mBAAmB4D,GAAYpD,IACxD,CACA5tC,EAAI8wC,GAAExE,SAASqE,GAAOk/C,SAASh/C,GAAWi/C,UAC9C,CACA,IAAI7+C,GAAmBjxC,EAAEksC,eAAe,GACxC,GAAyB,IAArB+E,GACA,MAAMzvB,GAAkBC,sBAE5B,IAAIisB,GAAUxwC,KAAKyuC,MAAM+B,QAAQuD,IAGjC,MAAO,CAFKjxC,EAAEssC,SAASoB,IACXgD,EAAEpE,SAASoB,IAE3B,EAMA8iD,EAAgB/xE,UAAU4xB,mBAAqB,SAAUa,GAKrD,QAHIC,EAAYD,EAAalF,YACzB7nC,EAAS,IAAI2f,WAAWqtB,GACxB1gB,EAAI,EACC3N,EAAY,EAAGA,EAAI5lB,KAAKyuC,MAAMjkB,WAAa+I,EAAI0gB,EAAWruB,IAC5B,IAA/BouB,EAAa9E,WAAWtpB,KACxB3e,EAAOssB,GAAKvzB,KAAKyuC,MAAM+B,QAAQ5qB,GAC/B2N,KAGR,GAAIA,IAAM0gB,EACN,MAAM3vB,GAAkBC,sBAE5B,OAAOtd,CACX,EACAqsF,EAAgB/xE,UAAU8xB,oBAAsB,SAAUa,EAAgBF,EAAcd,GAGpF,QAFI2gD,EAAqB7/C,EAAalF,YAClCglD,EAA+B,IAAIltE,WAAWitE,GACzCjuE,EAAY,EAAGA,GAAKiuE,EAAoBjuE,IAC7CkuE,EAA6BD,EAAqBjuE,GAC9C5lB,KAAKyuC,MAAMW,SAASxpB,EAAGouB,EAAahF,eAAeppB,IAM3D,IAJImuE,EAAmB,IAAIrB,GAAY1yF,KAAKyuC,MAAOqlD,GAE/CluF,EAAIstC,EAAe1sC,OACnBS,EAAS,IAAI2f,WAAWhhB,GAC5B,IAASggB,EAAY,EAAGA,EAAIhgB,EAAGggB,IAAK,CAChC,IAAIuuB,EAAYn0C,KAAKyuC,MAAM+B,QAAQ0C,EAAettB,IAC9CouE,GAAYh0F,KAAKyuC,MAAMkkD,SAAS,EAAGz+C,EAAehF,WAAWiF,IAC7DC,GAAcp0C,KAAKyuC,MAAM+B,QAAQujD,EAAiB7kD,WAAWiF,IACjEltC,EAAO2e,GAAK5lB,KAAKyuC,MAAMW,SAAS4kD,GAAW5/C,GAC/C,CACA,OAAOntC,CACX,EACOqsF,CACX,CA5JIA,GA6JJ,MAAAW,GAAeX,GC9Kf,IAAIY,GAA6B,WAC7B,SAASA,EAAY58D,EAAOkuB,EAASG,EAAYF,EAAUC,GACnDpuB,aAAiB48D,EACjBl0F,KAAKm0F,cAAc78D,GAGnBt3B,KAAKo0F,cAAc98D,EAAOkuB,EAASG,EAAYF,EAAUC,EAEjE,CAWAwuC,SAAY3yE,UAAU6yE,cAAgB,SAAU98D,EAAOkuB,EAASG,EAAYF,EAAUC,GAClF,IAAI2uC,EAA6B,MAAX7uC,GAAiC,MAAdG,EACrC2uC,EAA+B,MAAZ7uC,GAAmC,MAAfC,EAC3C,GAAI2uC,GAAmBC,EACnB,MAAM,IAAIj7D,GAEVg7D,GACA7uC,EAAU,IAAIlM,GAAY,EAAGmM,EAASjM,QACtCmM,EAAa,IAAIrM,GAAY,EAAGoM,EAAYlM,SAEvC86C,IACL7uC,EAAW,IAAInM,GAAYhiB,EAAMpU,WAAa,EAAGsiC,EAAQhM,QACzDkM,EAAc,IAAIpM,GAAYhiB,EAAMpU,WAAa,EAAGyiC,EAAWnM,SAEnEx5C,KAAKs3B,MAAQA,EACbt3B,KAAKwlD,QAAUA,EACfxlD,KAAK2lD,WAAaA,EAClB3lD,KAAKylD,SAAWA,EAChBzlD,KAAK0lD,YAAcA,EACnB1lD,KAAKu0F,KAAO5qE,KAAKC,MAAMD,KAAKgT,IAAI6oB,EAAQjM,OAAQoM,EAAWpM,SAC3Dv5C,KAAKw0F,KAAO7qE,KAAKC,MAAMD,KAAK+B,IAAI+5B,EAASlM,OAAQmM,EAAYnM,SAC7Dv5C,KAAKy0F,KAAO9qE,KAAKC,MAAMD,KAAKgT,IAAI6oB,EAAQhM,OAAQiM,EAASjM,SACzDx5C,KAAK00F,KAAO/qE,KAAKC,MAAMD,KAAK+B,IAAIi6B,EAAWnM,OAAQkM,EAAYlM,QACnE,EACA06C,EAAY3yE,UAAU4yE,cAAgB,SAAUQ,GAC5C30F,KAAKs3B,MAAQq9D,EAAYr9D,MACzBt3B,KAAKwlD,QAAUmvC,EAAYrK,aAC3BtqF,KAAK2lD,WAAagvC,EAAYtK,gBAC9BrqF,KAAKylD,SAAWkvC,EAAYpK,cAC5BvqF,KAAK0lD,YAAcivC,EAAYC,iBAC/B50F,KAAKu0F,KAAOI,EAAYE,UACxB70F,KAAKw0F,KAAOG,EAAYG,UACxB90F,KAAKy0F,KAAOE,EAAYI,UACxB/0F,KAAK00F,KAAOC,EAAYK,SAC5B,EAIAd,EAAYv7E,MAAQ,SAAUs8E,EAASC,GACnC,OAAe,MAAXD,EACOC,EAEK,MAAZA,EACOD,EAEJ,IAAIf,EAAYe,EAAQ39D,MAAO29D,EAAQzvC,QAASyvC,EAAQtvC,WAAYuvC,EAASzvC,SAAUyvC,EAASxvC,YAC3G,EAIAwuC,EAAY3yE,UAAU4zE,eAAiB,SAAUC,EAAkBC,EAAgBC,GAC/E,IAAIC,EAAav1F,KAAKwlD,QAClBgwC,EAAgBx1F,KAAK2lD,WACrB8vC,EAAcz1F,KAAKylD,SACnBiwC,EAAiB11F,KAAK0lD,YAC1B,GAAI0vC,EAAmB,EAAG,CACtB,IAAIj5D,EAAQm5D,EAASt1F,KAAKwlD,QAAUxlD,KAAKylD,SACrCkwC,EAAUhsE,KAAKC,MAAMuS,EAAMqd,OAAS47C,GACpCO,EAAU,IACVA,EAAU,GAEd,IAAIC,EAAS,IAAIt8C,GAAYnd,EAAMod,OAAQo8C,GACvCL,EACAC,EAAaK,EAGbH,EAAcG,CAEtB,CACA,GAAIP,EAAiB,EAAG,CACpB,IAAI98D,GAAS+8D,EAASt1F,KAAK2lD,WAAa3lD,KAAK0lD,YACzCmwC,GAAUlsE,KAAKC,MAAM2O,GAAOihB,OAAS67C,GACrCQ,IAAW71F,KAAKs3B,MAAMnU,cACtB0yE,GAAU71F,KAAKs3B,MAAMnU,YAAc,GAEvC,IAAI2yE,GAAY,IAAIx8C,GAAY/gB,GAAOghB,OAAQs8C,IAC3CP,EACAE,EAAgBM,GAGhBJ,EAAiBI,EAEzB,CACA,OAAO,IAAI5B,EAAYl0F,KAAKs3B,MAAOi+D,EAAYC,EAAeC,EAAaC,EAC/E,EACAxB,EAAY3yE,UAAUszE,QAAU,WAC5B,OAAO70F,KAAKu0F,IAChB,EACAL,EAAY3yE,UAAUuzE,QAAU,WAC5B,OAAO90F,KAAKw0F,IAChB,EACAN,EAAY3yE,UAAUwzE,QAAU,WAC5B,OAAO/0F,KAAKy0F,IAChB,EACAP,EAAY3yE,UAAUyzE,QAAU,WAC5B,OAAOh1F,KAAK00F,IAChB,EACAR,EAAY3yE,UAAU+oE,WAAa,WAC/B,OAAOtqF,KAAKwlD,OAChB,EACA0uC,EAAY3yE,UAAUgpE,YAAc,WAChC,OAAOvqF,KAAKylD,QAChB,EACAyuC,EAAY3yE,UAAU8oE,cAAgB,WAClC,OAAOrqF,KAAK2lD,UAChB,EACAuuC,EAAY3yE,UAAUqzE,eAAiB,WACnC,OAAO50F,KAAK0lD,WAChB,EACOwuC,CACX,CAjIIA,GAkIJ,MAAA6B,GAAe7B,GCtIf,IAAI8B,GAAiC,WACjC,SAASA,EAAgBC,EAAaC,EAAmBC,EAAmB/V,GACxEpgF,KAAKi2F,YAAcA,EACnBj2F,KAAKogF,qBAAuBA,EAC5BpgF,KAAKk2F,kBAAoBA,EACzBl2F,KAAKm2F,kBAAoBA,EACzBn2F,KAAKo2F,SAAWF,EAAoBC,CACxC,CACAH,SAAgBz0E,UAAU80E,eAAiB,WACvC,OAAOr2F,KAAKi2F,WAChB,EACAD,EAAgBz0E,UAAU2/D,wBAA0B,WAChD,OAAOlhF,KAAKogF,oBAChB,EACA4V,EAAgBz0E,UAAU+0E,YAAc,WACpC,OAAOt2F,KAAKo2F,QAChB,EACAJ,EAAgBz0E,UAAUg1E,qBAAuB,WAC7C,OAAOv2F,KAAKk2F,iBAChB,EACAF,EAAgBz0E,UAAUi1E,qBAAuB,WAC7C,OAAOx2F,KAAKm2F,iBAChB,EACOH,CACX,CAxBIA,GAyBJ,MAAAS,GAAeT,GCzCf,IAAIU,GAA2B,WAC3B,SAASA,IACL12F,KAAK4yB,OAAS,EAClB,CAQA8jE,SAAUC,KAAO,SAAU1gE,EAAK6tB,GAC5B,IAAIl+B,GAAI,EAwCR,OAAOqQ,EAAIlB,QADC,wDAtCZ,SAASC,EAASC,EAAKC,EAAIC,EAAIC,EAAIC,EAAIC,IACnC,GAAY,OAARL,EACA,MAAO,IACX,QAAiBt0B,IAAbmjD,IAAMl+B,GAEVqP,GAAMG,EAAK1c,SAAS0c,EAAGG,OAAO,SAAM50B,EACpC,IACIglB,GADA6P,GAAOH,EAAK3c,SAAS2c,EAAGE,OAAO,SAAM50B,EAEzC,OAAQ20B,IACJ,IAAK,IACD3P,GAAMm+B,EAAIl+B,GACV,MACJ,IAAK,IACDD,GAAMm+B,EAAIl+B,GAAG,GACb,MACJ,IAAK,IACDD,GAAM8P,WAAWquB,EAAIl+B,IAAI8P,QAAQT,GACjC,MACJ,IAAK,IACDtP,GAAM8P,WAAWquB,EAAIl+B,IAAI+P,YAAYV,GACrC,MACJ,IAAK,IACDtP,GAAM8P,WAAWquB,EAAIl+B,IAAIgQ,cAAcX,GACvC,MACJ,IAAK,IACDtP,GAAMjN,SAASorC,EAAIl+B,IAAIxB,SAASoR,IAAc,IAC9C,MACJ,IAAK,IACD7P,GAAM8P,WAAW/c,SAASorC,EAAIl+B,GAAI4P,IAAc,IAAIG,YAAYV,IAAMS,QAAQ,GAGtF/P,GAAqB,iBAARA,GAAmBkQ,KAAKC,UAAUnQ,MAASA,IAAKvB,SAASoR,IAGtE,QAFInL,GAAO3R,SAASyc,GAChBY,GAAKZ,GAAOA,EAAG,GAAK,IAAQ,IAAM,IAAM,IACrCxP,GAAInf,OAAS6jB,IAChB1E,QAAahlB,IAAPu0B,EAAmBvP,GAAMoQ,GAAKA,GAAKpQ,GAC7C,OAAOA,GACX,EAGJ,EAMA+wE,EAAUn1E,UAAUsT,OAAS,SAAUC,GAEnC,QADI1O,EAAO,GACFC,EAAK,EAAGA,EAAK7L,UAAUhU,OAAQ6f,IACpCD,EAAKC,EAAK,GAAK7L,UAAU6L,GAE7BrmB,KAAK4yB,QAAU8jE,EAAUC,KAAK7hE,EAAQ1O,EAC1C,EAIAswE,EAAUn1E,UAAU6C,SAAW,WAC3B,OAAOpkB,KAAK4yB,MAChB,EACO8jE,CACX,CAzEIA,GA0EJ,MAAAE,GAAeF,GC9Df,IAkBIG,GAAuC,WACvC,SAASA,EAAsBlC,GAC3B30F,KAAK20F,YAAc,IAAIT,GAAYS,GAEnC30F,KAAK+2E,UAAY,IAAI11D,MAAMszE,EAAYK,UAAYL,EAAYI,UAAY,EAC/E,CACU8B,SAAsBt1E,UAAUu1E,kBAAoB,SAAUC,GACpE,IAAIC,EAAWh3F,KAAK+vF,YAAYgH,GAChC,GAAgB,MAAZC,EACA,OAAOA,EAEX,QAASpxE,EAAI,EAAGA,EAAIixE,EAAsBI,oBAAqBrxE,IAAK,CAChE,IAAIsxE,EAAel3F,KAAKm3F,wBAAwBJ,GAAYnxE,EAQ5D,GAPIsxE,GAAgB,GAEA,OADhBF,EAAWh3F,KAAK+2E,UAAUmgB,MAK9BA,EAAel3F,KAAKm3F,wBAAwBJ,GAAYnxE,GACrC5lB,KAAK+2E,UAAUvwE,QAEd,OADhBwwF,EAAWh3F,KAAK+2E,UAAUmgB,IAEtB,OAAOF,CAGnB,CACA,OAAO,IACX,EACcH,EAAsBt1E,UAAU41E,wBAA0B,SAAUJ,GAC9E,OAAOA,EAAW/2F,KAAK20F,YAAYI,SACvC,EACe8B,EAAsBt1E,UAAU61E,YAAc,SAAUL,EAAUC,GAC7Eh3F,KAAK+2E,UAAU/2E,KAAKm3F,wBAAwBJ,IAAaC,CAC7D,EACUH,EAAsBt1E,UAAUwuE,YAAc,SAAUgH,GAC9D,OAAO/2F,KAAK+2E,UAAU/2E,KAAKm3F,wBAAwBJ,GACvD,EACUF,EAAsBt1E,UAAU81E,eAAiB,WACvD,OAAOr3F,KAAK20F,WAChB,EACUkC,EAAsBt1E,UAAU22D,aAAe,WACrD,OAAOl4E,KAAK+2E,SAChB,EAEA8f,EAAsBt1E,UAAU6C,SAAW,WACvC,IAAI6C,EAAKC,EACLowE,EAAY,IAAIZ,GAChBpzE,EAAM,EACV,IACI,QAASqf,EApEqB,SAASvb,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,CA0D0B6hB,CAASznB,KAAK+2E,WAAYpgB,EAAKh0B,EAAGtjC,QAASs3D,EAAGnvC,KAAMmvC,EAAKh0B,EAAGtjC,OAAQ,CAC9E,IAAI23F,EAAWrgC,EAAG3yD,MACF,MAAZgzF,EAIJM,EAAUziE,OAAO,iBAAkBvR,IAAO0zE,EAASvuB,eAAgBuuB,EAAShmE,YAHxEsmE,EAAUziE,OAAO,iBAAkBvR,IAI3C,CACJ,OACOqE,GAASV,EAAM,CAAEvf,MAAOigB,EAAS,SAEpC,IACQgvC,IAAOA,EAAGnvC,OAASN,EAAKyb,EAAG/a,SAASV,EAAGzF,KAAKkhB,EACpD,SACU,GAAI1b,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CACA,OAAO4vF,EAAUlzE,UACrB,EACAyyE,EAAsBI,oBAAsB,EACrCJ,CACX,CAtEIA,GAuEJ,MAAAU,GAAeV,GCzFf,IAWIW,EAAkC,SAAUpwE,EAAGyB,GAC/C,IAAItB,EAAsB,mBAAXF,QAAyBD,EAAEC,OAAOC,UACjD,IAAKC,EAAG,OAAOH,EACf,IAAmBosB,EAAYjgB,EAA3B3N,EAAI2B,EAAE9F,KAAK2F,GAAOsB,EAAK,GAC3B,IACI,WAAc,IAANG,GAAgBA,KAAM,MAAQ2qB,EAAI5tB,EAAEvmB,QAAQmoB,MAAMkB,EAAGlmB,KAAKgxC,EAAExvC,MACxE,OACO0D,GAAS6rB,EAAI,CAAE7rB,MAAOA,EAAS,SAElC,IACQ8rC,IAAMA,EAAEhsB,OAASD,EAAI3B,EAAEgC,SAAYL,EAAE9F,KAAKmE,EAClD,SACU,GAAI2N,EAAG,MAAMA,EAAE7rB,KAAO,CACpC,CACA,OAAOghB,CACX,EAYI+uE,GAA8B,WAC9B,SAASA,IACLz3F,KAAKswB,OAAS,IAAIc,GACtB,CAIAqmE,SAAal2E,UAAUm2E,SAAW,SAAU1zF,GACxCA,EAAQ2lB,KAAKC,MAAM5lB,GACnB,IAAI2zF,EAAa33F,KAAKswB,OAAO9vB,IAAIwD,GACf,MAAd2zF,IACAA,EAAa,GAEjBA,IACA33F,KAAKswB,OAAOjI,IAAIrkB,EAAO2zF,EAC3B,EAKAF,EAAal2E,UAAUyP,SAAW,WAC9B,IAAI/J,EAAKC,EACL0wE,GAAgB,EAChB3wF,EAAS,IAAIoa,MACb8mC,EAAU,SAAUI,GAAKvkD,IACzB,IAAI6zF,UACQ,WAAc,OAAOtvC,EAAK,EADlCsvC,YAEU,WAAc,OAAO7zF,EAAO,EAEtC6zF,cAAmBD,GACnBA,EAAgBC,eAChB5wF,EAAS,IACFzE,KAAKq1F,cAEPA,gBAAqBD,GAC1B3wF,EAAOzE,KAAKq1F,YAEpB,EACA,IACI,QAASl1D,EA7EqB,SAASvb,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,CAmE0B6hB,CAASznB,KAAKswB,OAAOwnE,WAAYnhC,EAAKh0B,EAAGtjC,QAASs3D,EAAGnvC,KAAMmvC,EAAKh0B,EAAGtjC,OAAQ,CACrF,IAAIsgE,EAAK63B,EAAO7gC,EAAG3yD,MAAO,GAC1BmkD,EADoCwX,EAAG,GAAYA,EAAG,GAE1D,CACJ,OACOh4C,IAASV,EAAM,CAAEvf,MAAOigB,GAAS,SAEpC,IACQgvC,IAAOA,EAAGnvC,OAASN,EAAKyb,EAAG/a,SAASV,EAAGzF,KAAKkhB,EACpD,SACU,GAAI1b,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CACA,OAAO4nF,GAAaG,WAAWxoF,EACnC,EACAwwF,EAAal2E,UAAUw2E,cAAgB,SAAU/zF,GAC7C,OAAOhE,KAAKswB,OAAO9vB,IAAIwD,EAC3B,EACOyzF,CACX,CAzDIA,GA0DJ,MAAAO,GAAeP,GChGf,IAAI32E,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GAazC6F,GAAsC,SAASL,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,EASIqyF,GAAmD,SAAUl2E,GAE7D,SAASk2E,EAAkCtD,EAAaW,GACpD,IAAIrzE,EAAQF,EAAON,KAAKzhB,KAAM20F,IAAgB30F,KAC9CiiB,SAAMi2E,QAAU5C,EACTrzE,CACX,CACAg2E,OANAn3E,GAAUm3E,EAAmCl2E,GAM7Ck2E,EAAkC12E,UAAU42E,cAAgB,WACxD,IAAIlxE,EAAKC,EACT,IACI,QAASyb,EAAKlb,GAASznB,KAAKk4E,gBAAiBvhB,EAAKh0B,EAAGtjC,QAASs3D,EAAGnvC,KAAMmvC,EAAKh0B,EAAGtjC,OAAQ,CACnF,IAAI23F,EAAWrgC,EAAG3yD,MAEdgzF,GAASoB,kCAEjB,CACJ,OACOzwE,GAASV,EAAM,CAAEvf,MAAOigB,EAAS,SAEpC,IACQgvC,IAAOA,EAAGnvC,OAASN,EAAKyb,EAAG/a,SAASV,EAAGzF,KAAKkhB,EACpD,SACU,GAAI1b,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CACJ,EAKAuwF,EAAkC12E,UAAU82E,wCAA0C,SAAUC,GAC5F,IAAIvhB,EAAY/2E,KAAKk4E,eACrBl4E,KAAKm4F,gBACLn4F,KAAKu4F,yBAAyBxhB,EAAWuhB,GAYzC,QAXI3D,EAAc30F,KAAKq3F,iBACnBxzE,EAAM7jB,KAAKk4F,QAAUvD,EAAYrK,aAAeqK,EAAYpK,cAC5DhyD,EAASv4B,KAAKk4F,QAAUvD,EAAYtK,gBAAkBsK,EAAYC,iBAClE4D,EAAWx4F,KAAKm3F,wBAAwBxtE,KAAKC,MAAM/F,EAAI21B,SACvDi/C,EAAUz4F,KAAKm3F,wBAAwBxtE,KAAKC,MAAM2O,EAAOihB,SAIzDk/C,GAAa,EACbC,EAAe,EACfC,GAAmB,EACdC,GAAuBL,EAAUK,GAAeJ,EAASI,KAC9D,GAA+B,MAA3B9hB,EAAU8hB,IAGd,KAAI7B,GAAWjgB,EAAU8hB,IAQrBC,GAAgB9B,GAASvuB,eAAiBiwB,EAE9C,GAAsB,IAAlBI,GACAF,aAEuB,IAAlBE,GACLH,EAAehvE,KAAK+B,IAAIitE,EAAcC,IACtCA,GAAmB,EACnBF,EAAa1B,GAASvuB,oBAAa,GAE9BqwB,GAAgB,GACrB9B,GAASvuB,gBAAkB6vB,EAAgBhC,eAC3CwC,GAAgBD,GAChB9hB,EAAU8hB,IAAgB,SAEzB,CASD,IARA,IAAIE,QAAc,EAOdC,IALAD,GADAJ,EAAe,GACAA,EAAe,GAAKG,GAGrBA,KAE8BD,GACvCjzE,GAAY,EAAGA,IAAKmzE,KAAgBC,GAA4BpzE,KAGrEozE,GAA4D,MAA/BjiB,EAAU8hB,GAAejzE,IAEtDozE,GACAjiB,EAAU8hB,IAAgB,MAG1BH,EAAa1B,GAASvuB,eACtBmwB,GAAmB,EAE3B,EAGR,EACAX,EAAkC12E,UAAU03E,cAAgB,WACxD,IAAI/rC,EAAKhmC,EACLoxE,EAAkBt4F,KAAKk5F,qBAC3B,GAAuB,MAAnBZ,EACA,OAAO,KAEXt4F,KAAKm5F,0CAA0Cb,GAC/C,IAAIrxF,EAAS,IAAI2f,WAAW0xE,EAAgBhC,eAC5C,IACI,QAAS3zD,EAAKlb,GAASznB,KAAKk4E,gBAAiBvhB,EAAKh0B,EAAGtjC,QAASs3D,EAAGnvC,KAAMmvC,EAAKh0B,EAAGtjC,OAAQ,CACnF,IAAI23F,EAAWrgC,EAAG3yD,MAClB,GAAgB,MAAZgzF,EAAkB,CAClB,IAAI9uC,EAAY8uC,EAASvuB,eACzB,GAAIvgB,GAAajhD,EAAOT,OAEpB,SAEJS,EAAOihD,IACX,CACJ,CACJ,OACO2F,GAASX,EAAM,CAAExlD,MAAOmmD,EAAS,SAEpC,IACQ8I,IAAOA,EAAGnvC,OAASN,EAAKyb,EAAG/a,SAASV,EAAGzF,KAAKkhB,EACpD,SACU,GAAIuqB,EAAK,MAAMA,EAAIxlD,KAAO,CACxC,CACA,OAAOT,CACX,EAIAgxF,EAAkC12E,UAAU43E,0CAA4C,SAAUb,GAW9F,QAVI3D,EAAc30F,KAAKq3F,iBACnBxzE,EAAM7jB,KAAKk4F,QAAUvD,EAAYrK,aAAeqK,EAAYpK,cAC5DhyD,EAASv4B,KAAKk4F,QAAUvD,EAAYtK,gBAAkBsK,EAAYC,iBAClE4D,EAAWx4F,KAAKm3F,wBAAwBxtE,KAAKC,MAAM/F,EAAI21B,SACvDi/C,EAAUz4F,KAAKm3F,wBAAwBxtE,KAAKC,MAAM2O,EAAOihB,SAEzDu9B,EAAY/2E,KAAKk4E,eACjBwgB,GAAa,EACbC,EAAe,EACfC,GAAmB,EACdC,GAAuBL,EAAUK,GAAeJ,EAASI,KAC9D,GAA+B,MAA3B9hB,EAAU8hB,IAGd,KAAI7B,GAAWjgB,EAAU8hB,IACzB7B,GAASoB,mCACT,IAAIU,GAAgB9B,GAASvuB,eAAiBiwB,EAExB,IAAlBI,GACAF,KAEuB,IAAlBE,IACLH,EAAehvE,KAAK+B,IAAIitE,EAAcC,IACtCA,GAAmB,EACnBF,EAAa1B,GAASvuB,gBAEjBuuB,GAASvuB,gBAAkB6vB,EAAgBhC,cAChDvf,EAAU8hB,IAAgB,MAG1BH,EAAa1B,GAASvuB,eACtBmwB,GAAmB,GAI/B,EACAX,EAAkC12E,UAAU23E,mBAAqB,WAC7D,IAAI/qC,EAAKjnC,EACL6vD,EAAY/2E,KAAKk4E,eACjBkhB,EAAqB,IAAI3B,GACzB4B,EAA2B,IAAI5B,GAC/B6B,EAA2B,IAAI7B,GAC/B8B,EAAiB,IAAI9B,GACzB,IACI,QAAS+B,EAAc/xE,GAASsvD,GAAY0iB,EAAgBD,EAAYn6F,QAASo6F,EAAcjyE,KAAMiyE,EAAgBD,EAAYn6F,OAAQ,CACrI,IAAI23F,GAAWyC,EAAcz1F,MAC7B,GAAgB,MAAZgzF,GAGJA,IAASoB,mCACT,IAAIsB,GAAoB1C,GAAShmE,WAAa,GAC1C2oE,GAAoB3C,GAASvuB,eAIjC,OAHKzoE,KAAKk4F,UACNyB,IAAqB,GAEjBA,GAAoB,GACxB,KAAK,EACDN,EAAyB3B,SAA6B,EAApBgC,GAAwB,GAC1D,MACJ,KAAK,EACDH,EAAe7B,SAASgC,GAAoB,GAC5CJ,EAAyB5B,SAASgC,GAAoB,GACtD,MACJ,KAAK,EACDN,EAAmB1B,SAASgC,GAAoB,GAExD,CACJ,CACJ,OACOjrC,IAASN,EAAM,CAAEzmD,MAAO+mD,GAAS,SAEpC,IACQgrC,IAAkBA,EAAcjyE,OAASN,EAAKsyE,EAAY5xE,SAASV,EAAGzF,KAAK+3E,EACnF,SACU,GAAIrrC,EAAK,MAAMA,EAAIzmD,KAAO,CACxC,CAEA,GAA8C,IAAzC0xF,EAAmBpoE,WAAWxqB,QACiB,IAA/C6yF,EAAyBroE,WAAWxqB,QACW,IAA/C8yF,EAAyBtoE,WAAWxqB,QACC,IAArC+yF,EAAevoE,WAAWxqB,QAC3B4yF,EAAmBpoE,WAAW,GAAK,GACnCqoE,EAAyBroE,WAAW,GAAKsoE,EAAyBtoE,WAAW,GAAKs+D,GAAae,qBAC/FgJ,EAAyBroE,WAAW,GAAKsoE,EAAyBtoE,WAAW,GAAKs+D,GAAagB,oBAC/F,OAAO,KAEX,IAAIgI,GAAkB,IAAItC,GAAgBoD,EAAmBpoE,WAAW,GAAIqoE,EAAyBroE,WAAW,GAAIsoE,EAAyBtoE,WAAW,GAAIuoE,EAAevoE,WAAW,IACtL,OAAAhxB,KAAKu4F,yBAAyBxhB,EAAWuhB,IAClCA,EACX,EACAL,EAAkC12E,UAAUg3E,yBAA2B,SAAUxhB,EAAWuhB,GAGxF,QAASsB,EAAsB,EAAGA,EAAc7iB,EAAUvwE,OAAQozF,IAAe,CAC7E,IAAI5C,EAAWjgB,EAAU6iB,GACzB,GAA8B,MAA1B7iB,EAAU6iB,GAGd,KAAIF,EAAoB1C,EAAShmE,WAAa,GAC1C2oE,EAAoB3C,EAASvuB,eACjC,GAAIkxB,EAAoBrB,EAAgBhC,cAAe,CACnDvf,EAAU6iB,GAAe,KACzB,QACJ,CAIA,OAHK55F,KAAKk4F,UACNyB,GAAqB,GAEjBA,EAAoB,GACxB,KAAK,EACuB,EAApBD,EAAwB,IAAMpB,EAAgB/B,yBAC9Cxf,EAAU6iB,GAAe,MAE7B,MACJ,KAAK,GACGjwE,KAAKC,MAAM8vE,EAAoB,KAAOpB,EAAgBpX,2BACtDwY,EAAoB,IAAMpB,EAAgB9B,0BAC1Czf,EAAU6iB,GAAe,MAE7B,MACJ,KAAK,EACGF,EAAoB,IAAMpB,EAAgBjC,mBAC1Ctf,EAAU6iB,GAAe,MAGrC,CACJ,CACJ,EACA3B,EAAkC12E,UAAU+zE,OAAS,WACjD,OAAOt1F,KAAKk4F,OAChB,EAEAD,EAAkC12E,UAAU6C,SAAW,WACnD,MAAO,WAAapkB,KAAKk4F,QAAU,KAAOn2E,EAAOR,UAAU6C,SAAS3C,KAAKzhB,KAC7E,EACOi4F,CACX,CAzQIA,CAyQFpB,IACF,MAAAgD,GAAe5B,GC1Sf,IAkBI6B,GAAiC,WACjC,SAASA,EAAgBxB,EAAiB3D,GAC5B30F,KAAK+5F,uBAAyB,EACxC/5F,KAAKs4F,gBAAkBA,EACvBt4F,KAAKo5F,mBAAqBd,EAAgBjC,iBAC1Cr2F,KAAK20F,YAAcA,EAEnB30F,KAAKg6F,uBAAyB,IAAI34E,MAAMrhB,KAAKo5F,mBAAqB,EACtE,CACAU,SAAgBv4E,UAAU04E,0BAA4B,WAClDj6F,KAAKk6F,gCAAgCl6F,KAAKg6F,uBAAuB,IACjEh6F,KAAKk6F,gCAAgCl6F,KAAKg6F,uBAAuBh6F,KAAKo5F,mBAAqB,IAC3F,IACIe,EADAC,EAA0B9K,GAAac,yBAE3C,GACI+J,EAA0BC,EAC1BA,EAA0Bp6F,KAAKq6F,oCAC1BD,EAA0B,GAAKA,EAA0BD,GAClE,OAAOn6F,KAAKg6F,sBAChB,EACAF,EAAgBv4E,UAAU24E,gCAAkC,SAAUI,GAE9DA,GACKjC,wCAAwCr4F,KAAKs4F,gBAE1D,EAQAwB,EAAgBv4E,UAAU84E,4BAA8B,WACpD,IAAIE,EAAkBv6F,KAAKw6F,wBAC3B,GAAwB,IAApBD,EACA,OAAO,EAEX,QAASE,EAAwB,EAAGA,EAAgBz6F,KAAKo5F,mBAAqB,EAAGqB,IAE7E,QADI1jB,EAAY/2E,KAAKg6F,uBAAuBS,GAAeviB,eAClD2gB,EAAuB,EAAGA,EAAe9hB,EAAUvwE,OAAQqyF,IACjC,MAA3B9hB,EAAU8hB,KAGT9hB,EAAU8hB,GAAc6B,qBACzB16F,KAAK26F,iBAAiBF,EAAe5B,EAAc9hB,IAI/D,OAAOwjB,CACX,EACAT,EAAgBv4E,UAAUi5E,sBAAwB,WAO9C,OANAx6F,KAAK46F,6BAKiB56F,KAAK66F,0BACF76F,KAAK86F,yBAClC,EACAhB,EAAgBv4E,UAAUq5E,2BAA6B,WACnD,GAAsC,MAAlC56F,KAAKg6F,uBAAuB,IAA0E,MAA5Dh6F,KAAKg6F,uBAAuBh6F,KAAKo5F,mBAAqB,GAKpG,QAFI2B,EAAe/6F,KAAKg6F,uBAAuB,GAAG9hB,eAC9C8iB,EAAeh7F,KAAKg6F,uBAAuBh6F,KAAKo5F,mBAAqB,GAAGlhB,eACnE2gB,EAAuB,EAAGA,EAAekC,EAAav0F,OAAQqyF,IACnE,GAAkC,MAA9BkC,EAAalC,IACiB,MAA9BmC,EAAanC,IACbkC,EAAalC,GAAcpwB,iBAAmBuyB,EAAanC,GAAcpwB,eACzE,QAASgyB,EAAwB,EAAGA,GAAiBz6F,KAAKo5F,mBAAoBqB,IAAiB,CAC3F,IAAIzD,EAAWh3F,KAAKg6F,uBAAuBS,GAAeviB,eAAe2gB,GACzD,MAAZ7B,IAGJA,EAASiE,aAAaF,EAAalC,GAAcpwB,gBAC5CuuB,EAAS0D,sBACV16F,KAAKg6F,uBAAuBS,GAAeviB,eAAe2gB,GAAgB,MAElF,CAGZ,EACAiB,EAAgBv4E,UAAUu5E,wBAA0B,WAChD,GAAgE,MAA5D96F,KAAKg6F,uBAAuBh6F,KAAKo5F,mBAAqB,GACtD,OAAO,EAIX,QAFImB,EAAkB,EAClBxjB,EAAY/2E,KAAKg6F,uBAAuBh6F,KAAKo5F,mBAAqB,GAAGlhB,eAChE2gB,EAAuB,EAAGA,EAAe9hB,EAAUvwE,OAAQqyF,IAChE,GAA+B,MAA3B9hB,EAAU8hB,GAKd,QAFIqC,EAAwBnkB,EAAU8hB,GAAcpwB,eAChD0yB,EAAmB,EACdV,EAAwBz6F,KAAKo5F,mBAAqB,EAAGqB,EAAgB,GAAKU,EAAmBn7F,KAAK+5F,uBAAwBU,IAAiB,CAChJ,IAAIzD,EAAWh3F,KAAKg6F,uBAAuBS,GAAeviB,eAAe2gB,GACzD,MAAZ7B,IACAmE,EAAmBrB,EAAgBsB,uBAAuBF,EAAuBC,EAAkBnE,GAC9FA,EAAS0D,qBACVH,IAGZ,CAEJ,OAAOA,CACX,EACAT,EAAgBv4E,UAAUs5E,wBAA0B,WAChD,GAAsC,MAAlC76F,KAAKg6F,uBAAuB,GAC5B,OAAO,EAIX,QAFIO,EAAkB,EAClBxjB,EAAY/2E,KAAKg6F,uBAAuB,GAAG9hB,eACtC2gB,EAAuB,EAAGA,EAAe9hB,EAAUvwE,OAAQqyF,IAChE,GAA+B,MAA3B9hB,EAAU8hB,GAKd,QAFIqC,EAAwBnkB,EAAU8hB,GAAcpwB,eAChD0yB,EAAmB,EACdV,EAAwB,EAAGA,EAAgBz6F,KAAKo5F,mBAAqB,GAAK+B,EAAmBn7F,KAAK+5F,uBAAwBU,IAAiB,CAChJ,IAAIzD,EAAWh3F,KAAKg6F,uBAAuBS,GAAeviB,eAAe2gB,GACzD,MAAZ7B,IACAmE,EAAmBrB,EAAgBsB,uBAAuBF,EAAuBC,EAAkBnE,GAC9FA,EAAS0D,qBACVH,IAGZ,CAEJ,OAAOA,CACX,EACAT,EAAgBsB,uBAAyB,SAAUF,EAAuBC,EAAkBnE,GACxF,OAAgB,MAAZA,GAGCA,EAAS0D,sBACN1D,EAASqE,iBAAiBH,IAC1BlE,EAASiE,aAAaC,GACtBC,EAAmB,KAGjBA,GAGHA,CACX,EACArB,EAAgBv4E,UAAUo5E,iBAAmB,SAAUF,EAAe5B,EAAc9hB,GAChF,IAAI9vD,EAAKC,EACT,GAAsD,MAAlDlnB,KAAKg6F,uBAAuBS,EAAgB,GAGhD,KAAIzD,EAAWjgB,EAAU8hB,GACrByC,EAA0Bt7F,KAAKg6F,uBAAuBS,EAAgB,GAAGviB,eACzEqjB,EAAsBD,EAC4B,MAAlDt7F,KAAKg6F,uBAAuBS,EAAgB,KAC5Cc,EAAsBv7F,KAAKg6F,uBAAuBS,EAAgB,GAAGviB,gBAGzE,IAAIsjB,EAAiB,IAAIn6E,MAAM,IAC/Bm6E,EAAe,GAAKF,EAAwBzC,GAC5C2C,EAAe,GAAKD,EAAoB1C,GACpCA,EAAe,IACf2C,EAAe,GAAKzkB,EAAU8hB,EAAe,GAC7C2C,EAAe,GAAKF,EAAwBzC,EAAe,GAC3D2C,EAAe,GAAKD,EAAoB1C,EAAe,IAEvDA,EAAe,IACf2C,EAAe,GAAKzkB,EAAU8hB,EAAe,GAC7C2C,EAAe,IAAMF,EAAwBzC,EAAe,GAC5D2C,EAAe,IAAMD,EAAoB1C,EAAe,IAExDA,EAAe9hB,EAAUvwE,OAAS,IAClCg1F,EAAe,GAAKzkB,EAAU8hB,EAAe,GAC7C2C,EAAe,GAAKF,EAAwBzC,EAAe,GAC3D2C,EAAe,GAAKD,EAAoB1C,EAAe,IAEvDA,EAAe9hB,EAAUvwE,OAAS,IAClCg1F,EAAe,GAAKzkB,EAAU8hB,EAAe,GAC7C2C,EAAe,IAAMF,EAAwBzC,EAAe,GAC5D2C,EAAe,IAAMD,EAAoB1C,EAAe,IAE5D,IACI,QAAS4C,EAxMqB,SAASr0E,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,CA8LwC6hB,CAAS+zE,GAAiBE,GAAqBD,EAAiBp8F,QAASq8F,GAAmBl0E,KAAMk0E,GAAqBD,EAAiBp8F,OAAQ,CACxK,IAAIs8F,GAAgBD,GAAmB13F,MACvC,GAAI81F,EAAgB8B,gBAAgB5E,EAAU2E,IAC1C,MAER,CACJ,OACOh0E,IAASV,EAAM,CAAEvf,MAAOigB,GAAS,SAEpC,IACQ+zE,KAAuBA,GAAmBl0E,OAASN,EAAKu0E,EAAiB7zE,SAASV,EAAGzF,KAAKg6E,EAClG,SACU,GAAIx0E,EAAK,MAAMA,EAAIvf,KAAO,CACxC,EACJ,EAIAoyF,EAAgB8B,gBAAkB,SAAU5E,EAAU2E,GAClD,OAAqB,MAAjBA,OAGAA,EAAcjB,qBAAuBiB,EAAcE,cAAgB7E,EAAS6E,eAC5E7E,EAASiE,aAAaU,EAAclzB,iBAC7B,GAGf,EACAqxB,EAAgBv4E,UAAUu6E,sBAAwB,WAC9C,OAAO97F,KAAKo5F,kBAChB,EACAU,EAAgBv4E,UAAUw6E,mBAAqB,WAC3C,OAAO/7F,KAAKs4F,gBAAgBhC,aAChC,EACAwD,EAAgBv4E,UAAUy6E,kBAAoB,WAC1C,OAAOh8F,KAAKs4F,gBAAgBpX,yBAChC,EACA4Y,EAAgBv4E,UAAU06E,eAAiB,SAAUtH,GACjD30F,KAAK20F,YAAcA,CACvB,EACAmF,EAAgBv4E,UAAU81E,eAAiB,WACvC,OAAOr3F,KAAK20F,WAChB,EACAmF,EAAgBv4E,UAAU26E,yBAA2B,SAAUzB,EAAeH,GAC1Et6F,KAAKg6F,uBAAuBS,GAAiBH,CACjD,EACAR,EAAgBv4E,UAAU46E,yBAA2B,SAAU1B,GAC3D,OAAOz6F,KAAKg6F,uBAAuBS,EACvC,EAEAX,EAAgBv4E,UAAU6C,SAAW,WACjC,IAAIg4E,EAAqBp8F,KAAKg6F,uBAAuB,GAC3B,MAAtBoC,IACAA,EAAqBp8F,KAAKg6F,uBAAuBh6F,KAAKo5F,mBAAqB,IAK/E,QAFI9B,EAAY,IAAIZ,GAEXmC,EAAuB,EAAGA,EAAeuD,EAAmBlkB,eAAe1xE,OAAQqyF,IAAgB,CACxGvB,EAAUziE,OAAO,UAAWgkE,GAC5B,QAAS4B,EAAwB,EAAGA,EAAgBz6F,KAAKo5F,mBAAqB,EAAGqB,IAC7E,GAAkD,MAA9Cz6F,KAAKg6F,uBAAuBS,GAAhC,CAIA,IAAIzD,EAAWh3F,KAAKg6F,uBAAuBS,GAAeviB,eAAe2gB,GACzD,MAAZ7B,EAIJM,EAAUziE,OAAO,WAAYmiE,EAASvuB,eAAgBuuB,EAAShmE,YAH3DsmE,EAAUziE,OAAO,WAHrB,MAFIyiE,EAAUziE,OAAO,YAUzByiE,EAAUziE,OAAO,KACrB,CACA,OAAOyiE,EAAUlzE,UAErB,EACO01E,CACX,CApQIA,GAqQJ,MAAAuC,GAAevC,GCnRf,IAAIwC,GAA0B,WAC1B,SAASA,EAAS9T,EAAQ+T,EAAMC,EAAQx4F,GACpChE,KAAKkoD,UAAYo0C,EAASG,oBAC1Bz8F,KAAKwoF,OAAS7+D,KAAKC,MAAM4+D,GACzBxoF,KAAKu8F,KAAO5yE,KAAKC,MAAM2yE,GACvBv8F,KAAKw8F,OAAS7yE,KAAKC,MAAM4yE,GACzBx8F,KAAKgE,MAAQ2lB,KAAKC,MAAM5lB,EAC5B,CACAs4F,SAAS/6E,UAAUm5E,kBAAoB,WACnC,OAAO16F,KAAKq7F,iBAAiBr7F,KAAKkoD,UACtC,EACAo0C,EAAS/6E,UAAU85E,iBAAmB,SAAUnzC,GAC5C,OAAOA,IAAco0C,EAASG,qBAAuBz8F,KAAKw8F,SAAYt0C,EAAY,EAAK,CAC3F,EACAo0C,EAAS/6E,UAAU62E,iCAAmC,WAClDp4F,KAAKkoD,UAAYv+B,KAAKC,MAAsC,EAA/BD,KAAKC,MAAM5pB,KAAKgE,MAAQ,IAAW2lB,KAAKC,MAAM5pB,KAAKw8F,OAAS,GAC7F,EACAF,EAAS/6E,UAAU2B,SAAW,WAC1B,OAAOljB,KAAKu8F,KAAOv8F,KAAKwoF,MAC5B,EACA8T,EAAS/6E,UAAUm7E,UAAY,WAC3B,OAAO18F,KAAKwoF,MAChB,EACA8T,EAAS/6E,UAAUo7E,QAAU,WACzB,OAAO38F,KAAKu8F,IAChB,EACAD,EAAS/6E,UAAUs6E,UAAY,WAC3B,OAAO77F,KAAKw8F,MAChB,EACAF,EAAS/6E,UAAUyP,SAAW,WAC1B,OAAOhxB,KAAKgE,KAChB,EACAs4F,EAAS/6E,UAAUknD,aAAe,WAC9B,OAAOzoE,KAAKkoD,SAChB,EACAo0C,EAAS/6E,UAAU05E,aAAe,SAAU/yC,GACxCloD,KAAKkoD,UAAYA,CACrB,EAEAo0C,EAAS/6E,UAAU6C,SAAW,WAC1B,OAAOpkB,KAAKkoD,UAAY,IAAMloD,KAAKgE,KACvC,EACAs4F,EAASG,qBAAsB,EACxBH,CACX,CA5CIA,GA6CJ,MAAAM,GAAeN,GCvCf,IAAIO,GAAuC,WACvC,SAASA,IACT,CAMAA,SAAsBC,WAAa,WAE/B,QAAiBl3E,EAAI,EAAGA,EAAI0pE,GAAaW,aAAazpF,OAAQof,IAG1D,QAFIm3E,EAAgBzN,GAAaW,aAAarqE,GAC1Co3E,EAA6B,EAAhBD,EACApwE,EAAI,EAAGA,EAAI2iE,GAAamB,eAAgB9jE,IAAK,CAE1D,QADItC,EAAO,GACa,EAAhB0yE,KAAyBC,GAC7B3yE,GAAQ,EACR0yE,IAAkB,EAEtBC,EAA6B,EAAhBD,EACRF,EAAsBI,aAAar3E,KACpCi3E,EAAsBI,aAAar3E,GAAK,IAAIvE,MAAMiuE,GAAamB,iBAEnEoM,EAAsBI,aAAar3E,GAAG0pE,GAAamB,eAAiB9jE,EAAI,GAAKhD,KAAKuzE,OAAO7yE,EAAOilE,GAAaiB,oBACjH,CAEJvwF,KAAKm9F,mBAAoB,CAC7B,EACAN,EAAsBO,gBAAkB,SAAU5N,GAC9C,IAAI6N,EAAeR,EAAsBS,wBAAwBT,EAAsBU,gBAAgB/N,IACvG,OAAqB,IAAjB6N,EACOA,EAEJR,EAAsBW,uBAAuBhO,EACxD,EACAqN,EAAsBU,gBAAkB,SAAU/N,GAK9C,QAJIiO,EAAcplD,GAAU/b,IAAIkzD,GAC5BvoF,EAAS,IAAI2f,WAAW0oE,GAAamB,gBACrCiN,EAAgB,EAChBC,EAAkB,EACL/3E,EAAI,EAAGA,EAAI0pE,GAAaiB,oBAAqB3qE,IAAK,CAC/D,IAAIg4E,EAAcH,GAAe,EAAInO,GAAaiB,qBAC7C3qE,EAAI63E,EAAenO,GAAaiB,oBACjCoN,EAAkBnO,EAAekO,IAAkBE,IACnDD,GAAmBnO,EAAekO,GAClCA,KAEJz2F,EAAOy2F,IACX,CACA,OAAOz2F,CACX,EACA41F,EAAsBS,wBAA0B,SAAU9N,GACtD,IAAI6N,EAAeR,EAAsBgB,YAAYrO,GACrD,OAAkD,IAA3CF,GAAaS,YAAYsN,IAAuB,EAAKA,CAChE,EACAR,EAAsBgB,YAAc,SAAUrO,GAE1C,QADIvoF,IACa2e,EAAI,EAAGA,EAAI4pE,EAAehpF,OAAQof,IAC/C,QAAiBiG,EAAM,EAAGA,EAAM2jE,EAAe5pE,GAAIiG,IAC/C5kB,EAAUA,GAAU,GAAM2e,EAAI,GAAM,EAAI,EAAI,GAGpD,OAAO+D,KAAKC,MAAM3iB,EACtB,EAEA41F,EAAsBW,uBAAyB,SAAUhO,GACrD,IAAIiO,EAAcplD,GAAU/b,IAAIkzD,GAC5BsO,EAAiB,IAAIz8E,MAAMiuE,GAAamB,gBAC5C,GAAIgN,EAAc,EACd,QAAiB73E,EAAI,EAAGA,EAAIk4E,EAAet3F,OAAQof,IAC/Ck4E,EAAel4E,GAAK+D,KAAKuzE,OAAO1N,EAAe5pE,GAAK63E,GAG5D,IAAIM,EAAiB5kD,GAAMnvB,UACvBqgC,GAAY,EACXrqD,KAAKm9F,mBACNN,EAAsBC,aAE1B,QAAiBnwE,EAAI,EAAGA,EAAIkwE,EAAsBI,aAAaz2F,OAAQmmB,IAAK,CAGxE,QAFIjlB,EAAQ,EACRs2F,EAAgBnB,EAAsBI,aAAatwE,GACtC7D,EAAI,EAAGA,EAAIwmE,GAAamB,eAAgB3nE,IAAK,CAC1D,IAAInb,GAAOgc,KAAKuzE,OAAOc,EAAcl1E,GAAKg1E,EAAeh1E,IAEzD,IADAphB,GAASiiB,KAAKuzE,OAAOvvF,GAAOA,MACfowF,EACT,KAER,CACIr2F,EAAQq2F,IACRA,EAAiBr2F,EACjB2iD,EAAYilC,GAAaW,aAAatjE,GAE9C,CACA,OAAO09B,CACX,EAEAwyC,EAAsBM,mBAAoB,EAC1CN,EAAsBI,aAAe,IAAI57E,MAAMiuE,GAAaW,aAAazpF,QAAQigB,IAAI,SAAUC,GAAK,OAAW,IAAIrF,MAAMiuE,GAAamB,eAAiB,GAChJoM,CACX,CAnGIA,GAoGJ,MAAAoB,GAAepB,GC1Gf,IAAIqB,GAAsC,WACtC,SAASA,IACLl+F,KAAKm+F,cAAe,EACpBn+F,KAAKo+F,UAAW,EAChBp+F,KAAK+pC,WAAY,EACjB/pC,KAAK2sE,UAAW,CACpB,CAMAuxB,SAAqB38E,UAAU88E,gBAAkB,WAC7C,OAAOr+F,KAAKs+F,YAChB,EACAJ,EAAqB38E,UAAUg9E,gBAAkB,SAAUD,GACvDt+F,KAAKs+F,aAAeA,CACxB,EAMAJ,EAAqB38E,UAAUi9E,UAAY,WACvC,OAAOx+F,KAAKy+F,MAChB,EACAP,EAAqB38E,UAAUm9E,UAAY,SAAUD,GACjDz+F,KAAKy+F,OAASA,CAClB,EAMAP,EAAqB38E,UAAUo9E,gBAAkB,WAC7C,OAAO3+F,KAAK4+F,YAChB,EAMAV,EAAqB38E,UAAUs9E,gBAAkB,SAAUD,GACvD5+F,KAAK4+F,aAAeA,CACxB,EAIAV,EAAqB38E,UAAUu9E,cAAgB,WAC3C,OAAO9+F,KAAK++F,WAChB,EACAb,EAAqB38E,UAAUy9E,eAAiB,SAAUD,GACtD/+F,KAAK++F,YAAcA,CACvB,EAIAb,EAAqB38E,UAAU09E,gBAAkB,WAC7C,OAAOj/F,KAAKm+F,YAChB,EACAD,EAAqB38E,UAAU29E,gBAAkB,SAAUf,GACvDn+F,KAAKm+F,aAAeA,CACxB,EACAD,EAAqB38E,UAAU49E,UAAY,WACvC,OAAOn/F,KAAKo/F,QAAU,IAC1B,EACAlB,EAAqB38E,UAAU89E,UAAY,SAAUD,GACjDp/F,KAAKo/F,OAASA,CAClB,EACAlB,EAAqB38E,UAAU+9E,aAAe,WAC1C,OAAOt/F,KAAKu/F,WAAa,IAC7B,EACArB,EAAqB38E,UAAUi+E,aAAe,SAAUD,GACpDv/F,KAAKu/F,UAAYA,CACrB,EAMArB,EAAqB38E,UAAUk+E,YAAc,WACzC,OAAOz/F,KAAK0/F,QAChB,EACAxB,EAAqB38E,UAAUo+E,YAAc,SAAUD,GACnD1/F,KAAK0/F,SAAWA,CACpB,EAMAxB,EAAqB38E,UAAUq+E,YAAc,WACzC,OAAO5/F,KAAKo+F,QAChB,EACAF,EAAqB38E,UAAUs+E,YAAc,SAAUzB,GACnDp+F,KAAKo+F,SAAWA,CACpB,EAMAF,EAAqB38E,UAAUu+E,YAAc,WACzC,OAAO9/F,KAAK2sE,QAChB,EACAuxB,EAAqB38E,UAAUw+E,YAAc,SAAUpzB,GACnD3sE,KAAK2sE,SAAWA,CACpB,EAMAuxB,EAAqB38E,UAAUupB,aAAe,WAC1C,OAAO9qC,KAAK+pC,SAChB,EACAm0D,EAAqB38E,UAAUy+E,aAAe,SAAUj2D,GACpD/pC,KAAK+pC,UAAYA,CACrB,EACOm0D,CACX,CAxHIA,GAyHJ,MAAA+B,GAAe/B,GCzIf,IAAIgC,GAAsB,WACtB,SAASA,IACT,CAOAA,SAAKC,UAAY,SAAUt2E,EAAKC,GAC5B,YAAc,IAAVA,IAAoBA,OAAQnpB,GACzB+X,SAASmR,EAAKC,EACzB,EACOo2E,CACX,CAdIA,GAeJ,MAAAE,GAAeF,GClBf,IAAIp/E,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GAiBzCy+E,GAAsC,SAAUt+E,GAEhD,SAASs+E,IACL,OAAkB,OAAXt+E,GAAmBA,EAAOa,MAAM5iB,KAAMwa,YAAcxa,IAC/D,CACAqgG,OAJAv/E,GAAUu/E,EAAsBt+E,GAIhCs+E,EAAqB59E,KAAO,uBACrB49E,CACX,CAPIA,CAOF99E,IACF,MAAA+9E,GAAeD,GCoBf,IAAIE,GAAkE,WAClE,SAASA,IACT,CAWAA,SAAah/E,UAAUi/E,WAAa,SAAUv/E,GAC1CjhB,KAAKygG,iBAAiBx/E,EAAG,EAAGA,EAAEza,OAClC,EA6BA+5F,EAAah/E,UAAUk/E,iBAAmB,SAAUx/E,EAAGy/E,EAAK76E,GACxD,GAAS,MAAL5E,EACA,MAAM,IAAIo/E,GAET,GAAKK,EAAM,GAAOA,EAAMz/E,EAAEza,QAAYqf,EAAM,GAC3C66E,EAAM76E,EAAO5E,EAAEza,QAAak6F,EAAM76E,EAAO,EAC3C,MAAM,IAAIV,GAET,GAAY,IAARU,EAGT,QAASD,EAAI,EAAGA,EAAIC,EAAKD,IACrB5lB,KAAK2gG,MAAM1/E,EAAEy/E,EAAM96E,GAE3B,EAmBA26E,EAAah/E,UAAUq/E,MAAQ,WAC/B,EAWAL,EAAah/E,UAAU5O,MAAQ,WAC/B,EACO4tF,CACX,CA5FIA,GA6FJ,MAAAM,GAAeN,GC1If,IAAIz/E,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GAiBzCk/E,GAAkC,SAAU/+E,GAE5C,SAAS++E,IACL,OAAkB,OAAX/+E,GAAmBA,EAAOa,MAAM5iB,KAAMwa,YAAcxa,IAC/D,CACA,OAJA8gB,GAAUggF,EAAkB/+E,GAIrB++E,CACX,CANIA,CAMFv+E,IACF,MAAAw+E,GAAeD,GCAf,IAAIhgF,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GAoCzCo/E,GAAuC,SAAUj/E,GAgBjD,SAASi/E,EAAsB32E,QACd,IAATA,IAAmBA,EAAO,IAC9B,IAAIpI,EAAQF,EAAON,KAAKzhB,OAASA,KAKjC,GADAiiB,EAAMg3B,MAAQ,EACV5uB,EAAO,EACP,MAAM,IAAIvH,GAAyB,0BAC7BuH,GAEVpI,SAAMoiD,IAAM,IAAIj8C,WAAWiC,GACpBpI,CACX,CAWA++E,OAvCAlgF,GAAUkgF,EAAuBj/E,GAuCjCi/E,EAAsBz/E,UAAUoJ,eAAiB,SAAUs2E,GAEnDA,EAAcjhG,KAAKqkE,IAAI79D,OAAS,GAChCxG,KAAKkhG,KAAKD,EAClB,EAOAD,EAAsBz/E,UAAU2/E,KAAO,SAAUD,GAE7C,IACIE,EADcnhG,KAAKqkE,IAAI79D,QACM,EAGjC,GAFI26F,EAAcF,EAAc,IAC5BE,EAAcF,GACdE,EAAc,EAAG,CACjB,GAAIF,EAAc,EACd,MAAM,IAAIH,GACdK,EAAcl4E,GAAQe,SAC1B,CACAhqB,KAAKqkE,IAAM7+C,GAAO0C,iBAAiBloB,KAAKqkE,IAAK88B,EACjD,EAMAH,EAAsBz/E,UAAUo/E,MAAQ,SAAU1/E,GAC9CjhB,KAAK2qB,eAAe3qB,KAAKi5C,MAAQ,GACjCj5C,KAAKqkE,IAAIrkE,KAAKi5C,OAAoBh4B,EAClCjhB,KAAKi5C,OAAS,CAClB,EASA+nD,EAAsBz/E,UAAUk/E,iBAAmB,SAAUx/E,EAAGy/E,EAAK76E,GACjE,GAAK66E,EAAM,GAAOA,EAAMz/E,EAAEza,QAAYqf,EAAM,GACtC66E,EAAM76E,EAAO5E,EAAEza,OAAS,EAC1B,MAAM,IAAI2e,GAEdnlB,KAAK2qB,eAAe3qB,KAAKi5C,MAAQpzB,GACjCjB,GAAOC,UAAU5D,EAAGy/E,EAAK1gG,KAAKqkE,IAAKrkE,KAAKi5C,MAAOpzB,GAC/C7lB,KAAKi5C,OAASpzB,CAClB,EASAm7E,EAAsBz/E,UAAU6/E,QAAU,SAAUC,GAChDA,EAAIZ,iBAAiBzgG,KAAKqkE,IAAK,EAAGrkE,KAAKi5C,MAC3C,EASA+nD,EAAsBz/E,UAAU1G,MAAQ,WACpC7a,KAAKi5C,MAAQ,CACjB,EASA+nD,EAAsBz/E,UAAU+/E,YAAc,WAC1C,OAAO97E,GAAO0C,iBAAiBloB,KAAKqkE,IAAKrkE,KAAKi5C,MAClD,EAQA+nD,EAAsBz/E,UAAU8I,KAAO,WACnC,OAAOrqB,KAAKi5C,KAChB,EACA+nD,EAAsBz/E,UAAU6C,SAAW,SAAUm9E,GACjD,OAAKA,EAGgB,iBAAVA,EACAvhG,KAAKwhG,gBAAgBD,GAEzBvhG,KAAKyhG,gBAAgBF,GALjBvhG,KAAK0hG,eAMpB,EAgBAV,EAAsBz/E,UAAUmgF,cAAgB,WAC5C,OAAO,IAAI//E,OAAO3hB,KAAKqkE,KAAyBjgD,UACpD,EAmBA48E,EAAsBz/E,UAAUigF,gBAAkB,SAAUG,GACxD,OAAO,IAAIhgF,OAAO3hB,KAAKqkE,KAAsCjgD,UACjE,EAwBA48E,EAAsBz/E,UAAUkgF,gBAAkB,SAAUG,GACxD,OAAO,IAAIjgF,OAAO3hB,KAAKqkE,KAAiCjgD,UAC5D,EASA48E,EAAsBz/E,UAAU5O,MAAQ,WACxC,EACOquF,CACX,CA3NIA,CA2NFT,IACF,MAAAsB,GAAeb,GCrPH,IAAIloB,GA8BZgpB,GAfJ,SAASC,KACL,UAAWz/F,OAAW,IAClB,OAAOA,OAAO0/F,QAAa,KAE/B,UAAWC,OAAW,IAClB,OAAOA,OAAOD,QAAa,KAE/B,UAAWE,KAAS,IAChB,OAAOA,KAAKF,QAAa,KAE7B,MAAM,IAAInhF,MAAM,mCACpB,CAUA,SAASshF,GAAat4E,GAIlB,UAHWi4E,GAAe,MACtBA,GAAaC,MAEE,OAAfD,GACA,MAAM,IAAIjhF,MAAM,4BAEpB,OAAOihF,GAAWj4E,EACtB,EA3CA,SAAWivD,GACPA,EAAKA,EAAKspB,MAAW,GAAK,QAC1BtpB,EAAKA,EAAKrkC,MAAW,GAAK,QAC1BqkC,EAAKA,EAAKpkC,MAAW,GAAK,QAC1BokC,EAAKA,EAAKlkC,MAAW,GAAK,QAC1BkkC,EAAKA,EAAKupB,YAAiB,GAAK,cAChCvpB,EAAKA,EAAKwpB,YAAiB,GAAK,aACpC,CAPA,CAOGxpB,KAASA,GAAO,CAAC,IAuDpB,IAAIQ,GAAwC,WACxC,SAASA,IACT,CAUAA,SAAuB7nD,OAAS,SAAUslD,EAAW/pC,GAEjD,IAAI/lC,EAAS,IAAIuvB,GAAc,IAE3B7E,EAAWzB,GAAgB1B,UAQ/BvnB,EAAOwvB,eAAe9E,GAKtB,QAHI4wE,EAAY,EACZhlF,EAAOw5D,EAAUwrB,KACjBv4D,EAAiB,IAAIk0D,GAClBqE,EAAYxrB,EAAU,IAAI,CAC7B,OAAQx5D,GACJ,KAAK+7D,EAAuBkpB,2BACxBD,EAAYjpB,EAAuBmpB,eAAe1rB,EAAWwrB,EAAWt7F,GACxE,MACJ,KAAKqyE,EAAuBopB,2BAC5B,KAAKppB,EAAuBqpB,6BACxBJ,EAAYjpB,EAAuBspB,eAAerlF,EAAMw5D,EAAWplD,EAAU4wE,EAAWt7F,GACxF,MACJ,KAAKqyE,EAAuBupB,mCACxB57F,EAAO6tB,OAAkBiiD,EAAUwrB,MACnC,MACJ,KAAKjpB,EAAuBwpB,8BACxBP,EAAYjpB,EAAuBypB,kBAAkBhsB,EAAWwrB,EAAWt7F,GAC3E,MACJ,KAAKqyE,EAAuB0pB,YACP9yE,GAAgBe,0BAA0B8lD,EAAUwrB,MAErE,MACJ,KAAKjpB,EAAuB2pB,oBAExBV,GAAa,EACb,MACJ,KAAKjpB,EAAuB4pB,iBAExBX,IACA,MACJ,KAAKjpB,EAAuB6pB,iCACxBZ,EAAYjpB,EAAuB8pB,iBAAiBrsB,EAAWwrB,EAAWv4D,GAC1E,MACJ,KAAKsvC,EAAuB+pB,kCAC5B,KAAK/pB,EAAuBgqB,wBAExB,MAAM,IAAIn1E,GACd,QAIIo0E,IACAA,EAAYjpB,EAAuBmpB,eAAe1rB,EAAWwrB,EAAWt7F,GAGhF,KAAIs7F,EAAYxrB,EAAUvwE,QAItB,MAAM2nB,GAAgBC,oBAHtB7Q,EAAOw5D,EAAUwrB,IAKzB,CACA,GAAwB,IAApBt7F,EAAOT,SACP,MAAM2nB,GAAgBC,oBAE1B,IAAIonB,EAAgB,IAAI1I,GAAc,KAAM7lC,EAAOmd,WAAY,KAAM4oB,GACrEwI,SAAc3H,SAAS7D,GAChBwL,CACX,EAcA8jC,EAAuB8pB,iBAAmB,SAAUrsB,EAAWwrB,EAAWv4D,GACtE,GAAIu4D,EAAYjpB,EAAuBiqB,6BAA+BxsB,EAAU,GAE5E,MAAM5oD,GAAgBC,oBAG1B,QADIo1E,EAAoB,IAAI58E,WAAW0yD,EAAuBiqB,8BACrD39E,EAAY,EAAGA,EAAI0zD,EAAuBiqB,6BAA8B39E,IAAK28E,IAClFiB,EAAkB59E,GAAKmxD,EAAUwrB,GAErCv4D,EAAeu0D,gBAAgBt1E,GAAQvQ,SAAS4gE,EAAuBmqB,sBAAsBD,EAAmBlqB,EAAuBiqB,gCACvI,IAAI9E,EAAS,IAAIjoE,GACjB+rE,EAAYjpB,EAAuBmpB,eAAe1rB,EAAWwrB,EAAW9D,GACxEz0D,EAAe00D,UAAUD,EAAOr6E,YAChC,IAAIs/E,GAAsB,EAI1B,IAHI3sB,EAAUwrB,KAAejpB,EAAuB+pB,oCAChDK,EAAsBnB,EAAY,GAE/BA,EAAYxrB,EAAU,IACzB,OAAQA,EAAUwrB,IACd,KAAKjpB,EAAuB+pB,kCAExB,OAAQtsB,IADRwrB,IAEI,KAAKjpB,EAAuBqqB,sCACxB,IAAIjE,EAAW,IAAIlpE,GACnB+rE,EAAYjpB,EAAuBmpB,eAAe1rB,EAAWwrB,EAAY,EAAG7C,GAC5E11D,EAAe21D,YAAYD,EAASt7E,YACpC,MACJ,KAAKk1D,EAAuBsqB,mCACxB,IAAIxE,EAAS,IAAI5oE,GACjB+rE,EAAYjpB,EAAuBmpB,eAAe1rB,EAAWwrB,EAAY,EAAGnD,GAC5Ep1D,EAAeq1D,UAAUD,EAAOh7E,YAChC,MACJ,KAAKk1D,EAAuBuqB,sCACxB,IAAItE,EAAY,IAAI/oE,GACpB+rE,EAAYjpB,EAAuBmpB,eAAe1rB,EAAWwrB,EAAY,EAAGhD,GAC5Ev1D,EAAew1D,aAAaD,EAAUn7E,YACtC,MACJ,KAAKk1D,EAAuBwqB,0CACxB,IAAI3F,GAAe,IAAI3nE,GACvB+rE,EAAYjpB,EAAuBypB,kBAAkBhsB,EAAWwrB,EAAY,EAAGpE,IAC/En0D,EAAek1D,gBAAgBj2E,GAAQvQ,SAASylF,GAAa/5E,aAC7D,MACJ,KAAKk1D,EAAuByqB,uCACxB,IAAIh6D,GAAY,IAAIvT,GACpB+rE,EAAYjpB,EAAuBypB,kBAAkBhsB,EAAWwrB,EAAY,EAAGx4D,IAC/EC,EAAeg2D,aAAaE,GAAKC,UAAUp2D,GAAU3lB,aACrD,MACJ,KAAKk1D,EAAuB0qB,qCACxB,IAAIr3B,GAAW,IAAIn2C,GACnB+rE,EAAYjpB,EAAuBypB,kBAAkBhsB,EAAWwrB,EAAY,EAAG51B,IAC/E3iC,EAAe+1D,YAAY92E,GAAQvQ,SAASi0D,GAASvoD,aACrD,MACJ,KAAKk1D,EAAuB2qB,sCACxB,IAAI7F,GAAW,IAAI5nE,GACnB+rE,EAAYjpB,EAAuBypB,kBAAkBhsB,EAAWwrB,EAAY,EAAGnE,IAC/Ep0D,EAAe61D,YAAYK,GAAKC,UAAU/B,GAASh6E,aACnD,MACJ,QACI,MAAM+J,GAAgBC,oBAE9B,MACJ,KAAKkrD,EAAuBgqB,wBACxBf,IACAv4D,EAAeg1D,gBAAe,GAC9B,MACJ,QACI,MAAM7wE,GAAgBC,oBAIlC,IAA4B,IAAxBs1E,EAA4B,CAC5B,IAAIQ,GAAuB3B,EAAYmB,EACnC15D,EAAe80D,iBAEfoF,KAEJl6D,EAAe60D,gBAAgBr5E,GAAO8C,YAAYyuD,EAAW2sB,EAAqBA,EAAsBQ,IAC5G,CACA,OAAO3B,CACX,EAWAjpB,EAAuBmpB,eAAiB,SAAU1rB,EAAWwrB,EAAWt7F,GAOpE,QALIk9F,EAAqB,IAAIv9E,WAAwC,GAA5BmwD,EAAU,GAAKwrB,IAEpD6B,EAAqB,IAAIx9E,WAAwC,GAA5BmwD,EAAU,GAAKwrB,IACpDj9E,EAAQ,EACR+F,GAAM,EACFk3E,EAAYxrB,EAAU,KAAQ1rD,GAAK,CACvC,IAAI9N,EAAOw5D,EAAUwrB,KACrB,GAAIhlF,EAAO+7D,EAAuBkpB,2BAC9B2B,EAAmB7+E,GAAS/H,EAAO,GACnC4mF,EAAmB7+E,EAAQ,GAAK/H,EAAO,GACvC+H,GAAS,OAGT,OAAQ/H,GACJ,KAAK+7D,EAAuBkpB,2BAExB2B,EAAmB7+E,KAAWg0D,EAAuBkpB,2BACrD,MACJ,KAAKlpB,EAAuBopB,2BAC5B,KAAKppB,EAAuBqpB,6BAC5B,KAAKrpB,EAAuBwpB,8BAC5B,KAAKxpB,EAAuB6pB,iCAC5B,KAAK7pB,EAAuB+pB,kCAC5B,KAAK/pB,EAAuBgqB,wBACxBf,IACAl3E,GAAM,EACN,MACJ,KAAKiuD,EAAuBupB,mCAOxBsB,EAAmB7+E,GAASg0D,EAAuBupB,mCACnDtlF,EAAOw5D,EAAUwrB,KACjB6B,EAAmB9+E,GAAS/H,EAC5B+H,IAIhB,CACAg0D,SAAuB+qB,qBAAqBF,EAAoBC,EAAoB9+E,EAAOre,GACpFs7F,CACX,EAiBAjpB,EAAuB+qB,qBAAuB,SAAUF,EAAoBC,EAAoB59F,EAAQS,GAQpG,QAHIq9F,EAAUxrB,GAAKspB,MACfmC,EAAmBzrB,GAAKspB,MACxBx8E,EAAI,EACDA,EAAIpf,GAAQ,CACf,IAAIg+F,EAAYL,EAAmBv+E,GAC/BmQ,KACJ,OAAQuuE,GACJ,KAAKxrB,GAAKspB,MAEN,GAAIoC,EAAY,GAGZzuE,EAAkCpU,OAAO+Q,aAAa,GAAK8xE,QAG3D,OAAQA,GACJ,KAAK,GACDzuE,EAAK,IACL,MACJ,KAAKujD,EAAuBmrB,GACxBH,EAAUxrB,GAAKrkC,MACf,MACJ,KAAK6kC,EAAuBorB,GACxBJ,EAAUxrB,GAAKpkC,MACf,MACJ,KAAK4kC,EAAuBqrB,GAExBJ,EAAmBD,EACnBA,EAAUxrB,GAAKwpB,YACf,MACJ,KAAKhpB,EAAuBupB,mCACxB57F,EAAO6tB,OAAkBsvE,EAAmBx+E,IAC5C,MACJ,KAAK0zD,EAAuBkpB,2BACxB8B,EAAUxrB,GAAKspB,MAI3B,MACJ,KAAKtpB,GAAKrkC,MAEN,GAAI+vD,EAAY,GACZzuE,EAAiCpU,OAAO+Q,aAAa,GAAK8xE,QAG1D,OAAQA,GACJ,KAAK,GACDzuE,EAAK,IACL,MACJ,KAAKujD,EAAuBsrB,GAExBL,EAAmBD,EACnBA,EAAUxrB,GAAKupB,YACf,MACJ,KAAK/oB,EAAuBorB,GACxBJ,EAAUxrB,GAAKpkC,MACf,MACJ,KAAK4kC,EAAuBqrB,GAExBJ,EAAmBD,EACnBA,EAAUxrB,GAAKwpB,YACf,MACJ,KAAKhpB,EAAuBupB,mCAExB57F,EAAO6tB,OAAkBsvE,EAAmBx+E,IAC5C,MACJ,KAAK0zD,EAAuBkpB,2BACxB8B,EAAUxrB,GAAKspB,MAI3B,MACJ,KAAKtpB,GAAKpkC,MAEN,GAAI8vD,EAAYlrB,EAAuBurB,GACnC9uE,EAAKujD,EAAuBwrB,YAAYN,QAGxC,OAAQA,GACJ,KAAKlrB,EAAuBurB,GACxBP,EAAUxrB,GAAKlkC,MACf,MACJ,KAAK,GACD7e,EAAK,IACL,MACJ,KAAKujD,EAAuBmrB,GACxBH,EAAUxrB,GAAKrkC,MACf,MACJ,KAAK6kC,EAAuByrB,GACxBT,EAAUxrB,GAAKspB,MACf,MACJ,KAAK9oB,EAAuBqrB,GAExBJ,EAAmBD,EACnBA,EAAUxrB,GAAKwpB,YACf,MACJ,KAAKhpB,EAAuBupB,mCACxB57F,EAAO6tB,OAAkBsvE,EAAmBx+E,IAC5C,MACJ,KAAK0zD,EAAuBkpB,2BACxB8B,EAAUxrB,GAAKspB,MAI3B,MACJ,KAAKtpB,GAAKlkC,MAEN,GAAI4vD,EAAYlrB,EAAuB0rB,IACnCjvE,EAAKujD,EAAuB2rB,YAAYT,QAGxC,OAAQA,GACJ,KAAKlrB,EAAuB0rB,IACxBV,EAAUxrB,GAAKspB,MACf,MACJ,KAAK9oB,EAAuBupB,mCACxB57F,EAAO6tB,OAAkBsvE,EAAmBx+E,IAC5C,MACJ,KAAK0zD,EAAuBkpB,2BACxB8B,EAAUxrB,GAAKspB,MAI3B,MACJ,KAAKtpB,GAAKupB,YAGN,GADAiC,EAAUC,EACNC,EAAY,GACZzuE,EAAiCpU,OAAO+Q,aAAa,GAAK8xE,QAG1D,OAAQA,GACJ,KAAK,GACDzuE,EAAK,IACL,MACJ,KAAKujD,EAAuBkpB,2BACxB8B,EAAUxrB,GAAKspB,MAI3B,MACJ,KAAKtpB,GAAKwpB,YAGN,GADAgC,EAAUC,EACNC,EAAYlrB,EAAuB0rB,IACnCjvE,EAAKujD,EAAuB2rB,YAAYT,QAGxC,OAAQA,GACJ,KAAKlrB,EAAuB0rB,IACxBV,EAAUxrB,GAAKspB,MACf,MACJ,KAAK9oB,EAAuBupB,mCAGxB57F,EAAO6tB,OAAkBsvE,EAAmBx+E,IAC5C,MACJ,KAAK0zD,EAAuBkpB,2BACxB8B,EAAUxrB,GAAKspB,OAOxB,KAAPrsE,GAEA9uB,EAAO6tB,OAAOiB,GAElBnQ,GACJ,CACJ,EAaA0zD,EAAuBspB,eAAiB,SAAUppB,EAAMzC,EAAWplD,EAAU4wE,EAAWt7F,GACpF,IAAIi+F,EAAe,IAAIlE,GACnB/nD,EAAQ,EACRj1C,IACAqnB,GAAM,EACV,OAAQmuD,GACJ,KAAKF,EAAuBopB,2BAKxB,QAFIyC,EAAyB,IAAIv+E,WAAW,GACxCw+E,GAAWruB,EAAUwrB,KACjBA,EAAYxrB,EAAU,KAAQ1rD,GAMlC,OALA85E,EAAuBlsD,KAAWmsD,GAElCphG,EAAQ,IAAMA,EAAQohG,GACtBA,GAAWruB,EAAUwrB,KAEb6C,IACJ,KAAK9rB,EAAuBkpB,2BAC5B,KAAKlpB,EAAuBopB,2BAC5B,KAAKppB,EAAuBwpB,8BAC5B,KAAKxpB,EAAuBqpB,6BAC5B,KAAKrpB,EAAuB6pB,iCAC5B,KAAK7pB,EAAuB+pB,kCAC5B,KAAK/pB,EAAuBgqB,wBACxBf,IACAl3E,GAAM,EACN,MACJ,QACI,GAAK4tB,EAAQ,GAAM,GAAOA,EAAQ,EAAI,CAGlC,QAAStsB,GAAY,EAAGA,GAAI,IAAKA,GAK7Bu4E,EAAavE,MAAiB12E,OAAOk4E,GAAan+F,IAAUm+F,GAAa,GAAK,EAAIx1E,OAEtF3oB,EAAQ,EACRi1C,EAAQ,CACZ,EAKRspD,IAAcxrB,EAAU,IAAMquB,GAAW9rB,EAAuBkpB,6BAChE2C,EAAuBlsD,KAAWmsD,IAKtC,QAASx/E,GAAY,EAAGA,GAAIqzB,EAAOrzB,KAC/Bs/E,EAAavE,MAAiBwE,EAAuBv/E,KAEzD,MACJ,KAAK0zD,EAAuBqpB,6BAGxB,KAAOJ,EAAYxrB,EAAU,KAAO1rD,GAAK,CACrC,IAAI9N,GAAOw5D,EAAUwrB,KACrB,GAAIhlF,GAAO+7D,EAAuBkpB,2BAC9BvpD,IAEAj1C,EAAQ,IAAMA,EAAQuZ,QAGtB,OAAQA,IACJ,KAAK+7D,EAAuBkpB,2BAC5B,KAAKlpB,EAAuBopB,2BAC5B,KAAKppB,EAAuBwpB,8BAC5B,KAAKxpB,EAAuBqpB,6BAC5B,KAAKrpB,EAAuB6pB,iCAC5B,KAAK7pB,EAAuB+pB,kCAC5B,KAAK/pB,EAAuBgqB,wBACxBf,IACAl3E,GAAM,EAIlB,GAAK4tB,EAAQ,GAAM,GAAOA,EAAQ,EAAI,CAOlC,IAAStsB,GAAY,EAAGA,GAAI,IAAKA,GAC7Bu4E,EAAavE,MAAiB12E,OAAOk4E,GAAan+F,IAAUm+F,GAAa,GAAK,EAAIx1E,OAEtF3oB,EAAQ,EACRi1C,EAAQ,CACZ,CACJ,EAGRhyC,SAAO6tB,OAAOtD,GAAeC,OAAOyzE,EAAa5D,cAAe3vE,IACzD4wE,CACX,EAWAjpB,EAAuBypB,kBAAoB,SAAUhsB,EAAWwrB,EAAmBt7F,GAI/E,QAHIgyC,EAAQ,EACR5tB,GAAM,EACNg6E,EAAmB,IAAIz+E,WAAW0yD,EAAuBgsB,uBACtD/C,EAAYxrB,EAAU,KAAO1rD,GAAK,CACrC,IAAI9N,EAAOw5D,EAAUwrB,KAIrB,GAHIA,IAAcxrB,EAAU,KACxB1rD,GAAM,GAEN9N,EAAO+7D,EAAuBkpB,2BAC9B6C,EAAiBpsD,GAAS17B,EAC1B07B,SAGA,OAAQ17B,GACJ,KAAK+7D,EAAuBkpB,2BAC5B,KAAKlpB,EAAuBopB,2BAC5B,KAAKppB,EAAuBqpB,6BAC5B,KAAKrpB,EAAuB6pB,iCAC5B,KAAK7pB,EAAuB+pB,kCAC5B,KAAK/pB,EAAuBgqB,wBACxBf,IACAl3E,GAAM,GAIb4tB,EAAQqgC,EAAuBgsB,uBAA0B,GAAK/nF,IAAS+7D,EAAuBwpB,+BAAiCz3E,IAAQ4tB,EAAQ,IAKhJhyC,EAAO6tB,OAAOwkD,EAAuBmqB,sBAAsB4B,EAAkBpsD,IAC7EA,EAAQ,EAEhB,CACA,OAAOspD,CACX,EA6CAjpB,EAAuBmqB,sBAAwB,SAAU1sB,EAAW99B,GAEhE,QADIhyC,EAASk7F,GAAa,GACjBv8E,EAAY,EAAGA,EAAIqzB,EAAOrzB,IAC/B3e,GAAUqyE,EAAuBisB,OAAOtsD,EAAQrzB,EAAI,GAAKu8E,GAAaprB,EAAUnxD,IAEpF,IAAI8nC,EAAezmD,EAAOmd,WAC1B,GAA+B,MAA3BspC,EAAa/2B,OAAO,GACpB,MAAM,IAAIxI,GAEd,OAAOu/B,EAAa72B,UAAU,EAClC,EACAyiD,EAAuBkpB,2BAA6B,IACpDlpB,EAAuBopB,2BAA6B,IACpDppB,EAAuBwpB,8BAAgC,IACvDxpB,EAAuBqpB,6BAA+B,IACtDrpB,EAAuB4pB,iBAAmB,IAC1C5pB,EAAuB2pB,oBAAsB,IAC7C3pB,EAAuB0pB,YAAc,IACrC1pB,EAAuB6pB,iCAAmC,IAC1D7pB,EAAuB+pB,kCAAoC,IAC3D/pB,EAAuBgqB,wBAA0B,IACjDhqB,EAAuBupB,mCAAqC,IAC5DvpB,EAAuBgsB,sBAAwB,GAC/ChsB,EAAuBqqB,sCAAwC,EAC/DrqB,EAAuBwqB,0CAA4C,EACnExqB,EAAuByqB,uCAAyC,EAChEzqB,EAAuBsqB,mCAAqC,EAC5DtqB,EAAuBuqB,sCAAwC,EAC/DvqB,EAAuB2qB,sCAAwC,EAC/D3qB,EAAuB0qB,qCAAuC,EAC9D1qB,EAAuBurB,GAAK,GAC5BvrB,EAAuBmrB,GAAK,GAC5BnrB,EAAuBsrB,GAAK,GAC5BtrB,EAAuBorB,GAAK,GAC5BprB,EAAuByrB,GAAK,GAC5BzrB,EAAuBqrB,GAAK,GAC5BrrB,EAAuB0rB,IAAM,GAC7B1rB,EAAuB2rB,YAAc,qCACrC3rB,EAAuBwrB,YAAc,8BAKrCxrB,EAAuBisB,OAASxD,KAnrBpC,SAASyD,KAEL,IAAID,EAAS,GACbA,EAAO,GAAKpD,GAAa,GACzB,IAAIsD,EAActD,GAAa,KAC/BoD,EAAO,GAAKE,EAEZ,QAAS7/E,EAAY,EAAGA,EAAI,GAAIA,IAC5B2/E,EAAO3/E,GAAK2/E,EAAO3/E,EAAI,GAAK6/E,EAEhC,OAAOF,CACX,CAwqB6DC,GAAc,GACvElsB,EAAuBiqB,6BAA+B,EAC/CjqB,CACX,CApqBIA,GAqqBJ,MAAAosB,GAAepsB,GCxvBf,IAAI7xD,GAAsC,SAASL,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,EAgCI+/F,GAAuC,WACvC,SAASA,IACT,CA2BAA,SAAsBl0E,OAAS,SAAU6F,EAAOsuE,EAAcC,EAAiBC,EAAeC,EAAkBC,EAAkBC,GAK9H,QADIC,GAHAvR,EAAc,IAAIT,GAAY58D,EAAOsuE,EAAcC,EAAiBC,EAAeC,GACnFI,EAAyB,KACzBC,EAA0B,KAErBC,IAAwB,GAAOA,IAAY,EAAO,CAQvD,GAPoB,MAAhBT,IACAO,EAAyBR,EAAsBW,sBAAsBhvE,EAAOq9D,EAAaiR,GAAc,EAAMI,EAAkBC,IAE9G,MAAjBH,IACAM,EAA0BT,EAAsBW,sBAAsBhvE,EAAOq9D,EAAamR,GAAe,EAAOE,EAAkBC,IAG/G,OADvBC,GAAkBP,EAAsBhtF,MAAMwtF,EAAwBC,IAElE,MAAM/sE,GAAkBC,sBAE5B,IAAIitE,GAAYL,GAAgB7O,iBAChC,IAAIgP,IAA0B,MAAbE,MACZA,GAAUxR,UAAYJ,EAAYI,WAAawR,GAAUvR,UAAYL,EAAYK,WAIlF,MAHAL,EAAc4R,EAKtB,CACAL,GAAgBjK,eAAetH,GAC/B,IAAI6R,GAAmBN,GAAgBpK,wBAA0B,EACjEoK,GAAgBhK,yBAAyB,EAAGiK,GAC5CD,GAAgBhK,yBAAyBsK,GAAkBJ,GAE3D,QADIK,GAAwC,MAA1BN,EACT/M,GAA6B,EAAGA,IAAsBoN,GAAkBpN,KAAsB,CACnG,IAAIqB,GAAgBgM,GAAcrN,GAAqBoN,GAAmBpN,GAC1E,QAA2Ez4F,IAAvEulG,GAAgB/J,yBAAyB1B,IAI7C,KAAIH,QAAwB,EAExBA,GADkB,IAAlBG,IAAuBA,KAAkB+L,GACjB,IAAIvO,GAAkCtD,EAA+B,IAAlB8F,IAGnD,IAAI5D,GAAsBlC,GAEtDuR,GAAgBhK,yBAAyBzB,GAAeH,IAIxD,QAHI9I,IAAc,EACdkV,GAAsBlV,GAEjBuF,GAAmBpC,EAAYI,UAAWgC,IAAYpC,EAAYK,UAAW+B,KAAY,CAE9F,IADAvF,GAAcmU,EAAsBgB,eAAeT,GAAiBzL,GAAe1D,GAAU0P,KAC3E,GAAKjV,GAAcmD,EAAYG,UAAW,CACxD,IAA4B,IAAxB4R,GACA,SAEJlV,GAAckV,EAClB,CACA,IAAI1P,GAAW2O,EAAsBiB,eAAetvE,EAAOq9D,EAAYE,UAAWF,EAAYG,UAAW2R,GAAajV,GAAauF,GAAUiP,EAAkBC,GAC/I,MAAZjP,KACAsD,GAAsBlD,YAAYL,GAAUC,IAC5C0P,GAAsBlV,GACtBwU,EAAmBr8E,KAAKgT,IAAIqpE,EAAkBhP,GAAS9zE,YACvD+iF,EAAmBt8E,KAAK+B,IAAIu6E,EAAkBjP,GAAS9zE,YAE/D,EACJ,CACA,OAAOyiF,EAAsBkB,oBAAoBX,GACrD,EAQAP,EAAsBhtF,MAAQ,SAAUwtF,EAAwBC,GAC5D,GAA8B,MAA1BD,GAA6D,MAA3BC,EAClC,OAAO,KAEX,IAAI9N,EAAkBqN,EAAsBzM,mBAAmBiN,EAAwBC,GACvF,GAAuB,MAAnB9N,EACA,OAAO,KAEX,IAAI3D,EAAcT,GAAYv7E,MAAMgtF,EAAsBmB,kBAAkBX,GAAyBR,EAAsBmB,kBAAkBV,IAC7I,OAAO,IAAItM,GAAgBxB,EAAiB3D,EAChD,EAOAgR,EAAsBmB,kBAAoB,SAAU1K,GAChD,IAAIn1E,EAAKC,EACT,GAA0B,MAAtBk1E,EACA,OAAO,KAEX,IAAI2K,EAAa3K,EAAmBnD,gBACpC,GAAkB,MAAd8N,EACA,OAAO,KAEX,IAAIpO,EAAegN,EAAsBqB,OAAOD,GAC5C3R,EAAmB,EACvB,IACI,QAAS6R,EAAex/E,GAASs/E,GAAaG,EAAiBD,EAAa5nG,QAAS6nG,EAAe1/E,KAAM0/E,EAAiBD,EAAa5nG,OAAQ,CAC5I,IAAI8nG,EAAYD,EAAeljG,MAE/B,GADAoxF,GAAoBuD,EAAewO,EAC/BA,EAAY,EACZ,KAER,CACJ,OACOx/E,IAASV,EAAM,CAAEvf,MAAOigB,GAAS,SAEpC,IACQu/E,IAAmBA,EAAe1/E,OAASN,EAAK+/E,EAAar/E,SAASV,EAAGzF,KAAKwlF,EACtF,SACU,GAAIhgF,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CAEA,QADIqvE,EAAYqlB,EAAmBlkB,eAC1B50D,GAAc,EAAG8xE,EAAmB,GAAuB,MAAlBre,EAAUzzD,IAAcA,KACtE8xE,IAGJ,IADIC,GAAiB,EACrB,IAAS/xE,GAAcyjF,EAAWvgG,OAAS,EAAG8c,IAAO,IACjD+xE,IAAkBsD,EAAeoO,EAAWzjF,MACxCyjF,EAAWzjF,IAAO,IAF8BA,MAMxD,IAASA,GAAcyzD,EAAUvwE,OAAS,EAAG6uF,GAAiB,GAAuB,MAAlBte,EAAUzzD,IAAcA,KACvF+xE,KAEJ,OAAO+G,EAAmB/E,iBAAiBlC,eAAeC,EAAkBC,GAAgB+G,EAAmB9G,SACnH,EACAqQ,EAAsBqB,OAAS,SAAU12E,GACrC,IAAI48B,EAAKhmC,EACLkgF,GAAW,EACf,IACI,QAASC,EAAW5/E,GAAS6I,GAASg3E,EAAaD,EAAShoG,QAASioG,EAAW9/E,KAAM8/E,EAAaD,EAAShoG,OAAQ,CAChH,IAAI2E,EAAQsjG,EAAWtjG,MACvBojG,EAAWz9E,KAAK+B,IAAI07E,EAAUpjG,EAClC,CACJ,OACO6pD,GAASX,EAAM,CAAExlD,MAAOmmD,EAAS,SAEpC,IACQy5C,IAAeA,EAAW9/E,OAASN,EAAKmgF,EAASz/E,SAASV,EAAGzF,KAAK4lF,EAC1E,SACU,GAAIn6C,EAAK,MAAMA,EAAIxlD,KAAO,CACxC,CACA,OAAO0/F,CACX,EACAzB,EAAsBzM,mBAAqB,SAAUiN,EAAwBC,GACzE,IAAImB,EAKAC,EAJJ,OAA8B,MAA1BrB,GACuE,OAAtEoB,EAAsBpB,EAAuBjN,sBACZ,MAA3BkN,EAAkC,KAAOA,EAAwBlN,qBAG7C,MAA3BkN,GACyE,OAAxEoB,EAAuBpB,EAAwBlN,sBACzCqO,EAEPA,EAAoBlR,mBAAqBmR,EAAqBnR,kBAC9DkR,EAAoBrmB,4BAA8BsmB,EAAqBtmB,2BACvEqmB,EAAoBjR,gBAAkBkR,EAAqBlR,cACpD,KAEJiR,CACX,EACA5B,EAAsBW,sBAAwB,SAAUhvE,EAAOq9D,EAAa8S,EAAYhB,EAAaT,EAAkBC,GAEnH,QADI7J,EAAqB,IAAInE,GAAkCtD,EAAa8R,GACnE7gF,EAAY,EAAGA,EAAI,EAAGA,IAG3B,QAFI20C,EAAkB,IAAN30C,EAAU,GAAI,EAC1B4rE,EAAc7nE,KAAKC,MAAMD,KAAKC,MAAM69E,EAAWluD,SAC1Cw9C,GAAmBptE,KAAKC,MAAMD,KAAKC,MAAM69E,EAAWjuD,SAAUu9C,IAAYpC,EAAYK,WAC3F+B,IAAYpC,EAAYI,UAAWgC,IAAYx8B,EAAW,CAC1D,IAAIy8B,GAAW2O,EAAsBiB,eAAetvE,EAAO,EAAGA,EAAMpU,WAAYujF,EAAajV,EAAauF,GAAUiP,EAAkBC,GACtH,MAAZjP,KACAoF,EAAmBhF,YAAYL,GAAUC,IAErCxF,EADAiV,EACczP,GAAS0F,YAGT1F,GAAS2F,UAGnC,CAEJ,OAAOP,CACX,EAWAuJ,EAAsB+B,oBAAsB,SAAUxB,EAAiByB,GACnE,IAAIC,EAAkBD,EAAc,GAAG,GACnCE,EAAoBD,EAAgB52E,WACpC82E,EAA8B5B,EAAgBpK,wBAC9CoK,EAAgBnK,qBAChB4J,EAAsBoC,uBAAuB7B,EAAgBlK,qBACjE,GAAiC,IAA7B6L,EAAkBrhG,OAAc,CAChC,GAAIshG,EAA8B,GAAKA,EAA8BxY,GAAac,yBAC9E,MAAM/2D,GAAkBC,sBAE5BsuE,EAAgBlQ,SAASoQ,EAC7B,MACSD,EAAkB,KAAOC,GAE9BF,EAAgBlQ,SAASoQ,EAEjC,EASAnC,EAAsBkB,oBAAsB,SAAUX,GAClD,IAAIyB,EAAgBhC,EAAsBqC,oBAAoB9B,GAC9DP,EAAsB+B,oBAAoBxB,EAAiByB,GAK3D,QAJIj6D,EAAmC,IAAIrsB,MACvC01D,EAAY,IAAInwD,WAAWs/E,EAAgBnK,qBAAuBmK,EAAgBpK,yBAClFmM,KACAC,MAAmD7mF,MAC9CiC,EAAc,EAAGA,EAAM4iF,EAAgBnK,qBAAsBz4E,IAClE,QAASgyD,EAAiB,EAAGA,EAAS4wB,EAAgBpK,wBAAyBxmB,IAAU,CACrF,IAAIhlD,EAASq3E,EAAcrkF,GAAKgyD,EAAS,GAAGtkD,WACxCm3E,EAAgB7kF,EAAM4iF,EAAgBpK,wBAA0BxmB,EAC9C,IAAlBhlD,EAAO9pB,OACPknC,EAASlrC,KAAK2lG,GAES,IAAlB73E,EAAO9pB,OACZuwE,EAAUoxB,GAAiB73E,EAAO,IAGlC43E,EAAqB1lG,KAAK2lG,GAC1BF,EAAyBzlG,KAAK8tB,GAEtC,CAGJ,QADI83E,GAAuB,IAAI/mF,MAAM4mF,EAAyBzhG,QACrDof,GAAY,EAAGA,GAAIwiF,GAAqB5hG,OAAQof,KACrDwiF,GAAqBxiF,IAAKqiF,EAAyBriF,IAEvD,OAAO+/E,EAAsB0C,uCAAuCnC,EAAgBlK,oBAAqBjlB,EAAWuY,GAAaG,WAAW/hD,GAAW4hD,GAAaG,WAAWyY,GAAuBE,GAC1M,EAiBAzC,EAAsB0C,uCAAyC,SAAUr7D,EAAS+pC,EAAWuxB,EAAcC,EAAkBH,GAGzH,QAFII,EAAsB,IAAI5hF,WAAW2hF,EAAiB/hG,QACtDiiG,EAAQ,IACLA,KAAU,GAAG,CAChB,QAAS7iF,EAAY,EAAGA,EAAI4iF,EAAoBhiG,OAAQof,IACpDmxD,EAAUwxB,EAAiB3iF,IAAMwiF,EAAqBxiF,GAAG4iF,EAAoB5iF,IAEjF,IACI,OAAO+/E,EAAsB+C,gBAAgB3xB,EAAW/pC,EAASs7D,EACrE,OACOK,GAEH,KADcA,aAAerkF,IAEzB,MAAMqkF,CAEd,CACA,GAAmC,IAA/BH,EAAoBhiG,OACpB,MAAM8d,GAAkBC,sBAE5B,IAASqB,EAAY,EAAGA,EAAI4iF,EAAoBhiG,OAAQof,IACpD,IAAI4iF,EAAoB5iF,GAAKwiF,EAAqBxiF,GAAGpf,OAAS,EAAG,CAC7DgiG,EAAoB5iF,KACpB,KACJ,IAEI4iF,EAAoB5iF,GAAK,EACrBA,IAAM4iF,EAAoBhiG,OAAS,EACnC,MAAM8d,GAAkBC,qBAAoB,CAI5D,CACA,MAAMD,GAAkBC,qBAC5B,EACAohF,EAAsBqC,oBAAsB,SAAU9B,GAKlD,QAJI/3C,EAAKjnC,EAAIw4C,EAAK/8B,EAGdglE,EAAgBtmF,MAAMmF,KAAK,CAAEhgB,OAAQ0/F,EAAgBnK,sBAAwB,WAAc,OAAO,IAAI16E,MAAM6kF,EAAgBpK,wBAA0B,EAAI,GACrJx4E,EAAc,EAAGA,EAAMqkF,EAAcnhG,OAAQ8c,IAClD,QAASslF,EAAmB,EAAGA,EAAWjB,EAAcrkF,GAAK9c,OAAQoiG,IACjEjB,EAAcrkF,GAAKslF,GAAY,IAAInR,GAG3C,IAAIniB,EAAS,EACb,IACI,QAAS3e,EAAKlvC,GAASy+E,EAAgBjM,6BAA8Bt6B,GAAKhJ,EAAGt3D,QAASsgE,GAAGn4C,KAAMm4C,GAAKhJ,EAAGt3D,OAAQ,CAC3G,IAAIi7F,GAAwB36B,GAAG37D,MAC/B,GAA6B,MAAzBs2F,GACA,IACI,QAASz6B,IAAMH,OAAM,EAAQj4C,GAAS6yE,GAAsBpiB,iBAAkBnY,GAAKF,GAAGxgE,QAAS0gE,GAAGv4C,KAAMu4C,GAAKF,GAAGxgE,OAAQ,CACpH,IAAI23F,GAAWj3B,GAAG/7D,MAClB,GAAgB,MAAZgzF,GAAkB,CAClB,IAAI9uC,GAAY8uC,GAASvuB,eACzB,GAAIvgB,IAAa,EAAG,CAChB,GAAIA,IAAay/C,EAAcnhG,OAE3B,SAEJmhG,EAAcz/C,IAAWotB,GAAQoiB,SAASV,GAAShmE,WACvD,CACJ,CACJ,CACJ,OACO+vC,IAASrB,EAAM,CAAEh4D,MAAOq5D,GAAS,SAEpC,IACQhB,KAAOA,GAAGv4C,OAASmb,EAAKk9B,GAAGj4C,SAAS+a,EAAGlhB,KAAKo+C,GACpD,SACU,GAAIH,EAAK,MAAMA,EAAIh4D,KAAO,CACxC,CAEJ4tE,GACJ,CACJ,OACO7mB,IAASN,EAAM,CAAEzmD,MAAO+mD,GAAS,SAEpC,IACQkR,KAAOA,GAAGn4C,OAASN,EAAKyvC,EAAG/uC,SAASV,EAAGzF,KAAKk1C,EACpD,SACU,GAAIxI,EAAK,MAAMA,EAAIzmD,KAAO,CACxC,CACA,OAAOigG,CACX,EACAhC,EAAsBkD,qBAAuB,SAAU3C,EAAiBzL,GACpE,OAAOA,GAAiB,GAAKA,GAAiByL,EAAgBpK,wBAA0B,CAC5F,EACA6J,EAAsBgB,eAAiB,SAAUT,EAAiBzL,EAAe1D,EAAU0P,GACvF,IAAI17B,EAAK7jD,EACLsF,EAASi6E,EAAc,GAAI,EAC3BzP,EAAW,KAIf,GAHI2O,EAAsBkD,qBAAqB3C,EAAiBzL,EAAgBjuE,KAC5EwqE,EAAWkP,EAAgB/J,yBAAyB1B,EAAgBjuE,GAAQujE,YAAYgH,IAE5E,MAAZC,EACA,OAAOyP,EAAczP,EAAS2F,UAAY3F,EAAS0F,YAGvD,GAAgB,OADhB1F,EAAWkP,EAAgB/J,yBAAyB1B,GAAe3D,kBAAkBC,IAEjF,OAAO0P,EAAczP,EAAS0F,YAAc1F,EAAS2F,UAKzD,GAHIgJ,EAAsBkD,qBAAqB3C,EAAiBzL,EAAgBjuE,KAC5EwqE,EAAWkP,EAAgB/J,yBAAyB1B,EAAgBjuE,GAAQsqE,kBAAkBC,IAElF,MAAZC,EACA,OAAOyP,EAAczP,EAAS2F,UAAY3F,EAAS0F,YAGvD,QADIoM,EAAiB,EACdnD,EAAsBkD,qBAAqB3C,EAAiBzL,EAAgBjuE,IAAS,CACxFiuE,GAAiBjuE,EACjB,IACI,QAASmW,GAAMooC,OAAM,EAAQtjD,GAASy+E,EAAgB/J,yBAAyB1B,GAAeviB,iBAAkBvhB,GAAKh0B,EAAGtjC,QAASs3D,GAAGnvC,KAAMmvC,GAAKh0B,EAAGtjC,OAAQ,CACtJ,IAAI0pG,GAAsBpyC,GAAG3yD,MAC7B,GAA2B,MAAvB+kG,GACA,OAAQtC,EAAcsC,GAAoBpM,UAAYoM,GAAoBrM,aACtElwE,EACIs8E,GACCC,GAAoBpM,UAAYoM,GAAoBrM,YAErE,CACJ,OACOpxB,IAASP,EAAM,CAAErjE,MAAO4jE,GAAS,SAEpC,IACQ3U,KAAOA,GAAGnvC,OAASN,EAAKyb,EAAG/a,SAASV,EAAGzF,KAAKkhB,EACpD,SACU,GAAIooC,EAAK,MAAMA,EAAIrjE,KAAO,CACxC,CACAohG,GACJ,CACA,OAAOrC,EAAcP,EAAgB7O,iBAAiBxC,UAAYqR,EAAgB7O,iBAAiBvC,SACvG,EACA6Q,EAAsBiB,eAAiB,SAAUtvE,EAAO0xE,EAAWC,EAAWxC,EAAajV,EAAauF,EAAUiP,EAAkBC,GAChIzU,EAAcmU,EAAsBuD,0BAA0B5xE,EAAO0xE,EAAWC,EAAWxC,EAAajV,EAAauF,GAKrH,IAAIvH,EAAiBmW,EAAsBwD,kBAAkB7xE,EAAO0xE,EAAWC,EAAWxC,EAAajV,EAAauF,GACpH,GAAsB,MAAlBvH,EACA,OAAO,KAEX,IAAI4Z,EACAC,GAAmBhxD,GAAU/b,IAAIkzD,GACrC,GAAIiX,EACA2C,EAAY5X,EAAc6X,OAEzB,CACD,QAASzjF,GAAY,EAAGA,GAAI4pE,EAAehpF,OAAS,EAAGof,KAAK,CACxD,IAAI0jF,GAAW9Z,EAAe5pE,IAC9B4pE,EAAe5pE,IAAK4pE,EAAeA,EAAehpF,OAAS,EAAIof,IAC/D4pE,EAAeA,EAAehpF,OAAS,EAAIof,IAAK0jF,EACpD,CAEA9X,GADA4X,EAAY5X,GACc6X,EAC9B,CAcA,IAAK1D,EAAsB4D,kBAAkBF,GAAkBrD,EAAkBC,GAG7E,OAAO,KAEX,IAAI5I,GAAeR,GAAsBO,gBAAgB5N,GACrDwH,GAAW1H,GAAaS,YAAYsN,IACxC,OAAiB,IAAbrG,GACO,KAEJ,IAAIsF,GAAS9K,EAAa4X,EAAWzD,EAAsB6D,wBAAwBnM,IAAerG,GAC7G,EACA2O,EAAsBwD,kBAAoB,SAAU7xE,EAAO0xE,EAAWC,EAAWxC,EAAajV,EAAauF,GAMvG,QALI0S,EAAcjY,EACdhC,EAAiB,IAAI5oE,WAAW,GAChC8iF,EAAe,EACfnvC,EAAYksC,EAAc,GAAI,EAC9BkD,GAAqBlD,GACjBA,EAAcgD,EAAcR,EAAYQ,GAAeT,IAC3DU,EAAela,EAAehpF,QAC1B8wB,EAAM92B,IAAIipG,EAAa1S,KAAc4S,IACrCna,EAAeka,KACfD,GAAelvC,IAGfmvC,IACAC,IAAsBA,IAG9B,OAAID,IAAiBla,EAAehpF,QAC9BijG,KAAiBhD,EAAcwC,EAAYD,IACzCU,IAAiBla,EAAehpF,OAAS,EACtCgpF,EAEJ,IACX,EACAmW,EAAsBoC,uBAAyB,SAAUxO,GACrD,OAAO,GAAKA,CAChB,EACAoM,EAAsBuD,0BAA4B,SAAU5xE,EAAO0xE,EAAWC,EAAWxC,EAAamD,EAAqB7S,GAIvH,QAHI8S,EAAuBD,EACvBrvC,EAAYksC,GAAc,EAAK,EAE1B7gF,EAAY,EAAGA,EAAI,EAAGA,IAAK,CAChC,MAAQ6gF,EAAcoD,GAAwBb,EAAYa,EAAuBZ,IAC7ExC,IAAgBnvE,EAAM92B,IAAIqpG,EAAsB9S,IAAW,CAC3D,GAAIptE,KAAKwV,IAAIyqE,EAAsBC,GAAwBlE,EAAsBmE,mBAC7E,OAAOF,EAEXC,GAAwBtvC,CAC5B,CACAA,GAAaA,EACbksC,GAAeA,CACnB,CACA,OAAOoD,CACX,EACAlE,EAAsB4D,kBAAoB,SAAU9yD,EAAcuvD,EAAkBC,GAChF,OAAOD,EAAmBL,EAAsBmE,oBAAsBrzD,GAClEA,GAAgBwvD,EAAmBN,EAAsBmE,kBACjE,EAKAnE,EAAsB+C,gBAAkB,SAAU3xB,EAAW/pC,EAASU,GAClE,GAAyB,IAArBqpC,EAAUvwE,OACV,MAAM2nB,GAAgBC,oBAE1B,IAAI21B,EAAiB,GAAM/W,EAAU,EACjC+8D,EAAuBpE,EAAsB1pB,cAAclF,EAAWrpC,EAAUqW,GACpF4hD,EAAsBqE,oBAAoBjzB,EAAWhzB,GAErD,IAAIvO,EAAgB8jC,GAAuB7nD,OAAOslD,EAAW,GAAK/pC,GAClEwI,SAAchI,mBAAmBu8D,GACjCv0D,EAAc7H,YAAYD,EAASlnC,QAC5BgvC,CACX,EAUAmwD,EAAsB1pB,cAAgB,SAAUlF,EAAWrpC,EAAUqW,GACjE,GAAgB,MAAZrW,GACAA,EAASlnC,OAASu9C,EAAiB,EAAI4hD,EAAsBsE,YAC7DlmD,EAAiB,GACjBA,EAAiB4hD,EAAsBuE,iBAEvC,MAAM5lF,GAAkBC,sBAE5B,OAAOohF,EAAsBwE,gBAAgB14E,OAAOslD,EAAWhzB,EAAgBrW,EACnF,EAKAi4D,EAAsBqE,oBAAsB,SAAUjzB,EAAWhzB,GAC7D,GAAIgzB,EAAUvwE,OAAS,EAGnB,MAAM2nB,GAAgBC,oBAK1B,IAAIy5E,EAAoB9wB,EAAU,GAClC,GAAI8wB,EAAoB9wB,EAAUvwE,OAC9B,MAAM2nB,GAAgBC,oBAE1B,GAA0B,IAAtBy5E,EAEA,MAAI9jD,EAAiBgzB,EAAUvwE,QAI3B,MAAM2nB,GAAgBC,oBAHtB2oD,EAAU,GAAKA,EAAUvwE,OAASu9C,CAGM,CAGpD,EACA4hD,EAAsByE,uBAAyB,SAAUpT,GAIrD,QAHI/vF,EAAS,IAAI2f,WAAW,GACxByjF,EAAgB,EAChBzkF,EAAI3e,EAAOT,OAAS,KAEJ,EAAXwwF,KAAoBqT,IACrBA,EAA2B,EAAXrT,EAChBpxE,IACIA,EAAI,KAIZ3e,EAAO2e,KACPoxE,IAAa,EAEjB,OAAO/vF,CACX,EACA0+F,EAAsB6D,wBAA0B,SAAUxS,GACtD,OAAIA,aAAoBpwE,WACb5mB,KAAKsqG,mCAAmCtT,GAE5Ch3F,KAAKuqG,+BAA+BvT,EAC/C,EACA2O,EAAsB4E,+BAAiC,SAAUvT,GAC7D,OAAO2O,EAAsB6D,wBAAwB7D,EAAsByE,uBAAuBpT,GACtG,EACA2O,EAAsB2E,mCAAqC,SAAU9a,GACjE,OAAQA,EAAe,GAAKA,EAAe,GAAKA,EAAe,GAAKA,EAAe,GAAK,GAAK,CACjG,EACAmW,EAAsBvhF,SAAW,SAAUujF,GAGvC,QAFIrQ,EAAY,IAAIZ,GAEXpzE,EAAc,EAAGA,EAAMqkF,EAAcnhG,OAAQ8c,IAAO,CACzDg0E,EAAUziE,OAAO,YAAavR,GAC9B,QAASgyD,EAAiB,EAAGA,EAASqyB,EAAcrkF,GAAK9c,OAAQ8uE,IAAU,CACvE,IAAIk1B,EAAe7C,EAAcrkF,GAAKgyD,GACC,IAAnCk1B,EAAax5E,WAAWxqB,OACxB8wF,EAAUziE,OAAO,WAAY,MAG7ByiE,EAAUziE,OAAO,WAAY21E,EAAax5E,WAAW,GAAIw5E,EAAazS,cAAcyS,EAAax5E,WAAW,IAEpH,CACAsmE,EAAUziE,OAAO,KACrB,CACA,OAAOyiE,EAAUlzE,UAErB,EACUuhF,EAAsBmE,mBAAqB,EAC3CnE,EAAsBsE,WAAa,EACnCtE,EAAsBuE,iBAAmB,IACzCvE,EAAsBwE,gBAAkB,IAAI7W,GAC/CqS,CACX,CApoBIA,GAqoBJ,MAAA8E,GAAe9E,GC/qBf,IAwCI+E,GAA8B,WAC9B,SAASA,IACT,CAWAA,SAAanpF,UAAUkQ,OAAS,SAAU6F,EAAO5D,QAC/B,IAAVA,IAAoBA,EAAQ,MAChC,IAAIzsB,EAASyjG,EAAaj5E,OAAO6F,EAAO5D,GAAO,GAC/C,GAAc,MAAVzsB,GAAoC,IAAlBA,EAAOT,QAA6B,MAAbS,EAAO,GAChD,MAAMoyB,GAAkBC,sBAE5B,OAAOryB,EAAO,EAClB,EAQAyjG,EAAanpF,UAAUopF,eAAiB,SAAUrzE,EAAO5D,QACvC,IAAVA,IAAoBA,EAAQ,MAChC,IACI,OAAOg3E,EAAaj5E,OAAO6F,EAAO5D,GAAO,EAC7C,OACOgzD,GACH,MAAIA,aAAmBv4D,IAAmBu4D,aAAmBpiE,GACnD+U,GAAkBC,sBAEtBotD,CACV,CACJ,EAWAgkB,EAAaj5E,OAAS,SAAU6F,EAAO5D,EAAOo9D,GAC1C,IAAI7pE,EAAKC,EACL0jF,EAAU,IAAIvpF,MACd0zB,EAAiBuN,GAASuuC,eAAev5D,EAAO5D,EAAOo9D,GAC3D,IACI,QAASnuD,EA/FqB,SAASvb,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,CAqF0B6hB,CAASstB,EAAeyF,aAAcmc,EAAKh0B,EAAGtjC,QAASs3D,EAAGnvC,KAAMmvC,EAAKh0B,EAAGtjC,OAAQ,CAC1F,IAAIk7C,EAASoc,EAAG3yD,MACZwxC,GAAgBmwD,GAAsBl0E,OAAOsjB,EAAeE,UAAWsF,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAImwD,EAAaG,oBAAoBtwD,GAASmwD,EAAaI,oBAAoBvwD,IAC9LtzC,GAAS,IAAI2iC,GAAO4L,GAAcvL,UAAWuL,GAActL,mBAAevpC,EAAW45C,EAAQvP,GAAcW,SAC/G1kC,GAAOsjC,YAAY4B,GAAmBG,uBAAwBkJ,GAAcnI,cAC5E,IAAI09D,GAAuBv1D,GAAc5H,WACb,MAAxBm9D,IACA9jG,GAAOsjC,YAAY4B,GAAmBO,sBAAuBq+D,IAEjEH,EAAQpoG,KAAKyE,GACjB,CACJ,OACO0gB,IAASV,EAAM,CAAEvf,MAAOigB,GAAS,SAEpC,IACQgvC,IAAOA,EAAGnvC,OAASN,EAAKyb,EAAG/a,SAASV,EAAGzF,KAAKkhB,EACpD,SACU,GAAI1b,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CACA,OAAOkjG,EAAQnkF,IAAI,SAAUC,IAAK,OAAOA,EAAG,EAChD,EACAgkF,EAAaM,YAAc,SAAU71E,EAAIC,GACrC,OAAU,MAAND,GAAoB,MAANC,EACP,EAEJzL,KAAKC,MAAMD,KAAKwV,IAAIhK,EAAGokB,OAASnkB,EAAGmkB,QAC9C,EACAmxD,EAAaO,YAAc,SAAU91E,EAAIC,GACrC,OAAU,MAAND,GAAoB,MAANC,EACPnM,GAAQe,UAEZL,KAAKC,MAAMD,KAAKwV,IAAIhK,EAAGokB,OAASnkB,EAAGmkB,QAC9C,EACAmxD,EAAaI,oBAAsB,SAAUxpF,GACzC,OAAOqI,KAAKe,MAAMf,KAAK+B,IAAI/B,KAAK+B,IAAIg/E,EAAaM,YAAY1pF,EAAE,GAAIA,EAAE,IAAKopF,EAAaM,YAAY1pF,EAAE,GAAIA,EAAE,IAAMguE,GAAaiB,oBAC1HjB,GAAakB,yBAA0B7mE,KAAK+B,IAAIg/E,EAAaM,YAAY1pF,EAAE,GAAIA,EAAE,IAAKopF,EAAaM,YAAY1pF,EAAE,GAAIA,EAAE,IAAMguE,GAAaiB,oBAC1IjB,GAAakB,0BACrB,EACAka,EAAaG,oBAAsB,SAAUvpF,GACzC,OAAOqI,KAAKe,MAAMf,KAAKgT,IAAIhT,KAAKgT,IAAI+tE,EAAaO,YAAY3pF,EAAE,GAAIA,EAAE,IAAKopF,EAAaO,YAAY3pF,EAAE,GAAIA,EAAE,IAAMguE,GAAaiB,oBAC1HjB,GAAakB,yBAA0B7mE,KAAKgT,IAAI+tE,EAAaO,YAAY3pF,EAAE,GAAIA,EAAE,IAAKopF,EAAaO,YAAY3pF,EAAE,GAAIA,EAAE,IAAMguE,GAAaiB,oBAC1IjB,GAAakB,0BACrB,EAEAka,EAAanpF,UAAU1G,MAAQ,WAC3B,EAEG6vF,CACX,CAvGIA,GAwGJ,MAAAQ,GAAeR,GC/Jf,IAAI5pF,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GAiBzCupF,GAAiC,SAAUppF,GAE3C,SAASopF,IACL,OAAkB,OAAXppF,GAAmBA,EAAOa,MAAM5iB,KAAMwa,YAAcxa,IAC/D,CACAmrG,OAJArqF,GAAUqqF,EAAiBppF,GAI3BopF,EAAgB1oF,KAAO,kBAChB0oF,CACX,CAPIA,CAOF5oF,IACF,MAAA6oF,GAAeD,GCVf,IAAI1jF,GAAsC,SAASL,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,EAmBIylG,GAAmC,WACnC,SAASA,IACT,CA0BAA,SAAkB9pF,UAAUkQ,OAAS,SAAU6F,EAAO5D,GAClD,OAAA1zB,KAAKsrG,SAAS53E,GACP1zB,KAAKurG,eAAej0E,EAC/B,EAUA+zE,EAAkB9pF,UAAUiqF,gBAAkB,SAAUl0E,GAEpD,OAAqB,OAAjBt3B,KAAK02D,cAAqC/1D,IAAjBX,KAAK02D,UAC9B12D,KAAKsrG,SAAS,MAEXtrG,KAAKurG,eAAej0E,EAC/B,EAQA+zE,EAAkB9pF,UAAU+pF,SAAW,SAAU53E,GAC7C1zB,KAAK0zB,MAAQA,EACb,IAAIo0B,EAAsB,MAAVp0B,QAAyC/yB,IAAc+yB,EAAMlzB,IAAI6sB,GAAeI,YAE5Fg+E,EAAoB,MAAV/3E,EAAwC,KAAOA,EAAMlzB,IAAI6sB,GAAeG,kBAClFkpC,EAAU,IAAIr1C,MAClB,GAAgB,MAAZoqF,EAA2C,CAC3C,IAAIC,EAAgBD,EAAQ5kG,KAAK,SAAUi6B,GACvC,OAAOA,IAAMkK,GAAce,OACvBjL,IAAMkK,GAAcgB,OACpBlL,IAAMkK,GAAcQ,QACpB1K,IAAMkK,GAAcO,OACpBzK,IAAMkK,GAAcE,SACpBpK,IAAMkK,GAAcG,SACpBrK,IAAMkK,GAAcI,SACpBtK,IAAMkK,GAAcK,UACpBvK,IAAMkK,GAAcS,KACpB3K,IAAMkK,GAAca,QACpB/K,IAAMkK,GAAcc,YAC5B,GAGI4/D,IAAkB5jD,GAClB4O,EAAQl0D,KAAK,IAAI6vE,GAAsB3+C,IAEvC+3E,EAAQtsF,SAAS6rB,GAAcY,UAC/B8qB,EAAQl0D,KAAK,IAAIysF,IAEjBwc,EAAQtsF,SAAS6rB,GAAcM,cAC/BorB,EAAQl0D,KAAK,IAAIm8E,IAEjB8sB,EAAQtsF,SAAS6rB,GAAcC,QAC/ByrB,EAAQl0D,KAAK,IAAIykD,IAEjBwkD,EAAQtsF,SAAS6rB,GAAcW,UAC/B+qB,EAAQl0D,KAAK,IAAIkoG,IAMjBgB,GAAiB5jD,GACjB4O,EAAQl0D,KAAK,IAAI6vE,GAAsB3+C,GAE/C,CACuB,IAAnBgjC,EAAQlwD,SACHshD,GACD4O,EAAQl0D,KAAK,IAAI6vE,GAAsB3+C,IAE3CgjC,EAAQl0D,KAAK,IAAIysF,IACjBv4B,EAAQl0D,KAAK,IAAIm8E,IACjBjoB,EAAQl0D,KAAK,IAAIykD,IACjByP,EAAQl0D,KAAK,IAAIkoG,IAEb5iD,GACA4O,EAAQl0D,KAAK,IAAI6vE,GAAsB3+C,KAG/C1zB,KAAK02D,QAAUA,CACnB,EAEA20C,EAAkB9pF,UAAU1G,MAAQ,WAChC,IAAIoM,EAAKC,EACT,GAAqB,OAAjBlnB,KAAK02D,QACL,IACI,QAAS/zB,EAAKlb,GAASznB,KAAK02D,SAAUC,EAAKh0B,EAAGtjC,QAASs3D,EAAGnvC,KAAMmvC,EAAKh0B,EAAGtjC,OAAQ,CAC/Ds3D,EAAG3yD,MACT6W,OACX,CACJ,OACO8M,GAASV,EAAM,CAAEvf,MAAOigB,EAAS,SAEpC,IACQgvC,IAAOA,EAAGnvC,OAASN,EAAKyb,EAAG/a,SAASV,EAAGzF,KAAKkhB,EACpD,SACU,GAAI1b,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CAER,EAIA2jG,EAAkB9pF,UAAUgqF,eAAiB,SAAUj0E,GACnD,IAAI41B,EAAKhmC,EACT,GAAqB,OAAjBlnB,KAAK02D,QACL,MAAM,IAAIy0C,GAAgB,mDAE9B,IACI,QAASxoE,EAAKlb,GAASznB,KAAK02D,SAAUC,EAAKh0B,EAAGtjC,QAASs3D,EAAGnvC,KAAMmvC,EAAKh0B,EAAGtjC,OAAQ,CAC5E,IAAImiC,EAASm1B,EAAG3yD,MAEhB,IACI,OAAOw9B,EAAO/P,OAAO6F,EAAOt3B,KAAK0zB,MACrC,OACOqjB,GACH,GAAIA,aAAco0D,GACd,QAGR,CACJ,CACJ,OACOt9C,GAASX,EAAM,CAAExlD,MAAOmmD,EAAS,SAEpC,IACQ8I,IAAOA,EAAGnvC,OAASN,EAAKyb,EAAG/a,SAASV,EAAGzF,KAAKkhB,EACpD,SACU,GAAIuqB,EAAK,MAAMA,EAAIxlD,KAAO,CACxC,CACA,MAAM,IAAI2xB,GAAkB,uDAChC,EACOgyE,CACX,CAvKIA,GAwKJ,MAAAM,GAAeN,GCpNf,ICqBIO,GDrBA9qF,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GEAzCd,IFe0C,SAAUiB,GAEpD,SAAS8pF,EAAyBn4E,EAAO+N,QACvB,IAAV/N,IAAoBA,EAAQ,WACD,IAA3B+N,IAAqCA,EAAyB,KAClE,IACID,EAAS,IAAI6pE,GACjB7pE,SAAO8pE,SAAS53E,GACR3R,EAAON,KAAKzhB,KAAMwhC,EAAQC,IAA2BzhC,IAEjE,CATA8gB,GAAU+qF,EAA0B9pF,GAcpC8pF,EAAyBtqF,UAAU+lB,aAAe,SAAUF,GACxD,OAAOpnC,KAAKwhC,OAAOgqE,gBAAgBpkE,EACvC,CAEJ,CAnBIykE,CAmBFtqE,IElC2C,WACzC,IAAIjf,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,ICAzCd,IDoBqC,SAAUiB,GAM/C,SAAS+pF,EAAoBrqE,GACzB,YAA+B,IAA3BA,IAAqCA,EAAyB,KAC3D1f,EAAON,KAAKzhB,KAAM,IAAI0qG,GAAgBjpE,IAA2BzhC,IAC5E,CARA8gB,GAAUgrF,EAAqB/pF,EAUnC,CAXI+pF,CAWFvqE,IC/B2C,WACzC,IAAIjf,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,KAoBJ,SAAUG,GAM/C,SAASgqF,EAAoBtqE,GACzB,YAA+B,IAA3BA,IAAqCA,EAAyB,KAC3D1f,EAAON,KAAKzhB,KAAM,IAAIivF,GAAgBxtD,IAA2BzhC,IAC5E,CARA8gB,GAAUirF,EAAqBhqF,EAUnC,CAXIgqF,CAWFxqE,KFTF,SAAWqqE,GAUPA,EAAeA,EAAeI,iBAAsB,GAAK,mBAIzDJ,EAAeA,EAAel+E,cAAmB,GAAK,gBAItDk+E,EAAeA,EAAeK,kBAAuB,GAAK,oBAe1DL,EAAeA,EAAeM,oBAAyB,GAAK,sBAQ5DN,EAAeA,EAAeO,SAAc,GAAK,WAOjDP,EAAeA,EAAeQ,SAAc,GAAK,WAMjDR,EAAeA,EAAeS,OAAY,GAAK,SAK/CT,EAAeA,EAAeU,eAAoB,GAAK,iBAMvDV,EAAeA,EAAeW,kBAAuB,GAAK,oBAK1DX,EAAeA,EAAeY,kBAAuB,GAAK,oBAQ1DZ,EAAeA,EAAea,aAAkB,IAAM,eAKtDb,EAAeA,EAAec,WAAgB,IAAM,aAKpDd,EAAeA,EAAee,WAAgB,IAAM,aAKpDf,EAAeA,EAAegB,UAAe,IAAM,WACvD,CA9FA,CA8FGhB,KAAmBA,GAAiB,CAAC,IACxC,MAAAiB,GAAejB,GG7Ff,IAAIkB,GAAoC,WASpC,SAASA,EAAmBr+D,GACxBzuC,KAAKyuC,MAAQA,EACbzuC,KAAK+sG,iBAAmB,GACxB/sG,KAAK+sG,iBAAiBvqG,KAAK,IAAIgsC,GAAcC,EAAO7nB,WAAWJ,KAAK,CAAC,KACzE,CACAsmF,SAAmBvrF,UAAUyrF,eAAiB,SAAU/9D,GACpD,IAAI89D,EAAmB/sG,KAAK+sG,iBAC5B,GAAI99D,GAAU89D,EAAiBvmG,OAG3B,QAFIymG,EAAgBF,EAAiBA,EAAiBvmG,OAAS,GAC3DioC,EAAQzuC,KAAKyuC,MACRztB,EAAI+rF,EAAiBvmG,OAAQwa,GAAKiuB,EAAQjuB,IAAK,CACpD,IAAIksF,EAAgBD,EAAc79D,SAAS,IAAIZ,GAAcC,EAAO7nB,WAAWJ,KAAK,CAAC,EAAGioB,EAAMxZ,IAAIjU,EAAI,EAAIytB,EAAM+C,wBAChHu7D,EAAiBvqG,KAAK0qG,GACtBD,EAAgBC,CACpB,CAEJ,OAAOH,EAAiB99D,EAC5B,EAoBA69D,EAAmBvrF,UAAU2Q,OAAS,SAAUi7E,EAAUC,GACtD,GAAgB,IAAZA,EACA,MAAM,IAAItqF,GAAyB,6BAEvC,IAAIuqF,EAAYF,EAAS3mG,OAAS4mG,EAClC,GAAIC,GAAa,EACb,MAAM,IAAIvqF,GAAyB,0BAEvC,IAAIqd,EAAYngC,KAAKgtG,eAAeI,GAChCE,EAAmB,IAAI1mF,WAAWymF,GACtCzoF,GAAOC,UAAUsoF,EAAU,EAAGG,EAAkB,EAAGD,GAMnD,IALA,IAAIzrC,EAAO,IAAIpzB,GAAcxuC,KAAKyuC,MAAO6+D,GAGrC5+D,GAFJkzB,EAAOA,EAAK1xB,mBAAmBk9D,EAAS,IACnBj9D,OAAOhQ,GAAW,GACV0O,kBACzB0+D,EAAsBH,EAAU1+D,EAAaloC,OACxCof,EAAI,EAAGA,EAAI2nF,EAAqB3nF,IACrCunF,EAASE,EAAYznF,GAAK,EAE9BhB,GAAOC,UAAU6pB,EAAc,EAAGy+D,EAAUE,EAAYE,EAAqB7+D,EAAaloC,OAC9F,EACOsmG,CACX,CApEIA,GAqEJ,MAAAU,GAAeV,GCxEf,IAAIW,GAA0B,WAC1B,SAASA,IACL,CAMJA,SAASC,sBAAwB,SAAUlqF,GACvC,OAAOiqF,EAASE,8BAA8BnqF,GAAQ,GAAQiqF,EAASE,8BAA8BnqF,GAAQ,EACjH,EAMAiqF,EAASG,sBAAwB,SAAUpqF,GAKvC,QAJIqqF,EAAU,EACVthF,EAAQ/I,EAAOsqF,WACfhqF,EAAQN,EAAON,WACfhP,EAASsP,EAAOL,YACXE,EAAI,EAAGA,EAAInP,EAAS,EAAGmP,IAE5B,QADI0qF,EAASxhF,EAAMlJ,GACVqD,EAAI,EAAGA,EAAI5C,EAAQ,EAAG4C,IAAK,CAChC,IAAI1iB,EAAQ+pG,EAAOrnF,GACf1iB,IAAU+pG,EAAOrnF,EAAI,IAAM1iB,IAAUuoB,EAAMlJ,EAAI,GAAGqD,IAAM1iB,IAAUuoB,EAAMlJ,EAAI,GAAGqD,EAAI,IACnFmnF,GAER,CAEJ,OAAOJ,EAASO,GAAKH,CACzB,EAMAJ,EAASQ,sBAAwB,SAAUzqF,GAKvC,QAJI0qF,EAAe,EACf3hF,EAAQ/I,EAAOsqF,WACfhqF,EAAQN,EAAON,WACfhP,EAASsP,EAAOL,YACXE,EAAI,EAAGA,EAAInP,EAAQmP,IACxB,QAASqD,EAAI,EAAGA,EAAI5C,EAAO4C,IAAK,CAC5B,IAAIqnF,EAASxhF,EAAMlJ,GACfqD,EAAI,EAAI5C,GACM,IAAdiqF,EAAOrnF,IACW,IAAlBqnF,EAAOrnF,EAAI,IACO,IAAlBqnF,EAAOrnF,EAAI,IACO,IAAlBqnF,EAAOrnF,EAAI,IACO,IAAlBqnF,EAAOrnF,EAAI,IACO,IAAlBqnF,EAAOrnF,EAAI,IACO,IAAlBqnF,EAAOrnF,EAAI,KACV+mF,EAASU,kBAAkBJ,EAAQrnF,EAAI,EAAGA,IAAM+mF,EAASU,kBAAkBJ,EAAQrnF,EAAI,EAAGA,EAAI,MAC/FwnF,IAEA7qF,EAAI,EAAInP,GACQ,IAAhBqY,EAAMlJ,GAAGqD,IACW,IAApB6F,EAAMlJ,EAAI,GAAGqD,IACO,IAApB6F,EAAMlJ,EAAI,GAAGqD,IACO,IAApB6F,EAAMlJ,EAAI,GAAGqD,IACO,IAApB6F,EAAMlJ,EAAI,GAAGqD,IACO,IAApB6F,EAAMlJ,EAAI,GAAGqD,IACO,IAApB6F,EAAMlJ,EAAI,GAAGqD,KACZ+mF,EAASW,gBAAgB7hF,EAAO7F,EAAGrD,EAAI,EAAGA,IAAMoqF,EAASW,gBAAgB7hF,EAAO7F,EAAGrD,EAAI,EAAGA,EAAI,MAC/F6qF,GAER,CAEJ,OAAOA,EAAeT,EAASY,EACnC,EACAZ,EAASU,kBAAoB,SAAUh2E,EAAU3R,EAAc+B,GAC3D/B,EAAOmD,KAAK+B,IAAIlF,EAAM,GACtB+B,EAAKoB,KAAKgT,IAAIpU,EAAI4P,EAAS3xB,QAC3B,QAASof,EAAIY,EAAMZ,EAAI2C,EAAI3C,IACvB,GAAoB,IAAhBuS,EAASvS,GACT,OAAO,EAGf,OAAO,CACX,EACA6nF,EAASW,gBAAkB,SAAU7hF,EAAO63D,EAAa59D,EAAc+B,GACnE/B,EAAOmD,KAAK+B,IAAIlF,EAAM,GACtB+B,EAAKoB,KAAKgT,IAAIpU,EAAIgE,EAAM/lB,QACxB,QAASof,EAAIY,EAAMZ,EAAI2C,EAAI3C,IACvB,GAAsB,IAAlB2G,EAAM3G,GAAGw+D,GACT,OAAO,EAGf,OAAO,CACX,EAKAqpB,EAASa,sBAAwB,SAAU9qF,GAKvC,QAJI+qF,EAAe,EACfhiF,EAAQ/I,EAAOsqF,WACfhqF,EAAQN,EAAON,WACfhP,EAASsP,EAAOL,YACXE,EAAI,EAAGA,EAAInP,EAAQmP,IAExB,QADI0qF,EAASxhF,EAAMlJ,GACVqD,EAAI,EAAGA,EAAI5C,EAAO4C,IACL,IAAdqnF,EAAOrnF,IACP6nF,IAIZ,IAAIC,EAAgBhrF,EAAOL,YAAcK,EAAON,WAEhD,OAD2ByG,KAAKe,MAAmD,GAA7Cf,KAAKwV,IAAmB,EAAfovE,EAAmBC,GAAsBA,GAC1Df,EAASgB,EAC3C,EAKAhB,EAASiB,eAAiB,SAAUC,EAAqBjoF,EAAWrD,GAChE,IAAIurF,EACA7zE,EACJ,OAAQ4zE,GACJ,KAAK,EACDC,EAAgBvrF,EAAIqD,EAAK,EACzB,MACJ,KAAK,EACDkoF,EAAmB,EAAJvrF,EACf,MACJ,KAAK,EACDurF,EAAeloF,EAAI,EACnB,MACJ,KAAK,EACDkoF,GAAgBvrF,EAAIqD,GAAK,EACzB,MACJ,KAAK,EACDkoF,EAAgBjlF,KAAKe,MAAMrH,EAAI,GAAKsG,KAAKe,MAAMhE,EAAI,GAAM,EACzD,MACJ,KAAK,EAEDkoF,GAAuB,GADvB7zE,EAAO1X,EAAIqD,IACoBqU,EAAO,EACtC,MACJ,KAAK,EAED6zE,GAAwB,GADxB7zE,EAAO1X,EAAIqD,IACqBqU,EAAO,EAAM,EAC7C,MACJ,KAAK,EAED6zE,GADA7zE,EAAO1X,EAAIqD,GACa,GAAOrD,EAAIqD,EAAK,GAAQ,EAChD,MACJ,QACI,MAAM,IAAI5D,GAAyB,yBAA2B6rF,GAEtE,OAAwB,IAAjBC,CACX,EAKAnB,EAASE,8BAAgC,SAAUnqF,EAAQqrF,GAKvD,QAJIhB,EAAU,EACViB,EAASD,EAAerrF,EAAOL,YAAcK,EAAON,WACpD6rF,EAASF,EAAerrF,EAAON,WAAaM,EAAOL,YACnDoJ,EAAQ/I,EAAOsqF,WACVloF,EAAI,EAAGA,EAAIkpF,EAAQlpF,IAAK,CAG7B,QAFIopF,EAAkB,EAClBC,GAAU,EACLtiF,EAAI,EAAGA,EAAIoiF,EAAQpiF,IAAK,CAC7B,IAAId,GAAMgjF,EAAetiF,EAAM3G,GAAG+G,GAAKJ,EAAMI,GAAG/G,GAC5CiG,KAAQojF,EACRD,KAGIA,GAAmB,IACnBnB,GAAWJ,EAASyB,IAAMF,EAAkB,IAEhDA,EAAkB,EAClBC,EAAUpjF,GAElB,CACImjF,GAAmB,IACnBnB,GAAWJ,EAASyB,IAAMF,EAAkB,GAEpD,CACA,OAAOnB,CACX,EAEAJ,EAASyB,GAAK,EACdzB,EAASO,GAAK,EACdP,EAASY,GAAK,GACdZ,EAASgB,GAAK,GACPhB,CACX,CA7LIA,GA8LJ,MAAA0B,GAAe1B,GCpMf,IAqBI2B,GAA4B,WAC5B,SAASA,EAAWtrF,EAAe5P,GAC/BlU,KAAK8jB,MAAQA,EACb9jB,KAAKkU,OAASA,EAEd,QADIwd,EAAQ,IAAIrQ,MAAMnN,GACb0R,EAAI,EAAGA,IAAM1R,EAAQ0R,IAC1B8L,EAAM9L,GAAK,IAAIwC,WAAWtE,GAE9B9jB,KAAK0xB,MAAQA,CACjB,CACA09E,SAAW7tF,UAAU4B,UAAY,WAC7B,OAAOnjB,KAAKkU,MAChB,EACAk7F,EAAW7tF,UAAU2B,SAAW,WAC5B,OAAOljB,KAAK8jB,KAChB,EACAsrF,EAAW7tF,UAAU/gB,IAAM,SAAUkmB,EAAWrD,GAC5C,OAAOrjB,KAAK0xB,MAAMrO,GAAGqD,EACzB,EAIA0oF,EAAW7tF,UAAUusF,SAAW,WAC5B,OAAO9tG,KAAK0xB,KAChB,EAEA09E,EAAW7tF,UAAU8tF,UAAY,SAAU3oF,EAAWrD,EAAWrf,GAC7DhE,KAAK0xB,MAAMrO,GAAGqD,GAAK1iB,CACvB,EAIAorG,EAAW7tF,UAAU+tF,WAAa,SAAU5oF,EAAWrD,EAAWrf,GAC9DhE,KAAK0xB,MAAMrO,GAAGqD,GAAkB1iB,EAAQ,EAAI,CAChD,EACAorG,EAAW7tF,UAAUkK,MAAQ,SAAUznB,GACnC,IAAIijB,EAAKC,EACT,IACI,QAASyb,EA3DqB,SAASvb,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,CAiD0B6hB,CAASznB,KAAK0xB,OAAQilC,EAAKh0B,EAAGtjC,QAASs3D,EAAGnvC,KAAMmvC,EAAKh0B,EAAGtjC,OAAQ,CAC1E,IAAIkwG,EAAQ54C,EAAG3yD,MACfwhB,GAAOC,KAAK8pF,EAAOvrG,EACvB,CACJ,OACO2jB,GAASV,EAAM,CAAEvf,MAAOigB,EAAS,SAEpC,IACQgvC,IAAOA,EAAGnvC,OAASN,EAAKyb,EAAG/a,SAASV,EAAGzF,KAAKkhB,EACpD,SACU,GAAI1b,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CACJ,EACA0nG,EAAW7tF,UAAUsF,OAAS,SAAUO,GACpC,KAAMA,aAAagoF,GACf,OAAO,EAEX,IAAIljF,EAAQ9E,EAIZ,GAHIpnB,KAAK8jB,QAAUoI,EAAMpI,OAGrB9jB,KAAKkU,SAAWgY,EAAMhY,OACtB,OAAO,EAEX,QAASmP,EAAI,EAAGnP,EAASlU,KAAKkU,OAAQmP,EAAInP,IAAUmP,EAGhD,QAFImsF,EAASxvG,KAAK0xB,MAAMrO,GACpBosF,EAAcvjF,EAAMwF,MAAMrO,GACrBqD,EAAI,EAAG5C,EAAQ9jB,KAAK8jB,MAAO4C,EAAI5C,IAAS4C,EAC7C,GAAI8oF,EAAO9oF,KAAO+oF,EAAY/oF,GAC1B,OAAO,EAInB,OAAO,CACX,EAEA0oF,EAAW7tF,UAAU6C,SAAW,WAE5B,QADInd,EAAS,IAAIuvB,GACRnT,EAAI,EAAGnP,EAASlU,KAAKkU,OAAQmP,EAAInP,IAAUmP,EAAG,CAEnD,QADImsF,EAASxvG,KAAK0xB,MAAMrO,GACfqD,EAAI,EAAG5C,EAAQ9jB,KAAK8jB,MAAO4C,EAAI5C,IAAS4C,EAC7C,OAAQ8oF,EAAO9oF,IACX,KAAK,EACDzf,EAAO6tB,OAAO,MACd,MACJ,KAAK,EACD7tB,EAAO6tB,OAAO,MACd,MACJ,QACI7tB,EAAO6tB,OAAO,MAI1B7tB,EAAO6tB,OAAO,KAClB,CACA,OAAO7tB,EAAOmd,UAClB,EACOgrF,CACX,CAhGIA,GAiGJ,MAAAM,GAAeN,GCjHf,IAAIO,GAAwB,WACxB,SAASA,IACL3vG,KAAK2uG,aAAc,CACvB,CACAgB,SAAOpuF,UAAUquF,QAAU,WACvB,OAAO5vG,KAAKw5E,IAChB,EACAm2B,EAAOpuF,UAAU8rB,WAAa,WAC1B,OAAOrtC,KAAKgtC,OAChB,EACA2iE,EAAOpuF,UAAU2zD,WAAa,WAC1B,OAAOl1E,KAAKy0E,OAChB,EACAk7B,EAAOpuF,UAAUsuF,eAAiB,WAC9B,OAAO7vG,KAAK2uG,WAChB,EACAgB,EAAOpuF,UAAU6Y,UAAY,WACzB,OAAOp6B,KAAKwjB,MAChB,EAEAmsF,EAAOpuF,UAAU6C,SAAW,WACxB,IAAInd,EAAS,IAAIuvB,GACjBvvB,SAAO6tB,OAAO,QACd7tB,EAAO6tB,OAAO,WACd7tB,EAAO6tB,OAAO90B,KAAKw5E,KAAOx5E,KAAKw5E,KAAKp1D,WAAa,QACjDnd,EAAO6tB,OAAO,gBACd7tB,EAAO6tB,OAAO90B,KAAKgtC,QAAUhtC,KAAKgtC,QAAQ5oB,WAAa,QACvDnd,EAAO6tB,OAAO,gBACd7tB,EAAO6tB,OAAO90B,KAAKy0E,QAAUz0E,KAAKy0E,QAAQrwD,WAAa,QACvDnd,EAAO6tB,OAAO,oBACd7tB,EAAO6tB,OAAO90B,KAAK2uG,YAAYvqF,YAC3BpkB,KAAKwjB,QACLvc,EAAO6tB,OAAO,gBACd7tB,EAAO6tB,OAAO90B,KAAKwjB,OAAOY,aAG1Bnd,EAAO6tB,OAAO,qBAElB7tB,EAAO6tB,OAAO,QACP7tB,EAAOmd,UAClB,EACAurF,EAAOpuF,UAAUuuF,QAAU,SAAU9rG,GACjChE,KAAKw5E,KAAOx1E,CAChB,EACA2rG,EAAOpuF,UAAUwuF,WAAa,SAAU/rG,GACpChE,KAAKgtC,QAAUhpC,CACnB,EACA2rG,EAAOpuF,UAAUyuF,WAAa,SAAUv7B,GACpCz0E,KAAKy0E,QAAUA,CACnB,EACAk7B,EAAOpuF,UAAU0uF,eAAiB,SAAUjsG,GACxChE,KAAK2uG,YAAc3qG,CACvB,EACA2rG,EAAOpuF,UAAU2uF,UAAY,SAAUlsG,GACnChE,KAAKwjB,OAASxf,CAClB,EAEA2rG,EAAOQ,mBAAqB,SAAUxB,GAClC,OAAOA,GAAe,GAAKA,EAAcgB,EAAOS,iBACpD,EACAT,EAAOS,kBAAoB,EACpBT,CACX,CA9DIA,GA+DJ,MAAAU,GAAeV,GCnFf,IAAI7uF,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GAiBzC0uF,GAAiC,SAAUvuF,GAE3C,SAASuuF,IACL,OAAkB,OAAXvuF,GAAmBA,EAAOa,MAAM5iB,KAAMwa,YAAcxa,IAC/D,CACAswG,OAJAxvF,GAAUwvF,EAAiBvuF,GAI3BuuF,EAAgB7tF,KAAO,kBAChB6tF,CACX,CAPIA,CAOF/tF,IACF,MAAAguF,GAAeD,GCCf,IAAIE,GAA4B,WAC5B,SAASA,IACL,CAMJA,SAAWC,YAAc,SAAUjtF,GAE/BA,EAAOiI,MAAyB,IACpC,EAGA+kF,EAAWE,YAAc,SAAUC,EAAU3jE,EAASynC,EAASk6B,EAAqBnrF,GAChFgtF,EAAWC,YAAYjtF,GACvBgtF,EAAWI,mBAAmBn8B,EAASjxD,GAEvCgtF,EAAWK,cAAc7jE,EAAS2hE,EAAanrF,GAE/CgtF,EAAWM,sBAAsBr8B,EAASjxD,GAE1CgtF,EAAWO,cAAcJ,EAAUhC,EAAanrF,EACpD,EAOAgtF,EAAWI,mBAAqB,SAAUn8B,EAASjxD,GAE/CgtF,EAAWQ,4CAA4CxtF,GAEvDgtF,EAAWS,+BAA+BztF,GAE1CgtF,EAAWU,qCAAqCz8B,EAASjxD,GAEzDgtF,EAAWW,oBAAoB3tF,EACnC,EAEAgtF,EAAWK,cAAgB,SAAU7jE,EAAS2hE,EAAqBnrF,GAC/D,IAAI4tF,EAAe,IAAIhnF,GACvBomF,EAAWa,iBAAiBrkE,EAAS2hE,EAAayC,GAClD,QAASxrF,EAAI,EAAGyE,EAAO+mF,EAAa5mF,UAAW5E,EAAIyE,IAAQzE,EAAG,CAG1D,IAAIiG,EAAMulF,EAAa5wG,IAAI4wG,EAAa5mF,UAAY,EAAI5E,GAEpD0rF,EAAcd,EAAWe,sBAAsB3rF,GAC/C44B,EAAK8yD,EAAY,GACjB7yD,EAAK6yD,EAAY,GAErB,GADA9tF,EAAO8rF,WAAW9wD,EAAIC,EAAI5yB,GACtBjG,EAAI,EAAG,CAEP,IAAI84B,GAAKl7B,EAAON,WAAa0C,EAAI,EAC7B+4B,GAAK,EACTn7B,EAAO8rF,WAAW5wD,GAAIC,GAAI9yB,EAC9B,KACK,CAEG6yB,GAAK,EACLC,GAAKn7B,EAAOL,YAAc,GAAKyC,EAAI,GACvCpC,EAAO8rF,WAAW5wD,GAAIC,GAAI9yB,EAC9B,CACJ,CACJ,EAGA2kF,EAAWM,sBAAwB,SAAUr8B,EAASjxD,GAClD,KAAIixD,EAAQV,mBAAqB,GAGjC,KAAIy9B,EAAkB,IAAIpnF,GAC1BomF,EAAWiB,oBAAoBh9B,EAAS+8B,GAExC,QADIE,EAAW,GACN9rF,EAAI,EAAGA,EAAI,IAAKA,EACrB,QAAS+G,EAAI,EAAGA,EAAI,IAAKA,EAAG,CAExB,IAAId,EAAM2lF,EAAgBhxG,IAAIkxG,GAC9BA,IAEAluF,EAAO8rF,WAAW1pF,EAAGpC,EAAOL,YAAc,GAAKwJ,EAAGd,GAElDrI,EAAO8rF,WAAW9rF,EAAOL,YAAc,GAAKwJ,EAAG/G,EAAGiG,EACtD,EAER,EAIA2kF,EAAWO,cAAgB,SAAUJ,EAAUhC,EAAqBnrF,GAMhE,QALIkuF,EAAW,EACXC,GAAY,EAEZjrF,EAAIlD,EAAON,WAAa,EACxBG,EAAIG,EAAOL,YAAc,EACtBuD,EAAI,GAAG,CAKV,IAHU,IAANA,IACAA,GAAK,GAEFrD,GAAK,GAAKA,EAAIG,EAAOL,aAAa,CACrC,QAASyC,EAAI,EAAGA,EAAI,IAAKA,EAAG,CACxB,IAAImX,EAAKrW,EAAId,EAEb,GAAK4qF,EAAWoB,QAAQpuF,EAAOhjB,IAAIu8B,EAAI1Z,IAGvC,KAAIwI,OAAM,EACN6lF,EAAWf,EAASnmF,WACpBqB,EAAM8kF,EAASnwG,IAAIkxG,KACjBA,GAKF7lF,GAAM,EAGU,MAAhB8iF,GAAuBlB,GAASiB,eAAeC,EAAa5xE,EAAI1Z,KAChEwI,GAAOA,GAEXrI,EAAO8rF,WAAWvyE,EAAI1Z,EAAGwI,EAAG,CAChC,CACAxI,GAAKsuF,CACT,CAEAtuF,GADAsuF,GAAaA,EAEbjrF,GAAK,CACT,CAEA,GAAIgrF,IAAaf,EAASnmF,UACtB,MAAM,IAAI8lF,GAAgB,0BAA4BoB,EAAW,IAAMf,EAASnmF,UAExF,EAMAgmF,EAAWqB,WAAa,SAAU7tG,GAC9B,OAAO,GAAKilB,GAAQE,qBAAqBnlB,EAC7C,EA0BAwsG,EAAWsB,iBAAmB,SAAU9tG,EAAeyuC,GACnD,GAAa,IAATA,EACA,MAAM,IAAI3vB,GAAyB,gBAIvC,IAAIivF,EAAevB,EAAWqB,WAAWp/D,GAGzC,IAFAzuC,IAAU+tG,EAAe,EAElBvB,EAAWqB,WAAW7tG,IAAU+tG,GACnC/tG,GAASyuC,GAAS+9D,EAAWqB,WAAW7tG,GAAS+tG,EAGrD,OAAO/tG,CACX,EAIAwsG,EAAWa,iBAAmB,SAAUrkE,EAAS2hE,EAAqBrkF,GAClE,IAAKqlF,GAAOQ,mBAAmBxB,GAC3B,MAAM,IAAI2B,GAAgB,wBAE9B,IAAI0B,EAAYhlE,EAAQiI,WAAa,EAAK05D,EAC1CrkF,EAAKwB,WAAWkmF,EAAU,GAC1B,IAAIC,EAAUzB,EAAWsB,iBAAiBE,EAAUxB,EAAW0B,gBAC/D5nF,EAAKwB,WAAWmmF,EAAS,IACzB,IAAIE,EAAW,IAAI/nF,GAGnB,GAFA+nF,EAASrmF,WAAW0kF,EAAW4B,uBAAwB,IACvD9nF,EAAK8B,IAAI+lF,GACc,KAAnB7nF,EAAKE,UACL,MAAM,IAAI8lF,GAAgB,iCAAmChmF,EAAKE,UAE1E,EAGAgmF,EAAWiB,oBAAsB,SAAUh9B,EAASnqD,GAChDA,EAAKwB,WAAW2oD,EAAQV,mBAAoB,GAC5C,IAAIk+B,EAAUzB,EAAWsB,iBAAiBr9B,EAAQV,mBAAoBy8B,EAAW6B,mBAEjF,GADA/nF,EAAKwB,WAAWmmF,EAAS,IACF,KAAnB3nF,EAAKE,UACL,MAAM,IAAI8lF,GAAgB,iCAAmChmF,EAAKE,UAE1E,EAEAgmF,EAAWoB,QAAU,SAAU5tG,GAC3B,OAAiB,MAAVA,CACX,EACAwsG,EAAWW,oBAAsB,SAAU3tF,GAGvC,QAASoC,EAAI,EAAGA,EAAIpC,EAAON,WAAa,IAAK0C,EAAG,CAC5C,IAAIiG,GAAOjG,EAAI,GAAK,EAEhB4qF,EAAWoB,QAAQpuF,EAAOhjB,IAAIolB,EAAG,KACjCpC,EAAO6rF,UAAUzpF,EAAG,EAAGiG,GAGvB2kF,EAAWoB,QAAQpuF,EAAOhjB,IAAI,EAAGolB,KACjCpC,EAAO6rF,UAAU,EAAGzpF,EAAGiG,EAE/B,CACJ,EAEA2kF,EAAWS,+BAAiC,SAAUztF,GAClD,GAA8C,IAA1CA,EAAOhjB,IAAI,EAAGgjB,EAAOL,YAAc,GACnC,MAAM,IAAImtF,GAEd9sF,EAAO6rF,UAAU,EAAG7rF,EAAOL,YAAc,EAAG,EAChD,EACAqtF,EAAW8B,iCAAmC,SAAUC,EAAgBC,EAAgBhvF,GACpF,QAASkD,EAAI,EAAGA,EAAI,IAAKA,EAAG,CACxB,IAAK8pF,EAAWoB,QAAQpuF,EAAOhjB,IAAI+xG,EAAS7rF,EAAG8rF,IAC3C,MAAM,IAAIlC,GAEd9sF,EAAO6rF,UAAUkD,EAAS7rF,EAAG8rF,EAAQ,EACzC,CACJ,EACAhC,EAAWiC,+BAAiC,SAAUF,EAAgBC,EAAgBhvF,GAClF,QAASH,EAAI,EAAGA,EAAI,IAAKA,EAAG,CACxB,IAAKmtF,EAAWoB,QAAQpuF,EAAOhjB,IAAI+xG,EAAQC,EAASnvF,IAChD,MAAM,IAAIitF,GAEd9sF,EAAO6rF,UAAUkD,EAAQC,EAASnvF,EAAG,EACzC,CACJ,EACAmtF,EAAWkC,+BAAiC,SAAUH,EAAgBC,EAAgBhvF,GAClF,QAASH,EAAI,EAAGA,EAAI,IAAKA,EAErB,QADIsvF,EAAWnC,EAAWoC,4BAA4BvvF,GAC7CqD,EAAI,EAAGA,EAAI,IAAKA,EACrBlD,EAAO6rF,UAAUkD,EAAS7rF,EAAG8rF,EAASnvF,EAAGsvF,EAASjsF,GAG9D,EACA8pF,EAAWqC,8BAAgC,SAAUN,EAAgBC,EAAgBhvF,GACjF,QAASH,EAAI,EAAGA,EAAI,IAAKA,EAErB,QADIsvF,EAAWnC,EAAWsC,2BAA2BzvF,GAC5CqD,EAAI,EAAGA,EAAI,IAAKA,EACrBlD,EAAO6rF,UAAUkD,EAAS7rF,EAAG8rF,EAASnvF,EAAGsvF,EAASjsF,GAG9D,EAEA8pF,EAAWQ,4CAA8C,SAAUxtF,GAE/D,IAAIuvF,EAAWvC,EAAWsC,2BAA2B,GAAGtsG,OAExDgqG,EAAWqC,8BAA8B,EAAG,EAAGrvF,GAE/CgtF,EAAWqC,8BAA8BrvF,EAAON,WAAa6vF,EAAU,EAAGvvF,GAE1EgtF,EAAWqC,8BAA8B,EAAGrvF,EAAON,WAAa6vF,EAAUvvF,GAI1EgtF,EAAW8B,iCAAiC,EAAGU,EAAcxvF,GAE7DgtF,EAAW8B,iCAAiC9uF,EAAON,WAJpC,EAI2D8vF,EAAcxvF,GAExFgtF,EAAW8B,iCAAiC,EAAG9uF,EAAON,WANvC,EAM8DM,GAI7EgtF,EAAWiC,+BAFG,EAEqC,EAAGjvF,GAEtDgtF,EAAWiC,+BAA+BjvF,EAAOL,YAJnC,EAI2D,EAAG,EAAGK,GAE/EgtF,EAAWiC,+BANG,EAMqCjvF,EAAOL,YAN5C,EAMmEK,EACrF,EAEAgtF,EAAWU,qCAAuC,SAAUz8B,EAASjxD,GACjE,KAAIixD,EAAQV,mBAAqB,GAKjC,QAFIzuD,EAAQmvD,EAAQV,mBAAqB,EACrCu9B,EAAcd,EAAWyC,6CAA6C3tF,GACjEM,EAAI,EAAGmB,EAAWuqF,EAAY9qG,OAAQof,IAAMmB,EAAUnB,IAAK,CAChE,IAAIvC,EAAIiuF,EAAY1rF,GACpB,GAAIvC,GAAK,EACL,QAASsJ,EAAI,EAAGA,IAAM5F,EAAU4F,IAAK,CACjC,IAAIjG,EAAI4qF,EAAY3kF,GAChBjG,GAAK,GAAK8pF,EAAWoB,QAAQpuF,EAAOhjB,IAAIkmB,EAAGrD,KAI3CmtF,EAAWkC,+BAA+BhsF,EAAI,EAAGrD,EAAI,EAAGG,EAEhE,CAER,CACJ,EACAgtF,EAAWsC,2BAA6BzxF,MAAMmF,KAAK,CAC/CI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IACnCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IACnCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IACnCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IACnCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IACnCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IACnCI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,MAEvCgqF,EAAWoC,4BAA8BvxF,MAAMmF,KAAK,CAChDI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,IAC7BI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,IAC7BI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,IAC7BI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,IAC7BI,WAAWJ,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,MAGjCgqF,EAAWyC,6CAA+C5xF,MAAMmF,KAAK,CACjEI,WAAWJ,KAAK,EAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACzCI,WAAWJ,KAAK,CAAC,EAAG,IAAI,GAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,IAAI,GAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,IAAI,GAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,IAAI,GAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,IAAI,GAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,IAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,IAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,IAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,IAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,IAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,IAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,IAAI,GAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,IAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,IAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,IAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,IAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,IAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,IAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,IAAI,GAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAI,GAAI,IACxCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,KAAK,GAAI,IACzCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,KAAK,GAAI,IACzCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,KAAK,GAAI,IACzCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,KAAK,GAAI,IACzCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,KAAK,GAAI,IACzCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,KAAK,IACzCI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KAAK,IAC1CI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KAAK,IAC1CI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KAAK,IAC1CI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KAAK,IAC1CI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KAAK,IAC1CI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KAAK,IAC1CI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,MAC1CI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,MAC1CI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,MAC1CI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,MAC1CI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,MAC1CI,WAAWJ,KAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,QAG9CgqF,EAAWe,sBAAwBlwF,MAAMmF,KAAK,CAC1CI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,IACpBI,WAAWJ,KAAK,CAAC,EAAG,MAGxBgqF,EAAW6B,kBAAoB,KAE/B7B,EAAW0B,eAAiB,KAC5B1B,EAAW4B,uBAAyB,MAC7B5B,CACX,CAlZIA,GAmZJ,MAAA0C,GAAe1C,GC7Zf,IAAI2C,GAA2B,WAC3B,SAASA,EAAU9F,EAAW+F,GAC1BpzG,KAAKqtG,UAAYA,EACjBrtG,KAAKozG,qBAAuBA,CAChC,CACAD,SAAU5xF,UAAU8xF,aAAe,WAC/B,OAAOrzG,KAAKqtG,SAChB,EACA8F,EAAU5xF,UAAU+xF,wBAA0B,WAC1C,OAAOtzG,KAAKozG,oBAChB,EACOD,CACX,CAZIA,GAaJ,MAAAI,GAAeJ,GCdf,IAAI1rF,GAAsC,SAASL,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,EAwBI4tG,GAAyB,WAEzB,SAASA,IACT,CAGAA,SAAQC,qBAAuB,SAAUjwF,GACrC,OAAOiqF,GAASC,sBAAsBlqF,GAChCiqF,GAASG,sBAAsBpqF,GAC/BiqF,GAASQ,sBAAsBzqF,GAC/BiqF,GAASa,sBAAsB9qF,EACzC,EAWAgwF,EAAQthF,OAAS,SAAUwhF,EAAS1mE,EAAStZ,QAC3B,IAAVA,IAAoBA,EAAQ,MAEhC,IAAI/B,EAAW6hF,EAAQG,2BACnBC,EAA4B,OAAVlgF,QAAkB/yB,IAAc+yB,EAAMlzB,IAAIorG,GAAel+E,eAC3EkmF,IACAjiF,EAAW+B,EAAMlzB,IAAIorG,GAAel+E,eAAetJ,YAIvD,IAAIo1D,EAAOx5E,KAAK6zG,WAAWH,EAAS/hF,GAGhCmiF,EAAa,IAAI1pF,GAErB,GAAIovD,IAASV,GAAKmM,OAAS2uB,GAAmBJ,EAAQG,6BAA+BhiF,GAAW,CAC5F,IAAIoiF,EAAM7jF,GAAgBiB,yBAAyBQ,QACvChxB,IAARozG,GACA/zG,KAAKg0G,UAAUD,EAAKD,EAE5B,CAEA9zG,KAAKi0G,eAAez6B,EAAMs6B,GAG1B,IAEIr/B,EAFAk8B,EAAW,IAAIvmF,GAGnB,GAFApqB,KAAKk0G,YAAYR,EAASl6B,EAAMm3B,EAAUh/E,GAE5B,OAAV+B,QAAkB/yB,IAAc+yB,EAAMlzB,IAAIorG,GAAec,YAAa,CACtE,IAAIr5B,GAAgBppD,OAAOvR,SAASgb,EAAMlzB,IAAIorG,GAAec,YAAYtoF,WAAY,IACrFqwD,EAAUrB,GAAQ8O,oBAAoB7O,IACtC,IAAI8gC,GAAan0G,KAAKo0G,oBAAoB56B,EAAMs6B,EAAYnD,EAAUl8B,GACtE,IAAKz0E,KAAKq0G,QAAQF,GAAY1/B,EAASznC,GACnC,MAAM,IAAIsjE,GAAgB,qCAElC,MAEI77B,EAAUz0E,KAAKs0G,iBAAiBtnE,EAASwsC,EAAMs6B,EAAYnD,GAE/D,IAAI4D,GAAoB,IAAInqF,GAC5BmqF,GAAkBtoF,eAAe6nF,GAEjC,IAAIU,GAAah7B,IAASV,GAAKmM,KAAO0rB,EAASlmF,iBAAmBipF,EAAQltG,OAC1ExG,KAAKy0G,iBAAiBD,GAAY//B,EAAS+E,EAAM+6B,IAEjDA,GAAkBtoF,eAAe0kF,GACjC,IAAI79B,GAAW2B,EAAQuN,oBAAoBh1C,GACvC0nE,GAAejgC,EAAQL,oBAAsBtB,GAAS4O,sBAE1D1hF,KAAK20G,cAAcD,GAAcH,IAEjC,IAAIK,GAAY50G,KAAK60G,sBAAsBN,GAAmB9/B,EAAQL,oBAAqBsgC,GAAc5hC,GAASyO,gBAC9GuzB,GAAS,IAAInF,GACjBmF,GAAO/E,WAAW/iE,GAClB8nE,GAAOhF,QAAQt2B,GACfs7B,GAAO9E,WAAWv7B,GAElB,IAAI5uB,GAAY4uB,EAAQsN,yBACpBv+D,GAAS,IAAI4rF,GAAWvpD,GAAWA,IACnC8oD,GAAc3uG,KAAK+0G,kBAAkBH,GAAW5nE,EAASynC,EAASjxD,IACtEsxF,UAAO7E,eAAetB,IAEtB6B,GAAWE,YAAYkE,GAAW5nE,EAASynC,EAASk6B,GAAanrF,IACjEsxF,GAAO5E,UAAU1sF,IACVsxF,EACX,EAMAtB,EAAQc,iBAAmB,SAAUtnE,EAASwsC,EAAMs6B,EAAYnD,GAI5D,IAAIqE,EAAwBh1G,KAAKo0G,oBAAoB56B,EAAMs6B,EAAYnD,EAAUv9B,GAAQ8O,oBAAoB,IACzG4B,EAAqB9jF,KAAKi1G,cAAcD,EAAuBhoE,GAE/DmnE,EAAan0G,KAAKo0G,oBAAoB56B,EAAMs6B,EAAYnD,EAAU7sB,GACtE,OAAO9jF,KAAKi1G,cAAcd,EAAYnnE,EAC1C,EACAwmE,EAAQY,oBAAsB,SAAU56B,EAAMs6B,EAAYnD,EAAUl8B,GAChE,OAAOq/B,EAAWtpF,UAAYgvD,EAAKgM,sBAAsB/Q,GAAWk8B,EAASnmF,SACjF,EAKAgpF,EAAQ0B,oBAAsB,SAAU33F,GACpC,OAAIA,EAAOi2F,EAAQ2B,mBAAmB3uG,OAC3BgtG,EAAQ2B,mBAAmB53F,IAE/B,CACX,EAQAi2F,EAAQK,WAAa,SAAUH,EAAS/hF,GAEpC,QADiB,IAAbA,IAAuBA,EAAW,MAClCzB,GAAgBX,KAAKwB,YAAcY,GAAY3xB,KAAKo1G,sBAAsB1B,GAE1E,OAAO56B,GAAKqM,MAIhB,QAFIkwB,GAAa,EACbC,GAAkB,EACb1vF,EAAI,EAAGmB,EAAW2sF,EAAQltG,OAAQof,EAAImB,IAAYnB,EAAG,CAC1D,IAAImR,EAAI28E,EAAQ/8E,OAAO/Q,GACvB,GAAI4tF,EAAQ+B,QAAQx+E,GAChBs+E,GAAa,WAEsC,IAA9Cr1G,KAAKk1G,oBAAoBn+E,EAAE5D,WAAW,IAI3C,OAAO2lD,GAAKmM,KAHZqwB,GAAkB,CAGNrwB,CAEpB,CACA,OAAIqwB,EACOx8B,GAAKiM,aAEZswB,EACOv8B,GAAKgM,QAEThM,GAAKmM,IAChB,EACAuuB,EAAQ4B,sBAAwB,SAAU1B,GACtC,IAAIhiF,EACJ,IACIA,EAAQF,GAAeU,OAAOwhF,EAASxjF,GAAgBX,KAC3D,OAEI,OAAO,CACX,CACA,IAAI/oB,EAASkrB,EAAMlrB,OACnB,GAAIA,EAAS,GAAM,EACf,OAAO,EAEX,QAASof,EAAI,EAAGA,EAAIpf,EAAQof,GAAK,EAAG,CAChC,IAAI4vF,EAAmB,IAAX9jF,EAAM9L,GAClB,IAAK4vF,EAAQ,KAAQA,EAAQ,OAAUA,EAAQ,KAAQA,EAAQ,KAC3D,OAAO,CAEf,CACA,OAAO,CACX,EACAhC,EAAQuB,kBAAoB,SAAUzqF,EAAM0iB,EAASynC,EAASjxD,GAI1D,QAHIiyF,EAAaxrF,OAAOC,iBACpBwrF,GAAkB,EAEb/G,EAAc,EAAGA,EAAcgB,GAAOS,kBAAmBzB,IAAe,CAC7E6B,GAAWE,YAAYpmF,EAAM0iB,EAASynC,EAASk6B,EAAanrF,GAC5D,IAAIqqF,EAAU7tG,KAAKyzG,qBAAqBjwF,GACpCqqF,EAAU4H,IACVA,EAAa5H,EACb6H,EAAkB/G,EAE1B,CACA,OAAO+G,CACX,EACAlC,EAAQyB,cAAgB,SAAUU,EAAsB3oE,GACpD,QAAS4oE,EAAa,EAAGA,GAAc,GAAIA,IAAc,CACrD,IAAInhC,EAAUrB,GAAQ8O,oBAAoB0zB,GAC1C,GAAIpC,EAAQa,QAAQsB,EAAclhC,EAASznC,GACvC,OAAOynC,CAEf,CACA,MAAM,IAAI67B,GAAgB,eAC9B,EAKAkD,EAAQa,QAAU,SAAUsB,EAAsBlhC,EAASznC,GAUvD,OAPeynC,EAAQL,oBAERK,EAAQuN,oBAAoBh1C,GACjB00C,wBAGHi0B,EAAe,GAAK,CAE/C,EAIAnC,EAAQmB,cAAgB,SAAUD,EAAsBpqF,GACpD,IAAIurF,EAA0B,EAAfnB,EACf,GAAIpqF,EAAKE,UAAYqrF,EACjB,MAAM,IAAIvF,GAAgB,sCAAwChmF,EAAKE,UAAY,MAC/EqrF,GAER,QAASjwF,EAAI,EAAGA,EAAI,GAAK0E,EAAKE,UAAYqrF,IAAYjwF,EAClD0E,EAAKsB,WAAU,GAInB,IAAIkqF,EAAqC,EAAjBxrF,EAAKE,UAC7B,GAAIsrF,EAAoB,EACpB,IAASlwF,EAAIkwF,EAAmBlwF,EAAI,EAAGA,IACnC0E,EAAKsB,WAAU,GAKvB,IADImqF,EAAkBrB,EAAepqF,EAAKG,iBAC1C,IAAS7E,EAAI,EAAGA,EAAImwF,IAAmBnwF,EACnC0E,EAAKwB,WAAgB,EAAJlG,EAAyB,GAAP,IAAa,GAEpD,GAAI0E,EAAKE,YAAcqrF,EACnB,MAAM,IAAIvF,GAAgB,oCAElC,EAMAkD,EAAQwC,uCAAyC,SAAUC,EAAuBvB,EAAsBwB,EAAqBC,EAAiBC,EAAqBC,GAC/J,GAAIF,GAAWD,EACX,MAAM,IAAI5F,GAAgB,sBAG9B,IAAIgG,EAAsBL,EAAgBC,EAEtCK,EAAsBL,EAAcI,EAEpCE,EAAwB7sF,KAAKe,MAAMurF,EAAgBC,GAEnDO,EAAwBD,EAAwB,EAEhDE,GAAuB/sF,KAAKe,MAAMgqF,EAAewB,GAEjDS,GAAuBD,GAAuB,EAE9CE,GAAqBJ,EAAwBE,GAE7CG,GAAqBJ,EAAwBE,GAGjD,GAAIC,KAAuBC,GACvB,MAAM,IAAIvG,GAAgB,qBAG9B,GAAI4F,IAAgBK,EAAsBD,EACtC,MAAM,IAAIhG,GAAgB,sBAG9B,GAAI2F,KACES,GAAuBE,IACrBL,GACEI,GAAuBE,IACrBP,EACR,MAAM,IAAIhG,GAAgB,wBAE1B6F,EAAUI,GACVH,EAAoB,GAAKM,GACzBL,EAAkB,GAAKO,KAGvBR,EAAoB,GAAKO,GACzBN,EAAkB,GAAKQ,GAE/B,EAKArD,EAAQqB,sBAAwB,SAAUvqF,EAAM2rF,EAAuBvB,EAAsBwB,GACzF,IAAIjvF,EAAKC,EAAIgmC,EAAKvqB,EAElB,GAAIrY,EAAKG,mBAAqBiqF,EAC1B,MAAM,IAAIpE,GAAgB,gDAS9B,QALIwG,EAAkB,EAClBC,EAAkB,EAClBC,GAAgB,EAEhBC,GAAS,IAAI51F,MACRuE,GAAI,EAAGA,GAAIswF,IAAetwF,GAAG,CAClC,IAAIwwF,GAAsB,IAAIxvF,WAAW,GACrCswF,GAAoB,IAAItwF,WAAW,GACvC4sF,EAAQwC,uCAAuCC,EAAevB,EAAcwB,EAAatwF,GAAGwwF,GAAqBc,IACjH,IAAI7sF,GAAO+rF,GAAoB,GAC3B/I,GAAY,IAAIjlF,WAAWiC,IAC/BC,EAAK+B,QAAQ,EAAIyqF,EAAiBzJ,GAAW,EAAGhjF,IAChD,IAAI+iF,GAAUoG,EAAQ2D,gBAAgB9J,GAAW6J,GAAkB,IACnED,GAAOz0G,KAAK,IAAI2wG,GAAU9F,GAAWD,KACrC2J,EAAkBptF,KAAK+B,IAAIqrF,EAAiB1sF,IAC5C2sF,GAAgBrtF,KAAK+B,IAAIsrF,GAAe5J,GAAQ5mG,QAChDswG,GAAmBV,GAAoB,EAC3C,CACA,GAAI1B,IAAiBoC,EACjB,MAAM,IAAIxG,GAAgB,oCAI9B,IAFIrpG,GAAS,IAAImjB,GAEjB,IAASxE,GAAI,EAAGA,GAAImxF,IAAmBnxF,GACnC,IACI,QAASwxF,IAAYnwF,OAAM,EAAQQ,GAASwvF,KAAUI,GAAaD,GAAS/3G,QAASg4G,GAAW7vF,KAAM6vF,GAAaD,GAAS/3G,OAAQ,CAG5HumB,IADAynF,GADQgK,GAAWrzG,MACDqvG,gBACJ7sG,QACdS,GAAO6kB,WAAWuhF,GAAUznF,IAAI,EAExC,CACJ,OACO+B,IAASV,EAAM,CAAEvf,MAAOigB,GAAS,SAEpC,IACQ0vF,KAAeA,GAAW7vF,OAASN,EAAKkwF,GAASxvF,SAASV,EAAGzF,KAAK21F,GAC1E,SACU,GAAInwF,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CAGJ,IAASke,GAAI,EAAGA,GAAIoxF,KAAiBpxF,GACjC,IACI,QAAS0xF,IAAYpqD,OAAM,EAAQzlC,GAASwvF,KAAUM,GAAaD,GAASj4G,QAASk4G,GAAW/vF,KAAM+vF,GAAaD,GAASj4G,OAAQ,CAG5HumB,IADAwnF,GADQmK,GAAWvzG,MACHsvG,2BACJ9sG,QACZS,GAAO6kB,WAAWshF,GAAQxnF,IAAI,EAEtC,CACJ,OACOioC,IAASX,EAAM,CAAExlD,MAAOmmD,GAAS,SAEpC,IACQ0pD,KAAeA,GAAW/vF,OAASmb,EAAK20E,GAAS1vF,SAAS+a,EAAGlhB,KAAK61F,GAC1E,SACU,GAAIpqD,EAAK,MAAMA,EAAIxlD,KAAO,CACxC,CAEJ,GAAIuuG,IAAkBhvG,GAAOwjB,iBACzB,MAAM,IAAI6lF,GAAgB,uBAAyB2F,EAAgB,QAC/DhvG,GAAOwjB,iBAAmB,YAElC,OAAOxjB,EACX,EACAusG,EAAQ2D,gBAAkB,SAAU9J,EAAW6J,GAG3C,QAFIxC,EAAerH,EAAU7mG,OACzB2mG,EAAW,IAAIvmF,WAAW8tF,EAAewC,GACpCtxF,EAAI,EAAGA,EAAI8uF,EAAc9uF,IAC9BunF,EAASvnF,GAAoB,IAAfynF,EAAUznF,GAE5B,IAAIknF,GAAmB57D,GAAUW,mBAAmB3f,OAAOi7E,EAAU+J,GAErE,IADI9J,EAAU,IAAIhlF,WAAW8uF,GAC7B,IAAStxF,EAAI,EAAGA,EAAIsxF,EAAmBtxF,IACnCwnF,EAAQxnF,GAAiBunF,EAASuH,EAAe9uF,GAErD,OAAOwnF,CACX,EAIAoG,EAAQS,eAAiB,SAAUz6B,EAAMlvD,GACrCA,EAAKwB,WAAW0tD,EAAKvkC,UAAW,EACpC,EAIAu+D,EAAQiB,iBAAmB,SAAUD,EAAoB//B,EAAS+E,EAAMlvD,GACpE,IAAIyB,EAAUytD,EAAKgM,sBAAsB/Q,GACzC,GAAI+/B,GAAe,GAAKzoF,EACpB,MAAM,IAAIukF,GAAgBkE,EAAa,qBAAuB,GAAKzoF,GAAW,IAElFzB,EAAKwB,WAAW0oF,EAAYzoF,EAChC,EAIAynF,EAAQU,YAAc,SAAUR,EAASl6B,EAAMlvD,EAAMqH,GACjD,OAAQ6nD,GACJ,KAAKV,GAAKgM,QACN0uB,EAAQgE,mBAAmB9D,EAASppF,GACpC,MACJ,KAAKwuD,GAAKiM,aACNyuB,EAAQiE,wBAAwB/D,EAASppF,GACzC,MACJ,KAAKwuD,GAAKmM,KACNuuB,EAAQkE,gBAAgBhE,EAASppF,EAAMqH,GACvC,MACJ,KAAKmnD,GAAKqM,MACNquB,EAAQmE,iBAAiBjE,EAASppF,GAClC,MACJ,QACI,MAAM,IAAIgmF,GAAgB,iBAAmB92B,GAEzD,EACAg6B,EAAQoE,SAAW,SAAUC,GACzB,OAAOA,EAAgB1kF,WAAW,GAAK,EAC3C,EACAqgF,EAAQ+B,QAAU,SAAUsC,GACxB,IAAIC,EAAKtE,EAAQoE,SAASC,GAC1B,OAAOC,GAAM,GAAKA,GAAM,CAC5B,EACAtE,EAAQgE,mBAAqB,SAAU9D,EAASppF,GAG5C,QAFI9jB,EAASktG,EAAQltG,OACjBof,EAAI,EACDA,EAAIpf,GAAQ,CACf,IAAIuxG,EAAOvE,EAAQoE,SAASlE,EAAQ/8E,OAAO/Q,IAC3C,GAAIA,EAAI,EAAIpf,EAAQ,CAEhB,IAAIwxG,EAAOxE,EAAQoE,SAASlE,EAAQ/8E,OAAO/Q,EAAI,IAC3CqyF,EAAOzE,EAAQoE,SAASlE,EAAQ/8E,OAAO/Q,EAAI,IAC/C0E,EAAKwB,WAAkB,IAAPisF,EAAoB,GAAPC,EAAYC,EAAM,IAC/CryF,GAAK,CACT,SACSA,EAAI,EAAIpf,EAAQ,CAEjBwxG,EAAOxE,EAAQoE,SAASlE,EAAQ/8E,OAAO/Q,EAAI,IAC/C0E,EAAKwB,WAAkB,GAAPisF,EAAYC,EAAM,GAClCpyF,GAAK,CACT,MAGI0E,EAAKwB,WAAWisF,EAAM,GACtBnyF,GAER,CACJ,EACA4tF,EAAQiE,wBAA0B,SAAU/D,EAASppF,GAGjD,QAFI9jB,EAASktG,EAAQltG,OACjBof,EAAI,EACDA,EAAIpf,GAAQ,CACf,IAAI0xG,EAAQ1E,EAAQ0B,oBAAoBxB,EAAQvgF,WAAWvN,IAC3D,IAAc,IAAVsyF,EACA,MAAM,IAAI5H,GAEd,GAAI1qF,EAAI,EAAIpf,EAAQ,CAChB,IAAI2xG,EAAQ3E,EAAQ0B,oBAAoBxB,EAAQvgF,WAAWvN,EAAI,IAC/D,IAAc,IAAVuyF,EACA,MAAM,IAAI7H,GAGdhmF,EAAKwB,WAAmB,GAARosF,EAAaC,EAAO,IACpCvyF,GAAK,CACT,MAGI0E,EAAKwB,WAAWosF,EAAO,GACvBtyF,GAER,CACJ,EACA4tF,EAAQkE,gBAAkB,SAAUhE,EAASppF,EAAMqH,GAC/C,IAAID,EACJ,IACIA,EAAQF,GAAeU,OAAOwhF,EAAS/hF,EAC3C,OACOupD,GACH,MAAM,IAAIo1B,GAAgBp1B,EAC9B,CACA,QAASt1D,EAAI,EAAG6Y,EAAW/M,EAAMlrB,OAAQof,IAAM6Y,EAAU7Y,IAAK,CAC1D,IAAI3E,EAAIyQ,EAAM9L,GACd0E,EAAKwB,WAAW7K,EAAG,EACvB,CACJ,EAIAuyF,EAAQmE,iBAAmB,SAAUjE,EAASppF,GAC1C,IAAIoH,EACJ,IACIA,EAAQF,GAAeU,OAAOwhF,EAASxjF,GAAgBX,KAC3D,OACO2rD,IACH,MAAM,IAAIo1B,GAAgBp1B,GAC9B,CAEA,QADI10E,EAASkrB,EAAMlrB,OACVof,EAAI,EAAGA,EAAIpf,EAAQof,GAAK,EAAG,CAChC,IAEIrI,GAFmB,IAAXmU,EAAM9L,KAEI,EAAK,WADA,IAAf8L,EAAM9L,EAAI,GAElBwyF,GAAa,EAOjB,GANI76F,GAAQ,OAAUA,GAAQ,MAC1B66F,EAAa76F,EAAO,MAEfA,GAAQ,OAAUA,GAAQ,QAC/B66F,EAAa76F,EAAO,QAEL,IAAf66F,EACA,MAAM,IAAI9H,GAAgB,yBAE9B,IAAI1hD,EAA+B,KAAnBwpD,GAAc,IAA2B,IAAbA,GAC5C9tF,EAAKwB,WAAW8iC,EAAS,GAC7B,CACJ,EACA4kD,EAAQQ,UAAY,SAAUD,EAAKzpF,GAC/BA,EAAKwB,WAAWgtD,GAAKoM,IAAIjwC,UAAW,GAEpC3qB,EAAKwB,WAAWioF,EAAI/iF,WAAY,EACpC,EAEAwiF,EAAQ2B,mBAAqBvuF,WAAWJ,KAAK,EACzC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAC5D,IAAI,GAAI,GAAI,EAAI,GAAI,IAAI,GAAI,GAAI,GAAI,EAAI,GAAI,IAAI,EAAI,GAAI,GAAI,GAC5D,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAI,GAAI,GAAI,GAAI,GAAI,GAClD,EAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAI,GAAI,GAAI,GAAI,GAAI,IAEhEgtF,EAAQG,2BAA6BzjF,GAAgBL,KAAKkB,UACnDyiF,CACX,CArhBIA,GAshBJ,MAAA6E,GAAe7E,IC/jB6B,WACxC,SAAS8E,IACT,CASAA,EAAuB/2F,UAAUo/E,MAAQ,SAAU4X,EAAUz0F,EAAO5P,EAAQwf,GAExE,QADc,IAAVA,IAAoBA,EAAQ,MACR,IAApB6kF,EAAS/xG,OACT,MAAM,IAAIsc,GAAyB,wBAKvC,GAAIgB,EAAQ,GAAK5P,EAAS,EACtB,MAAM,IAAI4O,GAAyB,uCAAyCgB,EAAQ,IAAM5P,GAE9F,IAAIksE,EAAuBT,GAAqBJ,EAC5Ci5B,EAAYF,EAAuBG,gBACzB,OAAV/kF,SACI/yB,IAAc+yB,EAAMlzB,IAAIorG,GAAeI,oBACvC5rB,EAAuBT,GAAqBI,WAAWrsD,EAAMlzB,IAAIorG,GAAeI,kBAAkB5nF,kBAElGzjB,IAAc+yB,EAAMlzB,IAAIorG,GAAeS,UACvCmM,EAAYvuF,OAAOvR,SAASgb,EAAMlzB,IAAIorG,GAAeS,QAAQjoF,WAAY,MAGjF,IAAI7G,EAAOi2F,GAAQthF,OAAOqmF,EAAUn4B,EAAsB1sD,GAC1D,OAAO1zB,KAAK04G,aAAan7F,EAAMuG,EAAO5P,EAAQskG,EAClD,EAIAF,EAAuB/2F,UAAUo3F,WAAa,SAAUC,EAAkBL,EAAUz0F,EAAO5P,EAAQwf,QACjF,IAAVA,IAAoBA,EAAQ,MACA,iBAArBklF,IACPA,EAAmBl3G,SAASm3G,cAAcD,IAE9C,IAAIE,EAAa94G,KAAK2gG,MAAM4X,EAAUz0F,EAAO5P,EAAQwf,GACjDklF,GACAA,EAAiB32G,YAAY62G,EACrC,EAKAR,EAAuB/2F,UAAUm3F,aAAe,SAAUn7F,EAAMuG,EAAe5P,EAAgBskG,GAC3F,IAAIO,EAAQx7F,EAAK6c,YACjB,GAAc,OAAV2+E,EACA,MAAM,IAAI3mE,GAgBd,QAdI4mE,EAAaD,EAAM71F,WACnB+1F,EAAcF,EAAM51F,YACpB+1F,EAAUF,EAA0B,EAAZR,EACxBW,EAAWF,EAA2B,EAAZT,EAC1BY,EAAczvF,KAAK+B,IAAI5H,EAAOo1F,GAC9BG,GAAe1vF,KAAK+B,IAAIxX,EAAQilG,GAChCroB,GAAWnnE,KAAKgT,IAAIhT,KAAKe,MAAM0uF,EAAcF,GAAUvvF,KAAKe,MAAM2uF,GAAeF,IAKjFG,GAAc3vF,KAAKe,OAAO0uF,EAAeJ,EAAaloB,IAAa,GACnEyoB,GAAa5vF,KAAKe,OAAO2uF,GAAgBJ,EAAcnoB,IAAa,GACpEgoB,GAAa94G,KAAKw5G,iBAAiBJ,EAAaC,IAC3CI,GAAS,EAAGC,GAAUH,GAAYE,GAASR,EAAaQ,KAAUC,IAAW5oB,GAElF,QAAS6oB,GAAS,EAAGC,GAAUN,GAAaK,GAASX,EAAYW,KAAUC,IAAW9oB,GAClF,GAAkC,IAA9BioB,EAAMv4G,IAAIm5G,GAAQF,IAAe,CACjC,IAAII,GAAiB75G,KAAK85G,qBAAqBF,GAASF,GAAS5oB,GAAUA,IAC3EgoB,GAAW72G,YAAY43G,GAC3B,CAGR,OAAOf,EACX,EAOAR,EAAuB/2F,UAAUi4F,iBAAmB,SAAUO,EAAGvnF,GAC7D,IAAIsmF,EAAap3G,SAASs4G,gBAAgB1B,EAAuB2B,OAAQ,OACzEnB,SAAWoB,eAAe,KAAM,SAAUH,EAAE31F,YAC5C00F,EAAWoB,eAAe,KAAM,QAAS1nF,EAAEpO,YACpC00F,CACX,EASAR,EAAuB/2F,UAAUu4F,qBAAuB,SAAUpzF,EAAGrD,EAAG02F,EAAGvnF,GACvE,IAAI2nF,EAAOz4G,SAASs4G,gBAAgB1B,EAAuB2B,OAAQ,QACnEE,SAAKD,eAAe,KAAM,IAAKxzF,EAAEtC,YACjC+1F,EAAKD,eAAe,KAAM,IAAK72F,EAAEe,YACjC+1F,EAAKD,eAAe,KAAM,SAAUH,EAAE31F,YACtC+1F,EAAKD,eAAe,KAAM,QAAS1nF,EAAEpO,YACrC+1F,EAAKD,eAAe,KAAM,OAAQ,WAC3BC,CACX,EACA7B,EAAuBG,gBAAkB,EAIzCH,EAAuB2B,OAAS,4BAEpC,CApHI3B,GAAJ,ICqBI8B,GAA8B,WAC9B,SAASA,IACT,CAOAA,SAAa74F,UAAU2Q,OAAS,SAAUqmF,EAAU1jF,EAAQ/Q,EAAe5P,EAAgBwf,GACvF,GAAwB,IAApB6kF,EAAS/xG,OACT,MAAM,IAAIsc,GAAyB,wBAEvC,GAAI+R,IAAWmW,GAAcY,QACzB,MAAM,IAAI9oB,GAAyB,oCAAsC+R,GAE7E,GAAI/Q,EAAQ,GAAK5P,EAAS,EACtB,MAAM,IAAI4O,GAAyB,uCAAyCgB,EAAQ,IAAM5P,GAE9F,IAAIksE,EAAuBT,GAAqBJ,EAC5Ci5B,EAAY4B,EAAa3B,gBACf,OAAV/kF,SACI/yB,IAAc+yB,EAAMlzB,IAAIorG,GAAeI,oBACvC5rB,EAAuBT,GAAqBI,WAAWrsD,EAAMlzB,IAAIorG,GAAeI,kBAAkB5nF,kBAElGzjB,IAAc+yB,EAAMlzB,IAAIorG,GAAeS,UACvCmM,EAAYvuF,OAAOvR,SAASgb,EAAMlzB,IAAIorG,GAAeS,QAAQjoF,WAAY,MAGjF,IAAI7G,EAAOi2F,GAAQthF,OAAOqmF,EAAUn4B,EAAsB1sD,GAC1D,OAAO0mF,EAAa1B,aAAan7F,EAAMuG,EAAO5P,EAAQskG,EAC1D,EAGA4B,EAAa1B,aAAe,SAAUn7F,EAAMuG,EAAe5P,EAAgBskG,GACvE,IAAIO,EAAQx7F,EAAK6c,YACjB,GAAc,OAAV2+E,EACA,MAAM,IAAI3mE,GAgBd,QAdI4mE,EAAaD,EAAM71F,WACnB+1F,EAAcF,EAAM51F,YACpB+1F,EAAUF,EAA0B,EAAZR,EACxBW,EAAWF,EAA2B,EAAZT,EAC1BY,EAAczvF,KAAK+B,IAAI5H,EAAOo1F,GAC9BG,GAAe1vF,KAAK+B,IAAIxX,EAAQilG,GAChCroB,GAAWnnE,KAAKgT,IAAIhT,KAAKe,MAAM0uF,EAAcF,GAAUvvF,KAAKe,MAAM2uF,GAAeF,IAKjFG,GAAc3vF,KAAKe,OAAO0uF,EAAeJ,EAAaloB,IAAa,GACnEyoB,GAAa5vF,KAAKe,OAAO2uF,GAAgBJ,EAAcnoB,IAAa,GACpEupB,GAAS,IAAIljF,GAAUiiF,EAAaC,IAC/BI,GAAS,EAAGC,GAAUH,GAAYE,GAASR,EAAaQ,KAAUC,IAAW5oB,GAElF,QAAS6oB,GAAS,EAAGC,GAAUN,GAAaK,GAASX,EAAYW,KAAUC,IAAW9oB,GAChD,IAA9BioB,EAAMv4G,IAAIm5G,GAAQF,KAClBY,GAAOhiF,UAAUuhF,GAASF,GAAS5oB,GAAUA,IAIzD,OAAOupB,EACX,EACAD,EAAa3B,gBAAkB,EACxB2B,CACX,CAjEIA,GAkEJ,MAAAE,GAAeF,IC3DwB,WACnC,SAASG,IACT,CASAA,EAAkBh5F,UAAU2Q,OAAS,SAAUqmF,EAAU1jF,EAAQ/Q,EAAe5P,EAAgBwf,GAE5F,GAAQmB,IAaCmW,GAAcY,QA4Bf,MAAM,IAAI9oB,GAAyB,mCAAqC+R,GAEhF,OA7BiB,IAAIulF,IA6BPloF,OAAOqmF,EAAU1jF,EAAQ/Q,EAAO5P,EAAQwf,EAC1D,CAEJ,CA3DI6mF,GCrBJ,IAAIz5F,EAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,IA4BC,SAAUG,GAEpD,SAASy4F,EAAyBC,EAASC,EAAmBC,EAAoB/2F,EAAcC,EAAaC,EAAe5P,EAAgB0mG,GACxI,IAAI34F,EAAQF,EAAON,KAAKzhB,KAAM8jB,EAAO5P,IAAWlU,KAMhD,GALAiiB,EAAMw4F,QAAUA,EAChBx4F,EAAMy4F,UAAYA,EAClBz4F,EAAM04F,WAAaA,EACnB14F,EAAM2B,KAAOA,EACb3B,EAAM4B,IAAMA,EACRD,EAAOE,EAAQ42F,GAAa72F,EAAM3P,EAASymG,EAC3C,MAAM,IAAI73F,GAAyB,kDAEvC,OAAI83F,GACA34F,EAAM24F,kBAAkB92F,EAAO5P,GAE5B+N,CACX,CAfAnB,EAAU05F,EAA0Bz4F,GAiBpCy4F,EAAyBj5F,UAAU6W,OAAS,SAAU/U,EAAWC,GAC7D,GAAID,EAAI,GAAKA,GAAKrjB,KAAKmjB,YACnB,MAAM,IAAIL,GAAyB,uCAAyCO,GAEhF,IAAIS,EAAQ9jB,KAAKkjB,YACL,MAARI,GAAqCA,EAAI9c,OAASsd,KAClDR,EAAM,IAAIgX,kBAAkBxW,IAEhC,IAAI0I,GAAUnJ,EAAIrjB,KAAK6jB,KAAO7jB,KAAK06G,UAAY16G,KAAK4jB,KACpDgB,UAAOC,UAAU7kB,KAAKy6G,QAASjuF,EAAQlJ,EAAK,EAAGQ,GACxCR,CACX,EAEAk3F,EAAyBj5F,UAAU6Y,UAAY,WAC3C,IAAItW,EAAQ9jB,KAAKkjB,WACbhP,EAASlU,KAAKmjB,YAGlB,GAAIW,IAAU9jB,KAAK06G,WAAaxmG,IAAWlU,KAAK26G,WAC5C,OAAO36G,KAAKy6G,QAEhB,IAAII,EAAO/2F,EAAQ5P,EACfsP,EAAS,IAAI8W,kBAAkBugF,GAC/BC,EAAc96G,KAAK6jB,IAAM7jB,KAAK06G,UAAY16G,KAAK4jB,KAEnD,GAAIE,IAAU9jB,KAAK06G,UACf91F,UAAOC,UAAU7kB,KAAKy6G,QAASK,EAAat3F,EAAQ,EAAGq3F,GAChDr3F,EAGX,QAASH,EAAI,EAAGA,EAAInP,EAAQmP,IAAK,CAC7B,IAAI03F,EAAe13F,EAAIS,EACvBc,GAAOC,UAAU7kB,KAAKy6G,QAASK,EAAat3F,EAAQu3F,EAAcj3F,GAClEg3F,GAAe96G,KAAK06G,SACxB,CACA,OAAOl3F,CACX,EAEAg3F,EAAyBj5F,UAAUkC,gBAAkB,WACjD,OAAO,CACX,EAEA+2F,EAAyBj5F,UAAUoC,KAAO,SAAUC,EAAcC,EAAaC,EAAe5P,GAC1F,OAAO,IAAIsmG,EAAyBx6G,KAAKy6G,QAASz6G,KAAK06G,UAAW16G,KAAK26G,WAAY36G,KAAK4jB,KAAOA,EAAM5jB,KAAK6jB,IAAMA,EAAKC,EAAO5P,GAAQ,EACxI,EACAsmG,EAAyBj5F,UAAUy5F,gBAAkB,WAMjD,QALIl3F,EAAQ9jB,KAAKkjB,WAAas3F,EAAyBS,uBACnD/mG,EAASlU,KAAKmjB,YAAcq3F,EAAyBS,uBACrDC,EAAS,IAAIt0F,WAAW9C,EAAQ5P,GAChCinG,EAAMn7G,KAAKy6G,QACXK,EAAc96G,KAAK6jB,IAAM7jB,KAAK06G,UAAY16G,KAAK4jB,KAC1CP,EAAI,EAAGA,EAAInP,EAAQmP,IAAK,CAE7B,QADI03F,EAAe13F,EAAIS,EACd4C,EAAI,EAAGA,EAAI5C,EAAO4C,IAAK,CAC5B,IAAI00F,EAAgF,IAAzED,EAAIL,EAAcp0F,EAAI8zF,EAAyBS,wBAC1DC,EAAOH,EAAer0F,GAAK,WAAqB,MAAP00F,CAC7C,CACAN,GAAe96G,KAAK06G,UAAYF,EAAyBS,sBAC7D,CACA,OAAOC,CACX,EAIAV,EAAyBj5F,UAAU85F,kBAAoB,WACnD,OAAOr7G,KAAKkjB,WAAas3F,EAAyBS,sBACtD,EAIAT,EAAyBj5F,UAAU+5F,mBAAqB,WACpD,OAAOt7G,KAAKmjB,YAAcq3F,EAAyBS,sBACvD,EACAT,EAAyBj5F,UAAUq5F,kBAAoB,SAAU92F,EAAe5P,GAE5E,QADIumG,EAAUz6G,KAAKy6G,QACVp3F,EAAI,EAAGk4F,EAAWv7G,KAAK6jB,IAAM7jB,KAAK06G,UAAY16G,KAAK4jB,KAAMP,EAAInP,EAAQmP,IAAKk4F,GAAYv7G,KAAK06G,UAEhG,QADI1yD,EAASuzD,EAAWz3F,EAAQ,EACvB06B,EAAK+8D,EAAU78D,EAAK68D,EAAWz3F,EAAQ,EAAG06B,EAAKwJ,EAAQxJ,IAAME,IAAM,CACxE,IAAI3jB,EAAO0/E,EAAQj8D,GACnBi8D,EAAQj8D,GAAMi8D,EAAQ/7D,GACtB+7D,EAAQ/7D,GAAM3jB,CAClB,CAER,EACAy/E,EAAyBj5F,UAAUoc,OAAS,WACxC,OAAO,IAAIH,GAAwBx9B,KACvC,EACAw6G,EAAyBS,uBAAyB,CAEtD,CA3GIT,CA2GFp9E,ICvIF,IAAItc,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,IA0BL,SAAUG,GAE9C,SAASy5F,EAAmB/hF,EAAY3V,EAAe5P,EAAgBwmG,EAAmBC,EAAoB/2F,EAAcC,GACxH,IAAI5B,EAAQF,EAAON,KAAKzhB,KAAM8jB,EAAO5P,IAAWlU,KAKhD,GAJAiiB,EAAMy4F,UAAYA,EAClBz4F,EAAM04F,WAAaA,EACnB14F,EAAM2B,KAAOA,EACb3B,EAAM4B,IAAMA,EACyB,IAAjC4V,EAAWgiF,kBAAyB,CAGpC,QAFIpxF,EAAOvG,EAAQ5P,EACfwnG,GAAuB,IAAIphF,kBAAkBjQ,GACxCmC,GAAS,EAAGA,GAASnC,EAAMmC,KAAU,CAC1C,IAAIwQ,GAAQvD,EAAWjN,IACnBgnB,GAAKxW,IAAS,GAAM,IACpB2+E,GAAM3+E,IAAS,EAAK,IACpB/b,GAAY,IAAR+b,GAER0+E,GAAqBlvF,KAAwBgnB,GAAImoE,GAAK16F,IAAK,EAAK,GACpE,CACAgB,EAAMwX,WAAaiiF,EACvB,MAEIz5F,EAAMwX,WAAaA,EAcvB,QAZI94B,IAAc+5G,IACdz4F,EAAMy4F,UAAY52F,QAElBnjB,IAAcg6G,IACd14F,EAAM04F,WAAazmG,QAEnBvT,IAAcijB,IACd3B,EAAM2B,KAAO,QAEbjjB,IAAckjB,IACd5B,EAAM4B,IAAM,GAEZ5B,EAAM2B,KAAOE,EAAQ7B,EAAMy4F,WAAaz4F,EAAM4B,IAAM3P,EAAS+N,EAAM04F,WACnE,MAAM,IAAI73F,GAAyB,kDAEvC,OAAOb,CACX,CAvCAnB,GAAU06F,EAAoBz5F,GAyC9By5F,EAAmBj6F,UAAU6W,OAAS,SAAU/U,EAAWC,GACvD,GAAID,EAAI,GAAKA,GAAKrjB,KAAKmjB,YACnB,MAAM,IAAIL,GAAyB,uCAAyCO,GAEhF,IAAIS,EAAQ9jB,KAAKkjB,YACL,MAARI,GAAqCA,EAAI9c,OAASsd,KAClDR,EAAM,IAAIgX,kBAAkBxW,IAEhC,IAAI0I,GAAUnJ,EAAIrjB,KAAK6jB,KAAO7jB,KAAK06G,UAAY16G,KAAK4jB,KACpDgB,UAAOC,UAAU7kB,KAAKy5B,WAAYjN,EAAQlJ,EAAK,EAAGQ,GAC3CR,CACX,EAEAk4F,EAAmBj6F,UAAU6Y,UAAY,WACrC,IAAItW,EAAQ9jB,KAAKkjB,WACbhP,EAASlU,KAAKmjB,YAGlB,GAAIW,IAAU9jB,KAAK06G,WAAaxmG,IAAWlU,KAAK26G,WAC5C,OAAO36G,KAAKy5B,WAEhB,IAAIohF,EAAO/2F,EAAQ5P,EACfsP,EAAS,IAAI8W,kBAAkBugF,GAC/BC,EAAc96G,KAAK6jB,IAAM7jB,KAAK06G,UAAY16G,KAAK4jB,KAEnD,GAAIE,IAAU9jB,KAAK06G,UACf91F,UAAOC,UAAU7kB,KAAKy5B,WAAYqhF,EAAat3F,EAAQ,EAAGq3F,GACnDr3F,EAGX,QAASH,EAAI,EAAGA,EAAInP,EAAQmP,IAAK,CAC7B,IAAI03F,EAAe13F,EAAIS,EACvBc,GAAOC,UAAU7kB,KAAKy5B,WAAYqhF,EAAat3F,EAAQu3F,EAAcj3F,GACrEg3F,GAAe96G,KAAK06G,SACxB,CACA,OAAOl3F,CACX,EAEAg4F,EAAmBj6F,UAAUkC,gBAAkB,WAC3C,OAAO,CACX,EAEA+3F,EAAmBj6F,UAAUoC,KAAO,SAAUC,EAAcC,EAAaC,EAAe5P,GACpF,OAAO,IAAIsnG,EAAmBx7G,KAAKy5B,WAAY3V,EAAO5P,EAAQlU,KAAK06G,UAAW16G,KAAK26G,WAAY36G,KAAK4jB,KAAOA,EAAM5jB,KAAK6jB,IAAMA,EAChI,EACA23F,EAAmBj6F,UAAUoc,OAAS,WAClC,OAAO,IAAIH,GAAwBx9B,KACvC,CAEJ,CA3FIw7G,CA2FFp+E,ICpIF,IAAItc,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GAiBzCg6F,GAAyB,SAAU75F,GAEnC,SAAS65F,IACL,OAAkB,OAAX75F,GAAmBA,EAAOa,MAAM5iB,KAAMwa,YAAcxa,IAC/D,CACA47G,OAJA96F,GAAU86F,EAAS75F,GAInB65F,EAAQC,QAAU,SAAUp8G,GACxB,OAAOO,KAAKmxB,yBAAyB1xB,EACzC,EACOm8G,CACX,CATIA,CASF1rF,IACF,MAAA4rF,GAAeF,GCvBf,IAAIG,GAAkC,WAClC,SAASA,IACT,CACAA,SAAiBC,WAAa9rF,GAAgB1B,UACvCutF,CACX,CALIA,GAMJ,MAAAE,GAAeF,GCNf,IAAIG,GAAkC,WAQlC,SAASA,EAAiBnlC,EAAWolC,EAASC,GAC1Cp8G,KAAK+2E,UAAYA,EACjB/2E,KAAKm8G,QAAUA,EACfn8G,KAAKo8G,QAAUA,EACfp8G,KAAKsqB,KAAO,IAAIlC,WAAW+zF,EAAUC,GACrC52F,GAAOC,KAAKzlB,KAAKsqB,KAAM,EAC3B,CACA4xF,SAAiB36F,UAAU86F,WAAa,WACpC,OAAOr8G,KAAKo8G,OAChB,EACAF,EAAiB36F,UAAU+6F,WAAa,WACpC,OAAOt8G,KAAKm8G,OAChB,EACAD,EAAiB36F,UAAU0zB,QAAU,WACjC,OAAOj1C,KAAKsqB,IAChB,EACA4xF,EAAiB36F,UAAUg7F,OAAS,SAAUn4B,EAAK9gE,GAC/C,OAA+C,IAAxCtjB,KAAKsqB,KAAKhH,EAAMtjB,KAAKm8G,QAAU/3B,EAC1C,EACA83B,EAAiB36F,UAAUi7F,OAAS,SAAUp4B,EAAK9gE,EAAKuI,GACpD7rB,KAAKsqB,KAAKhH,EAAMtjB,KAAKm8G,QAAU/3B,GAAOv4D,EAAM,EAAI,CACpD,EACAqwF,EAAiB36F,UAAUk7F,MAAQ,SAAUr4B,EAAK9gE,GAC9C,OAA+C,IAAxCtjB,KAAKsqB,KAAKhH,EAAMtjB,KAAKm8G,QAAU/3B,EAC1C,EACA83B,EAAiB36F,UAAUm7F,MAAQ,WAC/B,IAAI1kF,EAAM,EACN1U,EAAM,EACN8gE,EAAM,EACV,EAAG,CAEK9gE,IAAQtjB,KAAKo8G,SAAmB,IAARh4B,GACxBpkF,KAAK28G,QAAQ3kF,KAEb1U,IAAQtjB,KAAKo8G,QAAU,GAAa,IAARh4B,GAAapkF,KAAKm8G,QAAU,GAAM,GAC9Dn8G,KAAK48G,QAAQ5kF,KAEb1U,IAAQtjB,KAAKo8G,QAAU,GAAa,IAARh4B,GAAapkF,KAAKm8G,QAAU,GAAM,GAC9Dn8G,KAAK68G,QAAQ7kF,KAEb1U,IAAQtjB,KAAKo8G,QAAU,GAAa,IAARh4B,GAAapkF,KAAKm8G,QAAU,GAAM,GAC9Dn8G,KAAK88G,QAAQ9kF,KAGjB,GACQ1U,EAAMtjB,KAAKo8G,SAAWh4B,GAAO,GAAKpkF,KAAKy8G,MAAMr4B,EAAK9gE,IAClDtjB,KAAK+8G,KAAKz5F,EAAK8gE,EAAKpsD,KAExB1U,GAAO,EACP8gE,GAAO,QACF9gE,GAAO,GAAK8gE,EAAMpkF,KAAKm8G,SAChC74F,IACA8gE,GAAO,EAEP,GACQ9gE,GAAO,GAAK8gE,EAAMpkF,KAAKm8G,SAAWn8G,KAAKy8G,MAAMr4B,EAAK9gE,IAClDtjB,KAAK+8G,KAAKz5F,EAAK8gE,EAAKpsD,KAExB1U,GAAO,EACP8gE,GAAO,QACF9gE,EAAMtjB,KAAKo8G,SAAWh4B,GAAO,GACtC9gE,GAAO,EACP8gE,GAEJ,OAAS9gE,EAAMtjB,KAAKo8G,SAAWh4B,EAAMpkF,KAAKm8G,SAEtCn8G,KAAKy8G,MAAMz8G,KAAKm8G,QAAU,EAAGn8G,KAAKo8G,QAAU,KAC5Cp8G,KAAKw8G,OAAOx8G,KAAKm8G,QAAU,EAAGn8G,KAAKo8G,QAAU,GAAG,GAChDp8G,KAAKw8G,OAAOx8G,KAAKm8G,QAAU,EAAGn8G,KAAKo8G,QAAU,GAAG,GAExD,EACAF,EAAiB36F,UAAUy7F,OAAS,SAAU15F,EAAK8gE,EAAKpsD,EAAKnM,GACrDvI,EAAM,IACNA,GAAOtjB,KAAKo8G,QACZh4B,GAAO,GAAMpkF,KAAKo8G,QAAU,GAAK,GAEjCh4B,EAAM,IACNA,GAAOpkF,KAAKm8G,QACZ74F,GAAO,GAAMtjB,KAAKm8G,QAAU,GAAK,GAGrC,IAAI1rF,EAAIzwB,KAAK+2E,UAAU5jD,WAAW6E,GAClCvH,GAAK,GAAM,EAAI5E,EACf7rB,KAAKw8G,OAAOp4B,EAAK9gE,EAAW,IAANmN,EAC1B,EAQAyrF,EAAiB36F,UAAUw7F,KAAO,SAAUz5F,EAAK8gE,EAAKpsD,GAClDh4B,KAAKg9G,OAAO15F,EAAM,EAAG8gE,EAAM,EAAGpsD,EAAK,GACnCh4B,KAAKg9G,OAAO15F,EAAM,EAAG8gE,EAAM,EAAGpsD,EAAK,GACnCh4B,KAAKg9G,OAAO15F,EAAM,EAAG8gE,EAAM,EAAGpsD,EAAK,GACnCh4B,KAAKg9G,OAAO15F,EAAM,EAAG8gE,EAAM,EAAGpsD,EAAK,GACnCh4B,KAAKg9G,OAAO15F,EAAM,EAAG8gE,EAAKpsD,EAAK,GAC/Bh4B,KAAKg9G,OAAO15F,EAAK8gE,EAAM,EAAGpsD,EAAK,GAC/Bh4B,KAAKg9G,OAAO15F,EAAK8gE,EAAM,EAAGpsD,EAAK,GAC/Bh4B,KAAKg9G,OAAO15F,EAAK8gE,EAAKpsD,EAAK,EAC/B,EACAkkF,EAAiB36F,UAAUo7F,QAAU,SAAU3kF,GAC3Ch4B,KAAKg9G,OAAOh9G,KAAKo8G,QAAU,EAAG,EAAGpkF,EAAK,GACtCh4B,KAAKg9G,OAAOh9G,KAAKo8G,QAAU,EAAG,EAAGpkF,EAAK,GACtCh4B,KAAKg9G,OAAOh9G,KAAKo8G,QAAU,EAAG,EAAGpkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,EAC1C,EACAkkF,EAAiB36F,UAAUq7F,QAAU,SAAU5kF,GAC3Ch4B,KAAKg9G,OAAOh9G,KAAKo8G,QAAU,EAAG,EAAGpkF,EAAK,GACtCh4B,KAAKg9G,OAAOh9G,KAAKo8G,QAAU,EAAG,EAAGpkF,EAAK,GACtCh4B,KAAKg9G,OAAOh9G,KAAKo8G,QAAU,EAAG,EAAGpkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,EAC1C,EACAkkF,EAAiB36F,UAAUs7F,QAAU,SAAU7kF,GAC3Ch4B,KAAKg9G,OAAOh9G,KAAKo8G,QAAU,EAAG,EAAGpkF,EAAK,GACtCh4B,KAAKg9G,OAAOh9G,KAAKo8G,QAAU,EAAG,EAAGpkF,EAAK,GACtCh4B,KAAKg9G,OAAOh9G,KAAKo8G,QAAU,EAAG,EAAGpkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,EAC1C,EACAkkF,EAAiB36F,UAAUu7F,QAAU,SAAU9kF,GAC3Ch4B,KAAKg9G,OAAOh9G,KAAKo8G,QAAU,EAAG,EAAGpkF,EAAK,GACtCh4B,KAAKg9G,OAAOh9G,KAAKo8G,QAAU,EAAGp8G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACrDh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,GACtCh4B,KAAKg9G,OAAO,EAAGh9G,KAAKm8G,QAAU,EAAGnkF,EAAK,EAC1C,EACOkkF,CACX,CAvJIA,GAwJJ,MAAAe,GAAef,GC5Jf,IAAIh1F,GAsFOg2F,GAjFAC,GAAc,CACrB,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAKnDC,GAAU,CACjB,CAAC,IAAK,GAAI,GAAI,IAAK,IACnB,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,KAC5B,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5C,CAAC,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,GAAI,GAAI,KAC/C,CAAC,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,KACnD,CAAC,IAAK,GAAI,IAAK,IAAK,GAAI,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,KAC3D,CACI,GAAI,IAAK,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,GACzE,KAEJ,CACI,GAAI,IAAK,IAAK,EAAG,IAAK,GAAI,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,GACxE,IAAK,IAAK,KAEd,CACI,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,IACpE,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,KAEpC,CACI,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,GACxE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,KAErD,CACI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GACrE,IAAK,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,GACtE,IAAK,GAAI,GAAI,KAEjB,CACI,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,IAAK,IAAK,EAAG,IACvE,GAAI,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,IACvE,GAAI,GAAI,IAAK,IAAK,IAAK,EAAG,EAAG,GAEjC,CACI,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GACxE,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IACrE,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,IAE1E,CACI,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IACvE,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,GACvE,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAErC,CACI,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GACxE,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GACzE,IAAK,GAAI,IAAK,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,GAAI,IACrE,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,KAExD,CACI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,IACrE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,IACxE,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IACxE,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GACzE,IAAK,GAAI,MAmBNC,IAAOn2F,GAfD,SAAUm2F,EAAKC,GAE5B,QADIh8F,EAAI,EACCsE,EAAI,EAAGA,EAAI,IAAKA,IACrB03F,EAAK13F,GAAKtE,EACV+7F,EAAI/7F,GAAKsE,GACTtE,GAAK,IACI,MACLA,GARwB,KAWhC,MAAO,CACH+7F,IAAKA,EACLC,KAAMA,EAEd,CACuBC,CAAW,GAAI,IAAKr2F,GAAGm2F,KAAMC,GAAOp2F,GAAGo2F,MAE9D,SAAWJ,GACPA,EAAgBA,EAAgBM,WAAgB,GAAK,aACrDN,EAAgBA,EAAgBO,aAAkB,GAAK,eACvDP,EAAgBA,EAAgBQ,gBAAqB,GAAK,iBAC9D,CAJA,CAIGR,KAAoBA,GAAkB,CAAC,IAInC,IA4DIS,GAAkB,gBAIlBC,GAAkB,gBC1JzBtqB,GAAiC,WACjC,SAASA,IACT,CAQAA,SAAgBuqB,aAAe,SAAU9mC,EAAW+mC,GAChD,GAAI/mC,EAAUvwE,SAAWs3G,EAAWC,kBAChC,MAAM,IAAIl9F,MAAM,8DAEpB,IAAIm9F,EAAK,IAAIxnF,GACbwnF,EAAGlpF,OAAOiiD,GACV,IAAIknC,EAAaH,EAAWI,2BAC5B,GAAmB,IAAfD,EAAkB,CAClB,IAAIE,EAAMn+G,KAAKo+G,eAAernC,EAAW+mC,EAAWO,qBACpDL,EAAGlpF,OAAOqpF,EACd,KACK,CAID,QAFIG,EAAY,GACZC,EAAa,GACR34F,EAAI,EAAGA,EAAIq4F,EAAYr4F,IAC5B04F,EAAU14F,GAAKk4F,EAAWU,iCAAiC54F,EAAI,GAC/D24F,EAAW34F,GAAKk4F,EAAWW,kCAAkC74F,EAAI,GAErE,QAAS84F,EAAQ,EAAGA,EAAQT,EAAYS,IAAS,CAE7C,QADI3jF,EAAO,IAAIvE,GACNxV,GAAI09F,EAAO19F,GAAI88F,EAAWC,kBAAmB/8F,IAAKi9F,EACvDljF,EAAKjG,OAAOiiD,EAAUpgD,OAAO3V,KAE7Bm9F,EAAMn+G,KAAKo+G,eAAerjF,EAAK3W,WAAYm6F,EAAWG,IAE1D,QADI1mF,GAAM,EACDzE,GAAImrF,EAAOnrF,GAAIgrF,EAAWG,GAAST,EAAY1qF,IAAK0qF,EACzDD,EAAGlnF,UAAUgnF,EAAWC,kBAAoBxqF,GAAG4qF,EAAIxnF,OAAOqB,MAElE,CACJ,CACA,OAAOgmF,EAAG55F,UACd,EACAkvE,EAAgB8qB,eAAiB,SAAUrnC,EAAW4nC,GAElD,QADIzoE,GAAQ,EACHtwB,EAAI,EAAGA,EAAIu3F,GAAY32G,OAAQof,IACpC,GAAIu3F,GAAYv3F,KAAO+4F,EAAY,CAC/BzoE,EAAQtwB,EACR,KACJ,CAEJ,GAAIswB,EAAQ,EACR,MAAM,IAAIr1B,MAAM,2DAA6D89F,GAIjF,IAFIlsE,EAAO2qE,GAAQlnE,GACfioE,EAAM,GACV,IAASv4F,EAAI,EAAGA,EAAI+4F,EAAY/4F,IAC5Bu4F,EAAIv4F,GAAK,EAEb,IAASA,EAAI,EAAGA,EAAImxD,EAAUvwE,OAAQof,IAAK,CAEvC,QADI2B,EAAI42F,EAAIQ,EAAa,GAAK5nC,EAAUpgD,OAAO/Q,GAAGuN,WAAW,GACpDrK,EAAI61F,EAAa,EAAG71F,EAAI,EAAGA,IACtB,IAANvB,GAAuB,IAAZkrB,EAAK3pB,GAChBq1F,EAAIr1F,GAAKq1F,EAAIr1F,EAAI,GAAKw0F,IAAMD,GAAI91F,GAAK81F,GAAI5qE,EAAK3pB,KAAO,KAGrDq1F,EAAIr1F,GAAKq1F,EAAIr1F,EAAI,GAGf,IAANvB,GAAuB,IAAZkrB,EAAK,GAChB0rE,EAAI,GAAKb,IAAMD,GAAI91F,GAAK81F,GAAI5qE,EAAK,KAAO,KAGxC0rE,EAAI,GAAK,CAEjB,CAEA,IADIS,EAAc,GAClB,IAASh5F,EAAI,EAAGA,EAAI+4F,EAAY/4F,IAC5Bg5F,EAAYh5F,GAAKu4F,EAAIQ,EAAa/4F,EAAI,GAE1C,OAAOg5F,EAAYn4F,IAAI,SAAUsQ,GAAK,OAAOpV,OAAO+Q,aAAaqE,EAAI,GAAGoiC,KAAK,GACjF,EACOm6B,CACX,CAnFIA,GAoFJ,MAAAurB,GAAevrB,GCtFf,IAAIwrB,GAA8B,WAC9B,SAASA,IACT,CACAA,SAAav9F,UAAUw9F,gBAAkB,WACrC,OF6JsB,CE5J1B,EACAD,EAAav9F,UAAU2Q,OAAS,SAAU8sF,GAGtC,GADQC,GAAiBC,+BAA+BF,EAAQG,aAAcH,EAAQhnF,MAC7E,EACLgnF,EAAQI,cAAcp/G,KAAKq/G,kBAAkBL,EAAQG,aAAahsF,WAAW6rF,EAAQhnF,KAAMgnF,EAAQG,aAAahsF,WAAW6rF,EAAQhnF,IAAM,KACzIgnF,EAAQhnF,KAAO,MAEd,CACD,IAAIjB,EAAIioF,EAAQM,iBACZC,EAAUN,GAAiBO,cAAcR,EAAQG,aAAcH,EAAQhnF,IAAKh4B,KAAK++G,mBACrF,GAAIQ,IAAYv/G,KAAK++G,kBACjB,OAAQQ,GACJ,KFoJY,EEjJR,OAFAP,EAAQI,cFiFF,UEhFNJ,EAAQS,oBFkJA,GEhJZ,KF4IQ,EEzIJ,OAFAT,EAAQI,cFyEN,UExEFJ,EAAQS,oBF0IJ,GExIR,KF0IQ,EEzIJT,EAAQI,cFqGF,KEpGNJ,EAAQS,oBFwIJ,GEvIJ,MACJ,KFqIS,EEpILT,EAAQI,cFqGL,KEpGHJ,EAAQS,oBFmIH,GElIL,MACJ,KFmIY,EElIRT,EAAQI,cFqGF,KEpGNJ,EAAQS,oBFiIA,GEhIR,MACJ,QACI,MAAM,IAAI5+F,MAAM,iBAAmB0+F,QAGtCN,GAAiBS,gBAAgB3oF,IACtCioF,EAAQI,cFyEC,KExETJ,EAAQI,cAAcroF,EAAI,IAAM,GAChCioF,EAAQhnF,QAGRgnF,EAAQI,cAAcroF,EAAI,GAC1BioF,EAAQhnF,MAEhB,CACJ,EACA8mF,EAAav9F,UAAU89F,kBAAoB,SAAUM,EAAQC,GACzD,GAAIX,GAAiB1J,QAAQoK,IAAWV,GAAiB1J,QAAQqK,GAE7D,OAD0B,IAAfD,EAAS,KAAYC,EAAS,IAC5B,IAEjB,MAAM,IAAI/+F,MAAM,eAAiB8+F,EAASC,EAC9C,EACOd,CACX,CA7DIA,GCCAe,GAAgC,WAChC,SAASA,IACT,CACAA,SAAet+F,UAAUw9F,gBAAkB,WACvC,OHiKwB,CGhK5B,EACAc,EAAet+F,UAAU2Q,OAAS,SAAU8sF,GACxC,IAAIpsF,EAAS,IAAI4D,GAEjB,IADA5D,EAAOkC,OAAO,GACPkqF,EAAQc,qBAAqB,CAChC,IAAI/oF,EAAIioF,EAAQM,iBAIhB,GAHA1sF,EAAOkC,OAAOiC,GACdioF,EAAQhnF,MACMinF,GAAiBO,cAAcR,EAAQG,aAAcH,EAAQhnF,IAAKh4B,KAAK++G,qBACrE/+G,KAAK++G,kBAAmB,CAEpCC,EAAQS,oBHgJM,GG/Id,KACJ,CACJ,CACA,IAAIM,EAAYntF,EAAOpsB,SAAW,EAE9Bw5G,EAAchB,EAAQiB,mBAAqBF,EADzB,EAEtBf,EAAQkB,iBAAiBF,GACzB,IAAIG,EAAUnB,EAAQoB,gBAAgBrC,kBAAoBiC,EAAc,EACxE,GAAIhB,EAAQc,qBAAuBK,EAC/B,GAAIJ,GAAa,IACbntF,EAAOkE,UAAU,EAAGzD,GAAY8C,UAAU4pF,QAAU,MAE/CA,GAAa,MAKlB,MAAM,IAAIl/F,MAAM,uCAAyCk/F,GAJzDntF,EAAOkE,UAAU,EAAGzD,GAAY8C,UAAUxM,KAAKe,MAAMq1F,EAAY,KAAO,MACxEntF,EAAOqE,OAAO,EAAG5D,GAAY8C,UAAU4pF,EAAY,KAGe,CAG1E,IAASn6F,EAAI,EAAb,IAAgBmR,EAAInE,EAAOpsB,SAAUof,EAAImR,EAAGnR,IACxCo5F,EAAQI,cAAcp/G,KAAKqgH,kBAAkBztF,EAAO+D,OAAO/Q,GAAGuN,WAAW,GAAI6rF,EAAQiB,mBAAqB,GAElH,EACAJ,EAAet+F,UAAU8+F,kBAAoB,SAAUtqF,EAAIglD,GACvD,IACIM,EAAetlD,GADE,IAAMglD,EAAoB,IAAO,GAEtD,OAAIM,GAAgB,IACTA,EAGAA,EAAe,GAE9B,EACOwkC,CACX,CApDIA,GCDAS,GAA4B,WAC5B,SAASA,IACT,CACAA,SAAW/+F,UAAUw9F,gBAAkB,WACnC,OJ8JoB,CI7JxB,EACAuB,EAAW/+F,UAAUg/F,cAAgB,SAAUvB,GAK3C,QAJIpsF,EAAS,IAAI4D,GACbgqF,EAAe,EACfC,EAAyBzB,EAAQhnF,IACjC0oF,EAAwB,EACrB1B,EAAQc,qBAAqB,CAChC,IAAI/oF,EAAIioF,EAAQM,iBAChBN,EAAQhnF,MACRwoF,EAAexgH,KAAK2gH,WAAW5pF,EAAGnE,GAC9BA,EAAOpsB,SAAW,GAAM,IACxBi6G,EAAyBzB,EAAQhnF,IACjC0oF,EAAwB9tF,EAAOpsB,SAEvC,CACA,GAAIk6G,IAA0B9tF,EAAOpsB,SAAU,CAC3C,IAAIo6G,EAAYj3F,KAAKe,MAAOkI,EAAOpsB,SAAW,EAAK,GAC/Cq6G,EAAmBl3F,KAAKe,MAAMs0F,EAAQiB,mBAAqBW,EAAY,GAC3E5B,EAAQkB,iBAAiBW,GACzB,IAAIpoC,EAAYumC,EAAQoB,gBAAgBrC,kBAAoB8C,EACxDC,EAAOn3F,KAAKe,MAAMkI,EAAOpsB,SAAW,IAC1B,IAATs6G,GAA4B,IAAdroC,GACL,IAATqoC,IAAeN,EAAe,GAAmB,IAAd/nC,MAEpCumC,EAAQhnF,IAAMyoF,EAEtB,CACI7tF,EAAOpsB,SAAW,GAClBw4G,EAAQI,cJ+DM,KI7DlBp/G,KAAK+gH,UAAU/B,EAASpsF,EAC5B,EACA0tF,EAAW/+F,UAAU2Q,OAAS,SAAU8sF,GAGpC,QADIpsF,EAAS,IAAI4D,GACVwoF,EAAQc,qBAAqB,CAChC,IAAI/oF,EAAIioF,EAAQM,iBAChBN,EAAQhnF,MACR,IAAIwoF,EAAexgH,KAAK2gH,WAAW5pF,EAAGnE,GAClCguF,EAA8C,EAAlCj3F,KAAKe,MAAMkI,EAAOpsB,SAAW,GACzCq6G,EAAmB7B,EAAQiB,mBAAqBW,EACpD5B,EAAQkB,iBAAiBW,GACzB,IAAIpoC,EAAYumC,EAAQoB,gBAAgBrC,kBAAoB8C,EAC5D,IAAK7B,EAAQc,oBAAqB,CAE9B,IAAIkB,EAAU,IAAIxqF,GAIlB,IAHI5D,EAAOpsB,SAAW,GAAM,GAAmB,IAAdiyE,IAC7B+nC,EAAexgH,KAAKihH,sBAAsBjC,EAASpsF,EAAQouF,EAASR,IAEjE5tF,EAAOpsB,SAAW,GAAM,IAC1Bg6G,EAAe,GAAmB,IAAd/nC,IACrB+nC,EAAexgH,KAAKihH,sBAAsBjC,EAASpsF,EAAQouF,EAASR,GAExE,KACJ,CAEA,GADY5tF,EAAOpsB,SACP,GAAM,EAEd,GADcy4G,GAAiBO,cAAcR,EAAQG,aAAcH,EAAQhnF,IAAKh4B,KAAK++G,qBACrE/+G,KAAK++G,kBAAmB,CAEpCC,EAAQS,oBJgGE,GI/FV,KACJ,CAER,CACAz/G,KAAK+gH,UAAU/B,EAASpsF,EAC5B,EACA0tF,EAAW/+F,UAAU0/F,sBAAwB,SAAUjC,EAASpsF,EAAQouF,EAASR,GAC7E,IAAIvnE,EAAQrmB,EAAOpsB,SACf8yD,EAAO1mC,EAAOxO,WAAWyS,UAAU,EAAGoiB,EAAQunE,GAClD5tF,EAAOoE,kBACPpE,EAAOkC,OAAOwkC,GAKd0lD,EAAQhnF,MACR,IAAIjB,EAAIioF,EAAQM,iBAChBkB,SAAexgH,KAAK2gH,WAAW5pF,EAAGiqF,GAClChC,EAAQkC,kBACDV,CACX,EACAF,EAAW/+F,UAAU4/F,iBAAmB,SAAUnC,EAASpsF,GACvDosF,EAAQoC,eAAephH,KAAKqhH,kBAAkBzuF,EAAOxO,aACrD,IAAIk1C,EAAO1mC,EAAOxO,WAAWyS,UAAU,GACvCjE,EAAOoE,kBACPpE,EAAOkC,OAAOwkC,EAKlB,EAOAgnD,EAAW/+F,UAAUw/F,UAAY,SAAU/B,EAASpsF,GAChD,IAAIguF,EAAYj3F,KAAKe,MAAOkI,EAAOpsB,SAAW,EAAK,GAC/Cs6G,EAAOluF,EAAOpsB,SAAW,EACzBq6G,EAAmB7B,EAAQiB,mBAAqBW,EACpD5B,EAAQkB,iBAAiBW,GACzB,IAAIpoC,EAAYumC,EAAQoB,gBAAgBrC,kBAAoB8C,EAC5D,GAAa,IAATC,EAAY,CAEZ,IADAluF,EAAOkC,OAAO,MACPlC,EAAOpsB,UAAY,GACtBxG,KAAKmhH,iBAAiBnC,EAASpsF,GAE/BosF,EAAQc,qBACRd,EAAQI,cJ6BC,II3BjB,SACuB,IAAd3mC,GAA4B,IAATqoC,EAAY,CACpC,KAAOluF,EAAOpsB,UAAY,GACtBxG,KAAKmhH,iBAAiBnC,EAASpsF,GAE/BosF,EAAQc,qBACRd,EAAQI,cJqBC,KIlBbJ,EAAQhnF,KACZ,SACkB,IAAT8oF,EASL,MAAM,IAAIjgG,MAAM,mCARhB,KAAO+R,EAAOpsB,UAAY,GACtBxG,KAAKmhH,iBAAiBnC,EAASpsF,IAE/B6lD,EAAY,GAAKumC,EAAQc,sBACzBd,EAAQI,cJWC,IIPoC,CAErDJ,EAAQS,oBJsBc,EIrB1B,EACAa,EAAW/+F,UAAUo/F,WAAa,SAAU5pF,EAAGinF,GAC3C,GAAU,KAANjnF,EACAinF,SAAGlpF,OAAO,GACH,EAEX,GAAIiC,GAAK,IAAqBA,GAAK,GAC/BinF,SAAGlpF,OAAOiC,EAAI,GAAK,GACZ,EAEX,GAAIA,GAAK,IAAqBA,GAAK,GAC/BinF,SAAGlpF,OAAOiC,EAAI,GAAK,IACZ,EAEX,GAAIA,EAAI,GACJinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAOiC,GACH,EAEX,GAAIA,GAAK,GACLinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAOiC,EAAI,IACP,EAEX,GAAIA,GAAK,GACLinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAOiC,EAAI,GAAK,IACZ,EAEX,GAAIA,GAAK,GACLinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAOiC,EAAI,GAAK,IACZ,EAEX,GAAIA,GAAK,IACLinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAOiC,EAAI,IACP,EAEXinF,EAAGlpF,OAAO,SACV,IAAIjP,EAAM,EACVA,UAAO7lB,KAAK2gH,WAAW5pF,EAAI,IAAKinF,EAEpC,EACAsC,EAAW/+F,UAAU8/F,kBAAoB,SAAUrD,GAC/C,IAAIvtF,EAAI,KAAOutF,EAAG7qF,WAAW,GAAK,GAAK6qF,EAAG7qF,WAAW,GAAK6qF,EAAG7qF,WAAW,GAAK,EACzEmuF,EAAM7wF,EAAI,IACV8wF,EAAM9wF,EAAI,IACVxpB,EAAS,IAAIuvB,GACjBvvB,SAAO6tB,OAAOwsF,GACdr6G,EAAO6tB,OAAOysF,GACPt6G,EAAOmd,UAClB,EACOk8F,CACX,CAlMIA,GCCAkB,GAAgC,WAChC,SAASA,IACT,CACAA,SAAejgG,UAAUw9F,gBAAkB,WACvC,OLgKwB,CK/J5B,EACAyC,EAAejgG,UAAU2Q,OAAS,SAAU8sF,GAGxC,QADIpsF,EAAS,IAAI4D,GACVwoF,EAAQc,qBAAqB,CAChC,IAAI/oF,EAAIioF,EAAQM,iBAIhB,GAHAt/G,KAAK2gH,WAAW5pF,EAAGnE,GACnBosF,EAAQhnF,MACIpF,EAAOpsB,UACN,EAAG,CACZw4G,EAAQoC,eAAephH,KAAKqhH,kBAAkBzuF,EAAOxO,aACrD,IAAIq9F,EAAS7uF,EAAOxO,WAAWyS,UAAU,GAQzC,GAPAjE,EAAOoE,kBACPpE,EAAOkC,OAAO2sF,GAKAxC,GAAiBO,cAAcR,EAAQG,aAAcH,EAAQhnF,IAAKh4B,KAAK++G,qBACrE/+G,KAAK++G,kBAAmB,CAEpCC,EAAQS,oBLsIE,GKrIV,KACJ,CACJ,CACJ,CACA7sF,EAAOkC,OAAOzB,GAAY8C,UAAU,KACpCn2B,KAAK+gH,UAAU/B,EAASpsF,EAC5B,EAOA4uF,EAAejgG,UAAUw/F,UAAY,SAAU/B,EAASpsF,GACpD,IACI,IAAIqmB,EAAQrmB,EAAOpsB,SACnB,GAAc,IAAVyyC,EACA,OAEJ,GAAc,IAAVA,EAAa,CAEb+lE,EAAQkB,mBACR,IAAIznC,EAAYumC,EAAQoB,gBAAgBrC,kBACpCiB,EAAQiB,mBACRxhD,EAAYugD,EAAQ0C,yBAQxB,GANIjjD,EAAYga,IACZumC,EAAQkB,iBAAiBlB,EAAQiB,mBAAqB,GACtDxnC,EACIumC,EAAQoB,gBAAgBrC,kBACpBiB,EAAQiB,oBAEhBxhD,GAAaga,GAAaA,GAAa,EACvC,MAER,CACA,GAAIx/B,EAAQ,EACR,MAAM,IAAIp4B,MAAM,2BAEpB,IAAI8gG,EAAY1oE,EAAQ,EACpB2V,EAAU5uD,KAAKqhH,kBAAkBzuF,EAAOxO,YAExCw9F,GADsB5C,EAAQc,qBACM6B,GAAa,EACrD,GAAIA,GAAa,EACb3C,EAAQkB,iBAAiBlB,EAAQiB,mBAAqB0B,IAClDlpC,EAAYumC,EAAQoB,gBAAgBrC,kBACpCiB,EAAQiB,qBACK,IACb2B,GAAc,EACd5C,EAAQkB,iBAAiBlB,EAAQiB,mBAAqBrxD,EAAQpoD,SAIlEo7G,GACA5C,EAAQkC,kBACRlC,EAAQhnF,KAAO2pF,GAGf3C,EAAQoC,eAAexyD,EAE/B,SAEIowD,EAAQS,oBLuEU,EKtEtB,CACJ,EACA+B,EAAejgG,UAAUo/F,WAAa,SAAU5pF,EAAGinF,GAC3CjnF,GAAK,IAAqBA,GAAK,GAC/BinF,EAAGlpF,OAAOiC,GAELA,GAAK,IAAqBA,GAAK,GACpCinF,EAAGlpF,OAAOzB,GAAY8C,UAAUY,EAAI,KAGpCkoF,GAAiB4C,iBAAiBxuF,GAAY8C,UAAUY,GAEhE,EACAyqF,EAAejgG,UAAU8/F,kBAAoB,SAAUrD,GACnD,IAAIn4F,EAAMm4F,EAAGx3G,OACb,GAAY,IAARqf,EACA,MAAM,IAAIhF,MAAM,mCAEpB,IAII4P,GAJKutF,EAAGrnF,OAAO,GAAGxD,WAAW,IAIlB,MAHNtN,GAAO,EAAIm4F,EAAGrnF,OAAO,GAAGxD,WAAW,GAAK,IAGrB,MAFnBtN,GAAO,EAAIm4F,EAAGrnF,OAAO,GAAGxD,WAAW,GAAK,IAER,IADhCtN,GAAO,EAAIm4F,EAAGrnF,OAAO,GAAGxD,WAAW,GAAK,GAE7CmuF,EAAO7wF,GAAK,GAAM,IAClB8wF,EAAO9wF,GAAK,EAAK,IACjBqxF,EAAU,IAAJrxF,EACNunB,GAAM,IAAIxhB,GACdwhB,UAAIljB,OAAOwsF,GACPz7F,GAAO,GACPmyB,GAAIljB,OAAOysF,GAEX17F,GAAO,GACPmyB,GAAIljB,OAAOgtF,GAER9pE,GAAI5zB,UACf,EACOo9F,CACX,CA/HIA,GCJA1gG,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GA2BzCmgG,GAA4B,WAC5B,SAASA,EAAWC,EAAaC,EAAcC,EAAgBjjC,EAAaC,EAAcijC,EAAaC,EAAaC,QAC5F,IAAhBD,IAA0BA,EAAc,QACvB,IAAjBC,IAA2BA,EAAe,GAC9CriH,KAAKgiH,YAAcA,EACnBhiH,KAAKiiH,aAAeA,EACpBjiH,KAAKkiH,eAAiBA,EACtBliH,KAAKi/E,YAAcA,EACnBj/E,KAAKk/E,aAAeA,EACpBl/E,KAAKmiH,YAAcA,EACnBniH,KAAKoiH,YAAcA,EACnBpiH,KAAKqiH,aAAeA,CACxB,CACAN,SAAWO,OAAS,SAAUpvC,EAAeqvC,EAAOC,EAASnmE,EAASomE,GAClE,IAAIx7F,EAAKC,OACK,IAAVq7F,IAAoBA,EAAQ,QAChB,IAAZC,IAAsBA,EAAU,WACpB,IAAZnmE,IAAsBA,EAAU,WACvB,IAATomE,IAAmBA,GAAO,GAC9B,IACI,QAASC,EAlCqB,SAASt7F,GAC/C,IAAIxhB,EAAsB,mBAAXyhB,QAAyBA,OAAOC,SAAUC,EAAI3hB,GAAKwhB,EAAExhB,GAAIggB,EAAI,EAC5E,GAAI2B,EAAG,OAAOA,EAAE9F,KAAK2F,GACrB,GAAIA,GAAyB,iBAAbA,EAAE5gB,OAAqB,MAAO,CAC1CnH,KAAM,WACF,OAAI+nB,GAAKxB,GAAKwB,EAAE5gB,SAAQ4gB,OAAI,GACrB,CAAEpjB,MAAOojB,GAAKA,EAAExB,KAAM4B,MAAOJ,EACxC,GAEJ,MAAM,IAAI1F,UAAU9b,EAAI,0BAA4B,kCACxD,CAwBsC6hB,CAASk7F,IAAeC,EAAmBF,EAAerjH,QAASujH,EAAiBp7F,KAAMo7F,EAAmBF,EAAerjH,OAAQ,CAC1J,IAAI2wF,EAAS4yB,EAAiB5+G,MAC9B,IAAc,IAAVu+G,IAAkCvyB,EAAOgyB,eAG/B,IAAVO,GAAsCvyB,EAAOgyB,eAGlC,MAAXQ,KACCxyB,EAAO6yB,iBAAmBL,EAAQt/F,YAC/B8sE,EAAO8yB,kBAAoBN,EAAQr/F,gBAG5B,MAAXk5B,KACC2zC,EAAO6yB,iBAAmBxmE,EAAQn5B,YAC/B8sE,EAAO8yB,kBAAoBzmE,EAAQl5B,eAGvC+vD,GAAiB8c,EAAOiyB,aACxB,OAAOjyB,CAEf,CACJ,OACOroE,IAASV,EAAM,CAAEvf,MAAOigB,GAAS,SAEpC,IACQi7F,IAAqBA,EAAiBp7F,OAASN,EAAKw7F,EAAe96F,SAASV,EAAGzF,KAAKihG,EAC5F,SACU,GAAIz7F,EAAK,MAAMA,EAAIvf,KAAO,CACxC,CACA,GAAI+6G,EACA,MAAM,IAAI5hG,MAAM,6EACZqyD,GAER,OAAO,IACX,EACA6uC,EAAWxgG,UAAUwhG,yBAA2B,WAC5C,OAAQ/iH,KAAKmiH,aACT,KAAK,EACD,OAAO,EACX,KAAK,EACL,KAAK,EACD,OAAO,EACX,KAAK,GACD,OAAO,EACX,KAAK,GACD,OAAO,EACX,QACI,MAAM,IAAIthG,MAAM,6CAE5B,EACAkhG,EAAWxgG,UAAUyhG,uBAAyB,WAC1C,OAAQhjH,KAAKmiH,aACT,KAAK,EACL,KAAK,EACD,OAAO,EACX,KAAK,EACD,OAAO,EACX,KAAK,GACD,OAAO,EACX,KAAK,GACD,OAAO,EACX,QACI,MAAM,IAAIthG,MAAM,6CAE5B,EACAkhG,EAAWxgG,UAAU0hG,mBAAqB,WACtC,OAAOjjH,KAAK+iH,2BAA6B/iH,KAAKi/E,WAClD,EACA8iC,EAAWxgG,UAAU2hG,oBAAsB,WACvC,OAAOljH,KAAKgjH,yBAA2BhjH,KAAKk/E,YAChD,EACA6iC,EAAWxgG,UAAUshG,eAAiB,WAClC,OAAO7iH,KAAKijH,qBAAyD,EAAlCjjH,KAAK+iH,0BAC5C,EACAhB,EAAWxgG,UAAUuhG,gBAAkB,WACnC,OAAO9iH,KAAKkjH,sBAAwD,EAAhCljH,KAAKgjH,wBAC7C,EACAjB,EAAWxgG,UAAU0+F,iBAAmB,WACpC,OAAOjgH,KAAKiiH,aAAejiH,KAAKkiH,cACpC,EACAH,EAAWxgG,UAAU28F,yBAA2B,WAC5C,OAAKl+G,KAAKoiH,YAEHpiH,KAAKiiH,aAAejiH,KAAKoiH,YADrB,CAEf,EACAL,EAAWxgG,UAAUw8F,gBAAkB,WACnC,OAAO/9G,KAAKiiH,YAChB,EACAF,EAAWxgG,UAAU88F,kBAAoB,WACrC,OAAOr+G,KAAKkiH,cAChB,EACAH,EAAWxgG,UAAUi9F,iCAAmC,SAAUl5F,GAC9D,OAAOtlB,KAAKoiH,WAChB,EACAL,EAAWxgG,UAAUk9F,kCAAoC,SAAUn5F,GAC/D,OAAOtlB,KAAKqiH,YAChB,EACON,CACX,CAvHIA,GAwHJ,MAAAoB,GAAepB,GACf,IAAIqB,GAAyC,SAAUrhG,GAEnD,SAASqhG,IACL,OAAOrhG,EAAON,KAAKzhB,MAAM,EAAO,KAAM,IAAK,GAAI,GAAI,IAAI,EAAI,KAAOA,IACtE,CACAojH,OAJAtiG,GAAUsiG,EAAyBrhG,GAInCqhG,EAAwB7hG,UAAU28F,yBAA2B,WACzD,OAAO,EACX,EACAkF,EAAwB7hG,UAAUi9F,iCAAmC,SAAUl5F,GAC3E,OAAOA,GAAS,EAAI,IAAM,GAC9B,EACO89F,CACX,CAZIA,CAYFrB,IACSY,GAAe,CACtB,IAAIZ,IAAW,EAAO,EAAG,EAAG,EAAG,EAAG,GAClC,IAAIA,IAAW,EAAO,EAAG,EAAG,GAAI,GAAI,GAC3B,IAAIA,IAAW,EAAM,EAAG,EAAG,GAAI,EAAG,GAC3C,IAAIA,IAAW,EAAO,EAAG,GAAI,GAAI,GAAI,GAC5B,IAAIA,IAAW,EAAM,GAAI,GAAI,GAAI,EAAG,GAC7C,IAAIA,IAAW,EAAO,GAAI,GAAI,GAAI,GAAI,GAC7B,IAAIA,IAAW,EAAM,GAAI,GAAI,GAAI,GAAI,GAC9C,IAAIA,IAAW,EAAO,GAAI,GAAI,GAAI,GAAI,GACtC,IAAIA,IAAW,EAAO,GAAI,GAAI,GAAI,GAAI,GAC7B,IAAIA,IAAW,EAAM,GAAI,GAAI,GAAI,GAAI,GAC9C,IAAIA,IAAW,EAAO,GAAI,GAAI,GAAI,GAAI,GAC7B,IAAIA,IAAW,EAAM,GAAI,GAAI,GAAI,GAAI,GAC9C,IAAIA,IAAW,EAAO,GAAI,GAAI,GAAI,GAAI,GACtC,IAAIA,IAAW,EAAO,GAAI,GAAI,GAAI,GAAI,GAC7B,IAAIA,IAAW,EAAM,GAAI,GAAI,GAAI,GAAI,GAC9C,IAAIA,IAAW,EAAO,GAAI,GAAI,GAAI,GAAI,GACtC,IAAIA,IAAW,EAAO,GAAI,GAAI,GAAI,GAAI,GACtC,IAAIA,IAAW,EAAO,IAAK,GAAI,GAAI,GAAI,GACvC,IAAIA,IAAW,EAAO,IAAK,GAAI,GAAI,GAAI,GACvC,IAAIA,IAAW,EAAO,IAAK,GAAI,GAAI,GAAI,GACvC,IAAIA,IAAW,EAAO,IAAK,GAAI,GAAI,GAAI,EAAG,IAAK,IAC/C,IAAIA,IAAW,EAAO,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IACjD,IAAIA,IAAW,EAAO,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,IAChD,IAAIA,IAAW,EAAO,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IACjD,IAAIA,IAAW,EAAO,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IACjD,IAAIA,IAAW,EAAO,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IACjD,IAAIA,IAAW,EAAO,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IACjD,IAAIA,IAAW,EAAO,KAAM,IAAK,GAAI,GAAI,GAAI,IAAK,IAClD,IAAIA,IAAW,EAAO,KAAM,IAAK,GAAI,GAAI,GAAI,IAAK,IAClD,IAAIqB,IC7LJC,GAAgC,WAChC,SAASA,EAAeC,GACpBtjH,KAAKsjH,IAAMA,EACXtjH,KAAKg4B,IAAM,EACXh4B,KAAKujH,UAAY,EAIjB,QAFIC,EAAYF,EAAIrwF,MAAM,IAAIxM,IAAI,SAAUsQ,GAAK,OAAOA,EAAE5D,WAAW,EAAI,GACrE6qF,EAAK,IAAIxnF,GACJ5Q,EAAI,EAAGmR,EAAIysF,EAAUh9G,OAAQof,EAAImR,EAAGnR,IAAK,CAC9C,IAAImQ,EAAKpU,OAAO+Q,aAA4B,IAAf8wF,EAAU59F,IACvC,GAAW,MAAPmQ,GAAgC,MAAlButF,EAAI3sF,OAAO/Q,GACzB,MAAM,IAAI/E,MAAM,4DAEpBm9F,EAAGlpF,OAAOiB,EACd,CACA/1B,KAAKsjH,IAAMtF,EAAG55F,WACdpkB,KAAKuiH,MAAQ,EACbviH,KAAK+2E,UAAY,IAAIvgD,GACrBx2B,KAAKyjH,aAAc,CACvB,CACAJ,SAAe9hG,UAAUmiG,eAAiB,SAAUnB,GAChDviH,KAAKuiH,MAAQA,CACjB,EACAc,EAAe9hG,UAAUoiG,mBAAqB,SAAUnB,EAASnmE,GAC7Dr8C,KAAKwiH,QAAUA,EACfxiH,KAAKq8C,QAAUA,CACnB,EACAgnE,EAAe9hG,UAAU49F,WAAa,WAClC,OAAOn/G,KAAKsjH,GAChB,EACAD,EAAe9hG,UAAUqiG,aAAe,SAAU3qE,GAC9Cj5C,KAAKujH,UAAYtqE,CACrB,EACAoqE,EAAe9hG,UAAU+9F,eAAiB,WACtC,OAAOt/G,KAAKsjH,IAAInwF,WAAWnzB,KAAKg4B,IACpC,EACAqrF,EAAe9hG,UAAUsiG,WAAa,WAClC,OAAO7jH,KAAKsjH,IAAInwF,WAAWnzB,KAAKg4B,IACpC,EACAqrF,EAAe9hG,UAAU22D,aAAe,WACpC,OAAOl4E,KAAK+2E,SAChB,EACAssC,EAAe9hG,UAAU6/F,eAAiB,SAAUrqC,GAChD/2E,KAAK+2E,UAAUjiD,OAAOiiD,EAC1B,EACAssC,EAAe9hG,UAAU69F,cAAgB,SAAUpoB,GAC/Ch3F,KAAK+2E,UAAUjiD,OAAOkiE,EAC1B,EACAqsB,EAAe9hG,UAAU0+F,iBAAmB,WACxC,OAAOjgH,KAAK+2E,UAAUvwE,QAC1B,EACA68G,EAAe9hG,UAAUuiG,eAAiB,WACtC,OAAO9jH,KAAKyjH,WAChB,EACAJ,EAAe9hG,UAAUk+F,oBAAsB,SAAU9tF,GACrD3xB,KAAKyjH,YAAc9xF,CACvB,EACA0xF,EAAe9hG,UAAUwiG,mBAAqB,WAC1C/jH,KAAKyjH,aAAc,CACvB,EACAJ,EAAe9hG,UAAUu+F,kBAAoB,WACzC,OAAO9/G,KAAKg4B,IAAMh4B,KAAKgkH,0BAC3B,EACAX,EAAe9hG,UAAUyiG,yBAA2B,WAChD,OAAOhkH,KAAKsjH,IAAI98G,OAASxG,KAAKujH,SAClC,EACAF,EAAe9hG,UAAUmgG,uBAAyB,WAC9C,OAAO1hH,KAAKgkH,2BAA6BhkH,KAAKg4B,GAClD,EACAqrF,EAAe9hG,UAAU6+F,cAAgB,WACrC,OAAOpgH,KAAK89G,UAChB,EACAuF,EAAe9hG,UAAU2+F,iBAAmB,SAAUr6F,QACtC,IAARA,IAAkBA,EAAM7lB,KAAKigH,qBACV,MAAnBjgH,KAAK89G,YAAsBj4F,EAAM7lB,KAAK89G,WAAWC,qBACjD/9G,KAAK89G,WAAaiE,GAAWO,OAAOz8F,EAAK7lB,KAAKuiH,MAAOviH,KAAKwiH,QAASxiH,KAAKq8C,SAAS,GAEzF,EACAgnE,EAAe9hG,UAAU2/F,gBAAkB,WACvClhH,KAAK89G,WAAa,IACtB,EACOuF,CACX,CAlFIA,GCFAviG,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GAkBzCqiG,GAA4B,SAAUliG,GAEtC,SAASkiG,IACL,OAAkB,OAAXliG,GAAmBA,EAAOa,MAAM5iB,KAAMwa,YAAcxa,IAC/D,CACAikH,OAJAnjG,GAAUmjG,EAAYliG,GAItBkiG,EAAW1iG,UAAUw9F,gBAAkB,WACnC,OR+IoB,CQ9IxB,EACAkF,EAAW1iG,UAAU2Q,OAAS,SAAU8sF,GAGpC,QADIpsF,EAAS,IAAI4D,GACVwoF,EAAQc,qBAAqB,CAChC,IAAI/oF,EAAIioF,EAAQM,iBAIhB,GAHAN,EAAQhnF,MACRh4B,KAAK2gH,WAAW5pF,EAAGnE,GACPA,EAAOpsB,SACP,GAAM,EAGd,GAFAxG,KAAKmhH,iBAAiBnC,EAASpsF,GACjBqsF,GAAiBO,cAAcR,EAAQG,aAAcH,EAAQhnF,IAAKh4B,KAAK++G,qBACrE/+G,KAAK++G,kBAAmB,CAEpCC,EAAQS,oBR6HE,GQ5HV,KACJ,CAER,CACAz/G,KAAK+gH,UAAU/B,EAASpsF,EAC5B,EACAqxF,EAAW1iG,UAAUo/F,WAAa,SAAU5pF,EAAGinF,GAC3C,OAAQjnF,GACJ,KAAK,GACDinF,EAAGlpF,OAAO,GACV,MACJ,KAAK,GACDkpF,EAAGlpF,OAAO,GACV,MACJ,KAAK,GACDkpF,EAAGlpF,OAAO,GACV,MACJ,KAAK,GACDkpF,EAAGlpF,OAAO,GACV,MACJ,QACQiC,GAAK,IAAqBA,GAAK,GAC/BinF,EAAGlpF,OAAOiC,EAAI,GAAK,GAEdA,GAAK,IAAqBA,GAAK,GACpCinF,EAAGlpF,OAAOiC,EAAI,GAAK,IAGnBkoF,GAAiB4C,iBAAiBxuF,GAAY8C,UAAUY,IAIpE,OAAO,CACX,EACAktF,EAAW1iG,UAAUw/F,UAAY,SAAU/B,EAASpsF,GAChDosF,EAAQkB,mBACR,IAAIznC,EAAYumC,EAAQoB,gBAAgBrC,kBAAoBiB,EAAQiB,mBAChEhnE,EAAQrmB,EAAOpsB,SACnBw4G,EAAQhnF,KAAOihB,GACX+lE,EAAQ0C,yBAA2B,GACnCjpC,EAAY,GACZumC,EAAQ0C,2BAA6BjpC,IACrCumC,EAAQI,cRqEK,KQnEbJ,EAAQ8E,iBAAmB,GAC3B9E,EAAQS,oBR+EU,EQ7E1B,EACOwE,CACX,CAvEIA,CAuEF3D,ICzFEx/F,GAAyC,WACzC,IAAIwB,EAAgB,SAAUtB,EAAGC,GAC7BqB,SAAgBpB,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,QAASK,KAAKL,EAAOA,EAAEO,eAAeF,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,GACxDN,EAAGC,EAC5B,EACA,OAAO,SAAUD,EAAGC,GAEhB,SAASW,IAAO5hB,KAAKL,YAAcqhB,CAAG,CADtCsB,EAActB,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOW,OAAOZ,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,CACJ,CAZ6C,GAezCwQ,GAA6B,SAAUrQ,GAEvC,SAASqQ,IACL,OAAkB,OAAXrQ,GAAmBA,EAAOa,MAAM5iB,KAAMwa,YAAcxa,IAC/D,CACAoyB,OAJAtR,GAAUsR,EAAarQ,GAIvBqQ,EAAY7Q,UAAUw9F,gBAAkB,WACpC,OTiJqB,CShJzB,EACA3sF,EAAY7Q,UAAUo/F,WAAa,SAAU5pF,EAAGinF,GAC5C,GAAU,KAANjnF,EACAinF,SAAGlpF,OAAO,GACH,EAEX,GAAIiC,GAAK,IAAqBA,GAAK,GAC/BinF,SAAGlpF,OAAOiC,EAAI,GAAK,GACZ,EAEX,GAAIA,GAAK,IAAqBA,GAAK,IAC/BinF,SAAGlpF,OAAOiC,EAAI,GAAK,IACZ,EAEX,GAAIA,EAAI,GACJinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAOiC,GACH,EAEX,GAAIA,GAAK,GACLinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAOiC,EAAI,IACP,EAEX,GAAIA,GAAK,GACLinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAOiC,EAAI,GAAK,IACZ,EAEX,GAAIA,GAAK,IAAqBA,GAAK,GAC/BinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAOiC,EAAI,GAAK,IACZ,EAEX,GAAU,KAANA,EACAinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAO,GACH,EAEX,GAAIiC,GAAK,GACLinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAOiC,EAAI,GAAK,GACZ,EAEX,GAAIA,GAAK,IACLinF,SAAGlpF,OAAO,GACVkpF,EAAGlpF,OAAOiC,EAAI,IAAM,IACb,EAEXinF,EAAGlpF,OAAO,SACV,IAAIjP,EAAM,EACVA,UAAO7lB,KAAK2gH,WAAW5pF,EAAI,IAAKinF,EAEpC,EACO5rF,CACX,CA9DIA,CA8DFkuF,ICzDErB,GAAkC,WAClC,SAASA,IACT,CACAA,SAAiBiF,kBAAoB,SAAUnpC,GAC3C,IACIM,EVsEK,KUvEY,IAAMN,EAAoB,IAAO,GAEtD,OAAOM,GAAgB,IAAMA,EAAeA,EAAe,GAC/D,EAaA4jC,EAAiBkF,gBAAkB,SAAUb,EAAKf,EAAOC,EAASnmE,EAAS+nE,QACzD,IAAV7B,IAAoBA,EAAQ,QAChB,IAAZC,IAAsBA,EAAU,WACpB,IAAZnmE,IAAsBA,EAAU,WACnB,IAAb+nE,IAAuBA,GAAW,GAEtC,IAAIC,EAAa,IAAI/D,GACjBgE,EAAW,CACX,IAAIxF,GACJuF,EACA,IAAIjyF,GACJ,IAAI6xF,GACJ,IAAIzC,GACJ,IAAI3B,IAEJb,EAAU,IAAIqE,GAAeC,GACjCtE,EAAQ0E,eAAenB,GACvBvD,EAAQ2E,mBAAmBnB,EAASnmE,GAChCinE,EAAIttE,WAAW2nE,KAAoB2F,EAAIiB,SVyGxB,aUxGfvF,EAAQI,cVgEE,KU/DVJ,EAAQ4E,aAAa,GACrB5E,EAAQhnF,KAAO2lF,GAEV2F,EAAIttE,WAAW4nE,KAAoB0F,EAAIiB,SVoG7B,cUnGfvF,EAAQI,cV+DE,KU9DVJ,EAAQ4E,aAAa,GACrB5E,EAAQhnF,KAAO4lF,GAEnB,IAAI4G,EVgGkB,EU1FtB,IALIJ,IACAC,EAAW9D,cAAcvB,GACzBwF,EAAexF,EAAQ8E,iBACvB9E,EAAQ+E,sBAEL/E,EAAQc,qBACXwE,EAASE,GAActyF,OAAO8sF,GAC1BA,EAAQ8E,kBAAoB,IAC5BU,EAAexF,EAAQ8E,iBACvB9E,EAAQ+E,sBAGhB,IAAIl+F,EAAMm5F,EAAQiB,mBAClBjB,EAAQkB,mBACR,IAAIrK,GAAWmJ,EAAQoB,gBAAgBrC,kBACnCl4F,EAAMgwF,IVgFY,IU/ElB2O,GVoFoB,IUnFpBA,GVkFoB,IUjFpBA,GACAxF,EAAQI,cAAc,QAG1B,IAAIroC,GAAYioC,EAAQ9mC,eAIxB,IAHInB,GAAUvwE,SAAWqvG,IACrB9+B,GAAUjiD,OVEL,KUAFiiD,GAAUvwE,SAAWqvG,IACxB9+B,GAAUjiD,OAAO90B,KAAKkkH,kBAAkBntC,GAAUvwE,SAAW,IAEjE,OAAOw4G,EAAQ9mC,eAAe9zD,UAClC,EACA66F,EAAiBO,cAAgB,SAAU8D,EAAKmB,EAAUC,GACtD,IAAInF,EAAUv/G,KAAK2kH,oBAAoBrB,EAAKmB,EAAUC,GACtD,GViEoB,IUjEhBA,GViEgB,IUjEkBnF,GAElC,QADIqF,EAASj7F,KAAKgT,IAAI8nF,EAAW,EAAGnB,EAAI98G,QAC/Bof,EAAI6+F,EAAU7+F,EAAIg/F,EAAQh/F,IAC/B,IAAK5lB,KAAK6kH,YAAYvB,EAAInwF,WAAWvN,IACjC,OV0DU,OU1DHk/F,GV8DK,IU1DfJ,GV0De,IUzDpBnF,EAEA,IADIqF,EAASj7F,KAAKgT,IAAI8nF,EAAW,EAAGnB,EAAI98G,QAC/Bof,EAAI6+F,EAAU7+F,EAAIg/F,EAAQh/F,IAC/B,IAAK5lB,KAAK+kH,gBAAgBzB,EAAInwF,WAAWvN,IACrC,OViDU,EU7CtB,OAAO25F,CACX,EACAN,EAAiB0F,oBAAsB,SAAUrB,EAAKmB,EAAUC,GAC5D,GAAID,GAAYnB,EAAI98G,OAChB,OAAOk+G,EAEX,IAAIM,EVuCkB,IUrClBN,EACAM,EAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,OAG7BA,EAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,OAClBN,GAAe,EAK9B,QAHIO,EAAiB,EACjBC,EAAO,IAAI98F,WAAW,GACtB+8F,EAAgB,KACP,CAET,GAAIV,EAAWQ,IAAmB3B,EAAI98G,OAAQ,CAC1Cgf,GAAOC,KAAKy/F,EAAM,GAClB1/F,GAAOC,KAAK0/F,EAAe,GAC3B,IAAIxoF,EAAM38B,KAAKolH,aAAaJ,EAAYG,EAAel8F,GAAQe,UAAWk7F,GACtEG,EAAWrlH,KAAKslH,gBAAgBJ,GACpC,GAAIC,EVoBU,KUpB0BxoF,EACpC,OVmBU,EUjBd,GAAiB,IAAb0oF,EAAgB,CAChB,GAAIH,EVqBQ,GUrBmB,EAC3B,OVoBQ,EUlBZ,GAAIA,EViBQ,GUjBmB,EAC3B,OVgBQ,EUdZ,GAAIA,EVYK,GUZmB,EACxB,OVWK,EUTT,GAAIA,EVUI,GUVmB,EACvB,OVSI,CUPZ,CACA,OVIY,CUHhB,CACA,IAAInuF,EAAIusF,EAAInwF,WAAWsxF,EAAWQ,GA8DlC,GA7DAA,IAEIjlH,KAAKu1G,QAAQx+E,GACbiuF,EVHc,IUGkB,GAE3BhlH,KAAK0/G,gBAAgB3oF,IAC1BiuF,EVNc,GUMiBr7F,KAAKuV,KAAK8lF,EVN3B,IUOdA,EVPc,IUOkB,IAGhCA,EVVc,GUUiBr7F,KAAKuV,KAAK8lF,EVV3B,IUWdA,EVXc,MUcdhlH,KAAKulH,YAAYxuF,GACjBiuF,EVdY,IUckB,EAAM,EAE/BhlH,KAAK0/G,gBAAgB3oF,GAC1BiuF,EVjBY,IUiBkB,EAAM,EAGpCA,EVpBY,IUoBkB,EAAM,EAGpChlH,KAAKwlH,aAAazuF,GAClBiuF,EVvBa,IUuBkB,EAAM,EAEhChlH,KAAK0/G,gBAAgB3oF,GAC1BiuF,EV1Ba,IU0BkB,EAAM,EAGrCA,EV7Ba,IU6BkB,EAAM,EAGrChlH,KAAK6kH,YAAY9tF,GACjBiuF,EVhCY,IUgCkB,EAAM,EAE/BhlH,KAAK0/G,gBAAgB3oF,GAC1BiuF,EVnCY,IUmCkB,GAAO,EAGrCA,EVtCY,IUsCkB,GAAO,EAGrChlH,KAAK+kH,gBAAgBhuF,GACrBiuF,EVzCgB,IUyCkB,EAAM,EAEnChlH,KAAK0/G,gBAAgB3oF,GAC1BiuF,EV5CgB,IU4CkB,KAGlCA,EV/CgB,IU+CkB,KAGlChlH,KAAKylH,cAAc1uF,GACnBiuF,EVlDgB,IUkDkB,EAGlCA,EVrDgB,KUwDhBC,GAAkB,EAAG,CAIrB,GAHAz/F,GAAOC,KAAKy/F,EAAM,GAClB1/F,GAAOC,KAAK0/F,EAAe,GAC3BnlH,KAAKolH,aAAaJ,EAAYG,EAAel8F,GAAQe,UAAWk7F,GAC5DC,EVjEU,GUkEVnlH,KAAK28B,IAAIwoF,EV7DG,GU6DgCA,EVjEpC,GUiEmEA,EVhElE,GUgEkGA,EV/DnG,GU+DkIA,EV9D9H,IU+DZ,OVnEU,EUqEd,GAAIA,EVhEY,GUgEwBA,EVrE1B,IUsEVA,EVjEY,GUiEwB,EAChCnlH,KAAK28B,IAAIwoF,EVtEL,GUsEoCA,EVrEnC,GUqEmEA,EVpEpE,GUoEmGA,EVnE/F,IUoEZ,OVnEY,EUqEhB,GAAIA,EVtEY,GUsEwB,EACpCnlH,KAAK28B,IAAIwoF,EVtEG,GUsEgCA,EV1EpC,GU0EmEA,EVzElE,GUyEkGA,EVxEnG,GUwEkIA,EV3EhI,IU4EV,OVxEY,EU0EhB,GAAIA,EV5ES,GU4EwB,EACjCnlH,KAAK28B,IAAIwoF,EV1EG,GU0EgCA,EV9EpC,GU8EmEA,EV3E/D,GU2EkGA,EV5EtG,GU4EqIA,EV/EnI,IUgFV,OV9ES,EUgFb,GAAIA,EV/EQ,GU+EwB,EAChCnlH,KAAK28B,IAAIwoF,EV9EG,GU8EgCA,EVlFpC,GUkFmEA,EV/E/D,GU+EkGA,EVjFrG,GUiFqIA,EVnFpI,IUoFV,OVjFQ,EUm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sB,IAAI3xK,KAAK,KAAM,GAAI,IACzC4xK,GAAc,KAGdC,GAAe,CAEjB,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eACA,eAEA,eACA,eACA,eACA,eAC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1/Y,OAAO,CAAC6xG,EAAMl9I,IAAOA,EAAGk9I,GAAO9kD,EAC9C,CACJ,2ECZO,SAASwlV,EAAqB51V,GACjC81V,IAAgB13b,WAAW,KACvB,MAAQu4b,oBAAqBtnT,IAC7B,IAAIsnT,EAIA,MAAM32V,EAHN22V,EAAiB32V,EAGXA,EAGlB,iCCZO,SAASq5V,EAAiCjpV,GAC7C,OAAO,IAAIr3F,UAAW,gBAAyB,OAAVq3F,GAAmC,iBAAVA,EAAqB,oBAAuB,IAAGA,+HACjH,qCCFA,IAAAtyF,EAAA,CACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,cACA,iBACA,eACA,kBACA,eACA,kBACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,WACA,cACA,WACA,cACA,YACA,eACA,aACA,gBACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,qBACA,kBACA,qBACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,eACA,kBACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,WACA,cACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,WACA,cACA,YACA,eACA,UACA,aACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,eACA,kBACA,cACA,iBACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,iBACA,oBACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,aACA,gBACA,YACA,eACA,YACA,eACA,YACA,eACA,eACA,kBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,eACA,kBACA,YACA,eACA,YACA,eACA,WACA,iBACA,oBACA,cACA,UACA,aACA,iBACA,oBACA,WACA,cACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,mBAIA,SAAAklb,EAAA9xO,GACA,IAAAz4N,EAAAwqc,EAAA/xO,GACA,OAAAlgB,EAAAv4M,EACA,CACA,SAAAwqc,EAAA/xO,GACA,IAAAlgB,EAAAvyL,EAAAX,EAAAozM,GAAA,CACA,IAAAtmM,EAAA,IAAA1S,MAAA,uBAAAg5M,EAAA,KACA,MAAAtmM,EAAAhW,KAAA,mBACAgW,CACA,CACA,OAAA9M,EAAAozM,EACA,CACA8xO,EAAA7kS,KAAA,WACA,OAAA5lJ,OAAA4lJ,KAAArgJ,EACA,EACAklb,EAAAtra,QAAAura,EACA5uV,GAAA00P,QAAAi6F,EACAA,EAAAvqc,GAAA,qLCrRI0wQ,EACOA;;;;;YAAAA,GAkERA,IAA0BA,EAAwB,CAAC,IA7D5BA,GAAsBthJ,MAAW,GAAK,QAK5DshJ,GAAsBA,GAAsBI,WAAgB,GAAK,aAKjEJ,GAAsBA,GAAsBM,SAAc,GAAK,WAK/DN,GAAsBA,GAAsBQ,MAAW,GAAK,QAK5DR,GAAsBA,GAAsBU,QAAa,GAAK,UAK9DV,GAAsBA,GAAsBY,UAAe,GAAK,YAKhEZ,GAAsBA,GAAsBc,MAAW,GAAK,QAK5Dd,GAAsBA,GAAsBC,QAAa,GAAK,UAK9DD,G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","names":["i0","_r1","ctx_r1","nameStoreEvent","next","startEvent","terminal","location","name","BoticarioStartComponent","constructor","route","terminalService","router","storageService","this","isLoading","ngOnInit","payload","paramMap","subscribe","params","accessKey","get","localStorage","setItem","undefined","getTerminal","pipe","finalize","messages","type","addTerminal","initPayload","provider","id","getCurrentTerminalPayload","loadGoogleAnalytics","gtm","navigate","gaScript","document","createElement","setAttribute","gaScript2","innerText","documentElement","firstChild","appendChild","gtmScript","noScript","innerHTML","body","window","dataLayer","push","event","data","logoEvent","digitalQueueEvent","static","t","i1","i2","core","VBU","selectors","decls","vars","consts","template","rf","ctx","BoticarioStartComponent_content_1_Template","BoticarioStartComponent_content_2_Template","BoticarioStartComponent_content_3_Template","service_r3","$event","selectService","value","BoticarioScheduleComponent_section_3_mat_option_16_Template","name_r4","onFocus","customer","isPriority","checkPreferentialEvent","BoticarioScheduleComponent_section_3_mat_icon_30_Template","tooltipPreferentialEvent","continueEvent","services","currentLang","isLoadingEmit","isValid","BoticarioScheduleComponent","pusherService","ticketService","snackBar","deviceService","translateService","reCaptchaV3Service","completed","isNameFocus","isPhoneFocus","currentTerminal","serviceId","service","find","s","terminalSchedule","sessions","setCurrentTerminalPayload","execute","token","resolvedCaptcha","selectBuyEvent","selectRemovalEvent","selectServicePreference","priority","hasServices","length","providerAvailableServices","showOptionsBasedOnSessions","Date","hasSessions","some","booking","setTimeout","getTicket","result","responseData","subscribeBooking","aggregatorId","ticketId","tickets","open","description","duration","error","scheduleChannel","pusher","bind","getPrevision","Id","ticket","AccessKey","friendlyCode","FriendlyCode","locationId","LocationId","providerId","TenantId","timezoneId","Timezone","serviceConfigId","ServiceConfigId","addTicket","setCurrentTicket","goToTrack","session","prevision","estimatedServiceStart","recaptcha","el","os","scrollIntoView","backEvent","i3","i4","i5","i6","BoticarioScheduleComponent_section_3_Template","BoticarioScheduleComponent_app_empty_state_4_Template","BoticarioTrackComponent_section_6_p_1_Template","BoticarioTrackComponent_section_6_h3_2_Template","BoticarioTrackComponent_section_6_p_13_Template","ctx_r0","position","_c0","_r2","openExitAlertModal","exitQueueEvent","resource","_r3","backStart","_r4","moment","BoticarioTrackComponent","dialog","notificationService","isSafari","openSoundAlertModal","audio","Audio","currentTicket","getItem","add","subscription","notifications","response","eventName","getPosition","status","playNotification","updateTicket","ngOnDestroy","unsubscribe","ExitAlertModalComponent","isBoticario","SoundAlertComponent","afterClosed","src","load","play","removeTicket","positionEl","getElementById","previsionEl","forceRedraw","isCanceled","attendanceType","locationName","providerName","serviceName","feedback","smartCode","isOlder","isCompleted","isOpened","getDeviceInfo","browser","ticketPrevision","tz","startOf","now","diff","element","style","opacity","BoticarioTrackComponent_content_5_Template","BoticarioTrackComponent_section_6_Template","BoticarioTrackComponent_div_7_Template","BoticarioTrackComponent_section_8_Template","BoticarioTrackComponent_div_9_Template","BoticarioTrackComponent_section_10_Template","BoticarioRoutes","path","component","NotFoundComponent","HttpLoaderFactory","http","TranslateHttpLoader","BoticarioModule","$C","G2t","CommonModule","ComponentsModule","FormsModule","MaterialModule","PipeModule","RouterModule","forChild","PagesModule","TranslateModule","loader","provide","useFactory","deps","HttpClient","nextId$1","CDK_ACCORDION","InjectionToken","CdkAccordion","_stateChanges","Subject","_openCloseAllActions","multi","openAll","closeAll","ngOnChanges","changes","complete","ɵfac","ɵdir","inputs","HasDecoratorInputTransform","booleanAttribute","exportAs","standalone","features","useExisting","nextId","CdkAccordionItem","expanded","_expanded","expandedChange","emit","opened","accordionId","accordion","_expansionDispatcher","notify","closed","_changeDetectorRef","markForCheck","_openCloseAllSubscription","Subscription","EMPTY","EventEmitter","destroyed","disabled","_removeUniqueSelectionListener","listen","_subscribeToOpenCloseAllActions","toggle","close","outputs","useValue","CdkAccordionModule","ɵmod","ɵinj","_c1","_c2","MatExpansionPanel_ng_template_5_Template","_c3","_c4","MatExpansionPanelHeader_Conditional_4_Template","_getExpandedState","MAT_ACCORDION","EXPANSION_PANEL_ANIMATION_TIMING","matExpansionAnimations","indicatorRotate","trigger","state","transform","transition","animate","bodyExpansion","height","visibility","MAT_EXPANSION_PANEL","MatExpansionPanelContent","_template","_expansionPanel","uniqueId","MAT_EXPANSION_PANEL_DEFAULT_OPTIONS","MatExpansionPanel","hideToggle","_hideToggle","togglePosition","_togglePosition","_uniqueSelectionDispatcher","_viewContainerRef","_document","_animationMode","defaultOptions","super","afterExpand","afterCollapse","_inputChanges","_headerId","_animationsDisabled","_hasSpacing","displayMode","ngAfterContentInit","_lazyContent","startWith","filter","_portal","take","TemplatePortal","_containsFocus","_body","focusedElement","activeElement","bodyElement","nativeElement","contains","_animationStarted","isInitialAnimation","_animationDone","toState","removeAttribute","DOCUMENT","ANIMATION_MODULE_TYPE","ɵcmp","contentQueries","dirIndex","_t","first","viewQuery","hostAttrs","hostVars","hostBindings","ngContentSelectors","dependencies","CdkPortalOutlet","styles","encapsulation","animation","changeDetection","fromState","MatExpansionPanelActionRow","MatExpansionPanelHeader","panel","_element","_focusMonitor","tabIndex","_parentChangeSubscription","accordionHideToggleChange","parseInt","merge","focusVia","expandedHeight","collapsedHeight","_toggle","_isExpanded","_getPanelId","_getTogglePosition","_showToggle","_getHeaderHeight","isExpanded","_keydown","keyCode","SPACE","ENTER","hasModifierKey","preventDefault","_handleHeaderKeydown","focus","origin","options","ngAfterViewInit","monitor","_handleHeaderFocus","stopMonitoring","numberAttribute","MatExpansionPanelDescription","MatExpansionPanelTitle","MatAccordion","arguments","_ownHeaders","QueryList","_headers","headers","reset","header","notifyOnChanges","_keyManager","FocusKeyManager","withWrap","withHomeAndEnd","onKeydown","updateActiveItem","destroy","ɵMatAccordion_BaseFactory","MatExpansionModule","imports","MatCommonModule","PortalModule","MatButtonModule","MatIconModule","MatToolbarModule","MatMenuModule","MatBadgeModule","MatDialogModule","QRCodeModule","GoogleMapsModule","EmptyStateComponent","_angular_core__WEBPACK_IMPORTED_MODULE_0__","color","icon","message","dialogRef","cancelTicket","cancellation","operatorId","environment","reason","cancel","closeDialog","MAT_DIALOG_DATA","_angular_core__WEBPACK_IMPORTED_MODULE_2__","lang_r3","$implicit","ctx_r3","setLang","code","NavigationBarComponent","localeService","langs","hasTicketChanged","changeTicketStatus","shouldHideBadge","isRouteTicketList","isRouteHome","url","lang","use","storeUserLocale","getUserLocale","goHome","NavigationBarComponent_button_25_Template","language_r5","ctx_r2","onDigitalQueueClick","textColor","lang_r5","HeaderComponent","logoHeight","showText","logoClick","digitalQueueClick","eventNames","addTicketsToChannels","includes","forEach","onLogoClick","bgColor","logoUrl","HeaderComponent_span_3_Template","HeaderComponent_button_24_Template","menu_r6","language_r7","goToStart","onBackClick","SecondaryHeaderComponent","backClick","text","isClickable","reduceHeight","SecondaryHeaderComponent_button_1_Template","SecondaryHeaderComponent_mat_icon_2_Template","disableClose","HomeComponent","container","innerHeight","fixStack","target","fn","captureStackTrace","Error","__extends","_extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","TypeError","String","__","create","CustomError","_super","_newTarget","_this","defineProperty","enumerable","configurable","fixProto","extendStatics","Exception","getKind","kind","core_Exception","ArgumentException","apply","core_ArgumentException","IllegalArgumentException","core_IllegalArgumentException","BinaryBitmap","binarizer","getWidth","getHeight","getBlackRow","y","row","getBlackMatrix","matrix","isCropSupported","getLuminanceSource","crop","left","top","width","newSource","createBinarizer","isRotateSupported","rotateCounterClockwise","rotateCounterClockwise45","toString","core_BinaryBitmap","ChecksumException","getChecksumInstance","core_ChecksumException","Binarizer","source","core_Binarizer","System","arraycopy","srcPos","dest","destPos","currentTimeMillis","util_System","IndexOutOfBoundsException","core_IndexOutOfBoundsException","ArrayIndexOutOfBoundsException","index","core_ArrayIndexOutOfBoundsException","Arrays","fill","a","val","i","len","fillWithin","fromIndex","toIndex","rangeCheck","arrayLength","asList","args","_i","rows","cols","from","map","x","createInt32Array","Int32Array","equals","second","length_1","hashCode","e_1","_a","a_1","o","Symbol","iterator","m","done","__values","a_1_1","e_1_1","return","fillUint8Array","copyOf","original","newLength","slice","copyOfUint8Array","newArray","Uint8Array","set","copyOfRange","to","copy","binarySearch","ar","comparator","numberComparator","n","k","cmp","util_Arrays","Integer","numberOfTrailingZeros","numberOfLeadingZeros","toHexString","toBinaryString","intNumber","bitCount","truncDivision","dividend","divisor","Math","trunc","num","radix","MIN_VALUE_32_BITS","MAX_VALUE","Number","MAX_SAFE_INTEGER","util_Integer","BitArray","size","bits","makeArray","getSize","getSizeInBytes","floor","ensureCapacity","newBits","flip","getNextSet","bitsOffset","currentBits","getNextUnset","setBulk","setRange","start","end","firstInt","lastInt","mask","clear","max","isRange","appendBit","bit","appendBits","numBits","numBitsLeft","appendBitArray","other","otherSize","xor","toBytes","bitOffset","array","offset","numBytes","theByte","j","getBitArray","reverse","oldBitsLen","leftOffset","currentInt","nextInt","clone","toArray","common_BitArray","DecodeHintType","OTHER","PURE_BARCODE","POSSIBLE_FORMATS","TRY_HARDER","CHARACTER_SET","ALLOWED_LENGTHS","ASSUME_CODE_39_CHECK_DIGIT","ENABLE_CODE_39_EXTENDED_MODE","ASSUME_GS1","RETURN_CODABAR_START_END","NEED_RESULT_POINT_CALLBACK","ALLOWED_EAN_EXTENSIONS","core_DecodeHintType","FormatException","getFormatInstance","core_FormatException","CharacterSetValueIdentifiers","Cp437","ISO8859_1","ISO8859_2","ISO8859_3","ISO8859_4","ISO8859_5","ISO8859_6","ISO8859_7","ISO8859_8","ISO8859_9","ISO8859_10","ISO8859_11","ISO8859_13","ISO8859_14","ISO8859_15","ISO8859_16","SJIS","Cp1250","Cp1251","Cp1252","Cp1256","UnicodeBigUnmarked","UTF8","ASCII","Big5","GB18030","EUC_KR","CharacterSetECI","valueIdentifier","valuesParam","otherEncodingNames","values","VALUE_IDENTIFIER_TO_ECI","NAME_TO_ECI","v","VALUES_TO_ECI","otherEncodingNames_1","otherEncodingNames_1_1","otherName","getValueIdentifier","getName","getValue","getCharacterSetECIByValue","characterSet","getCharacterSetECIByName","Map","common_CharacterSetECI","UnsupportedOperationException","core_UnsupportedOperationException","StringEncoding","decode","bytes","encoding","encodingName","customDecoder","TextDecoder","shouldDecodeOnFallback","decodeFallback","isBrowser","encode","customEncoder","TextEncoder","encodeFallback","encodingCharacterSet","isDecodeFallbackSupported","h","decodeURIComponent","fromCharCode","Uint16Array","buffer","charList","btoa","unescape","encodeURIComponent","split","uintArray","charCodeAt","util_StringEncoding","StringUtils","castAsNonUtf8Char","e","ISO88591","guessEncoding","hints","canBeISO88591","canBeShiftJIS","canBeUTF8","utf8BytesLeft","utf2BytesChars","utf3BytesChars","utf4BytesChars","sjisBytesLeft","sjisKatakanaChars","sjisCurKatakanaWordLength","sjisCurDoubleBytesWordLength","sjisMaxKatakanaWordLength","sjisMaxDoubleBytesWordLength","isoHighOther","utf8bom","ASSUME_SHIFT_JIS","SHIFT_JIS","PLATFORM_DEFAULT_ENCODING","format","append","replace","callback","exp","p0","p1","p2","p3","p4","substr","base","parseFloat","toFixed","toPrecision","toExponential","JSON","stringify","ch","getBytes","str","getCharCode","getCharAt","charCode","GB2312","EUC_JP","common_StringUtils","StringBuilder","enableDecoding","appendChars","charAt","deleteCharAt","substring","setCharAt","c","setLengthToZero","insert","util_StringBuilder","BitMatrix","rowSize","parseFromBooleanArray","image","imageI","parseFromString","stringRepresentation","setString","unsetString","bitsPos","rowStartPos","rowLength","nRows","pos","unset","getRowSize","rowArray","getRow","setRegion","right","bottom","setRow","rotate180","topRow","bottomRow","getEnclosingRectangle","x32","theBits","getTopLeftOnBit","getBottomRightOnBit","hash","lineSeparator","buildToString","common_BitMatrix","NotFoundException","getNotFoundInstance","core_NotFoundException","GlobalHistogramBinarizer","luminances","buckets","LUMINANCE_BUCKETS","initArrays","localLuminances","localBuckets","LUMINANCE_SHIFT","blackPoint","estimateBlackPoint","center","localLuminances_1","getMatrix","luminanceSize","Uint8ClampedArray","numBuckets","maxBucketCount","firstPeak","firstPeakSize","secondPeak","secondPeakScore","distanceToBiggest","score","temp","bestValley","bestValleyScore","fromFirst","LUMINANCE_BITS","common_GlobalHistogramBinarizer","HybridBinarizer","MINIMUM_DIMENSION","subWidth","BLOCK_SIZE_POWER","BLOCK_SIZE_MASK","subHeight","blackPoints","calculateBlackPoints","newMatrix","calculateThresholdForBlock","maxYOffset","BLOCK_SIZE","maxXOffset","yoffset","top_1","cap","xoffset","sum","z","blackRow","average","thresholdBlock","min","threshold","stride","yy","xx","pixel","MIN_DYNAMIC_RANGE","averageNeighborBlackPoint","common_HybridBinarizer","LuminanceSource","sourceRow","luminance","core_LuminanceSource","InvertedLuminanceSource","delegate","invertedMatrix","invert","core_InvertedLuminanceSource","HTMLCanvasElementLuminanceSource","canvas","tempCanvasElement","makeBufferFromCanvasImageData","imageData","getContext","getImageData","toGrayscaleBuffer","imageBuffer","grayscaleBuffer","FRAME_INDEX","gray","length_2","rotate","getTempCanvasElement","ownerDocument","angle","tempContext","angleRadians","DEGREE_TO_RADIANS","newWidth","ceil","abs","cos","sin","newHeight","translate","drawImage","PI","VideoInputDevice","deviceId","label","groupId","toJSON","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","rejected","throw","adopt","then","__generator","f","g","_","sent","trys","ops","verb","op","pop","BrowserCodeReader","reader","timeBetweenScansMillis","_hints","_stopContinuousDecode","_stopAsyncDecode","_timeBetweenDecodingAttempts","navigator","hasNavigator","mediaDevices","isMediaDevicesSuported","enumerateDevices","millis","listVideoInputDevices","devices","videoDevices","devices_1","devices_1_1","device","videoDevice","_b","canEnumerateDevices","getVideoInputDevices","findDeviceById","decodeFromInputVideoDevice","videoSource","decodeOnceFromVideoDevice","constraints","video","exact","facingMode","decodeOnceFromConstraints","stream","getUserMedia","decodeOnceFromStream","attachStreamToVideo","decodeOnce","decodeFromInputVideoDeviceContinuously","callbackFn","decodeFromVideoDevice","decodeFromConstraints","decodeFromStream","decodeContinuously","stopAsyncDecode","stopContinuousDecode","videoElement","prepareVideoElement","addVideoSource","playVideoOnLoadAsync","playVideoOnLoad","videoEndedListener","stopStreams","videoCanPlayListener","tryPlayVideo","addEventListener","isVideoPlaying","currentTime","paused","ended","readyState","console","warn","getMediaElement","mediaElementId","mediaElement","nodeName","toLowerCase","decodeFromImage","decodeFromImageUrl","decodeFromImageElement","decodeFromVideo","decodeFromVideoUrl","decodeFromVideoElement","decodeFromVideoContinuously","decodeFromVideoUrlContinuously","decodeFromVideoElementContinuously","prepareImageElement","imageElement","isImageLoaded","_decodeOnLoadImage","_decodeFromVideoElementSetup","_decodeOnLoadVideo","_decodeOnLoadVideoContinuously","decodeTask","imageLoadedListener","img","naturalWidth","imageSource","HTMLImageElement","HTMLVideoElement","retryIfNotFound","retryIfChecksumOrFormatError","loop","binaryBitmap","createBinaryBitmap","decodeBitmap","getCaptureCanvasContext","drawFrameOnCanvas","drawImageOnCanvas","getCaptureCanvas","luminanceSource","hybridBinarizer","captureCanvasContext","elem","willReadFrequently","captureCanvas","createCaptureCanvas","srcElement","dimensions","canvasElementContext","sx","sy","sWidth","videoWidth","sHeight","videoHeight","dx","dy","dWidth","dHeight","naturalHeight","_destroyCaptureCanvas","canvasElement","getVideoTracks","stop","_destroyVideoElement","_destroyImageElement","removeEventListener","videoPlayingEventListener","cleanVideoSource","srcObject","URL","createObjectURL","Result","rawBytes","resultPoints","timestamp","resultMetadata","getText","getRawBytes","getNumBits","getResultPoints","getBarcodeFormat","getResultMetadata","putMetadata","putAllMetadata","metadata","addResultPoints","newPoints","oldPoints","allPoints","getTimestamp","core_Result","BarcodeFormat","AZTEC","CODABAR","CODE_39","CODE_93","CODE_128","DATA_MATRIX","EAN_8","EAN_13","ITF","MAXICODE","PDF_417","QR_CODE","RSS_14","RSS_EXPANDED","UPC_A","UPC_E","UPC_EAN_EXTENSION","core_BarcodeFormat","ResultMetadataType","ORIENTATION","BYTE_SEGMENTS","ERROR_CORRECTION_LEVEL","ISSUE_NUMBER","SUGGESTED_PRICE","POSSIBLE_COUNTRY","PDF417_EXTRA_METADATA","STRUCTURED_APPEND_SEQUENCE","STRUCTURED_APPEND_PARITY","core_ResultMetadataType","DecoderResult","byteSegments","ecLevel","structuredAppendSequenceNumber","structuredAppendParity","setNumBits","getByteSegments","getECLevel","getErrorsCorrected","errorsCorrected","setErrorsCorrected","getErasures","erasures","setErasures","getOther","setOther","hasStructuredAppend","getStructuredAppendParity","getStructuredAppendSequenceNumber","common_DecoderResult","AbstractGenericGF","expTable","log","logTable","addOrSubtract","reedsolomon_AbstractGenericGF","GenericGFPoly","field","coefficients","coefficientsLength","firstNonZero","getCoefficients","getDegree","isZero","getCoefficient","degree","evaluateAt","coefficient","multiply","smallerCoefficients","largerCoefficients","sumDiff","lengthDiff","getZero","aCoefficients","aLength","bCoefficients","bLength","product","aCoeff","multiplyScalar","scalar","multiplyByMonomial","divide","quotient","remainder","denominatorLeadingTerm","inverseDenominatorLeadingTerm","inverse","degreeDifference","scale","term","iterationQuotient","buildMonomial","alphaPower","reedsolomon_GenericGFPoly","ArithmeticException","core_ArithmeticException","GenericGF","primitive","generatorBase","zero","one","getOne","getGeneratorBase","AZTEC_DATA_12","AZTEC_DATA_10","AZTEC_DATA_6","AZTEC_PARAM","QR_CODE_FIELD_256","DATA_MATRIX_FIELD_256","AZTEC_DATA_8","MAXICODE_FIELD_64","reedsolomon_GenericGF","ReedSolomonException","core_ReedSolomonException","IllegalStateException","core_IllegalStateException","ReedSolomonDecoder","received","twoS","poly","syndromeCoefficients","noError","evalResult","syndrome","sigmaOmega","runEuclideanAlgorithm","sigma","omega","errorLocations","findErrorLocations","errorMagnitudes","findErrorMagnitudes","R","rLast","r","tLast","rLastLast","tLastLast","q","dltInverse","degreeDiff","sigmaTildeAtZero","errorLocator","numErrors","errorEvaluator","xiInverse","denominator","termPlus1","reedsolomon_ReedSolomonDecoder","Table","UPPER","LOWER","MIXED","DIGIT","PUNCT","BINARY","Decoder","detectorResult","ddata","getBits","rawbits","extractBits","correctedBits","correctBits","convertBoolArrayToByteArray","getEncodedData","decoderResult","highLevelDecode","endIndex","latchTable","shiftTable","readCode","charCount","getCharacter","startsWith","getTable","table","UPPER_TABLE","LOWER_TABLE","MIXED_TABLE","PUNCT_TABLE","DIGIT_TABLE","gf","codewordSize","getNbLayers","numDataCodewords","getNbDatablocks","numCodewords","dataWords","ex","stuffedBits","dataWord","compact","isCompact","layers","baseMatrixSize","alignmentMap","totalBitsInLayer","matrixSize","origCenter","newOffset","rowOffset","low","high","columnOffset","startIndex","res","readByte","boolArr","byteArr","decoder_Decoder","MathUtils","round","isNaN","MIN_SAFE_INTEGER","distance","aX","aY","bX","bY","xDiff","yDiff","sqrt","count","detector_MathUtils","Float","floatToIntBits","util_Float","ResultPoint","getX","getY","otherPoint","orderBestPatterns","patterns","pointA","pointB","pointC","zeroOneDistance","oneTwoDistance","zeroTwoDistance","crossProductZ","pattern1","pattern2","core_ResultPoint","DetectorResult","points","getPoints","common_DetectorResult","AztecDetectorResult","nbDatablocks","nbLayers","aztec_AztecDetectorResult","WhiteRectangleDetector","initSize","INIT_SIZE","halfsize","leftInit","rightInit","upInit","downInit","detect","up","down","sizeExceeded","aBlackPointFoundOnBorder","atLeastOneBlackPointFoundOnBorder","atLeastOneBlackPointFoundOnRight","atLeastOneBlackPointFoundOnBottom","atLeastOneBlackPointFoundOnLeft","atLeastOneBlackPointFoundOnTop","rightBorderNotWhite","containsBlackPoint","bottomBorderNotWhite","leftBorderNotWhite","topBorderNotWhite","maxSize","getBlackPointOnSegment","centerEdges","dist","xStep","yStep","yi","yj","zi","zj","xi","xj","ti","tj","CORR","fixed","horizontal","detector_WhiteRectangleDetector","GridSampler","checkAndNudgePoints","nudged","common_GridSampler","PerspectiveTransform","a11","a21","a31","a12","a22","a32","a13","a23","a33","quadrilateralToQuadrilateral","x0","y0","x1","y1","x2","y2","x3","y3","x0p","y0p","x1p","y1p","x2p","y2p","x3p","y3p","qToS","quadrilateralToSquare","squareToQuadrilateral","times","transformPoints","transformPointsWithValues","xValues","yValues","dx3","dy3","dx1","dx2","dy1","dy2","buildAdjoint","common_PerspectiveTransform","DefaultGridSampler","sampleGrid","dimensionX","dimensionY","p1ToX","p1ToY","p2ToX","p2ToY","p3ToX","p3ToY","p4ToX","p4ToY","p1FromX","p1FromY","p2FromX","p2FromY","p3FromX","p3FromY","p4FromX","p4FromY","sampleGridWithTransform","Float32Array","iValue","common_DefaultGridSampler","GridSamplerInstance","setGridSampler","newGridSampler","gridSampler","getInstance","common_GridSamplerInstance","Point","toResultPoint","Detector","EXPECTED_CORNER_BITS","detectMirror","isMirror","pCenter","getMatrixCenter","bullsEyeCorners","getBullsEyeCorners","extractParameters","shift","corners","getMatrixCornerPoints","nbDataBlocks","isValidPoint","nbCenterLayers","sides","sampleLine","getRotation","parameterData","side","correctedData","getCorrectedParameterData","cornerBits","idx","arr","numECCodewords","parameterWords","pina","pinb","pinc","pind","pouta","getFirstDifferent","poutb","poutc","poutd","distancePoint","isWhiteOrBlackRectangle","pinax","pinbx","pincx","pindx","expandSquare","pointD","cornerPoints","cx_1","cy_1","cx","cy","getDimension","topLeft","topRight","bottomRight","bottomLeft","sampler","dimension","distanceResultPoint","moduleSize","px","py","cInit","getColor","colorModel","iMax","errRatio","init","oldSide","newSide","ratio","centerx","centery","result0","result2","point","detector_Detector","AztecReader","exception","detector","reportFoundResultPoints","rpcb_1","foundPossibleResultPoint","aztec_AztecReader","OneDReader","BrowserAztecCodeReader","doDecode","rotatedImage","orientation_1","maxLines","tryHarder","rowStep","middle","rowStepsAboveOrBelow","rowNumber","_loop_1","attempt","newHints_1","hint","key","delete","this_1","decodeRow","state_1","recordPattern","counters","numCounters","isWhite","counterPosition","recordPatternInReverse","numTransitionsLeft","last","patternMatchVariance","pattern","maxIndividualVariance","total","patternLength","POSITIVE_INFINITY","unitBarWidth","totalVariance","counter","scaledPattern","variance","oned_OneDReader","Code128Reader","findStartPattern","patternStart","bestVariance","MAX_AVG_VARIANCE","bestMatch","startCode","CODE_START_A","CODE_START_C","CODE_PATTERNS","MAX_INDIVIDUAL_VARIANCE","decodeCode","codeSet","convertFNC1","startPatternInfo","currentRawCodesIndex","rawCodes","CODE_CODE_A","CODE_START_B","CODE_CODE_B","CODE_CODE_C","isNextShifted","lastStart","nextStart","lastCode","checksumTotal","multiplier","lastCharacterWasPrintable","upperMode","shiftUpperMode","unshift","CODE_STOP","reduce","previous","current","CODE_FNC_1","CODE_FNC_2","CODE_FNC_3","CODE_FNC_4_A","CODE_SHIFT","CODE_FNC_4_B","lastPatternSize","resultLength","rawCodesSize","getTime","oned_Code128Reader","Code39Reader","usingCheckDigit","extendedMode","decodeRowResult","e_2","theCounters","decodedChar","findAsteriskPattern","toNarrowWidePattern","patternToChar","theCounters_1","theCounters_1_1","resultString","theCounters_2","theCounters_2_1","e_2_1","ALPHABET_STRING","indexOf","decodeExtended","ASTERISK_ENCODING","copyWithin","e_3","wideCounters","maxNarrowCounter","minCounter","counters_1","counters_1_1","e_3_1","totalWideCountersWidth","CHARACTER_ENCODINGS","encoded","decoded","oned_Code39Reader","Code93Reader","toPattern","checkChecksums","scaled","checkOneChecksum","checkPosition","weightMax","weight","oned_Code93Reader","ITFReader","narrowLineWidth","startRange","decodeStart","endRange","decodeEnd","decodeMiddle","allowedLengths","DEFAULT_ALLOWED_LENGTHS","lengthOK","maxAllowedLength","allowedLengths_1","allowedLengths_1_1","payloadStart","payloadEnd","counterDigitPair","counterBlack","counterWhite","twoK","decodeDigit","counterDigit","endStart","skipWhiteSpace","startPattern","findGuardPattern","START_PATTERN","validateQuietZone","quietCount","endPattern","END_PATTERN_REVERSED","PATTERNS","oned_ITFReader","AbstractUPCEANReader","decodeRowStringBuffer","findStartGuardPattern","foundStart","START_END_PATTERN","quietStart","checkChecksum","checkStandardUPCEANChecksum","check","getStandardUPCEANChecksum","digit","findGuardPatternWithoutCounters","whiteFirst","MIDDLE_PATTERN","END_PATTERN","L_PATTERNS","oned_AbstractUPCEANReader","UPCEANExtension5Support","CHECK_DIGIT_ENCODINGS","decodeMiddleCounters","extensionStartRange","extensionData","parseExtensionString","extensionResult","lgPatternFound","L_AND_G_PATTERNS","checkDigit","determineCheckDigit","extensionChecksum","raw","parseExtension5String","currency","rawAmount","hundredths","oned_UPCEANExtension5Support","UPCEANExtension2Support","checkParity","oned_UPCEANExtension2Support","UPCEANExtensionSupport","EXTENSION_START_PATTERN","oned_UPCEANExtensionSupport","UPCEANReader","widths","reversedWidths","startGuardRange","resultPointCallback","resultPoint_1","budello","resultPoint_2","resultPoint_3","quietEnd","resultPoint","decodeResult","extensionLength","allowedExtensions","valid","oned_UPCEANReader","EAN13Reader","determineFirstDigit","counters_2","counters_2_1","FIRST_DIGIT_ENCODINGS","oned_EAN13Reader","EAN8Reader","oned_EAN8Reader","UPCAReader","ean13Reader","maybeReturnResult","upcaResult","oned_UPCAReader","UPCEReader","determineNumSysAndCheckDigit","MIDDLE_END_PATTERN","convertUPCEtoUPCA","numSys","NUMSYS_AND_CHECK_DIGIT_PATTERNS","upce","upceChars","lastChar","oned_UPCEReader","MultiFormatUPCEANReader","possibleFormats","readers","_c","ean13MayBeUPCA","canReturnUPCA","resultUPCA","oned_MultiFormatUPCEANReader","CodaBarReader","CODA_BAR_CHAR_SET","nnnnnww","nnnnwwn","nnnwnnw","wwnnnnn","nnwnnwn","wnnnnwn","nwnnnnw","nwnnwnn","nwwnnnn","wnnwnnn","nnnwwnn","nnwwnnn","wnnnwnw","wnwnnnw","wnwnwnn","nnwwwww","nnwwnwn","nwnwnnw","nnnwnww","nnnwwwn","validRowData","getValidRowData","retStr","codaBarDecodeRow","booleanArr","lastIndex","lastIndexOf","lastBit","bitLength","barThreshold","pre","item","splice","join","strCode","validCodaBarString","test","oned_CodaBarReader","AbstractRSSReader","decodeFinderCounters","dataCharacterCounters","oddRoundingErrors","evenRoundingErrors","oddCounts","evenCounts","getDecodeFinderCounters","getDataCharacterCounters","getOddRoundingErrors","getEvenRoundingErrors","getOddCounts","getEvenCounts","parseFinderValue","finderPatterns","increment","errors","biggestError","decrement","isFinderPattern","firstTwoSum","MIN_FINDER_PATTERN_RATIO","MAX_FINDER_PATTERN_RATIO","maxCounter","rss_AbstractRSSReader","DataCharacter","checksumPortion","getChecksumPortion","that","rss_DataCharacter","FinderPattern","startEnd","getStartEnd","rss_FinderPattern","RSSUtils","getRSSvalue","maxWidth","noNarrow","widths_1","widths_1_1","narrowMask","elements","bar","elmWidth","subVal","combins","lessVal","mxwElement","maxDenom","minDenom","rss_RSSUtils","BitArrayBuilder","buildBitArray","pairs","charNumber","getRightChar","binary","accPos","firstValue","currentPair","leftValue","getLeftChar","rightValue","expanded_BitArrayBuilder","BlockParsedResult","finished","decodedInformation","getDecodedInformation","isFinished","decoders_BlockParsedResult","DecodedObject","newPosition","getNewPosition","decoders_DecodedObject","DecodedChar","isFNC1","FNC1","decoders_DecodedChar","DecodedInformation","newString","remainingValue","remaining","getNewString","isRemaining","getRemainingValue","decoders_DecodedInformation","DecodedNumeric","firstDigit","secondDigit","getFirstDigit","getSecondDigit","isFirstDigitFNC1","isSecondDigitFNC1","isAnyFNC1","decoders_DecodedNumeric","FieldParser","parseFieldsInGeneralPurpose","rawInformation","e_4","_d","firstTwoDigits","_e","TWO_DIGIT_DATA_LENGTH","_f","dataLength","VARIABLE_LENGTH","processVariableAI","processFixedAI","firstThreeDigits","_g","THREE_DIGIT_DATA_LENGTH","_h","_j","THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH","_k","firstFourDigits","_l","FOUR_DIGIT_DATA_LENGTH","_m","e_4_1","aiSize","fieldSize","ai","parsedAI","variableFieldSize","decoders_FieldParser","GeneralAppIdDecoder","information","decodeAllCodes","buff","initialPosition","currentPosition","info","decodeGeneralPurposeField","parsedFields","isStillNumeric","decodeNumeric","numeric_1","extractNumericValueFromBitArray","numeric","setPosition","lastDecoded","parseBlocks","isAlpha","parseAlphaBlock","isIsoIec646","parseIsoIec646Block","parseNumericBlock","isNumericToAlphaNumericLatch","setAlpha","incrementPosition","isStillIsoIec646","iso","decodeIsoIec646","isAlphaOr646ToNumericLatch","setNumeric","isAlphaTo646ToAlphaLatch","isStillAlpha","alpha","decodeAlphanumeric","setIsoIec646","fiveBitValue","sevenBitValue","eightBitValue","sixBitValue","decoders_GeneralAppIdDecoder","AbstractExpandedDecoder","generalDecoder","getInformation","getGeneralDecoder","decoders_AbstractExpandedDecoder","AI01decoder","encodeCompressedGtin","buf","currentPos","encodeCompressedGtinWithoutAI","initialBufferPosition","currentBlock","appendCheckDigit","GTIN_SIZE","decoders_AI01decoder","AI01AndOtherAIs","parseInformation","initialGtinPosition","firstGtinDigit","HEADER_SIZE","decoders_AI01AndOtherAIs","AnyAIDecoder","decoders_AnyAIDecoder","AI01weightDecoder","encodeCompressedWeight","weightSize","originalWeightNumeric","addWeightCode","weightNumeric","checkWeight","currentDivisor","decoders_AI01weightDecoder","AI013x0xDecoder","WEIGHT_SIZE","decoders_AI013x0xDecoder","AI013103decoder","decoders_AI013103decoder","AI01320xDecoder","decoders_AI01320xDecoder","AI01392xDecoder","lastAIdigit","LAST_DIGIT_SIZE","decoders_AI01392xDecoder","AI01393xDecoder","FIRST_THREE_DIGITS_SIZE","generalInformation","decoders_AI01393xDecoder","AI013x0x1xDecoder","firstAIdigits","dateCode","DATE_SIZE","encodeCompressedDate","numericDate","day","month","year","decoders_AI013x0x1xDecoder","ExpandedPair","leftChar","rightChar","finderPatter","mayBeLast","leftchar","rightchar","finderpattern","maybeLast","getFinderPattern","mustBeLast","o1","o2","equalsOrNull","expanded_ExpandedPair","ExpandedRow","wasReversed","getPairs","getRowNumber","isReversed","isEquivalent","otherPairs","checkEqualitity","pair1","pair2","e1","e2","getFinderPatter","expanded_ExpandedRow","RSSExpandedReader","MAX_PAIRS","startFromEven","constructResult","decodeRow2pairs","retrieveNextPair","tryStackedDecode","storeRow","ps","checkRowsBoolean","checkRows","collectedRows","currentRow","collectedRows_1","collectedRows_1_1","collectedRow","isValidSequence","rs","FINDER_PATTERN_SEQUENCES","sequence","stop_1","insertPos","prevIsSame","nextIsSame","erow","isPartialRow","removePartialRows","e_5","rows_1","rows_1_1","found","pairs_1","pairs_1_1","pp","e_5_1","e_6","e_7","e_8","rows_2","rows_2_1","allFound","pairs_2","pairs_2_1","e_8_1","e_7_1","e_6_1","getRows","decoder","createDecoder","resultingString","firstPoints","lastPoints","firstPair","checkCharacter","firstCharacter","checksum","currentRightChar","getNextSecondBar","initialPos","previousPairs","isOddPattern","keepFinding","forcedOffset","findNextPair","parseFoundFinderPattern","decodeDataCharacter","isEmptyPair","searchingEvenPair","reverseCounters","tmp","oddPattern","firstCounter","firstElementStart","FINDER_PATTERNS","elementWidth","expectedElementWidth","value_1","adjustOddEvenCounts","weightRowNumber","oddSum","oddChecksumPortion","isNotA1left","WEIGHTS","evenChecksumPortion","group","oddWidest","SYMBOL_WIDEST","evenWidest","vOdd","vEven","tEven","EVEN_TOTAL_SUBSET","gSum","GSUM","numModules","evenSum","incrementOdd","decrementOdd","incrementEven","decrementEven","mismatch","oddParityBad","evenParityBad","FINDER_PAT_A","FINDER_PAT_B","FINDER_PAT_C","FINDER_PAT_D","FINDER_PAT_E","FINDER_PAT_F","expanded_RSSExpandedReader","Pair","finderPattern","getCount","incrementCount","rss_Pair","RSS14Reader","possibleLeftPairs","possibleRightPairs","leftPair","decodePair","addOrTally","rightPair","possiblePairs","pair","possiblePairs_1","possiblePairs_1_1","symbolValue","leftPoints","rightPoints","checkValue","targetCheckValue","findFinderPattern","outside","inside","outsideChar","OUTSIDE_ODD_WIDEST","OUTSIDE_EVEN_TOTAL_SUBSET","OUTSIDE_GSUM","INSIDE_ODD_WIDEST","tOdd","INSIDE_ODD_TOTAL_SUBSET","INSIDE_GSUM","rightFinderPattern","firstIsBlack","rss_RSS14Reader","MultiFormatOneDReader","useCode39CheckDigit","useCode39ExtendedMode","oned_MultiFormatOneDReader","BrowserBarcodeReader","ECBlocks","ecCodewords","ecBlocks1","ecBlocks2","ecBlocks","getECCodewords","getECBlocks","ECB","dataCodewords","getDataCodewords","Version","versionNumber","symbolSizeRows","symbolSizeColumns","dataRegionSizeRows","dataRegionSizeColumns","ecbArray","ecbArray_1","ecbArray_1_1","ecBlock","totalCodewords","getVersionNumber","getSymbolSizeRows","getSymbolSizeColumns","getDataRegionSizeRows","getDataRegionSizeColumns","getTotalCodewords","getVersionForDimensions","numRows","numColumns","VERSIONS","version","buildVersions","decoder_Version","BitMatrixParser","bitMatrix","readVersion","mappingBitMatrix","extractDataRegion","readMappingMatrix","getVersion","readCodewords","Int8Array","resultOffset","column","corner1Read","corner2Read","corner3Read","corner4Read","readCorner2","readUtah","readCorner4","readCorner3","readCorner1","readModule","currentByte","numDataRegionsRow","numDataRegionsColumn","bitMatrixWithoutAlignment","dataRegionRow","dataRegionRowOffset","dataRegionColumn","dataRegionColumnOffset","readRowOffset","writeRowOffset","readColumnOffset","writeColumnOffset","decoder_BitMatrixParser","DataBlock","codewords","getDataBlocks","rawCodewords","totalBlocks","ecBlockArray","ecBlockArray_1","ecBlockArray_1_1","numResultBlocks","ecBlockArray_2","ecBlockArray_2_1","numBlockCodewords","longerBlocksNumDataCodewords","shorterBlocksNumDataCodewords","rawCodewordsOffset","specialVersion","numLongerBlocks","jOffset","iOffset","getNumDataCodewords","getCodewords","decoder_DataBlock","BitSource","byteOffset","getBitOffset","getByteOffset","readBits","available","bitsLeft","toRead","bitsToNotRead","common_BitSource","Mode","PAD_ENCODE","ASCII_ENCODE","C40_ENCODE","TEXT_ENCODE","ANSIX12_ENCODE","EDIFACT_ENCODE","BASE256_ENCODE","DecodedBitStreamParser","resultTrailer","mode","decodeAsciiSegment","decodeC40Segment","decodeTextSegment","decodeAnsiX12Segment","decodeEdifactSegment","decodeBase256Segment","upperShift","oneByte","cValues","firstByte","parseTwoBytes","cValue","C40_BASIC_SET_CHARS","c40char","C40_SHIFT2_SET_CHARS","TEXT_BASIC_SET_CHARS","textChar","TEXT_SHIFT2_SET_CHARS","TEXT_SHIFT3_SET_CHARS","secondByte","fullBitValue","edifactValue","codewordPosition","d1","unrandomize255State","uee","randomizedBase256Codeword","base256CodewordPosition","tempVariable","decoder_DecodedBitStreamParser","rsDecoder","parser","dataBlocks","totalBytes","dataBlocks_1","dataBlocks_1_1","resultBytes","dataBlocksCount","dataBlock","codewordBytes","correctErrors","codewordsInts","datamatrix_decoder_Decoder","rectangleDetector","detectSolid1","detectSolid2","correctTopRight","shiftToModuleCenter","dimensionTop","transitionsBetween","dimensionRight","shiftPoint","div","moveAway","fromX","fromY","trAB","trBC","trCD","trDA","tr","pointBs","pointCs","trTop","trRight","pointAs","candidate1","candidate2","dimH","dimV","pointDs","centerX","centerY","toX","toY","steep","ystep","xstep","transitions","inBlack","isBlack","datamatrix_detector_Detector","DataMatrixReader","has","extractPureBits","NO_POINTS","leftTopBlack","rightBottomBlack","matrixWidth","matrixHeight","nudge","datamatrix_DataMatrixReader","ErrorCorrectionLevelValues","BrowserDatamatrixCodeReader","L","M","Q","H","ErrorCorrectionLevel","stringValue","FOR_BITS","FOR_VALUE","fromString","forBits","decoder_ErrorCorrectionLevel","FormatInformation","formatInfo","errorCorrectionLevel","dataMask","numBitsDiffering","decodeFormatInformation","maskedFormatInfo1","maskedFormatInfo2","doDecodeFormatInformation","FORMAT_INFO_MASK_QR","bestDifference","bestFormatInfo","FORMAT_INFO_DECODE_LOOKUP","decodeInfo","targetInfo","bitsDifference","getErrorCorrectionLevel","getDataMask","decoder_FormatInformation","ecCodewordsPerBlock","getECCodewordsPerBlock","getNumBlocks","ecBlocks_1","ecBlocks_1_1","getTotalECCodewords","decoder_ECBlocks","decoder_ECB","alignmentPatternCenters","getAlignmentPatternCenters","getDimensionForVersion","getECBlocksForLevel","getProvisionalVersionForDimension","getVersionForNumber","decodeVersionInformation","versionBits","bestVersion","VERSION_DECODE_INFO","targetVersion","buildFunctionPattern","qrcode_decoder_Version","DataMaskValues","DATA_MASK_000","DATA_MASK_001","DATA_MASK_010","DATA_MASK_011","DATA_MASK_100","DATA_MASK_101","DATA_MASK_110","DATA_MASK_111","DataMask","isMasked","unmaskBitMatrix","decoder_DataMask","readFormatInformation","parsedFormatInfo","formatInfoBits1","copyBit","formatInfoBits2","jMin","parsedVersion","provisionalVersion","ijMin","theParsedVersion","functionPattern","readingUp","bitsRead","col","remask","setMirror","mirror","qrcode_decoder_BitMatrixParser","shorterBlocksTotalCodewords","longerBlocksStartAt","qrcode_decoder_DataBlock","ModeValues","TERMINATOR","NUMERIC","ALPHANUMERIC","STRUCTURED_APPEND","BYTE","ECI","KANJI","FNC1_FIRST_POSITION","FNC1_SECOND_POSITION","HANZI","characterCountBitsForVersions","getCharacterCountBits","decoder_Mode","symbolSequence","parityData","currentCharacterSetECI","fc1InEffect","modeBits","parseECIValue","subset","countHanzi","GB2312_SUBSET","decodeHanziSegment","decodeNumericSegment","decodeAlphanumericSegment","decodeByteSegment","decodeKanjiSegment","twoBytes","assembledTwoBytes","ignored","readBytes","toAlphaNumericChar","ALPHANUMERIC_CHARS","nextTwoCharsBits","threeDigitsBits","twoDigitsBits","digitBits","qrcode_decoder_DecodedBitStreamParser","QRCodeDecoderMetaData","mirrored","isMirrored","applyMirroredCorrection","decoder_QRCodeDecoderMetaData","decodeBooleanArray","decodeBitMatrix","decodeBitMatrixParser","dataBlocks_2","dataBlocks_2_1","qrcode_decoder_Decoder","AlignmentPattern","posX","posY","estimatedModuleSize","aboutEquals","moduleSizeDiff","combineEstimate","newModuleSize","detector_AlignmentPattern","AlignmentPatternFinder","startX","startY","possibleCenters","crossCheckStateCount","maxJ","middleI","stateCount","iGen","currentState","confirmed","foundPatternCross","handlePossibleCenter","centerFromEnd","maxVariance","crossCheckVertical","startI","centerJ","maxCount","originalStateCountTotal","maxI","NaN","stateCountTotal","centerI","detector_AlignmentPatternFinder","getEstimatedModuleSize","combinedCount","detector_FinderPattern","FinderPatternInfo","patternCenters","getBottomLeft","getTopLeft","getTopRight","detector_FinderPatternInfo","FinderPatternFinder","getImage","getPossibleCenters","pureBarcode","iSkip","MAX_MODULES","MIN_SKIP","hasSkipped","haveMultiplyConfirmedCenters","rowSkip","findRowSkip","patternInfo","selectBestPatterns","totalModuleSize","getCrossCheckStateCount","crossCheckDiagonal","crossCheckHorizontal","startJ","firstConfirmedCenter","CENTER_QUORUM","confirmedCount","totalDeviation","startSize","square","stdDev","sort","center1","center2","dA","dB","limit","possibleCenters_1","possibleCenters_1_1","detector_FinderPatternFinder","getResultPointCallback","processFinderPatternInfo","calculateModuleSize","computeDimension","modulesBetweenFPCenters","alignmentPattern","bottomRightX","bottomRightY","correctionToTopLeft","estAlignmentX","estAlignmentY","findAlignmentInRegion","re","createTransform","sourceBottomRightX","sourceBottomRightY","dimMinusThree","tltrCentersDimension","tlblCentersDimension","calculateModuleSizeOneWay","otherPattern","moduleSizeEst1","sizeOfBlackWhiteBlackRunBothWays","moduleSizeEst2","sizeOfBlackWhiteBlackRun","otherToX","otherToY","xLimit","realX","realY","overallEstModuleSize","allowanceFactor","allowance","alignmentAreaLeftX","alignmentAreaRightX","alignmentAreaTopY","alignmentAreaBottomY","qrcode_detector_Detector","QRCodeReader","getDecoder","nudgedTooFarRight","nudgedTooFarDown","qrcode_QRCodeReader","PDF417Common","getBitCountSum","moduleBitCount","toIntArray","list","EMPTY_INT_ARRAY","list_1","list_1_1","integer","getCodeword","symbol","SYMBOL_TABLE","CODEWORD_TABLE","NUMBER_OF_CODEWORDS","MAX_CODEWORDS_IN_BARCODE","MIN_ROWS_IN_BARCODE","MAX_ROWS_IN_BARCODE","MODULES_IN_CODEWORD","MODULES_IN_STOP_PATTERN","BARS_IN_MODULE","pdf417_PDF417Common","PDF417DetectorResult","detector_PDF417DetectorResult","detectMultiple","multiple","barcodeCoordinates","foundBarcodeInRow","vertices","findVertices","barcodeCoordinates_1","barcodeCoordinates_1_1","barcodeCoordinate","ROW_STEP","startRow","startColumn","copyToResult","findRowsWithPattern","INDEXES_START_PATTERN","STOP_PATTERN","INDEXES_STOP_PATTERN","tmpResult","destinationIndexes","loc","previousRowLoc","stopRow","skippedRowCount","MAX_PATTERN_DRIFT","SKIPPED_ROW_COUNT_MAX","BARCODE_MIN_HEIGHT","pixelDrift","MAX_PIXEL_DRIFT","pdf417_detector_Detector","ModulusPoly","subtract","negative","multiplyOther","negativeCoefficients","ec_ModulusPoly","ModulusBase","modulus","ec_ModulusBase","ModulusGF","PDF417_GF","ec_ModulusGF","ErrorCorrection","S","evaluation","knownErrors","erasures_1","erasures_1_1","erasure","errorLocatorDegree","formalDerivativeCoefficients","formalDerivative","numerator","ec_ErrorCorrection","BoundingBox","constructor_2","constructor_1","leftUnspecified","rightUnspecified","minX","maxX","minY","maxY","boundingBox","getBottomRight","getMinX","getMaxX","getMinY","getMaxY","leftBox","rightBox","addMissingRows","missingStartRows","missingEndRows","isLeft","newTopLeft","newBottomLeft","newTopRight","newBottomRight","newMinY","newTop","newMaxY","newBottom","decoder_BoundingBox","BarcodeMetadata","columnCount","rowCountUpperPart","rowCountLowerPart","rowCount","getColumnCount","getRowCount","getRowCountUpperPart","getRowCountLowerPart","decoder_BarcodeMetadata","Formatter","form","util_Formatter","DetectionResultColumn","getCodewordNearby","imageRow","codeword","MAX_NEARBY_DISTANCE","nearImageRow","imageRowToCodewordIndex","setCodeword","getBoundingBox","formatter","decoder_DetectionResultColumn","__read","BarcodeValue","setValue","confidence","maxConfidence","entry","entries","getConfidence","decoder_BarcodeValue","DetectionResultRowIndicatorColumn","_isLeft","setRowNumbers","setRowNumberAsRowIndicatorColumn","adjustCompleteIndicatorColumnRowNumbers","barcodeMetadata","removeIncorrectCodewords","firstRow","lastRow","barcodeRow","maxRowHeight","currentRowHeight","codewordsRow","rowDifference","checkedRows","closePreviousCodewordFound","getRowHeights","getBarcodeMetadata","adjustIncompleteIndicatorColumnRowNumbers","barcodeColumnCount","barcodeRowCountUpperPart","barcodeRowCountLowerPart","barcodeECLevel","codewords_1","codewords_1_1","rowIndicatorValue","codewordRowNumber","codewordRow","decoder_DetectionResultRowIndicatorColumn","DetectionResult","ADJUST_ROW_NUMBER_SKIP","detectionResultColumns","getDetectionResultColumns","adjustIndicatorColumnRowNumbers","previousUnadjustedCount","unadjustedCodewordCount","adjustRowNumbersAndGetCount","detectionResultColumn","unadjustedCount","adjustRowNumbersByRow","barcodeColumn","hasValidRowNumber","adjustRowNumbers","adjustRowNumbersFromBothRI","adjustRowNumbersFromLRI","adjustRowNumbersFromRRI","LRIcodewords","RRIcodewords","setRowNumber","rowIndicatorRowNumber","invalidRowCounts","adjustRowNumberIfValid","isValidRowNumber","previousColumnCodewords","nextColumnCodewords","otherCodewords","otherCodewords_1","otherCodewords_1_1","otherCodeword","adjustRowNumber","getBucket","getBarcodeColumnCount","getBarcodeRowCount","getBarcodeECLevel","setBoundingBox","setDetectionResultColumn","getDetectionResultColumn","rowIndicatorColumn","decoder_DetectionResult","Codeword","endX","bucket","BARCODE_ROW_UNKNOWN","getStartX","getEndX","decoder_Codeword","PDF417CodewordDecoder","initialize","currentSymbol","currentBit","RATIOS_TABLE","fround","bSymbolTableReady","getDecodedValue","decodedValue","getDecodedCodewordValue","sampleBitCounts","getClosestDecodedValue","bitCountSum","bitCountIndex","sumPreviousBits","sampleIndex","getBitValue","bitCountRatios","bestMatchError","ratioTableRow","decoder_PDF417CodewordDecoder","PDF417ResultMetadata","segmentCount","fileSize","getSegmentIndex","segmentIndex","setSegmentIndex","getFileId","fileId","setFileId","getOptionalData","optionalData","setOptionalData","isLastSegment","lastSegment","setLastSegment","getSegmentCount","setSegmentCount","getSender","sender","setSender","getAddressee","addressee","setAddressee","getFileName","fileName","setFileName","getFileSize","setFileSize","getChecksum","setChecksum","setTimestamp","pdf417_PDF417ResultMetadata","Long","parseLong","util_Long","NullPointerException","core_NullPointerException","OutputStream","writeBytes","writeBytesOffset","off","write","flush","util_OutputStream","OutOfMemoryError","core_OutOfMemoryError","ByteArrayOutputStream","minCapacity","grow","newCapacity","writeTo","out","toByteArray","param","toString_string","toString_number","toString_void","charsetName","hibyte","util_ByteArrayOutputStream","BigInteger","getBigIntConstructor","BigInt","global","self","createBigInt","ALPHA","ALPHA_SHIFT","PUNCT_SHIFT","codeIndex","TEXT_COMPACTION_MODE_LATCH","textCompaction","BYTE_COMPACTION_MODE_LATCH","BYTE_COMPACTION_MODE_LATCH_6","byteCompaction","MODE_SHIFT_TO_BYTE_COMPACTION_MODE","NUMERIC_COMPACTION_MODE_LATCH","numericCompaction","ECI_CHARSET","ECI_GENERAL_PURPOSE","ECI_USER_DEFINED","BEGIN_MACRO_PDF417_CONTROL_BLOCK","decodeMacroBlock","BEGIN_MACRO_PDF417_OPTIONAL_FIELD","MACRO_PDF417_TERMINATOR","NUMBER_OF_SEQUENCE_CODEWORDS","segmentIndexArray","decodeBase900toBase10","optionalFieldsStart","MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME","MACRO_PDF417_OPTIONAL_FIELD_SENDER","MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE","MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT","MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP","MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM","MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE","optionalFieldsLength","textCompactionData","byteCompactionData","decodeTextCompaction","subMode","priorToShiftMode","subModeCh","LL","ML","PS","AS","PL","MIXED_CHARS","AL","PAL","PUNCT_CHARS","decodedBytes","byteCompactedCodewords","nextCode","numericCodewords","MAX_NUMERIC_CODEWORDS","EXP900","getEXP900","nineHundred","pdf417_decoder_DecodedBitStreamParser","PDF417ScanningDecoder","imageTopLeft","imageBottomLeft","imageTopRight","imageBottomRight","minCodewordWidth","maxCodewordWidth","detectionResult","leftRowIndicatorColumn","rightRowIndicatorColumn","firstPass","getRowIndicatorColumn","resultBox","maxBarcodeColumn","leftToRight","previousStartColumn","getStartColumn","detectCodeword","createDecoderResult","adjustBoundingBox","rowHeights","getMax","rowHeights_1","rowHeights_1_1","rowHeight","maxValue","values_1","values_1_1","leftBarcodeMetadata","rightBarcodeMetadata","startPoint","adjustCodewordCount","barcodeMatrix","barcodeMatrix01","numberOfCodewords","calculatedNumberOfCodewords","getNumberOfECCodeWords","createBarcodeMatrix","ambiguousIndexValuesList","ambiguousIndexesList","codewordIndex","ambiguousIndexValues","createDecoderResultFromAmbiguousValues","erasureArray","ambiguousIndexes","ambiguousIndexCount","tries","decodeCodewords","err","column_1","isValidBarcodeColumn","skippedColumns","previousRowCodeword","minColumn","maxColumn","adjustCodewordStartColumn","getModuleBitCount","endColumn","codewordBitCount","tmpCount","checkCodewordSkew","getCodewordBucketNumber","imageColumn","moduleNumber","previousPixelValue","codewordStartColumn","correctedStartColumn","CODEWORD_SKEW_SIZE","correctedErrorsCount","verifyCodewordCount","MAX_ERRORS","MAX_EC_CODEWORDS","errorCorrection","getBitCountForCodeword","previousValue","getCodewordBucketNumber_Int32Array","getCodewordBucketNumber_number","barcodeValue","decoder_PDF417ScanningDecoder","PDF417Reader","decodeMultiple","results","getMinCodewordWidth","getMaxCodewordWidth","pdf417ResultMetadata","getMaxWidth","getMinWidth","pdf417_PDF417Reader","ReaderException","core_ReaderException","MultiFormatReader","setHints","decodeInternal","decodeWithState","formats","addOneDReader","core_MultiFormatReader","EncodeHintType","BrowserMultiFormatReader","BrowserPDF417Reader","BrowserQRCodeReader","ERROR_CORRECTION","DATA_MATRIX_SHAPE","DATA_MATRIX_COMPACT","MIN_SIZE","MAX_SIZE","MARGIN","PDF417_COMPACT","PDF417_COMPACTION","PDF417_DIMENSIONS","AZTEC_LAYERS","QR_VERSION","GS1_FORMAT","FORCE_C40","core_EncodeHintType","ReedSolomonEncoder","cachedGenerators","buildGenerator","lastGenerator","nextGenerator","toEncode","ecBytes","dataBytes","infoCoefficients","numZeroCoefficients","reedsolomon_ReedSolomonEncoder","MaskUtil","applyMaskPenaltyRule1","applyMaskPenaltyRule1Internal","applyMaskPenaltyRule2","penalty","getArray","arrayY","N2","applyMaskPenaltyRule3","numPenalties","isWhiteHorizontal","isWhiteVertical","N3","applyMaskPenaltyRule4","numDarkCells","numTotalCells","N4","getDataMaskBit","maskPattern","intermediate","isHorizontal","iLimit","jLimit","numSameBitCells","prevBit","N1","encoder_MaskUtil","ByteMatrix","setNumber","setBoolean","aByte","bytesY","otherBytesY","encoder_ByteMatrix","QRCode","getMode","getMaskPattern","setMode","setECLevel","setVersion","setMaskPattern","setMatrix","isValidMaskPattern","NUM_MASK_PATTERNS","encoder_QRCode","WriterException","core_WriterException","MatrixUtil","clearMatrix","buildMatrix","dataBits","embedBasicPatterns","embedTypeInfo","maybeEmbedVersionInfo","embedDataBits","embedPositionDetectionPatternsAndSeparators","embedDarkDotAtLeftBottomCorner","maybeEmbedPositionAdjustmentPatterns","embedTimingPatterns","typeInfoBits","makeTypeInfoBits","coordinates","TYPE_INFO_COORDINATES","versionInfoBits","makeVersionInfoBits","bitIndex","direction","isEmpty","findMSBSet","calculateBCHCode","msbSetInPoly","typeInfo","bchCode","TYPE_INFO_POLY","maskBits","TYPE_INFO_MASK_PATTERN","VERSION_INFO_POLY","embedHorizontalSeparationPattern","xStart","yStart","embedVerticalSeparationPattern","embedPositionAdjustmentPattern","patternY","POSITION_ADJUSTMENT_PATTERN","embedPositionDetectionPattern","POSITION_DETECTION_PATTERN","pdpWidth","hspWidth","POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE","encoder_MatrixUtil","BlockPair","errorCorrectionBytes","getDataBytes","getErrorCorrectionBytes","encoder_BlockPair","Encoder","calculateMaskPenalty","content","DEFAULT_BYTE_MODE_ENCODING","hasEncodingHint","chooseMode","headerBits","eci","appendECI","appendModeInfo","appendBytes","bitsNeeded","calculateBitsNeeded","willFit","recommendVersion","headerAndDataBits","numLetters","appendLengthInfo","numDataBytes","terminateBits","finalBits","interleaveWithECBytes","qrCode","chooseMaskPattern","provisionalBitsNeeded","chooseVersion","getAlphanumericCode","ALPHANUMERIC_TABLE","isOnlyDoubleByteKanji","hasNumeric","hasAlphanumeric","isDigit","byte1","minPenalty","bestMaskPattern","numInputBits","versionNum","capacity","numBitsInLastByte","numPaddingBytes","getNumDataBytesAndNumECBytesForBlockID","numTotalBytes","numRSBlocks","blockID","numDataBytesInBlock","numECBytesInBlock","numRsBlocksInGroup2","numRsBlocksInGroup1","numTotalBytesInGroup1","numTotalBytesInGroup2","numDataBytesInGroup1","numDataBytesInGroup2","numEcBytesInGroup1","numEcBytesInGroup2","dataBytesOffset","maxNumDataBytes","maxNumEcBytes","blocks","numEcBytesInBlock","generateECBytes","blocks_1","blocks_1_1","blocks_2","blocks_2_1","appendNumericBytes","appendAlphanumericBytes","append8BitBytes","appendKanjiBytes","getDigit","singleCharacter","cn","num1","num2","num3","code1","code2","subtracted","encoder_Encoder","BrowserQRCodeSvgWriter","contents","quietZone","QUIET_ZONE_SIZE","renderResult","writeToDom","containerElement","querySelector","svgElement","input","inputWidth","inputHeight","qrWidth","qrHeight","outputWidth","outputHeight","leftPadding","topPadding","createSVGElement","inputY","outputY","inputX","outputX","svgRectElement","createSvgRectElement","w","createElementNS","SVG_NS","setAttributeNS","rect","QRCodeWriter","output","qrcode_QRCodeWriter","MultiFormatWriter","PlanarYUVLuminanceSource","yuvData","dataWidth","dataHeight","reverseHorizontal","area","inputOffset","outputOffset","renderThumbnail","THUMBNAIL_SCALE_FACTOR","pixels","yuv","grey","getThumbnailWidth","getThumbnailHeight","rowStart","RGBLuminanceSource","BYTES_PER_ELEMENT","luminancesUint8Array","g2","Charset","forName","util_Charset","StandardCharsets","ISO_8859_1","util_StandardCharsets","DefaultPlacement","numcols","numrows","getNumrows","getNumcols","getBit","setBit","noBit","place","corner1","corner2","corner3","corner4","utah","module","encoder_DefaultPlacement","SymbolShapeHint","FACTOR_SETS","FACTORS","LOG","ALOG","static_LOG","FORCE_NONE","FORCE_SQUARE","FORCE_RECTANGLE","MACRO_05_HEADER","MACRO_06_HEADER","encodeECC200","symbolInfo","getDataCapacity","sb","blockCount","getInterleavedBlockCount","ecc","createECCBlock","getErrorCodewords","dataSizes","errorSizes","getDataLengthForInterleavedBlock","getErrorLengthForInterleavedBlock","block","numECWords","eccReversed","encoder_ErrorCorrection","ASCIIEncoder","getEncodingMode","context","HighLevelEncoder","determineConsecutiveDigitCount","getMessage","writeCodeword","encodeASCIIDigits","getCurrentChar","newMode","lookAheadTest","signalEncoderChange","isExtendedASCII","digit1","digit2","Base256Encoder","hasMoreCharacters","dataCount","currentSize","getCodewordCount","updateSymbolInfo","mustPad","getSymbolInfo","randomize255State","C40Encoder","encodeMaximal","lastCharSize","backtrackStartPosition","backtrackBufferLength","encodeChar","unwritten","curCodewordCount","rest","handleEOD","removed","backtrackOneCharacter","resetSymbolInfo","writeNextTriplet","writeCodewords","encodeToCodewords","cw1","cw2","EdifactEncoder","test_1","getRemainingCharacters","restChars","restInAscii","illegalCharacter","cw3","SymbolInfo","rectangular","dataCapacity","errorCodewords","dataRegions","rsBlockData","rsBlockError","lookup","shape","minSize","fail","PROD_SYMBOLS_1","PROD_SYMBOLS","PROD_SYMBOLS_1_1","getSymbolWidth","getSymbolHeight","getHorizontalDataRegions","getVerticalDataRegions","getSymbolDataWidth","getSymbolDataHeight","encoder_SymbolInfo","DataMatrixSymbolInfo144","EncoderContext","msg","skipAtEnd","msgBinary","newEncoding","setSymbolShape","setSizeConstraints","setSkipAtEnd","getCurrent","getNewEncoding","resetEncoderSignal","getTotalMessageCharCount","X12Encoder","randomize253State","encodeHighLevel","forceC40","c40Encoder","encoders","endsWith","encodingMode","startpos","currentMode","lookAheadTestIntern","endpos","isNativeX12","ASCII_ENCODATION","isNativeEDIFACT","charCounts","charsProcessed","mins","intCharCounts","findMinimums","minCount","getMinimumCount","isNativeC40","isNativeText","isSpecialB256","tc","isX12TermSep","f1","f2","f3","f4","f5","hex","encoder_HighLevelEncoder","CharsetEncoder","charset","canEncode","ECIEncoderSet","stringToEncode","priorityCharset","fnc1","ENCODERS","neededEncoders","needUnicodeEncoder","neededEncoders_1","neededEncoders_1_1","encoder","neededEncoders_2","neededEncoders_2_1","priorityEncoderIndexValue","priorityEncoderIndex","getCharsetName","getCharset","getECIValue","encoderIndex","getPriorityEncoderIndex","MinimalECIInput","encoderSet","encodeMinimally","getFNC1Character","haveNCharacters","isECI","subSequence","addEdge","edges","edge","cachedTotalSize","addEdges","InputEdge","inputLength","minimalJ","minimalSize","intsAL","ints","C40","TEXT","X12","EDF","B256","C40_SHIFT2_CHARS","MinimalEncoder","isInC40Shift1Set","isInC40Shift2Set","C40_SHIFT2_CHARS_1","C40_SHIFT2_CHARS_1_1","isInTextShift1Set","isInTextShift2Set","macroId","escape","concat","__spread","Input","vertexIndex","fromPosition","characterLength","getEndMode","getNumberOfC40Words","c40","thirdsCount","ci","asciiValue","Edge","modes","modes_1","modes_1_1","solution","bytesAL","randomizePostfixLength","randomizeLengths","prepend","getPreviousStartMode","getLatchBytes","getMacroId","applyRandomPattern","getMinSymbolSize","into","startPosition","Pad_codeword_position","temp_variable","allCodewordCapacities","squareCodewordCapacities","rectangularCodewordCapacities","previousMode","getPreviousMode","getB256Size","cnt","lastASCII","getLastASCII","getCodewordsRemaining","minimum","getShapeHint","c1","c2","setC40Word","c3","val16","getX12Value","getX12Words","getShiftValue","getC40Value","setIndex","getC40Words","c40Values","shiftValue","byteIndex","getEDFBytes","numberOfThirds","endPos","edfValues","val24","DataMatrixWriter","trim","requestedShape","requestedMinSize","requestedMaxSize","hasGS1FormatHint","hasForceC40Hint","placement","encodeLowLevel","symbolWidth","symbolHeight","matrixY","matrixX","convertByteMatrixToBitMatrix","reqWidth","reqHeight","AztecCode","setCompact","setSize","getLayers","setLayers","getCodeWords","codeWords","setCodeWords","encoder_AztecCode","Collections","singletonList","collection","util_Collections","Token","getPrevious","encoder_Token","SimpleToken","appendTo","bitArray","addBinaryShift","byteCount","encoder_SimpleToken","BinaryShiftToken","binaryShiftStart","binaryShiftByteCount","encoder_BinaryShiftToken","MODE_NAMES","EMPTY_TOKEN","LATCH_TABLE","SHIFT_TABLE","static_SHIFT_TABLE","SHIFT_TABLE_1","SHIFT_TABLE_1_1","State","binaryBytes","getToken","getBinaryShiftByteCount","getBitCount","latchAndAppend","latch","LatchTable","TokenHelpers","latchModeBitCount","shiftAndAppend","thisModeBitCount","ShiftTable","addBinaryShiftChar","deltaBitCount","endBinaryShift","isBetterThanOrEqualTo","newModeBitCount","calculateBinaryShiftCost","toBitArray","symbols","symbols_1","symbols_1_1","C","INITIAL_STATE","encoder_State","CHAR_MAP","static_CHAR_MAP","spaceCharCode","pointCharCode","commaCharCode","zUpperCharCode","aUpperCharCode","zLowerCharCode","aLowerCharCode","nineCharCode","zeroCharCode","mixedTable","punctTable","lineBreakCharCode","states","pairCode","nextChar","updateStateListForPair","updateStateListForChar","states_1","states_1_1","updateStateForChar","simplifyStates","charInCurrentTable","CharMap","stateNoBinary","charInMode","latchState","shiftState","binaryState","states_2","states_2_1","updateStateForPair","digitState","states_3","states_3_1","newState","oldState","result_1","result_1_1","aztec_encoder_HighLevelEncoder","encodeBytes","DEFAULT_EC_PERCENT","DEFAULT_AZTEC_LAYERS","minECCPercent","userSpecifiedLayers","wordSize","eccBits","totalSizeBits","MAX_NB_BITS_COMPACT","MAX_NB_BITS","usableBitsInLayers","WORD_SIZE","stuffBits","messageBits","generateCheckWords","messageSizeInWords","modeMessage","generateModeMessage","drawModeMessage","drawBullsEye","aztec","totalBits","getGF","totalWords","messageWords","bitsToWords","startPad","messageWord","word","aztec_encoder_Encoder","AztecWriter","encodeWithHints","eccPercent","encodeLayers","canvasCtx","isMediaDevicesSupported","__assign","assign","delayBetweenScanAttempts","delayBetweenScanSuccess","tryPlayVideoTimeout","mediaStreamSetTorch","track","onOff","applyConstraints","advanced","fillLightMode","torch","mediaStreamIsTorchCompatible","tracks","tracks_1","tracks_1_1","mediaStreamIsTorchCompatibleTrack","getCapabilities","createVideoElement","videoThingy","videoElem","createBinaryBitmapFromCanvas","getMediaElementDimensions","error_1","createCanvasFromMediaElement","createBinaryBitmapFromMediaElem","destroyImageElement","releaseAllStreams","streamTracker","mediaStream","getTracks","timeout","timeoutId","hasPlayed","clearTimeout","preview","previewPlayTimeout","_waitImageLoad","checkCallbackFnOrThrow","disposeMediaStream","decodeFromCanvas","previewElem","error_2","finalizeCallback","originalControls","videoTracks","controls","torchTrack_1","switchTorch_1","scan","streamVideoConstraintsApply","trackFilter","tracks_2","tracks_2_1","streamVideoConstraintsGet","getConstraints","streamVideoSettingsGet","getSettings","streamVideoCapabilitiesGet","switchTorch","receivedPreview","scanOneResult","decodeOnceFromVideoElement","decodeOnceFromVideoUrl","task","retryIfChecksumError","retryIfFormatError","lastTimeoutId","disposeCanvas","stopScan","AztecCodeReader","BrowserMultiFormatOneDReader","svgNs","BrowserCodeSvgWriter","createSvgPathPlaceholderElement","QRCodeDecoderErrorCorrectionLevel","correctionStr","QRCodeEncoder","placeholder","targetEl","HTMLElement","BrowserMultiFormatContinuousReader","getScannerControls","scannerControls","scanFromDeviceObservable","previewEl","_asyncToGenerator","scan$","BehaviorSubject","ctrls","errorName","asObservable","ZXingScannerComponent","codeReader","_codeReader","_ready","isAutostarting","isCurrentDevice","hasPermission","setDevice","_devicePreStart","_device","getBarcodeFormatOrFail","videoConstraints","_isAutostarting","autostarting","getCodeReader","enable","enabled","_enabled","scanFromDevice","timeBetweenScans","previewFitMode","poster","autostarted","torchCompatible","scanSuccess","scanFailure","scanError","scanComplete","camerasFound","camerasNotFound","permissionResponse","hasDevices","deviceChange","autofocusEnabled","autostart","askForPermission","_this2","setPermission","permission","getAnyVideoDevice","handlePermissionException","terminateStream","_this3","initAutostartOff","initAutostartOn","updateVideoInputDevices","_this4","autostartScanner","previewElemRef","scanStop","_scanSubscription","scanStart","restart","prevDevice","_reset","_this5","_this6","matcher","dispatchScanSuccess","dispatchScanFailure","dispatchScanError","observed","dispatchScanComplete","toUpperCase","_this7","scanStream","_onDecodeResult","_onDecodeError","hasTorchControl","_this8","ZXingScannerModule","onCodeResult","back","backToScan","QrCodeScanComponent","isVerificate","qrResultString","verificationUrl","href","urlExterna","urlArray","arrayId","urlBase","QrCodeScanComponent_div_0_Template","QrCodeScanComponent_div_1_Template","TerminalOptionsDisplay","LIST","CATEGORY","pad2","brighten","amount","rgb","hexToRgb","match","rgbToHex","PriorityModalComponent","esm_browser_native","randomUUID","crypto","getRandomValues","rnds8","rng","byteToHex","unsafeStringify","esm_browser_v4","v4","native","rnds","random","CollapsableOptionButtonComponent","collapse","isActive","buttonClick","onClick","button","serviceOrientation","CollapsableOptionButtonComponent_div_4_Template","headerBackgroundColor","ServiceListWrapperComponent_section_0_div_8_Template","ServiceListWrapperComponent_section_0_div_9_Template","ServiceListWrapperComponent","displayOptions","ServiceListWrapperComponent_section_0_Template","EmbedChatComponent","renderer2","domSanitizer","loadScript","bypassSecurityTrustScript","embedChat","setInnerHtmlWithScripts","htmlText","htmlElements","querySelectorAll","currentScript","newScript","attributes","attr","createTextNode","CustomFieldValidator","isValidCpf","control","cpf","numbers","digits","equalDigits","cpfNotValid","isValidCnpj","cnpj","cnpjNotValid","FieldControlService","makeFormGroup","fields","required","title","UntypedFormControl","Validators","compose","minLength","maxLength","UntypedFormGroup","jDH","factory","providedIn","NGX_MASK_CONFIG","timeMasks","RegExp","withoutValidation","NgxMaskApplierService","_config","inject","dropSpecialCharacters","hiddenInput","clearIfNotMatch","specialCharacters","prefix","suffix","thousandSeparator","decimalMarker","showMaskTyped","placeHolderCharacter","validation","separatorLimit","allowNegativeNumbers","leadZeroDateTime","leadZero","apm","inputTransformFn","outputTransformFn","keepCharacterPositions","_shift","Set","plusOnePosition","maskExpression","actualValue","showKeepCharacterExp","shownMaskExpression","deletedSpecialCharacter","_formatWithSeparators","thousandSeparatorChar","decimalChars","precision","decimalChar","isArray","regExp","decimals","rgx","percentage","sanitizedStr","getPrecision","Infinity","checkAndRemoveSuffix","inputValue","checkInputPrecision","marker","dm","precisionRegEx","_charToRegExpExpression","precisionMatch","precisionMatchLength","_compareOrIncludes","applyMaskWithPattern","maskAndPattern","customPattern","applyMask","justPasted","backspaced","cb","cursor","backspaceShift","stepBack","inputArray","valuesIP","ipError","_validIP","cpfCnpjError","_stripToDecimal","_splitPercentZero","thousandSeparatorCharEscaped","invalidChars","invalidCharRegexp","strForSep","commaShift","shiftStep","inputSymbol","symbolStarInPattern","_checkSymbolMask","_shiftStep","daysCount","inputValueCursor","inputValueCursorPlusOne","inputValueCursorPlusTwo","inputValueCursorMinusOne","inputValueCursorMinusTwo","inputValueCursorMinusThree","inputValueSliceMinusThreeMinusOne","inputValueSliceMinusOnePlusOne","inputValueSliceCursorPlusTwo","inputValueSliceMinusTwoCursor","maskStartWithMonth","startWithMonthInput","withoutDays","monthsCount","specialChart","day1monthInput","day2monthInput","day2monthInputDot","day1monthPaste","day2monthPaste","optional","_findSpecialChar","actualShift","onlySpecial","every","char","_findDropSpecialChar","maskSymbol","isDecimalMarker","comparedValue","excludedValue","decimalIndex","parsedValue","integerPart","decimalPart","integerString","decimal","ɵprov","NgxMaskService","isNumberValue","maskIsShown","selStart","selEnd","writingValue","maskChanged","_maskExpressionArray","triggerOnMaskChange","_previousValue","_currentValue","_emitValue","onChange","_elementRef","ElementRef","_renderer","Renderer2","showMaskInInput","formControlResult","getSymbol","newInputValue","actualResult","removeMask","shiftTypedSymbols","getActualValue","hideInput","resLen","prefNmask","countSkipedSymbol","_numberSkipedSymbols","regex","exec","applyValueChanges","formElement","_getActiveElement","clearIfNotMatchFn","curr","compare","maskChar","symbolToReplace","currSymbol","replaceSymbol","numberToString","toLocaleString","useGrouping","maximumFractionDigits","inputVal","_checkForIp","_checkForCpfCnpj","formElementProperty","setProperty","checkDropSpecialCharAmount","_removeMask","_removeSuffix","_removePrefix","shadowRootEl","shadowRoot","_toNumber","_checkSymbols","specialCharactersForRemove","_regExpForRemove","_retrieveSeparatorValue","_checkPatternForSpace","_replaceDecimalMarkerToDot","markers","separatorPrecision","_retrieveSeparatorPrecision","separatorValue","_checkPrecision","patternString","maskExpretion","separatorExpression","_repeatPatternSymbols","maskExp","accum","currVal","_start","_end","repeatNumber","replaceWith","currentLocaleDecimalMarker","ɵNgxMaskService_BaseFactory","NgxMaskDirective","showTemplate","maskFilled","_maskValue","_position","_justPasted","_isFocused","_isComposing","_maskService","onTouch","currentValue","firstChange","_setMask","requestAnimationFrame","click","_applyMask","validate","_createValidationError","_validateTime","counterOfOpt","lastIndexArray","special","onPaste","onModelChange","onInput","transformedValue","_inputValue","selectionStart","prefixLength","checkSymbols","checkSpecialCharacter","selectRangeBackspace","_code","part1","part2","caretShift","_backspaceShift","positionToApply","_getActualInputLength","setSelectionRange","onCompositionStart","onCompositionEnd","onBlur","repeat","selectionEnd","nextValue","onKeyDown","checkSelectionOnDeletion","cursorStart","readOnly","ctrlKey","metaKey","writeValue","controlValue","setDisabledState","disable","localeDecimalMarker","registerOnChange","registerOnTouched","isDisabled","rowMaskLen","requiredMask","expression","character","indexMask","None","NG_VALUE_ACCESSOR","NG_VALIDATORS","NgxMaskPipe","config","currentConfig","ɵpipe","pure","CustomFieldsComponent_div_2_mat_error_7_Template","CustomFieldsComponent_div_2_mat_error_8_Template","isInvalid","isInvalidLength","CustomFieldsComponent_div_3_mat_error_7_Template","CustomFieldsComponent_div_4_mat_error_10_Template","currentDate","CustomFieldsComponent_div_5_mat_error_5_Template","CustomFieldsComponent_div_5_mat_error_6_Template","CustomFieldsComponent_div_5_mat_error_7_Template","isInvalidCpf","CustomFieldsComponent_div_6_mat_error_5_Template","CustomFieldsComponent_div_6_mat_error_6_Template","isInvalidCnpj","option_r3","getCustomFieldOptions","CustomFieldsComponent_div_7_mat_option_10_Template","CustomFieldsComponent_div_7_mat_error_11_Template","CustomFieldsComponent_div_7_mat_error_12_Template","CustomFieldsComponent","customFieldService","toISOString","hasError","touched","CustomFieldsComponent_div_2_Template","CustomFieldsComponent_div_3_Template","CustomFieldsComponent_div_4_Template","CustomFieldsComponent_div_5_Template","CustomFieldsComponent_div_6_Template","CustomFieldsComponent_div_7_Template","field_r1","CustomFieldsFormComponent","fieldControlService","sendFormGroup","CustomFieldsFormComponent_div_2_Template","_r5","email_r6","_r7","setCustomFieldForm","_r8","openPriorityDialog","name_r2","phone_r4","ScheduleComponent_section_3_div_29_Template","ScheduleComponent_section_3_div_30_Template","ScheduleComponent_section_3_div_31_Template","showOptionList","formGroup","isQueueNoel","hasCustomFields","allowPriority","_r9","leaveCategory","categoryBackButton","_r10","onCardClick","button_r11","isQueuesNoel","ScheduleComponent","messagingService","isEmailFocus","isConstumFieldFormValid","customData","hasSlot","showOptions","cardList","cardLisTemp","selectedCategory","fontColor","phone","isPhoneNoel","uuid","uuidv4","requestPermission","receiveMessage","addControl","getCustomFields","groupServicesByCategory","buttons","getButtons","selectCategory","setCurrentService","getCustomFieldsValues","browserUuid","email","confirm","custom","customFieldId","filteredServices","serviceCategories","chain","groupBy","category","sortBy","currentCategory","ungrouped","backgroundColor","makeCategoryButton","makeServiceButton","note","shouldDisplayCategory","optionsDisplay","areSlotsAvailable","slotIsEmpty","hasSlotsLeft","isNike","nike","phoneNoelProviderId","queueNoelProviderId","i7","ScheduleComponent_section_3_Template","ScheduleComponent_app_collapsable_option_button_5_Template","ScheduleComponent_app_collapsable_option_button_6_Template","ScheduleComponent_app_empty_state_7_Template","ScheduleComponent_app_embed_chat_8_Template","providerLogoUrl","TermsModalComponent","matDialogRef","closeModal","TermsModalComponent_section_4_Template","TermsModalComponent_section_5_Template","TermsNoelModalComponent","PrivacyPolicyModalComponent","PrivacyPolicyModalComponent_section_4_Template","PrivacyPolicyModalComponent_section_5_Template","openTermsModal","openTermsNoelModal","isChecked","StartComponent_div_2_a_15_Template","StartComponent_div_2_a_16_Template","openPrivacyPolicyModal","StartComponent","interval","setInterval","clearInterval","setTemplate","templateColor","minWidth","StartComponent_app_header_0_Template","StartComponent_content_1_Template","StartComponent_div_2_Template","StartComponent_app_empty_state_3_Template","StartComponent_app_embed_chat_4_Template","TicketComponent","_activatedRoute","ticketAccessKey","snapshot","terminalAccessKey","queryParams","getService","isRecommendDesktop","lobbyContent","getTemplate","slug","removeTerminal","Hashids","valueOf","VidoconferenceAlertComponent","TrackInformationComponent","ticketPosition","ticketCode","convertStatus","update_r2","at","TicketDetailsComponent","isOpen","qrCodeBase","qrCodeBaseLink","lat","address","latitude","lng","longitude","toggleMoreDetails","display","borderRadius","TicketDetailsComponent_div_30_Template","TicketDetailsComponent_div_31_Template","TicketDetailsComponent_div_32_Template","TicketDetailsComponent_div_43_Template","TicketDetailsComponent_div_44_Template","TicketDetailsComponent_div_45_Template","TicketDetailsComponent_div_46_Template","TicketDetailsComponent_div_47_Template","TicketDetailsComponent_div_92_Template","locationAddress","locationCity","locationUF","activities","takeUntilDestroyed","destroyRef","assertInInjectionContext","DestroyRef","destroyed$","Observable","observer","onDestroy","takeUntil","argsOrArgArray","race","sources","innerFrom","raceInit","subscriber","subscriptions","createOperatorSubscriber","NEVER","noop","zip","resultSelector","popResultSelector","buffers","sourceIndex","NgbAlert_Conditional_1_Template","NgbCarousel_For_2_Template","slide_r2","select","NgbSlideEventSource","INDICATOR","activeId","NgbCarousel_For_5_ng_template_3_Template","NgbCarousel_For_5_Template","slide_r4","i_r5","$index","c_r6","$count","templateRef","NgbCarousel_Conditional_6_Template","arrowLeft","arrowRight","NgbDatepickerNavigationSelect_For_3_Template","m_r2","i18n","getMonthFullName","date","getMonthShortName","NgbDatepickerNavigationSelect_For_7_Template","y_r4","getYearNumerals","NgbDatepickerNavigation_Conditional_3_Template","selectBoxes","months","years","NgbDatepickerNavigation_Conditional_4_For_1_Conditional_0_Template","NgbDatepickerNavigation_Conditional_4_For_1_Conditional_3_Template","NgbDatepickerNavigation_Conditional_4_For_1_Template","month_r3","i_r4","getMonthLabel","firstDate","NgbDatepickerNavigation_Conditional_4_Template","NgbDatepickerMonth_Conditional_0_Conditional_1_Template","getWeekLabel","NgbDatepickerMonth_Conditional_0_For_3_Template","weekday_r2","NgbDatepickerMonth_Conditional_0_Template","datepicker","showWeekNumbers","viewModel","weekdays","NgbDatepickerMonth_For_2_Conditional_0_Conditional_1_Template","week_r3","getWeekNumerals","number","NgbDatepickerMonth_For_2_Conditional_0_For_3_Conditional_1_ng_template_0_Template","NgbDatepickerMonth_For_2_Conditional_0_For_3_Conditional_1_Template","day_r5","dayTemplate","NgbDatepickerMonth_For_2_Conditional_0_For_3_Template","doSelect","hidden","today","tabindex","ariaLabel","NgbDatepickerMonth_For_2_Conditional_0_Template","days","NgbDatepickerMonth_For_2_Template","collapsed","_c5","_c6","a0","NgbDatepicker_ng_template_0_Template","date_r1","currentMonth_r2","currentMonth","selected_r3","selected","disabled_r4","focused_r5","focused","NgbDatepicker_ng_template_2_For_1_Conditional_1_Template","month_r6","ctx_r6","NgbDatepicker_ng_template_2_For_1_Template","navigation","displayMonths","NgbDatepicker_ng_template_2_Template","model","NgbDatepicker_Conditional_5_Template","onNavigateEvent","onNavigateDateSelect","prevDisabled","nextDisabled","NgbDatepicker_ng_template_8_Template","NgbDatepicker_ng_template_9_Template","_c7","_c8","NgbNavOutlet_For_1_Conditional_0_ng_template_1_Template","NgbNavOutlet_For_1_Conditional_0_Template","item_r1","nav","paneRole","contentTpl","active","isPanelTransitioning","NgbNavOutlet_For_1_Template","isPanelInDom","_c9","a1","a2","pages","_c10","currentPage","_c11","_c12","_c13","NgbPagination_ng_template_0_Template","NgbPagination_ng_template_2_Template","NgbPagination_ng_template_4_Template","NgbPagination_ng_template_6_Template","NgbPagination_ng_template_8_Template","NgbPagination_ng_template_10_Template","page_r1","NgbPagination_ng_template_12_For_1_Conditional_1_ng_template_1_Template","NgbPagination_ng_template_12_For_1_Conditional_1_Template","page_r2","ellipsis_r4","tplEllipsis","NgbPagination_ng_template_12_For_1_Conditional_2_ng_template_1_Template","NgbPagination_ng_template_12_For_1_Conditional_2_Template","pageNumber_r6","selectPage","disabled_r8","defaultNumber_r9","tplNumber","NgbPagination_ng_template_12_For_1_Template","isEllipsis","NgbPagination_ng_template_12_Template","pages_r10","NgbPagination_Conditional_15_ng_template_2_Template","NgbPagination_Conditional_15_Template","_r11","first_r12","previousDisabled","tplFirst","page","NgbPagination_Conditional_16_ng_template_2_Template","NgbPagination_Conditional_16_Template","_r13","previous_r14","tplPrevious","NgbPagination_ng_template_17_Template","NgbPagination_Conditional_18_ng_template_2_Template","NgbPagination_Conditional_18_Template","_r15","next_r16","tplNext","NgbPagination_Conditional_19_ng_template_2_Template","NgbPagination_Conditional_19_Template","_r17","pageCount","last_r18","tplLast","NgbPopoverWindow_Conditional_1_ng_template_1_Template","NgbPopoverWindow_Conditional_1_ng_template_3_Template","NgbPopoverWindow_Conditional_1_Template","simpleTitle_r2","isTitleTemplate","NgbProgressbar_Conditional_1_Template","NgbRating_ng_template_0_Template","fill_r1","NgbRating_For_3_ng_template_3_Template","NgbRating_For_3_Template","index_r3","enter","handleClick","t_r5","nextRate","isInteractive","starTemplate","starTemplateFromContent","contexts","NgbTimepicker_Conditional_3_Template","changeHour","hourStep","isSmallSize","isLargeSize","NgbTimepicker_Conditional_5_Template","NgbTimepicker_Conditional_9_Template","changeMinute","minuteStep","NgbTimepicker_Conditional_11_Template","NgbTimepicker_Conditional_12_Conditional_3_Template","changeSecond","secondStep","NgbTimepicker_Conditional_12_Conditional_5_Template","NgbTimepicker_Conditional_12_Template","_r6","updateSecond","handleBlur","formatInput","spinners","formatMinSec","readonlyInputs","NgbTimepicker_Conditional_13_Conditional_3_Template","getAfternoonPeriod","NgbTimepicker_Conditional_13_Conditional_4_Template","getMorningPeriod","NgbTimepicker_Conditional_13_Template","toggleMeridian","hour","NgbToast_ng_template_0_Template","NgbToast_Conditional_2_ng_template_1_Template","NgbToast_Conditional_2_Template","hide","headerTpl_r3","contentHeaderTpl","NgbHighlight_For_1_Conditional_0_Template","part_r1","highlightClass","NgbHighlight_For_1_Conditional_1_Template","NgbHighlight_For_1_Template","ɵ$index_1_r3","_c14","NgbTypeaheadWindow_ng_template_0_Template","result_r1","term_r2","formatter_r3","NgbTypeaheadWindow_For_3_ng_template_1_Template","NgbTypeaheadWindow_For_3_Template","idx_r5","ctx_r5","markActive","result_r7","rt_r8","activeIdx","resultTemplate","transitionTimerDelayMs","NgbConfig","NgbAccordionConfig","_ngbConfig","closeOthers","destroyOnHide","_animation","toInteger","getValueInRange","isString","isNumber","isInteger","isFinite","isDefined","isPromise","padNumber","reflow","getBoundingClientRect","removeAccents","normalize","getActiveElement","root","activeEl","noopFn","runningTransitions","ngbRunTransition","zone","startFn","running","runningTransition","run","transition$","endFn","getComputedStyle","transitionProperty","of","runInZone","finishTransition$","stop$","endWith","transitionDurationMs","getTransitionDurationMs","transitionDelay","transitionDuration","runOutsideAngular","transitionEnd$","fromEvent","timer$","timer","ngbCollapsingTransition","classList","setInitialClasses","remove","measureCollapsingElementDimensionPx","hasShownClass","dimensionSize","NgbCollapseConfig","NgbCollapse","_zone","NgZone","_afterInit","_isCollapsed","ngbCollapseChange","shown","isCollapsed","_runTransitionWithEvents","_runTransition","nextId$3","NgbAccordionBody","_vcr","ViewContainerRef","_item","NgbAccordionItem","_viewRef","ngAfterContentChecked","_bodyTpl","_shouldBeInDOM","_createViewIfNotExists","_destroyViewIfExists","createEmbeddedView","detectChanges","node","rootNodes","TemplateRef","NgbAccordionCollapse","ngbCollapse","collapseId","toggleId","NgbAccordionToggle","NgbAccordionDirective","NgbAccordionButton","NgbAccordionHeader","_accordion","_cd","ChangeDetectorRef","_destroyRef","_collapsed","_id","_collapseAnimationRunning","show","_destroyOnHide","expand","_collapse","_ensureCanExpand","_anItemWasAlreadyExpandedDuringInitialisation","itemId","_getItem","expandAll","_items","collapseAll","toExpand","NgbAccordionModule","NgbAlertConfig","dismissible","ngbAlertFadingTransition","NgbAlert","i18n_0","$localize","NgbAlertModule","NgbCarouselConfig","wrap","keyboard","pauseOnHover","pauseOnFocus","showNavigationArrows","showNavigationIndicators","NgbSlideEventDirection","START","END","isBeingAnimated","removeDirectionClasses","removeClasses","ngbCarouselTransitionIn","ngbCarouselTransitionOut","nextId$2","carouselId","NgbSlide","slid","NgbCarousel","_platformId","PLATFORM_ID","_ngZone","_container","_interval$","_mouseHover$","_focused$","_pauseOnHover$","_pauseOnFocus$","_pause$","_wrap$","slide","_transitionIds","mouseHover","prev","ARROW_LEFT","ARROW_RIGHT","isPlatformBrowser","hasNextSlide$","combineLatest","slideEvent","slides","currentSlideId","slideArr","currentSlideIdx","_getSlideIdxById","distinctUntilChanged","pause","hasNextSlide","switchMap","TIMER","ngbCompleteTransition","_getSlideElement","onStable","activeSlide","_getSlideById","slideId","_cycleToSelected","_getSlideEventDirection","_getPrevSlide","_getNextSlide","cycle","slideIdx","transitionIds","selectedSlide","activeSlideTransition","isShown","previousId","nextSlide","currentActiveSlideId","nextActiveSlideId","i18n_1","i18n_2","i18n_3","NgTemplateOutlet","NavigationEvent","Key","NgbCarouselModule","NgbCollapseModule","NgbDate","before","after","fromJSDate","jsDate","getFullYear","getMonth","getDate","toJSDate","setFullYear","NgbCalendar","NGB_DATEPICKER_CALENDAR_FACTORY","NgbCalendarGregorian","getDaysPerWeek","getMonths","getWeeksPerMonth","getNext","period","checkMonth","expectedMonth","setMonth","setDate","getPrev","getWeekday","getDay","getWeekNumber","week","firstDayOfWeek","time","getToday","ɵNgbCalendarGregorian_BaseFactory","isChangedDate","dateComparator","isChangedMonth","checkDateInRange","minDate","maxDate","isDateSelectable","markDisabled","buildMonths","calendar","force","monthsToReuse","firstDates","reusedIndex","findIndex","buildMonth","dayTemplateData","outsideDays","weekdayWidth","weekdaysVisible","calendarToday","lastDate","weeks","getFirstViewDate","daysPerWeek","firstMonthDate","dayOfWeek","weekObject","getWeekdayLabel","newDate","nextDate","getDayAriaLabel","contextUserData","dayObject","currentYear","NgbDatepickerI18n","getDayNumerals","weekNumber","NgbDatepickerI18nDefault","_locale","LOCALE_ID","_monthsShort","getLocaleMonthNames","FormStyle","Standalone","TranslationWidth","Abbreviated","_monthsFull","Wide","weekday","weekdaysStartingOnSunday","getLocaleDayNames","Short","formatDate","ɵNgbDatepickerI18nDefault_BaseFactory","NgbDatepickerService","_VALIDATORS","_state","focusVisible","toValidDate","_calendar","_i18n","_model$","_dateSelect$","focusDate","selectedDate","model$","dateSelect$","patch","keys","obj","part","_nextState","focusedDate","focusSelect","emitEvent","defaultValue","ngbDate","struct","_updateState","_patchContexts","startDate","checkMinBeforeMax","forceRebuild","yearChanged","monthChanged","generateSelectBoxYears","generateSelectBoxMonths","prevMonthDisabled","prevDate","nextMonthDisabled","PREV","NEXT","NgbDatepickerConfig","NgbDateAdapter","NGB_DATEPICKER_DATE_ADAPTER_FACTORY","NgbDateStructAdapter","fromModel","toModel","ɵNgbDateStructAdapter_BaseFactory","Tab","Enter","Escape","Space","PageUp","PageDown","End","Home","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","NgbDatepickerKeyboardService","processKey","which","shiftKey","stopPropagation","NgbDatepickerDayView","isMuted","attrs","NgbDatepickerNavigationSelect","_month","_year","changeMonth","changeYear","ngAfterViewChecked","monthSelect","yearSelect","i18n_4","i18n_5","i18n_6","i18n_7","NgbDatepickerNavigation","onClickPrev","currentTarget","onClickNext","showSelect","i18n_8","i18n_9","i18n_10","i18n_11","NgbDatepickerContent","NgbDatepickerMonth","_keyboardService","_service","NgbDatepicker","onDateSelect","injector","Injector","_nativeElement","_ngbDateAdapter","_controlValue","_publicState","footerTemplate","dateSelect","onTouched","cd","oldDate","navigationPrevented","newSelectedDate","newFocusedDate","oldFocusedDate","navigateTo","focusIns$","_contentEl","focusOuts$","focusEvent","relatedTarget","_defaultDayTemplate","contentTemplateFromContent","contentTemplate","forwardRef","defaultContentTemplate_r9","isContainedIn","matchesSelectorIfAny","selector","closest","isMobile","userAgent","maxTouchPoints","ngbAutoClose","closed$","insideElements","ignoreElements","insideSelector","wrapAsyncForMobile","escapes$","tap","mouseDowns$","closeableClicks$","withLatestFrom","shouldClose","delay","FOCUSABLE_ELEMENTS_SELECTOR","getFocusableBoundaryElements","ngbFocusTrap","stopFocusTrap$","refocusOnClick","lastFocusedElement$","tabEvent","lastFocusedElement","NgbRTL","isRTL","getAttribute","placementSeparator","spacesRegExp","bootstrapPopperMatches","popperStartPrimaryPlacement","popperEndPrimaryPlacement","popperStartSecondaryPlacement","popperEndSecondaryPlacement","getPopperOptions","baseClass","rtl","placementVals","hasAuto","search","popperPlacements","_placement","getPopperClassPlacement","leftClass","rightClass","modifiers","phase","bsClassRegExp","popperElement","popper","popperPlacement","className","getBootstrapBaseClassPlacement","primary","secondary","newPrimary","classnames","newSecondary","classname","preventOverflow","arrow","fallbackPlacements","arg","ngbPositioning","popperInstance","createPopper","positioningOption","popperOptions","updatePopperOptions","createPopperLite","hostElement","targetElement","update","setOptions","NgbDateParserFormatter","NGB_DATEPICKER_PARSER_FORMATTER_FACTORY","NgbDateISOParserFormatter","parse","dateParts","ɵNgbDateISOParserFormatter_BaseFactory","NgbInputDatepickerConfig","autoClose","restoreFocus","ɵNgbInputDatepickerConfig_BaseFactory","addPopperOffset","offset$1","NgbInputDatepicker","_parserFormatter","_elRef","_vcRef","_dateAdapter","_changeDetector","_cRef","_disabled","_elWithFocus","_model","_positioning","_destroyCloseHandlers$","positionTarget","_onChange","_onTouched","_validatorChange","instance","registerOnValidatorChange","_fromDateStruct","invalid","actual","_writeModelValue","manualDateChange","updateView","inputValueChanged","createComponent","_applyPopupStyling","_applyDatepickerInputs","_subscribeForDatepickerOutputs","changeDetectorRef","appendToBody","_zoneSubscription","_setCloseHandlers","hostView","elementToFocus","setInput","datepickerClass","_applyPopupClass","datepickerComponentRef","inputName","newClass","oldClass","popupEl","datepickerInstance","navigateEvent","NgbCalendarHijri","_setYear","_setMonth","_setDay","toGregorian","MuhDate","fromGregorian","mDays","getDaysPerMonth","ɵNgbCalendarHijri_BaseFactory","isGregorianLeapYear$1","gDate","mod$1","GREGORIAN_EPOCH$1","ISLAMIC_EPOCH","NgbCalendarIslamicCivil","gYear","gMonth","gDay","julianDay","hYear","hMonth","getIslamicYearStart","hDay","getIslamicMonthStart","hDate","wjd","depoch","quadricent","dqc","cent","dcent","quad","dquad","yindex","yearday","leapadj","tjd2","isIslamicLeapYear","ɵNgbCalendarIslamicCivil_BaseFactory","GREGORIAN_FIRST_DATE","GREGORIAN_LAST_DATE","HIJRI_BEGIN","MONTH_LENGTH","NgbCalendarIslamicUmalqura","daysDiff","getDaysDiff","date1","date2","time1","UTC","time2","numOfDays","dayDiff","ɵNgbCalendarIslamicUmalqura_BaseFactory","toGregorian$3","jalaliDate","jdn","jalaliToJulian","jYear","jMonth","jDay","jalCal","gregorianToJulian$1","gy","march","julianToGregorian$1","setHours","fromGregorian$3","gdate","julianToJalali","julianDayNumber","jalaliDay","jalaliMonth","numberOfDays","jalaliYear","gregorianDay","mod","leap","setJalaliMonth","breaks","breaksLength","jump","leapJ","jp","jm","gm","gd","getDaysPerMonth$1","NgbCalendarPersian","setJalaliYear","yearValue","setJalaliDay","ɵNgbCalendarPersian_BaseFactory","PARTS_PER_HOUR","PARTS_PER_DAY","PARTS_FRACTIONAL_MONTH","PARTS_PER_MONTH","BAHARAD","isGregorianLeapYear","numberOfFirstDayInYear","monthsBeforeYear","fractionalMonthsBeforeYear","dayNumber","timeOfDay","isHebrewLeapYear","getDaysInGregorianMonth","getHebrewMonths","getDaysInHebrewYear","getDaysInHebrewMonth","yearLength","yearType","daysInMonth","getDayNumberInHebrewYear","numberOfDay","fromGregorian$2","GREGORIAN_EPOCH","daysSinceHebEpoch","monthsSinceHebEpoch","firstDayOfThisYear","dayOfYear","toGregorian$2","hebrewDate","diffDays","hebrewNumerals","numerals","hArray0_9","hArray10_19","hArray20_90","hArray100_900","hArray1000_9000","mem","NgbCalendarHebrew","setHebrewMonth","setHebrewDay","ɵNgbCalendarHebrew_BaseFactory","WEEKDAYS$1","MONTHS$1","MONTHS_LEAP","NgbDatepickerI18nHebrew","ɵNgbDatepickerI18nHebrew_BaseFactory","toGregorian$1","fromGregorian$1","NgbCalendarBuddhist","ɵNgbCalendarBuddhist_BaseFactory","JD_EPOCH","DAYSPERMONTH","setEthiopianMonth","leapYear","isEthiopianLeapYear","ethiopianDate","julianToGregorian","jd","ethiopianToJulian","juilianToEthiopia","gregorianToJulian","NgbCalendarEthiopian","setEthiopianYear","setEthiopianDay","dt","ɵNgbCalendarEthiopian_BaseFactory","WEEKDAYS","MONTHS","NgbDatepickerI18nAmharic","ɵNgbDatepickerI18nAmharic_BaseFactory","NgbDateNativeAdapter","_fromNativeDate","_toNativeDate","ɵNgbDateNativeAdapter_BaseFactory","NgbDateNativeUTCAdapter","getUTCFullYear","getUTCMonth","getUTCDate","setUTCFullYear","ɵNgbDateNativeUTCAdapter_BaseFactory","NgbDatepickerModule","NgbDropdownConfig","NgbDropdownItem","NgbDropdownButtonItem","NgbDropdownMenu","dropdown","NgbDropdown","menuItems","NgbDropdownAnchor","NgbDropdownToggle","ɵNgbDropdownToggle_BaseFactory","_bodyContainer","_open","openChange","_applyPlacementClasses","_applyContainer","_anchor","_menu","dropdownClass","_applyCustomDropdownClass","_positionMenu","_resetContainer","itemElements","_getMenuElements","itemElement","isEventFromToggle","_isEventFromToggle","_isDropup","focusableElements","menu","_getFirstPlacement","removeChild","dropdownMenuElement","bodyContainer","zIndex","NgbDropdownModule","NgbModalConfig","backdrop","fullscreen","ContentRef","nodes","viewRef","componentRef","PopupService","_componentType","_windowRef","_contentRef","_applicationRef","ApplicationRef","_injector","templateContext","_getContentRef","projectableNodes","mergeMap","windowRef","detachView","attachView","ScrollBar","scrollbarWidth","innerWidth","clientWidth","bodyStyle","overflow","paddingRight","actualPadding","NgbModalBackdrop","backdropClass","NgbActiveModal","dismiss","WINDOW_ATTRIBUTES","BACKDROP_ATTRIBUTES","NgbModalRef","_applyWindowOptions","windowInstance","optionName","_applyBackdropOptions","backdropInstance","_windowCmptRef","_backdropCmptRef","componentInstance","_closed","_hidden","dismissed","_dismissed","_beforeDismiss","dismissEvent","_resolve","_reject","_removeModalElements","_dismiss","windowTransition$","backdropTransition$","parentNode","ModalDismissReasons","BACKDROP_CLICK","ESC","NgbModalWindow","_closed$","fullscreenClass","_show","_disableEventHandling","transitions$","_dialogEl","_restoreFocus","_enableEventHandling","_setFocus","defaultPrevented","_bumpBackdrop","preventClose","autoFocusable","firstFocusable","elWithFocus","ariaLabelledBy","ariaDescribedBy","windowClass","centered","scrollable","modalDialogClass","NgbModalStack","_environmentInjector","EnvironmentInjector","_scrollBar","_activeWindowCmptHasChanged","_ariaHiddenValues","_scrollBarRestoreFn","_modalRefs","_windowCmpts","_activeInstances","ngZone","activeWindowCmpt","_revertAriaHidden","_setAriaHidden","_restoreScrollBar","scrollBarRestoreFn","_hideScrollBar","contentInjector","containerEl","activeModal","environmentInjector","contentRef","backdropCmptRef","_attachBackdrop","windowCmptRef","_attachWindowComponent","ngbModalRef","beforeDismiss","_registerModalRef","_registerWindowCmpt","activeInstances","dismissAll","hasOpenModals","elementInjector","_createFromTemplateRef","_createFromString","_createFromComponent","componentType","providers","parent","componentNativeEl","parentElement","children","sibling","unregisterModalRef","ngbWindowCmpt","NgbModal","_modalStack","combinedOptions","NgbModalModule","NgbNavConfig","orientation","roles","isValidNavId","navCounter","NgbNavContent","NgbNavItemRole","role","NgbNav","NgbNavItem","_nav","contentTpls","domId","panelDomId","isNgContainer","nodeType","Node","COMMENT_NODE","_navigatingWithKeyboard","activeIdChange","navItemChange$","navChange","_updateActiveId","onFocusout","enabledLinks","links","link","navItem","items","_notifyItemChanged","emitNavChange","nextItemId","_getItemById","NgbNavLinkBase","NgbNavLinkButton","ɵNgbNavLinkButton_BaseFactory","NgbNavLink","ɵNgbNavLink_BaseFactory","ngbNavFadeOutTransition","ngbNavFadeInTransition","NgbNavPane","NgbNavOutlet","_activePane","_updateActivePane","skip","nextItem","activeItem","_getPaneForItem","_getActivePane","_panes","pane","NgbNavModule","NgbPaginationConfig","boundaryLinks","directionLinks","ellipses","pageSize","NgbPaginationEllipsis","NgbPaginationFirst","NgbPaginationLast","NgbPaginationNext","NgbPaginationNumber","NgbPaginationPrevious","NgbPaginationPages","NgbPagination","pageChange","hasPrevious","hasNext","pageNumber","_updatePages","_applyEllipses","_applyRotation","rightOffset","_applyPagination","_setPageInRange","newPageNo","prevPageNo","collectionSize","newPage","tplPages","i18n_12","i18n_13","i18n_14","i18n_15","i18n_16","i18n_17","i18n_18","i18n_19","defaultPages_r19","NgbPaginationModule","ALIASES","hover","listenToTriggers","triggers","isOpenedFn","openFn","closeFn","openDelayMs","closeDelayMs","parsedTriggers","parseTriggers","trimmedTriggers","triggerPair","manualTriggers","activeOpenTriggers","cleanupFns","listener","withDelay","delayMs","openTrigger","closeTrigger","cleanupFn","NgbPopoverConfig","disablePopover","openDelay","closeDelay","NgbPopoverWindow","popoverClass","NgbPopover","_ngbPopoverWindowId","_popupService","_isDisabled","ngbPopover","popoverContext","popoverTitle","_getPositionTargetElement","_unregisterListenersFn","NgbPopoverModule","NgbProgressbarConfig","animated","striped","showValue","NgbProgressbar","_max","stacked","NgbProgressbarStacked","textType","getPercentValue","i18n_20","PercentPipe","NgbProgressbarModule","NgbRatingConfig","readonly","resettable","NgbRating","leave","rateChange","ariaValueText","rate","handleKeyDown","_updateMax","_setupContexts","internalChange","newRate","NgbRatingModule","toFragmentElement","CSS","defaultProcessChanges","changeActive","rootElement","fragments","scrollSpy","orderedFragments","getOrderedFragments","initialized","gapFragment","visibleFragments","preSelectedFragment","initialFragment","scrollTo","isIntersecting","fragment","boundingClientRect","rootBounds","fragmentIndex","NgbScrollSpyConfig","scrollBehavior","processChanges","NgbScrollSpyService","_observer","_containerElement","_fragments","_preRegisteredFragments","_active$","_distinctActive$","_active","_scrollBehavior","_diChangeDetectorRef","active$","_cleanup","rootMargin","processChangesFn","IntersectionObserver","observe","behavior","fragmentElement","heightPx","offsetTop","lastOffset","scrollTop","matchCounter","updateActiveWhenScrollingIsFinished","sameOffsetAsLastTime","unobserve","disconnect","NgbScrollSpyItem","_scrollSpyMenu","NgbScrollSpyMenu","_scrollSpyAPI","_isActive","NgbScrollSpy","_activate","_deactivate","_scrollSpyRef","_map","_lastActiveItem","_rebuildMap","_initialFragment","activeChange","_registerFragment","_unregisterFragment","NgbScrollSpyFragment","_scrollSpy","NgbScrollSpyModule","NgbTime","minute","updateHour","updateMinute","checkSecs","NgbTimepickerConfig","meridian","seconds","NgbTimeAdapter","NGB_DATEPICKER_TIME_ADAPTER_FACTORY","NgbTimeStructAdapter","ɵNgbTimeStructAdapter_BaseFactory","NgbTimepickerI18n","NgbTimepickerI18nDefault","_periods","getLocaleDayPeriods","Narrow","ɵNgbTimepickerI18nDefault_BaseFactory","FILTER_REGEX","NgbTimepicker","_hourStep","_minuteStep","_secondStep","_ngbTimeAdapter","structValue","propagateModelChange","newVal","isPM","enteredHour","formatHour","i18n_21","i18n_22","i18n_23","i18n_24","i18n_25","i18n_26","i18n_27","i18n_28","i18n_29","i18n_30","i18n_31","i18n_32","i18n_33","NgbTimepickerModule","NgbToastConfig","autohide","ariaLive","ngbToastFadeInTransition","ngbToastFadeOutTransition","NgbToastHeader","NgbToast","_init","_clearTimeout","_timeoutID","i18n_34","NgbToastModule","NgbTooltipConfig","disableTooltip","NgbTooltipWindow","tooltipClass","NgbTooltip","_ngbTooltipWindowId","ngbTooltip","_ngbTooltip","tooltipContext","NgbTooltipModule","NgbHighlight","accentSensitive","terms","prepareTerm","escapedTerms","regExpEscape","toSplit","parts","ARIA_LIVE_DELAY","getLiveElement","lazyCreate","Live","_delay","say","textContent","setText","NgbTypeaheadConfig","editable","focusFirst","selectOnExact","showHint","NgbTypeaheadWindow","selectEvent","activeChangeEvent","hasActive","getActive","_activeChanged","resetActive","popupClass","nextWindowId","NgbTypeahead","_live","_subscription","_inputValueBackup","_inputValueForSelectOnExact","_valueChanges$","_resubscribeTypeahead$","autocomplete","selectItem","activeDescendant","popupId","_subscribeToUserInput","ngbTypeahead","_unsubscribeFromUserInput","_closePopup","_writeInputValue","_formatItemForInput","dismissPopup","isPopupOpen","_showHint","_selectResult","_openPopup","_selectResultClosePopup","userInputLowerCase","formattedVal","inputFormatter","results$","resultFormatter","NgbTypeaheadModule","NgbOffcanvasConfig","scroll","NgbActiveOffcanvas","NgbOffcanvasRef","_panelCmptRef","_removeOffcanvasElements","panelTransition$","OffcanvasDismissReasons","NgbOffcanvasBackdrop","NgbOffcanvasPanel","offcanvasTransition$","panelClass","NgbOffcanvasStack","_activePanelCmptHasChanged","_backdropAttributes","_panelAttributes","_activeInstance","_panelCmpt","activeOffcanvas","panelCmptRef","ngbOffcanvasRef","_registerOffcanvasRef","_registerPanelCmpt","_applyPanelOptions","activeInstance","_offcanvasRef","hasOpenOffcanvas","unregisterOffcanvasRef","ngbPanelCmpt","NgbOffcanvas","_offcanvasStack","NgbOffcanvasModule","NGB_MODULES","NgbModule","SafeHtmlPipe","sanitizer","bypassSecurityTrustHtml","EJ8","nikeUrl","nikeAdsMsg","templateAux","TrackComponent_section_6_h3_1_Template","TrackComponent_section_6_h3_2_Template","TrackComponent_section_6_h3_3_Template","TrackComponent_section_6_h3_4_Template","TrackComponent_section_6_h3_5_Template","TrackComponent_section_6_h3_6_Template","TrackComponent_section_6_h3_7_Template","TrackComponent_section_6_a_17_Template","TrackComponent_section_6_div_18_Template","TrackComponent_section_6_div_19_Template","isVideoConference","urlMeet","TrackComponent_section_8_div_1_Template","TrackComponent_section_8_div_2_Template","TrackComponent_div_9_div_1_Template","goToChildTicket","onSubmitFeedback","goToTickets","TrackComponent_section_10_button_15_Template","feedbackForm","rateCtrl","isFeedbackLoading","childTicketKey","canChekin","TrackComponent_section_12_button_4_Template","TrackComponent_section_12_button_5_Template","isConfirmed","TrackComponent","feedbackService","positionUtil","presenceService","canGoToChild","comment","currentService","currentTemplate","_ref","addTransferredTicket","getChildrenKey","updateTicketsPositions","_x","getChild","geolocation","clearWatch","watchPositionId","dispose","setPresence","childTicketId","trackChild","child","activitiesList","activity","city","zipcode","estimatedStart","estimatedEnd","checkinConfigEnabled","selfServiceCheckinEnabled","chekinStartDate","selfServiceChekinStartDate","chekinEndDate","selfServiceChekinEndDate","feedbackDone","handlePermission","showServiceGuidelines","addVisibilityListener","visibilityState","reload","goToFeedback","feedBackSiteUrl","isDesktop","nikeStore","isBetween","isAfter","lastUpdate","isSessionClosed","isBefore","isAuthorized","isReopened","isValidStatus","jwt","rating","instant","afterDismissed","inCheckinPeriod","checkin","toPromise","verticalPosition","horizontalPosition","userLocation","distanceBetween","latFrom","lngFrom","latTo","lngTo","dLat","degreesToRadians","dLng","dLatFrom","dLatTo","atan2","earthRadius","degrees","permissions","query","currentLocation","watchPosition","coords","onAction","enableHighAccuracy","TrackComponent_content_5_Template","TrackComponent_section_6_Template","TrackComponent_div_7_Template","TrackComponent_section_8_Template","TrackComponent_div_9_Template","TrackComponent_section_10_Template","TrackComponent_section_11_Template","TrackComponent_section_12_Template","TrackComponent_section_13_Template","TrackComponent_section_14_Template","TrackComponent_app_embed_chat_15_Template","FilazeroRoutes","redirectTo","pathMatch","FilazeroModule","ReactiveFormsModule","CustomFieldsModule","LightboxModule","MAT_TOOLTIP_SCROLL_STRATEGY","overlay","Overlay","scrollStrategies","reposition","scrollThrottle","MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER","MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY","MAT_TOOLTIP_DEFAULT_OPTIONS","MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY","showDelay","hideDelay","touchendHideDelay","PANEL_CLASS","passiveListenerOptions","normalizePassiveListenerOptions","passive","MatTooltip","_overlayRef","_updatePosition","_tooltipInstance","updatePosition","positionAtOrigin","_positionAtOrigin","coerceBooleanProperty","_detach","_setupPointerEnterEventsIfNeeded","_showDelay","coerceNumberProperty","_hideDelay","_mouseLeaveHideDelay","_message","_ariaDescriber","removeDescription","_isTooltipVisible","_updateTooltipMessage","describe","_tooltipClass","_setTooltipClass","_overlay","_scrollDispatcher","_platform","scrollStrategy","_dir","_defaultOptions","_viewInitialized","_pointerExitEventsInitialized","_tooltipComponent","TooltipComponent","_viewportMargin","_cssClassPrefix","touchGestures","_passiveListeners","_destroyed","_scrollStrategy","change","_touchstartTimeout","_cancelPendingAnimations","overlayRef","_createOverlay","ComponentPortal","attach","_triggerElement","afterHidden","isVisible","existingStrategy","getConfig","positionStrategy","_origin","scrollableAncestors","getAncestorScrollContainers","strategy","flexibleConnectedTo","withTransformOriginOn","withFlexibleDimensions","withViewportMargin","withScrollableContainers","positionChanges","_updateCurrentPositionClass","connectionPair","scrollableViewProperties","isOverlayClipped","detachments","outsidePointerEvents","_handleBodyInteraction","keydownEvents","ESCAPE","disableTooltipInteractivity","addPanelClass","hasAttached","detach","_getOrigin","_getOverlayPosition","withPositions","_addOffset","main","fallback","isLtr","originY","offsetY","originX","offsetX","originPosition","_invertPosition","overlayPosition","overlayX","overlayY","_markForCheck","onMicrotaskEmpty","_currentPosition","classPrefix","removePanelClass","_platformSupportsMouseEvents","_setupPointerExitEventsIfNeeded","_disableNativeGesturesIfNecessary","touch","targetTouches","clientX","clientY","touchLongPressShowDelay","_addListeners","exitListeners","newTarget","overlayElement","_wheelListener","touchendListener","listeners","IOS","ANDROID","elementUnderPointer","elementFromPoint","gestures","userSelect","msUserSelect","webkitUserSelect","MozUserSelect","draggable","webkitUserDrag","touchAction","webkitTapHighlightColor","animationMode","_isMultiline","_closeOnInteraction","_isVisible","_onHide","_showAnimation","_hideAnimation","_hideTimeoutId","_showTimeoutId","_toggleVisibility","_handleMouseLeave","_finalizeAnimation","_onShow","_isTooltipMultiline","_handleAnimationEnd","animationName","toVisible","tooltip","_tooltip","showClass","hideClass","getPropertyValue","NgClass","tooltipState","MatTooltipModule","A11yModule","OverlayModule","CdkScrollableModule","MatCheckboxModule","MatFormFieldModule","MatInputModule","MatSnackBarModule","MatProgressSpinnerModule","MatSelectModule","MatCardModule","FieldBase","FieldInput","CustomFieldService","ENDPOINT","urlApi","serviceConfigList","buildFieldList","buildField","_angular_core__WEBPACK_IMPORTED_MODULE_1__","DateFormatPipe","locale","relativeTime","future","past","mm","RelativeTimeFormatPipe","scheduler","asyncScheduler","fromNow","TimezoneFormatPipe","FeedbackService","feedbackId","guid","platform","put","LocaleService","getBrowserLocales","opt","languageCodeOnly","browserLocales","languages","language","trimmedLocale","VAPID_KEY","SERVICE_WORKER","AngularFireMessaging","tokenChanges","requestToken","deleteToken","platformId","schedulers","vapidKey","_serviceWorker","serviceWorker","messaging","subscribeOn","outsideAngular","observeOn","insideAngular","isSupported","supported","__webpack_require__","ɵfirebaseAppFactory","app","ɵcacheInstance","shareReplay","bufferSize","refCount","Notification","serviceWorkerRegistration","notificationPermission$","emitter","notificationPerm","onchange","tokenChange$","switchMapTo","onMessage","catchError","defaultIfEmpty","ɵlazySDKProxy","FIREBASE_OPTIONS","FIREBASE_APP_NAME","ɵapplyMixins","onBackgroundMessage","MessagingService","afm","currentMessage","registerToken","registrationId","post","PusherService","channels","Pusher","channelName","events","ChannelEntry","channel","addHandler","handler","removeHandler","unbind","exists","unbind_all","NotificationService","notifications$","sendNotification","notification","serviceConfigEvent","parseMessage","TicketId","SDK_VERSION","setSDKVersion","DOMStorageWrapper","domStorage_","prefix_","removeItem","prefixedName_","storedVal","jsonEval","MemoryStorage","cache_","isInMemoryStorage","createStoragefor","domStorageName","domStorage","PersistentStorage","SessionStorage","logClient","Logger","LUIDGenerator","sha1","utf8Bytes","stringToByteArray","Sha1","sha1Bytes","digest","base64","encodeByteArray","buildLogMessage_","varArgs","logger","firstLog_","enableLogging$1","logger_","persistent","assert","logLevel","LogLevel","VERBOSE","logWrapper","fatal","isInvalidJSONNumber","NEGATIVE_INFINITY","MIN_NAME","MAX_NAME","nameCompare","aAsInt","tryParseInt","bAsInt","stringCompare","requireKey","ObjectToUniqueKey","splitStringBySize","segsize","dataSegs","each","doubleToIEEE754String","bias","ln","pow","LN2","hexByteString","hexByte","INTEGER_REGEXP_","intVal","exceptionGuard","stack","setTimeoutNonBlocking","Deno","unrefTimer","unref","AppCheckTokenProvider","appName_","appCheckProvider","appCheck","getImmediate","forceRefresh","addTokenChangeListener","addTokenListener","notifyForInvalidToken","FirebaseAuthTokenProvider","firebaseOptions_","authProvider_","auth_","onInit","auth","catch","addAuthTokenListener","removeTokenChangeListener","removeAuthTokenListener","errorMessage","EmulatorTokenProvider","accessToken","OWNER","FORGE_DOMAIN_RE","WEBSOCKET","LONG_POLLING","RepoInfo","host","secure","namespace","webSocketOnly","nodeAdmin","persistenceKey","includeNamespaceInQueryParams","isUsingEmulator","_host","_domain","internalHost","isCacheableHost","isCustomHost","newHost","toURLString","protocol","repoInfoConnectionURL","repoInfo","connURL","repoInfoNeedsQueryParam","ns","StatsCollection","counters_","incrementCounter","deepCopy","collections","reporters","statsManagerGetCollection","hashString","PacketReceiver","onMessage_","pendingResponses","currentResponseNum","closeAfterResponse","onClose","closeAfter","responseNum","handleResponse","requestNum","toProcess","BrowserPollConnection","connId","applicationId","appCheckToken","authToken","transportSessionId","lastSessionId","bytesSent","bytesReceived","everConnected_","log_","stats_","urlFn","onDisconnect","curSegmentNum","onDisconnect_","myPacketOrderer","isClosed_","connectTimeoutTimer_","onClosed_","isNodeSdk","called","wrappedFn","attachEvent","executeWhenDOMReady","scriptTagHolder","FirebaseIFrameScriptHolder","command","arg1","arg2","arg3","arg4","incrementIncomingBytes_","password","sendNewPolls","pN","urlParams","uniqueCallbackIdentifier","hostname","connectURL","addTag","startLongPoll","addDisconnectPingFrame","forceAllow","forceAllow_","forceDisallow","forceDisallow_","isAvailable","chrome","extension","Windows","UI","markConnectionHealthy","shutdown_","myDisconnFrame","send","dataStr","base64data","base64Encode","MAX_URL_DATA_SIZE","enqueueSegment","pw","commandCB","onMessageCB","outstandingRequests","pendingSegs","currentSerial","myIFrame","createIFrame_","script","domain","iframeContents","doc","iframe","contentWindow","contentDocument","alive","myID","myPW","newRequest_","theURL","curDataString","theSeg","seg","ts","addLongPollTag_","segnum","totalsegs","serial","doNewRequest","keepaliveTimeout","readyStateCB","loadCB","doNodeLongPoll","async","onload","onreadystatechange","rstate","onerror","WebSocketImpl","MozWebSocket","WebSocket","WebSocketConnection","keepaliveTimer","frames","totalFrames","connectionURL_","process","Authorization","env","proxy","HTTPS_PROXY","https_proxy","HTTP_PROXY","http_proxy","mySock","onopen","onclose","onmessage","handleIncomingFrame","isOldAndroid","oldAndroidRegex","oldAndroidMatch","previouslyFailed","appendFrame_","fullMess","jsonMess","handleNewFrameCount_","frameCount","extractFrameCount_","mess","resetKeepAlive","remainingData","sendString_","responsesRequiredToBeHealthy","healthyTimeout","TransportManager","initTransports_","ALL_TRANSPORTS","IS_TRANSPORT_INITIALIZED","globalTransportInitialized_","isWebSocketsAvailable","isSkipPollConnection","transports_","transports","transport","initialTransport","upgradeTransport","Connection","repoInfo_","applicationId_","appCheckToken_","authToken_","onReady_","onKill_","connectionCount","pendingDataMessages","state_","transportManager_","start_","conn","conn_","nextTransportId_","primaryResponsesRequired_","onMessageReceived","connReceiver_","onConnectionLost","disconnReceiver_","tx_","rx_","secondaryConn_","isHealthy_","healthyTimeoutMS","healthyTimeout_","everConnected","onConnectionLost_","onSecondaryConnectionLost_","onPrimaryMessageReceived_","onSecondaryMessageReceived_","sendRequest","dataMsg","sendData_","tryCleanupConnection","onSecondaryControl_","controlData","cmd","upgradeIfSecondaryHealthy_","secondaryResponsesRequired_","parsedData","layer","proceedWithUpgrade_","onControl_","onDataMessage_","onPrimaryResponse_","handshakePayload","onHandshake_","onConnectionShutdown_","onReset_","sendPingOnPrimaryIfNecessary_","handshake","sessionId","onConnectionEstablished_","tryStartUpgrade_","startUpgrade_","closeConnections_","ServerActions","pathString","onComplete","refreshAuthToken","refreshAppCheckToken","onDisconnectPut","onDisconnectMerge","onDisconnectCancel","reportStats","stats","allowedEvents_","listeners_","eventType","on","validateEventType_","eventData","getInitialEvent","et","OnlineMonitor","online_","isMobileCordova","currentlyOnline","MAX_PATH_DEPTH","MAX_PATH_LENGTH_BYTES","Path","pathOrString","pieceNum","pieces_","copyTo","pieceNum_","newEmptyPath","pathGetFront","pathGetLength","pathPopFront","pathGetBack","pathSlice","begin","pathParent","pieces","pathChild","childPathObj","childPieces","pathIsEmpty","newRelativePath","outerPath","innerPath","outer","inner","pathCompare","leftKeys","rightKeys","pathEquals","pathContains","ValidationPath","errorPrefix_","parts_","byteLength_","stringLength","validationPathCheckValid","validationPath","validationPathToErrorString","VisibilityMonitor","visibilityChange","mozHidden","msHidden","webkitHidden","visible_","visible","RECONNECT_MIN_DELAY","PersistentConnection","onDataUpdate_","onConnectStatus_","onServerInfoUpdate_","authTokenProvider_","appCheckTokenProvider_","authOverride_","nextPersistentConnectionId_","interruptReasons_","listens","outstandingPuts_","outstandingGets_","outstandingPutCount_","outstandingGetCount_","onDisconnectRequestQueue_","connected_","reconnectDelay_","maxReconnectDelay_","securityDebugCallback_","establishConnectionTimer_","requestCBHash_","requestNumber_","realtime_","forceTokenRefresh_","invalidAuthTokenCount_","invalidAppCheckTokenCount_","firstConnection_","lastConnectionAttemptTime_","lastConnectionEstablishedTime_","onVisible_","onOnline_","action","onResponse","curReqNum","initConnection_","deferred","Deferred","outstandingGet","request","_path","_queryObject","sendGet_","promise","currentHashFn","tag","queryId","_queryIdentifier","_queryParams","isDefault","loadsAllData","listenSpec","hashFn","sendListen_","req","warnOnListenWarnings_","removeListen_","warnings","safeGet","indexSpec","getIndex","indexPath","tryAuth","reduceReconnectDelayIfAdminCredential_","credential","isAdmin","tryAppCheck","authMethod","isValidFormat","requestData","cred","noauth","authvar","onAuthRevoked_","onAppCheckRevoked_","unlisten","sendUnlisten_","queryObj","sendOnDisconnect_","putInternal","sendPut_","queued","errorReason","reqNum","onDataPush_","onListenRevoked_","onSecurityDebugPacket_","handleTimestamp_","sendConnectStats_","restoreState_","scheduleConnect_","establishConnection_","online","onRealtimeDisconnect_","cancelSentTransactions_","shouldReconnect_","timeSinceLastConnectAttempt","reconnectDelay","onDataMessage","onReady","nextConnectionId_","canceled","connection","sendRequestFn","all","interrupt","resume","delta","serverTimeOffset","normalizedPathString","statusCode","explanation","queries","clientName","isReactNative","NamedNode","Wrap","Index","getCompare","indexedValueChanged","oldNode","newNode","oldWrapped","newWrapped","minPost","MIN","__EMPTY_NODE","KeyIndex","isDefinedOn","assertionError","maxPost","makePost","indexValue","KEY_INDEX","SortedMapIterator","startKey","isReverse_","resultGenerator_","nodeStack_","peek","LLRBNode","RED","SortedMap","EMPTY_NODE","inorderTraversal","reverseTraversal","min_","minKey","maxKey","fixUp_","removeMin_","isRed_","moveRedLeft_","smallest","rotateRight_","moveRedRight_","rotateLeft_","colorFlip_","nl","nr","checkMaxDepth_","blackDepth","check_","BLACK","comparator_","root_","getPredecessorKey","rightParent","getIterator","resultGenerator","getIteratorFrom","getReverseIteratorFrom","getReverseIterator","NAME_ONLY_COMPARATOR","NAME_COMPARATOR","MAX_NODE$2","LLRBEmptyNode","priorityHashText","validatePriorityNode","priorityNode","isLeafNode","getPriority","__childrenNodeConstructor","nodeFromJSON$1","MAX_NODE$1","LeafNode","value_","priorityNode_","lazyHash_","updatePriority","newPriorityNode","getImmediateChild","childName","hasChild","getPredecessorChildName","childNode","updateImmediateChild","newChildNode","updateChild","front","numChildren","forEachChild","exportFormat","toHash","compareTo","compareToLeafNode_","otherLeaf","otherLeafType","thisLeafType","otherIndex","VALUE_TYPE_ORDER","thisIndex","withIndex","isIndexed","PRIORITY_INDEX","PriorityIndex","aPriority","bPriority","indexCmp","LOG_2","Base12Num","current_","bitMask","bits_","nextBitIsOne","buildChildSet","childList","keyFn","mapSortFn","buildBalancedTree","namedNode","base12","buildPennant","chunkSize","childTree","attachPennant","pennant","isOne","buildFrom12Array","_defaultIndexMap","fallbackObject","IndexMap","indexes_","indexSet_","Default","indexKey","sortedMap","hasIndex","indexDefinition","addIndex","existingChildren","sawIndexedValue","iter","newIndex","indexName","newIndexSet","newIndexes","addToIndexes","indexedChildren","existingSnap","newChildren","removeFromIndexes","ChildrenNode","children_","indexMap_","newIndexMap","newPriority","newImmediateChild","numKeys","allIntegerKeys","childHash","resolveIndex_","predecessor","getFirstChildName","getFirstChild","getLastChildName","getLastChild","wrappedNode","startPost","endPost","MAX_NODE","otherChildrenNode","thisIter","otherIter","thisCurrent","otherCurrent","MaxNode","defineProperties","MAX","setMaxNode$1","setMaxNode","USE_HINZE","nodeFromJSON","json","childData","childrenHavePriority","childSet","sortedChildSet","setNodeFromJSON","PathIndex","indexPath_","extractChild","snap","aChild","bChild","valueNode","VALUE_INDEX","ValueIndex","changeValue","snapshotNode","changeChildAdded","changeChildRemoved","changeChildChanged","oldSnap","IndexedFilter","index_","newChild","affectedPath","optChangeAccumulator","oldChild","trackChildChange","updateFullNode","newSnap","filtersNodes","getIndexedFilter","RangedFilter","indexedFilter_","startPost_","getStartPost_","endPost_","getEndPost_","startIsInclusive_","startAfterSet_","endIsInclusive_","endBeforeSet_","getStartPost","getEndPost","matches","isWithinStart","isWithinEnd","filtered","hasStart","startName","getIndexStartName","getIndexStartValue","hasEnd","endName","getIndexEndName","getIndexEndValue","LimitedFilter","withinDirectionalStart","reverse_","withinEndPost","withinStartPost","withinDirectionalEnd","compareRes","rangedFilter_","limit_","getLimit","isViewFromLeft","fullLimitUpdateChild_","childKey","childSnap","changeAccumulator","oldEventCache","newChildNamedNode","windowBoundary","inRange","oldChildSnap","nextChild","getChildAfterChild","compareNext","newEventCache","QueryParams","limitSet_","startSet_","startNameSet_","endSet_","endNameSet_","viewFrom_","indexStartValue_","indexStartName_","indexEndValue_","indexEndName_","hasLimit","hasAnchoredLimit","queryParamsStartAt","newParams","queryParamsEndAt","queryParamsOrderBy","queryParamsToRestQueryStringParameters","qs","orderBy","startParam","endParam","limitToFirst","limitToLast","queryParamsGetQueryObject","sp","sn","ep","en","ein","l","viewFrom","vf","ReadonlyRestClient","listens_","getListenId_","listenId","thisListen","queryStringParameters","restRequest_","ac","querystring","xhr","XMLHttpRequest","responseText","SnapshotHolder","rootNode_","getNode","updateSnapshot","newSnapshotNode","newSparseSnapshotTree","sparseSnapshotTreeRemember","sparseSnapshotTree","sparseSnapshotTreeForget","tree","sparseSnapshotTreeForEachTree","prefixPath","func","sparseSnapshotTreeForEachChild","StatsListener","collection_","last_","newStats","stat","StatsReporter","server_","statsToReport_","statsListener_","FIRST_STATS_MIN_TIME","reportStats_","reportedStats","haveStatsToReport","OperationType","newOperationSourceServerTaggedQuery","fromUser","fromServer","tagged","OVERWRITE","MERGE","ACK_USER_WRITE","LISTEN_COMPLETE","AckUserWrite","affectedTree","revert","operationForChild","subtree","ListenComplete","Overwrite","Merge","CacheNode","node_","fullyInitialized_","filtered_","isFullyInitialized","isFiltered","isCompleteForPath","isCompleteForChild","EventGenerator","query_","eventGeneratorGenerateEventsForType","eventGenerator","registrations","eventCache","filteredChanges","eventGeneratorCompareChanges","aWrapped","bWrapped","materializedChange","eventGeneratorMaterializeSingleChange","prevName","registration","respondsTo","createEvent","newViewCache","serverCache","viewCacheUpdateEventSnap","viewCache","eventSnap","viewCacheUpdateServerSnap","serverSnap","viewCacheGetCompleteEventSnap","viewCacheGetCompleteServerSnap","emptyChildrenSingleton","ImmutableTree","EmptyChildren","fromObject","childPath","findRootMostMatchingPathAndValue","relativePath","predicate","childExistingPathAndValue","findRootMostValueAndPath","toSet","setTree","newTree","fold","fold_","pathSoFar","findOnPath","findOnPath_","pathToFollow","foreachOnPath","foreachOnPath_","currentRelativePath","foreach","foreach_","foreachChild","CompoundWrite","writeTree_","empty","compoundWriteAddWrite","compoundWrite","rootmost","rootMostPath","newWriteTree","compoundWriteAddWrites","updates","newWrite","compoundWriteRemoveWrite","compoundWriteHasCompleteWrite","compoundWriteGetCompleteNode","compoundWriteGetCompleteChildren","compoundWriteChildCompoundWrite","shadowingNode","compoundWriteIsEmpty","compoundWriteApply","applySubtreeWrite","writeTree","priorityWrite","writeTreeChildWrites","newWriteTreeRef","writeTreeRemoveWrite","writeId","allWrites","writeToRemove","removedWriteWasVisible","removedWriteOverlapsWithOtherWrites","currentWrite","writeTreeRecordContainsPath_","writeTreeResetTree_","visibleWrites","writeTreeLayerTree_","writeTreeDefaultFilter_","lastWriteId","writeRecord","writes","treeRoot","writePath","deepNode","writeTreeCalcCompleteEventCache","treePath","completeServerCache","writeIdsToExclude","includeHiddenWrites","subMerge","writeTreeRefCalcCompleteEventCache","writeTreeRef","writeTreeRefCalcCompleteEventChildren","completeServerChildren","writeTreeCalcCompleteEventChildren","completeChildren","topLevelSet","writeTreeRefCalcEventCacheAfterServerOverwrite","existingEventSnap","existingServerSnap","writeTreeCalcEventCacheAfterServerOverwrite","childMerge","writeTreeRefShadowingWrite","writeTreeShadowingWrite","writeTreeRefCalcIndexedSlice","completeServerData","writeTreeCalcIndexedSlice","toIterate","writeTreeRefCalcCompleteChild","existingServerCache","writeTreeCalcCompleteChild","writeTreeRefChild","ChildChangeAccumulator","changeMap","oldChange","oldType","getChanges","NO_COMPLETE_CHILD_SOURCE","NoCompleteChildSource_","getCompleteChild","WriteTreeCompleteChildSource","writes_","viewCache_","optCompleteServerCache_","serverNode","viewProcessorApplyOperation","viewProcessor","oldViewCache","operation","writesCache","completeCache","accumulator","filterServerNode","overwrite","viewProcessorApplyUserOverwrite","viewProcessorApplyServerOverwrite","viewProcessorApplyUserMerge","changedChildren","curViewCache","viewProcessorCacheHasChild","viewProcessorApplyServerMerge","ackUserWrite","viewProcessorRevertUserWrite","serverChildren","viewProcessorAckUserWrite","ackPath","mergePath","serverCachePath","viewProcessorListenComplete","oldServerNode","viewProcessorGenerateEventCacheAfterServerEvent","viewProcessorMaybeAddValueEvent","isLeafOrEmpty","oldCompleteSnap","changePath","oldEventSnap","completeEventChildren","completeNode","oldEventNode","updatedPriority","childChangePath","newEventChild","eventChildUpdate","changedSnap","oldServerSnap","newServerCache","serverFilter","newServerNode","viewProcessorApplyMerge","viewMergeTree","childMergeTree","isUnknownDeepMerge","View","initialViewCache","eventRegistrations_","indexFilter","queryParamsGetNodeFilter","processor_","newViewProcessor","initialServerCache","initialEventCache","eventGenerator_","viewGetCompleteServerCache","view","cache","viewIsEmpty","viewRemoveEventRegistration","eventRegistration","cancelError","cancelEvents","maybeEvent","createCancelEvent","existing","hasAnyCallback","viewApplyOperation","viewProcessorAssertIndexed","viewGenerateEventsForChanges_","eventGeneratorGenerateEventsForChanges","eventRegistrations","moves","changeChildMoved","referenceConstructor$1","referenceConstructor","SyncPoint","views","syncPointApplyOperation","syncPoint","optCompleteServerCache","syncPointGetView","serverCacheComplete","eventCacheComplete","syncPointAddEventRegistration","viewAddEventRegistration","viewGetInitialEvents","initialChanges","syncPointRemoveEventRegistration","hadCompleteView","syncPointHasCompleteView","viewQueryId","syncPointGetReferenceConstructor","_repo","syncPointGetQueryViews","syncPointGetCompleteServerCache","syncPointViewForQuery","syncPointGetCompleteView","syncPointViewExistsForQuery","syncTreeNextQueryTag_","SyncTree","listenProvider_","syncPointTree_","pendingWriteTree_","tagToQueryMap","queryToTagMap","syncTreeApplyUserOverwrite","syncTree","newData","writeTreeAddOverwrite","syncTreeApplyOperationToSyncPoints_","syncTreeApplyUserMerge","writeTreeAddMerge","changeTree","syncTreeAckUserWrite","writeTreeGetWrite","record","syncTreeApplyServerOverwrite","syncTreeRemoveEventRegistration","skipListenerDedup","maybeSyncPoint","removedAndEvents","syncPointIsEmpty","removingDefault","covered","parentSyncPoint","newViews","syncTreeCollectDistinctViewsForSubTree_","maybeChildSyncPoint","childMap","_key","childViews","newQuery","syncTreeCreateListenerForView_","startListening","syncTreeQueryForListening_","syncTreeTagForQuery","stopListening","defaultTag","queryToRemove","tagToRemove","syncTreeMakeQueryKey_","syncTreeRemoveTags_","removedQuery","removedQueryKey","removedQueryTag","syncTreeApplyTaggedQueryOverwrite","queryKey","syncTreeQueryKeyForTag_","syncTreeParseQueryKey_","queryPath","syncTreeApplyTaggedOperation_","syncTreeAddEventRegistration","skipSetupListener","foundAncestorDefaultView","pathToSyncPoint","childSyncPoint","viewAlreadyExists","syncTreeGetNextQueryTag_","syncTreeSetupListener_","queriesToStop","childQueries","queryToStop","syncTreeCalcCompleteEventCache","includeHiddenSets","syncTreeGetServerValue","serverCacheNode","viewGetCompleteNode","syncTreeApplyOperationHelper_","syncPointTree","syncTreeApplyOperationDescendantsHelper_","childOperation","childServerCache","childWritesCache","viewGetServerCache","syncTreeApplyTaggedListenComplete","syncTreeApplyListenComplete","errorForServerCode","splitIndex","syncTreeGetReferenceConstructor","ExistingValueProvider","DeferredValueProvider","syncTree_","path_","generateWithValues","resolveDeferredLeafValue","existingVal","serverValues","resolveScalarDeferredValue","resolveComplexDeferredValue","unused","existingNode","resolveDeferredValueTree","resolveDeferredValue","resolveDeferredValueSnapshot","rawPri","leafNode","childrenNode","Tree","childCount","treeSubTree","pathObj","treeGetValue","treeSetValue","treeUpdateParents","treeHasChildren","treeForEachChild","treeForEachDescendant","includeSelf","childrenFirst","treeGetPath","treeUpdateChild","childEmpty","treeIsEmpty","childExists","INVALID_KEY_REGEX_","INVALID_PATH_REGEX_","MAX_LEAF_SIZE_","isValidKey","isValidPathString","isValidPriority","validateFirebaseDataArg","fnName","validateFirebaseData","errorPrefix","hasDotValue","hasActualChild","validationPathPush","validationPathPop","validateFirebaseMergeDataArg","errorPrefix$1","mergePaths","curPath","prevPath","validateFirebaseMergePaths","validatePriority","validateKey","argumentName","validatePathString","validateRootPathString","validateWritablePath","validateUrl","parsedUrl","isValidRootPathString","EventQueue","eventLists_","recursionDepth_","eventQueueQueueEvents","eventQueue","eventDataList","currList","getPath","eventQueueRaiseEventsAtPath","eventQueueRaiseQueuedEventsMatchingPredicate","eventPath","eventQueueRaiseEventsForChangedPath","changedPath","sentAll","eventList","eventListRaise","eventFn","getEventRunner","INTERRUPT_REASON","MAX_TRANSACTION_RETRIES","Repo","forceRestClient_","appCheckProvider_","dataUpdateCount","eventQueue_","nextWriteId_","interceptServerDataCallback_","transactionQueueTree_","persistentConnection_","repoStart","repo","appId","authOverride","isMerge","repoOnDataUpdate","repoOnConnectStatus","connectStatus","repoOnServerInfoUpdate","repoUpdateInfo","statsReporter_","statsManagerGetOrCreateReporter","creatorFunction","infoData_","infoSyncTree_","infoEvents","serverSyncTree_","repoServerTime","repoGenerateServerValues","taggedChildren","syncTreeApplyTaggedQueryMerge","taggedSnap","syncTreeApplyServerMerge","repoRerunTransactions","repoRunOnDisconnectEvents","repoLog","resolvedOnDisconnectTree","resolved","repoAbortTransactions","repoGetNextWriteId","repoSetWithPriority","newNodeUnresolved","success","clearEvents","repoCallOnCompleteCallback","repoOnDisconnectCancel","repoOnDisconnectSet","repoRemoveEventCallbackForQuery","repoInterrupt","repoGetLatestState","excludeSets","repoSendReadyTransactions","repoPruneCompletedTransactionsBelowNode","queue","repoBuildTransactionQueue","transaction","repoSendTransactionQueue","setsToIgnore","txn","currentWriteId","latestState","snapToSend","latestHash","retryCount","currentOutputSnapshotRaw","dataToSend","pathToSend","callbacks","currentOutputSnapshotResolved","unwatcher","abortReason","rootMostTransactionNode","repoGetAncestorTransactionNode","repoRerunTransactionQueue","abortTransaction","currentNode","currentInputSnapshot","newDataNode","oldWriteId","newNodeResolved","applyLocally","transactionNode","transactionQueue","repoAggregateTransactionQueuesForNode","order","nodeQueue","treeForEachAncestor","repoAbortTransactionsOnNode","lastSent","parseRepoInfo","dataURL","parseDatabaseURL","scheme","subdomain","port","colonInd","slashInd","questionMarkInd","decodePath","pathStringDecoded","piece","decodeQuery","queryString","segment","kv","hostWithoutPort","dotInd","PUSH_CHARS","nextPushId","lastPushTime","lastRandChars","duplicateTime","timeStampChars","DataEvent","ref","getEventType","exportVal","CancelEvent","CallbackContext","snapshotCallback","cancelCallback","onValue","expDataSnapshot","previousChildName","onCancel","hasCancelCallback","userCallback","OnDisconnect","wrapCallback","setWithPriority","repoOnDisconnectSetWithPriority","repoOnDisconnectUpdate","childrenToMerge","QueryImpl","_orderByCalled","ReferenceImpl","isEqual","getModularInstance","sameRepo","samePath","sameQueryIdentifier","pathToUrlEncodedString","validateNoPreviousOrderByCall","validateQueryEndpoints","startNode","endNode","tooManyArgsError","wrongArgTypeError","validateLimit","parentPath","DataSnapshot","_node","_index","childRef","hasChildren","db","_checkNotDeleted","_root","refFromURL","parsedURL","repoUpdate","changedKey","changedValue","callbackContext","ValueEventRegistration","repoGetValue","cached","ChildEventRegistration","eventToCheck","cancelCallbackOrListenOptions","onlyOnce","onceCallback","dataSnapshot","repoAddEventCallbackForQuery","onChildAdded","onChildChanged","onChildMoved","onChildRemoved","expCallback","QueryConstraint","QueryEndAtConstraint","_value","_apply","QueryEndBeforeConstraint","queryParamsEndBefore","QueryStartAtConstraint","QueryStartAfterConstraint","queryParamsStartAfter","QueryLimitToFirstConstraint","_limit","queryParamsLimitToFirst","newLimit","QueryLimitToLastConstraint","queryParamsLimitToLast","QueryOrderByChildConstraint","parsedPath","QueryOrderByKeyConstraint","QueryOrderByPriorityConstraint","QueryOrderByValueConstraint","QueryEqualToValueConstraint","queryConstraints","queryImpl","constraint","syncPointSetReferenceConstructor","syncTreeSetReferenceConstructor","FIREBASE_DATABASE_EMULATOR_HOST_VAR","repos","useRestClient","repoManagerDatabaseFromApp","authProvider","dbUrl","databaseURL","projectId","isEmulator","dbEmulatorHost","authTokenProvider","repoManagerCreateRepo","appRepos","Database","_repoInternal","_instanceStarted","databaseAuthVariableOverride","_rootInternal","_delete","repoManagerDeleteRepo","appName","apiName","checkTransportInit","forceWebSockets","forceLongPolling","connectDatabaseEmulator","tokenProvider","mockUserToken","createMockUserToken","repoManagerApplyEmulatorSettings","goOnline","repoResume","enableLogging","SERVER_TIMESTAMP","TransactionResult","committed","runTransaction","transactionUpdate","repoStartTransaction","queueNode","priorityForNode","promiseComplete","simpleListen","echo","onEcho","registerDatabase","variant","SDK_VERSION$1","_registerComponent","Component","instanceIdentifier","getProvider","setMultipleInstances","registerVersion","_delegate","validateArgCount","validateCallback","objectToMerge","newObjectToMerge","_database","_validatePathString","getRef","Reference","Query","database","cancelCallbackOrContext","ret","getCancelAndContextArgs_","valueCallback","expSnapshot","validateEventType","validateContextObject","once","failureCallbackOrContext","orderByChild","orderByKey","orderByPriority","orderByValue","startAt","startAfter","endAt","endBefore","equalTo","cancelOrContext","_ReferenceImpl","_QueryImpl","_QueryParams","getKey","getParent","getRoot","_validateWritablePath","bool","validateBoolean","transactionResult","setPriority","expPromise","thennablePushRef","pushRef","expRef","OnDisconnect$1","INTERNAL","useEmulator","goOffline","ServerValue","TIMESTAMP","serverTimestamp","freeze","initStandalone","customAuthImpl","customAppCheckImpl","_setSDKVersion","ComponentContainer","Provider","setComponent","_repoManagerDatabaseFromApp","fromRef","listenType","prevKey","schedule","share","isNil","isFirebaseRef","pathRef","checkOperationCases","cases","stringCase","firebaseCase","isFirebaseDataSnapshot","snapshotCase","validateEventsArray","stateChanges","childEvent$","auditTrail","waitForLoaded","action$","loadedData","lastKeyToLoad","loaded","actions","loadedKeys","skipWhile","operate","taking","meta","createDataOperationMethod","createRemoveMethod","positionFor","buildView","currentKeyPosition","afterPreviousKeyPosition","positionAfter","snapshotChanges","listChanges","snapshotAction","createObjectSnapshotChanges","registerComponent","databaseExp","identifier","setServiceProps","index_esm2017_Database","index_esm2017_DataSnapshot","firebase","USE_EMULATOR","AngularFireDatabase","_useEmulator","useAuthEmulator","authSettings","tenantId","languageCode","useDeviceLanguage","persistence","_appCheckInstances","ɵauthFactory","pathOrRef","queryFn","createListReference","afDatabase","outsideAngularScheduler","refInZone","keepUnstableUntilFirst","valueChanges","idField","object","createObjectReference","createPushId","USE_EMULATOR$1","SETTINGS","TENANT_ID","LANGUAGE_CODE","USE_DEVICE_LANGUAGE","PERSISTENCE","PresenceService","pushId","onvisibilitychange","addVisibilityEvent","onbeforeunload","RemoteConfigService","shouldUseCustomInterface","cloudFunctionsUrl","valueType","ServiceLocator","StorageService","storageAux","initStorage","storage","terminals","setCurrentTerminal","findTerminal","_angular_core__WEBPACK_IMPORTED_MODULE_3__","TerminalService","getCurrentTerminal","pid","publicAccessKey","isServiceAvailable","hasStarted","hasEnded","startTime","endTime","TicketService","getCurrentTicket","PositionUtilService","production","recaptchaKey","cluster","app_id","artesanoProviderId","boticarioProviderId","apiKey","authDomain","storageBucket","messagingSenderId","measurementId","f04e0acea9fb4fc6ad5969f02ee48205","smartCodePrefix","DisplayService","eventMap","getEventMap","getPanel","setInitialCount","countStarted","countChecked","customersInStore","customersInQueue","subscribeQueues","serviceConfigs","serviceConfig","incrementQueue","incrementInStore","decrementQueue","decrementInStore","customersInQueueAmount","customersInStoreAmount","QueueTrackerComponent","QueueTrackerListComponent","isFull","StoreScannerComponent","elementType","correctionLevel","expressLink","providerLogo","backgroundUrl","DisplayComponent","displayService","doesExistPanel","totemKey","locationCapacity","panelBackgroundUrl","DisplayComponent_div_0_Template","DisplayComponent_div_1_Template","DisplayComponent_div_2_Template","TicketListTileComponent","TicketListTileComponent_div_10_Template","TicketListTileComponent_div_11_Template","ticket_r1","TicketListComponent","toUTCString","getTicketsPositions","hasNoTickets","TicketListComponent_app_empty_state_4_Template","TicketListComponent_app_ticket_list_tile_6_Template","_shouldUseCustomInterface","remoteConfigService","isArtesano","shoudUse","_getInterface","ArtesanoModule","routes","loadChildren","getInterface","AppRoutingModule","forRoot","AppComponent","addLangs","setDefaultLang","invalidTimingValue","ɵRuntimeError","ngDevMode","optimizeGroupPlayer","players","NoopAnimationPlayer","ɵAnimationGroupPlayer","normalizeKeyframes$1","normalizer","keyframes","preStyles","postStyles","normalizedKeyframes","previousOffset","previousKeyframe","kf","isSameOffset","normalizedKeyframe","prop","normalizedProp","normalizedValue","normalizePropertyName","ɵPRE_STYLE","AUTO_STYLE","normalizeStyleValue","animationFailed","listenOnPlayer","player","onStart","copyAnimationEvent","onDone","phaseName","totalTime","makeAnimationEvent","triggerName","_data","getOrSetDefaultValue","parseTimelineCommand","separatorPos","getParentElement","_CACHED_BODY","_IS_WEBKIT","validateStyleProperty","getBodyNode","containsVendorPrefix","containsElement","elm1","elm2","invokeQuery","NoopAnimationDriver","matchesElement","_selector","computeStyle","easing","previousPlayers","scrubberAccessRequested","AnimationDriver","NOOP","AnimationStyleNormalizer","ONE_SECOND","ENTER_CLASSNAME","LEAVE_CLASSNAME","NG_TRIGGER_CLASSNAME","NG_TRIGGER_SELECTOR","NG_ANIMATING_CLASSNAME","NG_ANIMATING_SELECTOR","resolveTimingValue","_convertTimeValueToMS","unit","resolveTiming","timings","allowNegativeValues","parseTimeExpression","delayMatch","easingVal","containsErrors","negativeStepValue","negativeDelayValue","setStyles","formerStyles","camelProp","dashCaseToCamelCase","eraseStyles","normalizeAnimationEntry","steps","validateStyleParams","extractStyleParams","varName","invalidStyleParams","PARAM_REGEX","interpolateParams","localVal","invalidParamValue","DASH_CASE_REGEXP","visitDslNode","visitor","AnimationMetadataType","Trigger","visitTrigger","visitState","Transition","visitTransition","Sequence","visitSequence","Group","visitGroup","Animate","visitAnimate","Keyframes","visitKeyframes","Style","visitStyle","visitReference","AnimateChild","visitAnimateChild","AnimateRef","visitAnimateRef","visitQuery","Stagger","visitStagger","invalidNodeType","DIMENSIONAL_PROP_SET","WebAnimationsStyleNormalizer","propertyName","userProvidedProperty","normalizedProperty","strVal","valAndSuffixMatch","invalidCssUnitValue","ANY_STATE","parseTransitionExpr","transitionValue","expressions","parseInnerTransitionStr","eventStr","parseAnimationAlias","alias","invalidTransitionAlias","invalidExpression","expr","separator","makeLambdaFromStates","isFullAnyStateExpr","TRUE_BOOLEAN_VALUES","FALSE_BOOLEAN_VALUES","lhs","rhs","LHS_MATCH_BOOLEAN","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","SELF_TOKEN","SELF_TOKEN_REGEX","buildAnimationAst","driver","AnimationAstBuilderVisitor","build","_driver","AnimationAstBuilderContext","_resetContextStyleTimingState","currentQuerySelector","collectedStyles","queryCount","depCount","invalidTrigger","definitions","def","stateDef","invalidDefinition","styleAst","astParams","containsDynamicStyles","missingSubs","sub","invalidState","metadataName","matchers","normalizeAnimationOptions","furthestTime","innerAst","timingAst","constructTimingAst","makeTimingAst","strValue","ast","dynamic","currentAnimateTimings","styleMetadata","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","metadataStyles","styleTuple","collectedEasing","styleData","tuple","collectedEntry","updateCollectedStyle","invalidParallelAnimation","firstStart","firstEnd","secondStart","secondEnd","invalidKeyframes","totalKeyframesWithOffsets","offsets","offsetsOutOfOrder","keyframesOutOfRange","offsetVal","consumeOffset","invalidOffset","keyframeOffsetsOutOfOrder","generatedOffset","keyframesMissingOffsets","animateDuration","durationUpToThisFrame","parentSelector","currentQuery","normalizeSelector","hasAmpersand","originalSelector","invalidStagger","currentTransition","unsupportedCSSPropertiesFound","normalizeParams","createTimelineInstruction","preStyleProps","postStyleProps","subTimeline","ElementInstructionMap","instructions","existingInstructions","ENTER_TOKEN_REGEX","LEAVE_TOKEN_REGEX","buildAnimationTimelines","enterClassName","leaveClassName","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","buildKeyframes","AnimationTimelineContext","currentTimeline","delayNextStep","timelines","timeline","containsAnimation","lastRootTimeline","allowOnlyTimelineStyles","elementInstructions","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","previousNode","_applyAnimationRefDelays","animationsRefsOptions","animationRefOptions","animationDelay","animationDelayValue","instruction","instructionTimings","appendInstructionToTimeline","updateOptions","subContextCount","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","incrementTime","hasCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","currentQueryTotal","sameElementTimeline","currentQueryIndex","parentContext","tl","maxTime","currentStaggerTime","startingTime","_enterClassName","_leaveClassName","initialTimeline","TimelineBuilder","skipIfExists","newOptions","optionsToUpdate","paramsToUpdate","_copyOptions","oldParams","newTime","fork","updatedTimings","builder","SubTimelineBuilder","stretchStartingKeyframe","invalidQuery","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_localTimelineStyles","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","_updateStyle","flattenStyles","allStyles","allProperties","getFinalKeyframe","properties","details1","details0","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","roundOffset","timeAtKeyframe","decimalPoints","mult","createTransitionInstruction","isRemovalTransition","fromStyles","toStyles","queriedElements","EMPTY_OBJECT","AnimationTransitionFactory","_triggerName","_stateStyles","nextState","oneOrMoreTransitionsMatch","matchFns","buildStyles","stateName","styler","currentOptions","nextOptions","skipAstBuild","transitionAnimationParams","currentAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","applyParamDefaults","elm","userParams","defaults","AnimationStateStyles","defaultParams","combinedParams","AnimationTrigger","_normalizer","transitionFactories","balanceProperties","fallbackTransition","createFallbackTransition","containsQueries","matchTransition","matchStyles","stateMap","key1","key2","EMPTY_INSTRUCTION_MAP","TimelineAnimationEngine","bodyNode","_animations","_playersById","register","registerFailed","_buildPlayer","autoStylesMap","inst","missingOrDestroyedAnimation","createAnimationFailed","_getPlayer","missingPlayer","baseEvent","finish","QUEUED_CLASSNAME","DISABLED_CLASSNAME","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","namespaceId","setForRemoval","setForMove","hasAnimation","removedBeforeQueried","NULL_REMOVED_QUERIED_STATE","REMOVAL_FLAG","StateValue","isObj","normalizeTriggerValue","absorbOptions","VOID_VALUE","DEFAULT_STATE_VALUE","AnimationTransitionNamespace","_engine","_triggers","_queue","_elementListeners","_hostClassName","addClass","missingTrigger","missingEvent","isTriggerEventValid","unsupportedTriggerEvent","triggersWithStates","statesByElement","afterFlush","_getTrigger","unregisteredTrigger","defaultToFallback","TransitionAnimationPlayer","objEquals","k1","k2","reportError","playersOnElement","playersByElement","isFallbackTransition","totalQueuedPlayers","removeClass","deregister","clearElementCache","elementPlayers","_signalRemovalForInnerTriggers","namespaces","fetchNamespacesByElement","triggerLeaveAnimation","afterFlushAnimationsDone","destroyAfterComplete","triggerStates","previousTriggersValues","markElementAsRemoved","processLeaveNode","prepareLeaveAnimationListeners","elementStates","visitedTriggers","removeNode","engine","childElementCount","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","removalFlag","destroyInnerAnimations","_onRemovalComplete","insertNode","drainQueuedTransitions","microtaskId","markedForDestroy","d0","TransitionAnimationEngine","onRemovalComplete","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","namespacesByHostElement","collectedEnterElements","collectedLeaveElements","queuedPlayers","createNamespace","_balanceNamespaceList","collectEnterElement","namespaceList","ancestor","ancestorNs","registerTrigger","_fetchNamespace","stateValue","isElementNode","insertBefore","details","markElementAsDisabled","hostNS","_buildInstruction","subTimelines","skipBuildAst","destroyActiveAnimationsForElement","finishActiveQueriedAnimationOnElement","whenRenderingDone","_flushAnimations","quietFns","triggerTransitionsFailed","skippedPlayers","skippedPlayersMap","queuedInstructions","allPreStyleElements","allPostStyleElements","disabledElementsSet","nodesThatAreDisabled","allTriggerElements","enterNodeMap","buildRootMap","enterNodeMapIds","allLeaveNodes","mergedLeaveNodes","leaveNodesWithoutAnimations","leaveNodeMapIds","leaveNodeMap","allPlayers","erroneousTransitions","nodeIsOrphaned","stringMap","setVal","transitionFailed","allPreviousPlayersMap","animationElementMap","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","replacePostStylesAsPre","postStylesMap","cloakAndComputeStyles","preStylesMap","rootPlayers","subPlayers","NO_PARENT_ANIMATION_ELEMENT_DETECTED","overrideTotalTime","parentWithAnimation","parentsToAdd","detectedParent","innerPlayer","_buildAnimation","setRealPlayer","parentPlayers","parentPlayer","playersForElement","syncPlayerEvents","queriedPlayerResults","queriedInnerElements","queriedPlayers","activePlayers","removeNodesAfterAnimationDone","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation","targetNameSpaceId","targetTriggerName","timelineInstruction","realPlayer","getRealPlayer","beforeDestroy","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","flattenGroupPlayers","finalPlayers","_flattenGroupPlayersRecur","wrappedPlayer","deleteOrUnsetInMap","currentValues","_player","_containsRealPlayer","_queuedCallbacks","triggerCallback","_queueEvent","cloakElement","oldValue","valuesMap","elementPropsMap","defaultStyle","cloakVals","failedElements","props","roots","rootMap","nodeSet","localRootMap","postEntry","preEntry","AnimationEngine","_triggerCache","_transitionEngine","_timelineEngine","componentId","cacheKey","triggerBuildFailed","buildTrigger","onInsert","onRemove","disableAnimations","property","eventPhase","SpecialCasedStyles","initialStylesByElement","WeakMap","_startStyles","_endStyles","initialStyles","_initialStyles","filterNonAnimatableStyles","isNonAnimatableStyle","WebAnimationsPlayer","_specialStyles","_onDoneFns","_onStartFns","_onDestroyFns","_initialized","_finished","_started","_originalOnDoneFns","_originalOnStartFns","currentSnapshot","_duration","_onFinish","_preparePlayerBeforeStart","domPlayer","_triggerWebAnimation","_finalKeyframe","onFinish","_resetDomPlayerState","_convertKeyframesToObject","kfs","frame","fromEntries","methods","WebAnimationsDriver","validateAnimatableStyleProperty","playerOptions","previousStyles","previousWebAnimationPlayers","allowPreviousPlayerStylesMerge","normalizeKeyframes","balancePreviousStylesIntoKeyframes","startingKeyframe","missingStyleProps","specialStyles","packageNonAnimatableStyles","startStyles","endStyles","DISABLE_ANIMATIONS_FLAG","BaseAnimationRenderer","_onDestroy","ɵtype","destroyNode","queueMicrotask","createComment","createText","refChild","isMove","isHostElement","selectRootElement","selectorOrNode","preserveContent","nextSibling","setStyle","flags","removeStyle","AnimationRenderer","resolveElementFromTarget","parseTriggerCallbackName","dotIndex","countId","scheduleListenerCallback","AnimationRendererFactory","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","createRenderer","renderer","onRendererDestroy","animationTriggers","_scheduleCountTask","animationCallbacksBuffer","InjectableAnimationEngine","ɵAnimationEngine","ɵChangeDetectionScheduler","SHARED_ANIMATION_PROVIDERS","ɵAnimationStyleNormalizer","instantiateDefaultStyleNormalizer","ɵWebAnimationsStyleNormalizer","useClass","RendererFactory2","instantiateRendererFactory","ɵAnimationRendererFactory","ɵDomRendererFactory2","BROWSER_ANIMATIONS_PROVIDERS","ɵWebAnimationsDriver","BROWSER_NOOP_ANIMATIONS_PROVIDERS","BrowserAnimationsModule","withConfig","ngModule","BrowserModule","NoopAnimationsModule","CONSTANTS","assertion","stringToByteArray$1","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","ENCODED_VALS","ENCODED_VALS_WEBSAFE","HAS_NATIVE_SUPPORT","atob","webSafe","init_","byteToCharMap","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","encodeString","decodeString","u","byteArrayToString","decodeStringToByteArray","charToByteMap","byte4","DecodeBase64StringError","base64urlEncodeWithoutPadding","base64Decode","deepExtend","getDefaultsFromGlobal","getGlobal","__FIREBASE_DEFAULTS__","getDefaults","getDefaultsFromEnvVariable","defaultsJsonString","getDefaultsFromCookie","cookie","getDefaultAppConfig","getUA","cordova","phonegap","PhoneGap","isNode","forceEnvironment","isBrowserExtension","runtime","isIE","ua","isIndexedDBAvailable","indexedDB","FirebaseError","ErrorFactory","fullCode","replaceTemplate","PATTERN","fullMessage","claims","signature","contextObj","deepEqual","aKeys","bKeys","aProp","bProp","isObject","thing","querystringParams","arrayVal","querystringDecode","tokens","extractQuerystring","queryStart","fragmentStart","chain_","buf_","W_","pad_","inbuf_","total_","blockSize","compress_","W","lengthMinusBlock","inbuf","createSubscribe","executor","onNoObservers","ObserverProxy","observers","unsubscribes","observerCount","finalized","forEachObserver","nextOrObserver","implementsAnyMethods","method","unsub","unsubscribeOne","finalError","sendOne","argCount","argError","argName","instanceFactory","multipleInstances","serviceProps","instantiationMode","onInstanceCreated","setInstantiationMode","setInstanceCreatedCallback","DEFAULT_ENTRY_NAME","instances","instancesDeferred","instancesOptions","onInitCallbacks","normalizedIdentifier","normalizeInstanceIdentifier","isInitialized","shouldAutoInitialize","getOrInitializeService","getComponent","isComponentEager","instanceDeferred","clearInstance","isComponentSet","getOptions","opts","existingCallbacks","existingInstance","invokeOnInitCallbacks","normalizeIdentifierForFactory","addComponent","addOrOverwriteComponent","getProviders","DEBUG","INFO","WARN","ERROR","SILENT","levelStringToEnum","debug","verbose","silent","defaultLogLevel","ConsoleMethod","defaultLogHandler","logType","_logLevel","_logHandler","_userLogHandler","setLogLevel","logHandler","userLogHandler","PlatformLoggerServiceImpl","getPlatformInfoString","isVersionServiceProvider","library","logString","name$o","PLATFORM_LOG_STRING","_apps","_components","_addComponent","_addOrOverwriteComponent","componentName","_getProvider","heartbeatController","triggerHeartbeat","_removeServiceInstance","_clearComponents","ERROR_FACTORY","FirebaseAppImpl","_isDeleted","_options","_name","_automaticDataCollectionEnabled","automaticDataCollectionEnabled","checkDestroyed","isDeleted","initializeApp","rawConfig","existingApp","newApp","getApp","getApps","deleteApp","_deleteApp","libraryKeyOrName","libraryMismatch","versionMismatch","warning","onLog","logCallback","setUserLogHandler","customLogLevel","level","setLogLevel$1","DB_NAME","DB_VERSION","STORE_NAME","dbPromise","getDbPromise","openDB","upgrade","oldVersion","createObjectStore","originalErrorMessage","_readHeartbeatsFromIndexedDB","objectStore","computeKey","idbGetError","writeHeartbeatsToIndexedDB","_x3","_x4","_writeHeartbeatsToIndexedDB","heartbeatObject","tx","HeartbeatServiceImpl","_heartbeatsCache","_storage","HeartbeatStorageImpl","_heartbeatsCachePromise","read","agent","getUTCDateString","lastSentHeartbeatDate","heartbeats","singleDateHeartbeat","hbTimestamp","STORED_HEARTBEAT_RETENTION_MAX_MILLIS","getHeartbeatsHeader","heartbeatsToSend","unsentEntries","extractHeartbeatsForHeader","heartbeatsCache","heartbeatEntry","hb","dates","countBytes","headerString","_canUseIndexedDBPromise","runIndexedDBEnvironmentCheck","validateIndexedDBOpenable","preExist","DB_CHECK_NAME","onsuccess","deleteDatabase","onupgradeneeded","readHeartbeatsFromIndexedDB","_x2","heartbeatsObject","existingHeartbeatsObject","registerCoreComponents","removeApp","_getService","_DEFAULT_ENTRY_NAME","firebase$1","createFirebaseNamespace","createFirebaseNamespaceCore","firebaseAppImpl","apps","__esModule","initializeAppCompat","modularAPIs","appCompat","registerComponentCompat","componentNameWithoutCompat","serviceNamespace","appArg","useAsService","default","App","extendNamespace","sdkVersion","ProviderId","FACEBOOK","GITHUB","GOOGLE","PASSWORD","PHONE","TWITTER","ActionCodeOperation","_prodErrorMap","debugErrorMap","_debugErrorMap","prodErrorMap","_DEFAULT_AUTH_ERROR_FACTORY","_logError","_fail","authOrCode","createErrorInternal","_createError","_errorWithCustomMessage","errorMap","_assertInstanceOf","fullParams","_errorFactory","_assert","debugFail","failure","debugAssert","_getCurrentUrl","_isHttpOrHttps","_getCurrentScheme","Delay","shortDelay","longDelay","_isOnline","onLine","_emulatorUrl","emulator","FetchProvider","fetchImpl","headersImpl","responseImpl","fetch","Headers","Response","SERVER_ERROR_MAP","CREDENTIAL_MISMATCH","MISSING_CUSTOM_TOKEN","INVALID_IDENTIFIER","MISSING_CONTINUE_URI","INVALID_PASSWORD","MISSING_PASSWORD","EMAIL_EXISTS","PASSWORD_LOGIN_DISABLED","INVALID_IDP_RESPONSE","INVALID_PENDING_TOKEN","FEDERATED_USER_ID_ALREADY_LINKED","MISSING_REQ_TYPE","EMAIL_NOT_FOUND","RESET_PASSWORD_EXCEED_LIMIT","EXPIRED_OOB_CODE","INVALID_OOB_CODE","MISSING_OOB_CODE","CREDENTIAL_TOO_OLD_LOGIN_AGAIN","INVALID_ID_TOKEN","TOKEN_EXPIRED","USER_NOT_FOUND","TOO_MANY_ATTEMPTS_TRY_LATER","INVALID_CODE","INVALID_SESSION_INFO","INVALID_TEMPORARY_PROOF","MISSING_SESSION_INFO","SESSION_EXPIRED","MISSING_ANDROID_PACKAGE_NAME","UNAUTHORIZED_DOMAIN","INVALID_OAUTH_CLIENT_ID","ADMIN_ONLY_OPERATION","INVALID_MFA_PENDING_CREDENTIAL","MFA_ENROLLMENT_NOT_FOUND","MISSING_MFA_ENROLLMENT_ID","MISSING_MFA_PENDING_CREDENTIAL","SECOND_FACTOR_EXISTS","SECOND_FACTOR_LIMIT_EXCEEDED","BLOCKING_FUNCTION_ERROR_RESPONSE","RECAPTCHA_NOT_ENABLED","MISSING_RECAPTCHA_TOKEN","INVALID_RECAPTCHA_TOKEN","INVALID_RECAPTCHA_ACTION","MISSING_CLIENT_TYPE","MISSING_RECAPTCHA_VERSION","INVALID_RECAPTCHA_VERSION","INVALID_REQ_TYPE","DEFAULT_API_TIMEOUT_MS","_addTidIfNecessary","_performApiRequest","_performApiRequest2","customErrorMap","_performFetchWithErrorHandling","_getAdditionalHeaders","_getFinalTarget","apiHost","referrerPolicy","_x5","_x6","_x7","_performFetchWithErrorHandling2","fetchFn","_canInitEmulator","networkTimeout","NetworkTimeout","clearNetworkTimeout","_makeTaggedError","ok","serverErrorCode","serverErrorMessage","authError","_performSignInRequest","_x8","_x9","_x10","_x11","_performSignInRequest2","serverResponse","_serverResponse","apiScheme","errorParams","phoneNumber","_tokenResponse","_deleteAccount","_deleteLinkedAccounts","_getAccountInfo","utcTimestampToDateString","utcTimestamp","_getIdTokenResult","user","userInternal","getIdToken","_parseToken","auth_time","iat","signInProvider","sign_in_provider","authTime","secondsStringToMilliseconds","issuedAtTime","expirationTime","signInSecondFactor","sign_in_second_factor","algorithm","_logoutIfInvalidated","_x19","_x20","_logoutIfInvalidated2","bypassAuthState","isUserInvalidated","currentUser","signOut","ProactiveRefresh","isRunning","timerId","errorBackoff","_stop","getInterval","wasError","stsTokenManager","iteration","UserMetadata","createdAt","lastLoginAt","_initializeTime","lastSignInTime","creationTime","_copy","_reloadWithoutSaving","_x21","_reloadWithoutSaving2","idToken","getAccountInfo","_x16","_x17","users","coreAccount","_notifyReloadListener","newProviderData","providerUserInfo","extractProviderData","__rest","uid","rawId","displayName","photoURL","photoUrl","providerData","mergeProviderData","oldIsAnonymous","isAnonymous","newIsAnonymous","passwordHash","localId","emailVerified","_reload","_persistUserIfCurrent","_notifyListenersIfCurrent","_requestStsToken","refreshToken","grant_type","refresh_token","tokenApiHost","access_token","expiresIn","expires_in","StsTokenManager","isExpired","updateFromServerResponse","_tokenExpiresIn","parsedToken","updateTokensAndExpiration","refresh","clearRefreshToken","oldToken","requestStsToken","_x23","_x24","expiresInSec","fromJSON","manager","_assign","_clone","_performRefresh","assertStringOrUndefined","UserImpl","proactiveRefresh","reloadUserInfo","reloadListener","getIdTokenResult","_x18","_x22","userInfo","newUser","_onReload","_startProactiveRefresh","_stopProactiveRefresh","_updateTokensIfNecessary","tokensRefreshed","deleteAccount","_x12","_x13","_redirectEventId","_fromJSON","plainObjectTokenManager","_fromIdTokenResponse","idTokenResponse","instanceCache","_getInstance","cls","Function","InMemoryPersistence","_isAvailable","_set","_get","_this9","_remove","_this10","_addListener","_listener","_removeListener","inMemoryPersistence","_persistenceKeyName","PersistenceUserManager","userKey","fullUserKey","fullPersistenceKey","boundEventHandler","_onStorageEvent","setCurrentUser","getCurrentUser","_this11","blob","removeCurrentUser","savePersistenceForRedirect","setPersistence","newPersistence","_this12","persistenceHierarchy","availablePersistences","_ref2","_x25","selectedPersistence","userToMigrate","migrationHierarchy","_shouldAllowMigration","_ref3","_x26","_getBrowserName","_isIEMobile","_isFirefox","_isBlackBerry","_isWebOS","_isSafari","_isChromeIOS","_isAndroid","_isIOS","_isMobileBrowser","_getClientVersion","clientPlatform","frameworks","reportedPlatform","reportedFrameworks","_getRecaptchaParams","recaptchaSiteKey","getRecaptchaConfig","_x28","_x29","_getRecaptchaConfig","isV2","grecaptcha","getResponse","isEnterprise","enterprise","RecaptchaConfig","siteKey","emailPasswordEnabled","recaptchaEnforcementState","enforcementState","_loadJS","getScriptParentElement","getElementsByTagName","_generateCallbackName","RecaptchaEnterpriseVerifier","authExtern","_castAuth","verify","_this13","_retrieveSiteKey","_agentRecaptchaConfig","_tenantRecaptchaConfigs","_ref4","clientType","_x31","_x32","retrieveRecaptchaToken","ready","retrieveSiteKey","_x30","injectRecaptchaFields","_x33","_x34","_x35","_injectRecaptchaFields","captchaResp","verifier","captchaResponse","newRequest","recaptchaVersion","AuthMiddlewareQueue","pushCallback","onAbort","wrappedCallback","runMiddleware","nextUser","_this14","onAbortStack","beforeStateCallback","originalMessage","AuthImpl","heartbeatServiceProvider","appCheckServiceProvider","emulatorConfig","operations","authStateSubscription","idTokenSubscription","beforeStateQueue","redirectUser","isProactiveRefreshEnabled","_isInitialized","_deleted","_initializationPromise","_popupRedirectResolver","lastNotifiedUid","settings","appVerificationDisabledForTesting","clientVersion","sdkClientVersion","_initializeWithPersistence","popupRedirectResolver","_this15","persistenceManager","_shouldInitProactively","_initialize","initializeCurrentUser","_this16","assertedPersistence","_currentUser","_updateCurrentUser","_this17","previouslyStoredUser","futureCurrentUser","needsTocheckMiddleware","getOrInitRedirectPersistenceManager","redirectUserEventId","storedUserEventId","tryRedirectSignIn","directlySetCurrentUser","_overrideRedirectResult","reloadAndSetCurrentUserOrClear","redirectResolver","_this18","_completeRedirectFn","_setRedirectUser","_this19","_getUserLanguage","navigatorLanguage","_this20","updateCurrentUser","userExtern","_this21","skipBeforeStateCallbacks","_this22","notifyAuthListeners","_this23","redirectPersistenceManager","_this24","initializeRecaptchaConfig","_this25","_getPersistence","_updateErrorMap","onAuthStateChanged","registerStateListener","beforeAuthStateChanged","onIdTokenChanged","_this26","redirectManager","_this27","resolver","_redirectPersistence","_redirectUserForId","_this28","_this29","currentUid","addObserver","_this30","_logFramework","framework","_getFrameworks","_this31","heartbeatsHeader","_getAppCheckToken","_this32","appCheckTokenResult","_logWarn","connectAuthEmulator","authInternal","disableWarnings","extractProtocol","extractHostAndPort","authority","hostAndPort","bracketedIPv6","parsePort","portStr","emitEmulatorWarning","attachBanner","sty","border","margin","textAlign","protocolEnd","AuthCredential","signInMethod","_getIdTokenResponse","_auth","_linkToIdToken","_idToken","_getReauthenticationResolver","resetPassword","_x36","_x37","_resetPassword","updateEmailPassword","_x38","_x39","_updateEmailPassword","_applyActionCode$","signInWithPassword","_x42","_x43","_signInWithPassword","sendOobCode","_x44","_x45","_sendOobCode","_sendEmailVerification$","sendPasswordResetEmail$1","_x48","_x49","_sendPasswordResetEmail$","sendSignInLinkToEmail$1","_x50","_x51","_sendSignInLinkToEmail$","_verifyAndChangeEmail","_signInWithEmailLink$","_signInWithEmailLinkForLinking","EmailAuthCredential","_email","_password","_tenantId","_fromEmailAndPassword","_fromEmailAndCode","oobCode","_this33","returnSecureToken","requestWithRecaptcha","_ref10","_x58","signInWithEmailLink$1","_x54","_x55","_this34","signInWithEmailLinkForLinking","_x56","_x57","signInWithIdp","_x59","_x60","_signInWithIdp","OAuthCredential","pendingToken","_fromParams","nonce","oauthToken","oauthTokenSecret","secret","buildRequest","autoCreate","requestUri","postBody","id_token","oauth_token_secret","_sendPhoneVerificationCode","_signInWithPhoneNumber$","_linkWithPhoneNumber$","temporaryProof","VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_","_verifyPhoneNumberForExisting","PhoneAuthCredential","_fromVerification","verificationId","verificationCode","_fromTokenResponse","signInWithPhoneNumber$1","_x63","_x64","_makeVerificationRequest","linkWithPhoneNumber$1","_x65","_x66","verifyPhoneNumberForExisting","_x67","_x68","sessionInfo","ActionCodeURL","actionLink","searchParams","parseMode","continueUrl","parseLink","parseDeepLink","doubleDeepLink","deep_link_id","iOSDeepLink","EmailAuthProvider","PROVIDER_ID","credentialWithLink","emailLink","actionCodeUrl","EMAIL_PASSWORD_SIGN_IN_METHOD","EMAIL_LINK_SIGN_IN_METHOD","FederatedAuthProvider","defaultLanguageCode","customParameters","setDefaultLanguage","setCustomParameters","customOAuthParameters","getCustomParameters","BaseOAuthProvider","scopes","addScope","scope","getScopes","OAuthProvider","credentialFromJSON","_credential","rawNonce","credentialFromResult","userCredential","oauthCredentialFromTaggedObject","credentialFromError","tokenResponse","oauthIdToken","oauthAccessToken","FacebookAuthProvider","FACEBOOK_SIGN_IN_METHOD","credentialFromTaggedObject","GoogleAuthProvider","GOOGLE_SIGN_IN_METHOD","GithubAuthProvider","GITHUB_SIGN_IN_METHOD","SAMLAuthCredential","_create","SAMLAuthProvider","samlCredentialFromTaggedObject","TwitterAuthProvider","TWITTER_SIGN_IN_METHOD","signUp","_x69","_x70","_signUp","UserCredentialImpl","operationType","providerIdForResponse","_forOperation","_signInAnonymously","MultiFactorError","_fromErrorAndOperation","_processCredentialSavingMfaContextIfNecessary","providerDataAsNames","_unlink","_assertLinkedStatus","deleteLinkedAccounts","_x14","_x15","deleteProvider","providersLeft","pd","_link$1","_x74","_x75","_link$","_x76","_x77","_x78","_assertLinkedStatus2","expected","_reauthenticate","_x79","_x80","_reauthenticate2","parsed","_signInWithCredential","_x81","_x82","_signInWithCredential2","signInWithCredential","_x83","_x84","_signInWithCredential3","linkWithCredential","_x85","_x86","_linkWithCredential","reauthenticateWithCredential","_x87","_x88","_reauthenticateWithCredential","_signInWithCustomToken$","_signInWithCustomToken","customToken","signInWithCustomToken$1","_x89","_x90","MultiFactorInfoImpl","factorId","mfaEnrollmentId","enrollmentTime","enrolledAt","_fromServerResponse","enrollment","PhoneMultiFactorInfoImpl","TotpMultiFactorInfoImpl","phoneInfo","_setActionCodeSettingsOnRequest","actionCodeSettings","dynamicLinkDomain","canHandleCodeInApp","handleCodeInApp","iOS","bundleId","iOSBundleId","android","packageName","androidInstallApp","installApp","androidMinimumVersionCode","minimumVersion","androidPackageName","_sendPasswordResetEmail","requestType","_ref24","_x197","_confirmPasswordReset","newPassword","_applyActionCode","applyActionCode$1","_x40","_x41","checkActionCode","_x101","_x102","_checkActionCode","authModular","newEmail","mfaInfo","multiFactorInfo","previousEmail","_verifyPasswordResetCode","_createUserWithEmailAndPassword","signUpResponse","_ref25","_x198","_sendSignInLinkToEmail","setActionCodeSettings","_ref26","_x199","_signInWithEmailLink","_createAuthUri","_fetchSignInMethodsForEmail","continueUri","signinMethods","createAuthUri","_x114","_x115","_sendEmailVerification","sendEmailVerification$1","_x46","_x47","_verifyBeforeUpdateEmail","verifyAndChangeEmail","_x52","_x53","_updateProfile$","_updateProfile","profileRequest","updateProfile$1","_x123","_x124","passwordProvider","updateEmailOrPassword","_x127","_x128","_x129","_updateEmailOrPassword","GenericAdditionalUserInfo","isNewUser","profile","FederatedAdditionalUserInfoWithUsername","username","FacebookAdditionalUserInfo","GithubAdditionalUserInfo","login","GoogleAdditionalUserInfo","TwitterAdditionalUserInfo","screenName","getAdditionalUserInfo","rawUserInfo","MultiFactorSessionImpl","_fromIdtoken","_fromMfaPendingCredential","mfaPendingCredential","multiFactorSession","pendingCredential","MultiFactorResolverImpl","signInResolver","_fromError","_ref11","mfaResponse","_process","_x131","resolveSignIn","assertionExtern","_this35","MultiFactorUserImpl","enrolledFactors","_fromUser","getSession","_this36","enroll","_this37","finalizeMfaResponse","unenroll","infoOrUid","_this38","withdrawMfa","multiFactorUserCache","STORAGE_AVAILABLE_KEY","BrowserPersistenceClass","storageRetriever","BrowserLocalPersistence","poll","onStorageEvent","localCache","pollTimer","safariLocalStorageNotSynced","_iframeCannotSyncWebStorage","_isIframe","fallbackToPolling","forAllChangedKeys","newValue","_oldValue","notifyListeners","detachListener","stopPolling","storedValue","triggerListeners","_isIE10","documentMode","startPolling","StorageEvent","attachListener","_superprop_get_set","_this39","_superprop_get_get","_this40","_superprop_get_remove","_this41","browserLocalPersistence","BrowserSessionPersistence","sessionStorage","browserSessionPersistence","Receiver","eventTarget","handlersMap","handleEvent","receivers","receiver","isListeningto","newInstance","_this42","messageEvent","eventId","handlers","ports","postMessage","promises","_ref13","_x133","_allSettled","_ref12","_x132","_subscribe","eventHandler","_unsubscribe","_generateEventId","Sender","removeMessageHandler","messageChannel","port1","_send","_this43","MessageChannel","completionTimer","ackTimer","port2","finally","_window","_isWorker","WorkerGlobalScope","importScripts","_getActiveServiceWorker2","DB_OBJECTSTORE_NAME","DB_DATA_KEYPATH","DBPromise","getObjectStore","isReadWrite","_openDatabase","keyPath","objectStoreNames","_deleteDatabase","_putObject","_x134","_x135","_x136","_putObject2","JM","_getObject","_deleteObject","IndexedDBLocalPersistence","pendingWrites","serviceWorkerReceiverAvailable","activeServiceWorker","_workerInitializationPromise","initializeServiceWorkerMessaging","_openDb","_this44","_withRetries","_this45","numAttempts","_this46","initializeReceiver","initializeSender","_this47","_getWorkerGlobalScope","_ref15","keyProcessed","_poll","_x139","_x140","_ref16","_x141","_x142","_this48","_getActiveServiceWorker","notifyServiceWorker","_this49","_getServiceWorkerController","controller","_withPendingWrite","_this50","_this51","_this52","getObject","_x137","_x138","_this53","_this54","getAllRequest","getAll","keysInResult","fbase_key","localKey","_this55","indexedDBLocalPersistence","_WIDGET_ID_START","MockReCaptcha","_widgets","render","parameters","MockWidget","optWidgetId","_this56","containerOrId","deleted","responseToken","clickHandler","checkIfDeleted","generateRandomAlphaNumericString","chars","allowedChars","expiredCallback","_JSLOAD_CALLBACK","NETWORK_TIMEOUT_DELAY","ReCaptchaLoaderImpl","hostLanguage","librarySeparatelyLoaded","hl","isHostLanguageValid","shouldResolveImmediately","widgetId","clearedOneInstance","MockReCaptchaLoaderImpl","RECAPTCHA_VERIFIER_TYPE","DEFAULT_PARAMS","theme","RecaptchaVerifier","tokenChangeListeners","renderPromise","isInvisible","makeTokenCallback","_recaptchaLoader","validateStartingState","_this57","assertNotDestroyed","getAssertedRecaptcha","tokenChange","makeRenderPromise","childNodes","sitekey","hasChildNodes","globalFunc","_this58","guaranteedEmpty","_this59","domReady","getRecaptchaParams","_x27","ConfirmationResultImpl","onConfirmation","authCredential","_signInWithPhoneNumber","appVerifier","_verifyPhoneNumber","_linkWithPhoneNumber","_reauthenticateWithPhoneNumber","_x152","_x153","_x154","_verifyPhoneNumber2","recaptchaToken","phoneInfoOptions","startEnrollPhoneMfa","phoneEnrollmentInfo","phoneSessionInfo","multiFactorHint","multiFactorUid","startSignInPhoneMfa","phoneSignInInfo","phoneResponseInfo","sendPhoneVerificationCode","_x61","_x62","_updatePhoneNumber","PhoneAuthProvider","verifyPhoneNumber","phoneOptions","applicationVerifier","_withDefaultResolver","resolverOverride","PHONE_SIGN_IN_METHOD","IdpCredential","_buildIdpRequest","returnIdpCredential","_signIn","_reauth","_link","_x157","_link2","AbstractPopupRedirectOperation","pendingPromise","eventManager","_this60","_ref20","onExecution","registerConsumer","_x158","_x159","onAuthEvent","_this61","urlResponse","getIdpTask","onError","unregisterAndCleanUp","unregisterConsumer","cleanUp","_POLL_WINDOW_CLOSE_TIMEOUT","_signInWithPopup","resolverInternal","PopupOperation","executeNotNull","_reauthenticateWithPopup","_linkWithPopup","authWindow","pollId","currentPopupAction","_this62","_this63","associatedEvent","_originValidation","_isIframeWebStorageSupported","pollUserCancellation","PENDING_REDIRECT_KEY","redirectOutcomeMap","RedirectAction","_superprop_getExecute","_this64","readyOutcome","_getAndClearPendingRedirectStatus","_x169","_x170","_getAndClearPendingRedirectStatus2","_superprop_getOnAuthEvent","_this65","pendingRedirectKey","resolverPersistence","hasPendingRedirect","_setPendingRedirectStatus","_x171","_x172","_setPendingRedirectStatus2","signInWithRedirect","_signInWithRedirect","_x173","_x174","_x175","_signInWithRedirect2","_openRedirect","reauthenticateWithRedirect","_reauthenticateWithRedirect","_x176","_x177","_x178","_reauthenticateWithRedirect2","prepareUserForRedirect","linkWithRedirect","_linkWithRedirect","_x179","_x180","_x181","_linkWithRedirect2","_getRedirectResult2","_getRedirectResult","_x184","_x185","_getRedirectResult3","resolverExtern","_x186","_prepareUserForRedirect","AuthEventManager","cachedEventUids","consumers","queuedRedirectEvent","hasHandledPotentialRedirect","lastProcessedEventTime","authEventConsumer","isEventForConsumer","sendToConsumer","saveEventToCache","onEvent","hasEventBeenHandled","handled","consumer","isRedirectEvent","isNullRedirectEvent","eventIdMatches","eventUid","_getProjectConfig","_x187","_getProjectConfig2","IP_ADDRESS_REGEX","HTTP_REGEX","_validateOrigin2","authorizedDomains","matchDomain","currentUrl","ceUrl","escapedDomainPattern","NETWORK_TIMEOUT","resetUnloadedGapiModules","beacon","___jsl","CP","cachedGApiLoader","_loadGapi","loadGapi","loadGapiIframe","gapi","iframes","ontimeout","Iframe","cbName","PING_TIMEOUT","IFRAME_PATH","EMULATED_IFRAME_PATH","IFRAME_ATTRIBUTES","EID_FROM_APIHOST","getIframeUrl","eid","fw","_openIframe2","where","messageHandlersFilter","CROSS_ORIGIN_IFRAMES_FILTER","dontclear","_ref27","restyle","setHideOnLeave","networkError","networkErrorTimer","clearTimerAndResolve","ping","_x200","_x201","BASE_POPUP_OPTIONS","resizable","statusbar","toolbar","AuthPopup","screen","availHeight","availWidth","scrollbars","optionsString","_isIOSStandalone","openAsNewWindowIOS","initMouseEvent","dispatchEvent","newWin","WIDGET_PATH","EMULATOR_WIDGET_PATH","FIREBASE_APP_CHECK_FRAGMENT_ID","_getRedirectUrl","_x190","_x191","_x192","_x193","_x194","_x195","_getRedirectUrl2","authType","redirectUrl","additionalParams","tid","paramsDict","appCheckTokenFragment","getHandlerBase","WEB_STORAGE_SUPPORT_KEY","browserPopupRedirectResolver","BrowserPopupRedirectResolver","eventManagers","originValidationPromises","_this66","_this67","_setWindowLocation","initAndGetManager","_this68","_openIframe","_x189","iframeEvent","authEvent","_validateOrigin","_x188","MultiFactorAssertionImpl","_finalizeEnroll","_finalizeSignIn","PhoneMultiFactorAssertionImpl","_fromCredential","finalizeEnrollPhoneMfa","phoneVerificationInfo","finalizeSignInPhoneMfa","PhoneMultiFactorGenerator","FACTOR_ID","TotpMultiFactorGenerator","assertionForEnrollment","oneTimePassword","TotpMultiFactorAssertionImpl","_fromSecret","assertionForSignIn","enrollmentId","_fromEnrollmentId","generateSecret","mfaSession","startEnrollTotpMfa","totpEnrollmentInfo","TotpSecret","_fromStartTotpMfaEnrollmentResponse","otp","_this69","finalizeEnrollTotpMfa","totpVerificationInfo","_makeTotpVerificationInfo","_this70","finalizeSignInTotpMfa","secretKey","hashingAlgorithm","codeLength","codeIntervalSeconds","enrollmentCompletionDeadline","totpSessionInfo","sharedSecretKey","verificationCodeLength","periodSec","finalizeEnrollmentTime","generateQrCodeUrl","accountName","issuer","useDefaults","_isEmptyString","AuthInterop","internalListeners","getUid","assertAuthConfigured","_this71","updateProactiveRefresh","getExperimentalSetting","_cordovaWindow","registerAuth","authInstance","_initializeAuthInstance","hierarchy","_instanceIdentifier","_instance","getVersionForPlatform","REDIRECT_TIMEOUT_MS","_generateHandlerUrl2","BuildInfo","sessionDigest","computeSha256","_computeSha","ibi","apn","appDisplayName","iosBundleId","_performRedirect","handlerUrl","plugins","browsertab","browserTabIsAvailable","iabRef","openUrl","InAppBrowser","_isIOS7Or8","_waitForAppResume2","eventListener","cleanup","onCloseTimer","authEventSeen","closeBrowserTab","resumed","visibilityChanged","addPassiveListener","removePassiveListener","stringToArrayBuffer","ArrayBuffer","subtle","padStart","SESSION_ID_LENGTH","CordovaAuthEventManager","passiveListeners","initPromise","resolveInialized","resetRedirect","_getAndRemoveEvent","_getAndRemoveEvent2","_eventFromPartialAndUrl","partialEvent","callbackUrl","_getDeepLinkFromCallback","searchParamsOrEmpty","errorObject","firebaseError","parseJsonOrNull","generateSessionId","cordovaPopupRedirectResolver","CordovaPopupRedirectResolver","attachCallbackListeners","_checkCordovaConfiguration","win","universalLinks","missingPlugin","_clearRedirectOutcomes","_generateNewEvent","_savePartialEvent","_generateHandlerUrl","_waitForAppResume","_cb","handleOpenURL","noEventTimeout","generateNoEvent","universalLinksCb","finalEvent","existingHandleOpenURL","packagePrefix","CORDOVA_ONDEVICEREADY_TIMEOUT_MS","_isAndroidOrIosCordovaScheme","_isLocalStorageNotSynchronized","_isIe11","_isEdge","_isWebStorageSupported","_isPopupRedirectSupported","_isNativeEnvironment","_isLikelyCordova","_isCordova2","Persistence","LOCAL","NONE","SESSION","_assert$3","PERSISTENCE_KEY","_savePersistenceForRedirect","_savePersistenceForRedirect2","getSessionStorageIfAvailable","_getSelfWindow","_assert$2","CompatPopupRedirectResolver","browserResolver","cordovaResolver","underlyingResolver","selectUnderlyingResolver","assertedUnderlyingResolver","isCordova","_isCordova","unwrap","credentialFromResponse","credentialFromObject","attachExtraErrorFields","MultiFactorResolver","getMultiFactorResolver","errorInternal","credErr","convertCredential","credentialPromise","additionalUserInfo","User","getOrCreate","convertConfirmationResult","_convertConfirmationResult","confirmationResultPromise","confirmationResultExp","wrapped","multiFactor","userModular","USER_MAP","linkAndRetrieveDataWithCredential","linkWithPhoneNumber","_x146","_x147","_x148","linkWithPopup","_x166","_x167","_x168","reauthenticateAndRetrieveDataWithCredential","reauthenticateWithPhoneNumber","_x149","_x150","_x151","reauthenticateWithPopup","_x163","_x164","_x165","sendEmailVerification","_x118","_x119","unlink","_x72","_x73","updateEmail","updatePassword","updatePhoneNumber","phoneCredential","_x155","_x156","updateProfile","_x125","_x126","verifyBeforeUpdateEmail","_x120","_x121","_x122","_assert$1","Auth","linkUnderlyingAuth","buildPersistenceHierarchy","applyActionCode","_x99","_x100","confirmPasswordReset","_x96","_x97","_x98","createUserWithEmailAndPassword","_x105","_x106","_x107","fetchProvidersForEmail","fetchSignInMethodsForEmail","_x116","_x117","isSignInWithEmailLink","getRedirectResult","_x182","_x183","addFrameworkForLogging","errorFn","wrapObservers","sendSignInLinkToEmail","_x108","_x109","_x110","sendPasswordResetEmail","_x93","_x94","_x95","converted","_validatePersistenceArgument","signInAndRetrieveDataWithCredential","signInAnonymously","_x71","signInWithCustomToken","_x91","_x92","signInWithEmailAndPassword","signInWithEmailLink","_x111","_x112","_x113","signInWithPhoneNumber","_x143","_x144","_x145","signInWithPopup","_x160","_x161","_x162","verifyPasswordResetCode","_x103","_x104","oldNext","persistences","_getPersistencesFromRedirect","registerAuthCompat","ActionCodeInfo","Operation","EMAIL_SIGNIN","PASSWORD_RESET","RECOVER_EMAIL","REVERT_SECOND_FACTOR_ADDITION","VERIFY_AND_CHANGE_EMAIL","VERIFY_EMAIL","admin","project","user_id","iss","aud","identities","alg","distinct","keySelector","flushes","distinctKeys","elementOrOptions","connector","groups","handleError","activeGroups","teardownAttempted","groupBySourceSubscriber","OperatorSubscriber","grouped","createGroupedObservable","groupSubject","groupSubscriber","innerSub","durationSubscriber","FirebaseApp","firebaseApp$","concatMap","getApps$1","PROVIDED_FIREBASE_APPS","Optional","ɵzoneWrap","deleteApp$1","getApp$1","initializeApp$1","initializeServerApp","initializeServerApp$1","onLog$1","registerVersion$1","AUTH_PROVIDER_NAME","authInstance$","ɵgetAllInstancesOf","PROVIDED_AUTH_INSTANCES","authState","user$1","beforeAuthStateChanged$1","checkActionCode$1","confirmPasswordReset$1","connectAuthEmulator$1","createUserWithEmailAndPassword$1","deleteUser","deleteUser$1","fetchSignInMethodsForEmail$1","getAdditionalUserInfo$1","getAuth","getAuth$1","getIdToken$1","getIdTokenResult$1","getMultiFactorResolver$1","getRedirectResult$1","initializeAuth","initializeAuth$1","initializeRecaptchaConfig$1","isSignInWithEmailLink$1","linkWithCredential$1","linkWithPopup$1","linkWithRedirect$1","multiFactor$1","onAuthStateChanged$1","onIdTokenChanged$1","parseActionCodeURL","parseActionCodeURL$1","reauthenticateWithCredential$1","reauthenticateWithPhoneNumber$1","reauthenticateWithPopup$1","reauthenticateWithRedirect$1","reload$1","revokeAccessToken","revokeAccessToken$1","setPersistence$1","signInAnonymously$1","signInWithCredential$1","signInWithEmailAndPassword$1","signInWithPopup$1","signInWithRedirect$1","signOut$1","unlink$1","updateCurrentUser$1","updateEmail$1","updatePassword$1","updatePhoneNumber$1","useDeviceLanguage$1","validatePassword","validatePassword$1","verifyBeforeUpdateEmail$1","verifyPasswordResetCode$1","Analytics","analytics","ANALYTICS_PROVIDER_NAME","analyticInstance$","isAnalyticsSupportedValueSymbol","isAnalyticsSupportedPromiseSymbol","globalThis","isSupported$1","it","isAnalyticsSupportedFactory","sync","ɵisSupportedError","logEvent","getAnalytics","getAnalytics$1","getGoogleAnalyticsClientId","getGoogleAnalyticsClientId$1","initializeAnalytics","initializeAnalytics$1","logEvent$1","setUserId","setAnalyticsCollectionEnabled","setAnalyticsCollectionEnabled$1","setConsent","setConsent$1","setCurrentScreen","setCurrentScreen$1","setDefaultEventParameters","setDefaultEventParameters$1","settings$1","setUserId$1","setUserProperties","setUserProperties$1","UserTrackingService","disposables","resolveInitialized","VERSION","full","FIREBASE_SCREEN_INSTANCE_ID_KEY","OUTLET_KEY","SCREEN_CLASS_KEY","SCREEN_NAME_KEY","nextScreenInstanceID","knownScreenInstanceIDs","getScreenInstanceID","screenInstanceKey","ɵscreenViewEvent","componentFactoryResolver","ActivationEnd","activationEnd","pagePath","parseUrl","outlet","actualSnapshot","routerState","actualDeep","pathFromRoot","routeConfig","Ty","page_path","firebase_event_origin","firebase_screen","s3","getTitle","ɵEmptyOutletComponent","deepSnapshot","MA","componentFactory","resolveComponentFactory","firebase_screen_class","a3","pairwise","prior","firebase_previous_class","firebase_previous_screen","firebase_previous_id","ScreenTrackingService","disposable","userTrackingService","i1$1","PROVIDED_ANALYTICS_INSTANCES","ANALYTICS_INSTANCES_PROVIDER","AnalyticsInstances","DEFAULT_ANALYTICS_INSTANCE_PROVIDER","defaultAnalyticsInstanceFactory","provided","defaultApp","defaultAnalytics","ɵgetDefaultInstanceOf","AnalyticsModule","_screenTrackingService","_userTrackingService","APP_INITIALIZER","COLLECTION_ENABLED","APP_VERSION","APP_NAME","DEBUG_MODE","CONFIG","DATA_LAYER_NAME","AngularFireAnalytics","analyticsInitialized","updateConfig","analyticsCollectionEnabled","providedAppVersion","providedAppName","debugModeEnabled","providedConfig","parseMeasurementId","patchGtag","_args","debug_mode","isPlatformServer","i2$1","i2$2","AngularFireAnalyticsModule","screenTracking","userTracking","DisplayModule","AppModule","bootstrap","RECAPTCHA_V3_SITE_KEY","AngularFireModule","HttpClientModule","RecaptchaV3Module","TranslateLoader","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","_serverAppCurrentUserOperationNotSupportedError","INVALID_LOGIN_CREDENTIALS","PASSWORD_DOES_NOT_MEET_REQUIREMENTS","_parseEnforcementState","enforcementStateStr","getProviderEnforcementState","providerStr","isProviderEnabled","_revokeToken","updateFromIdToken","_isFirebaseServerApp","_fromGetAccountInfoResponse","_getPasswordPolicy2","PasswordPolicyImpl","responseOptions","customStrengthOptions","minPasswordLength","maxPasswordLength","containsLowercaseCharacter","containsLowercaseLetter","containsUppercaseCharacter","containsUppercaseLetter","containsNumericCharacter","containsNonAlphanumericCharacter","allowedNonAlphanumericCharacters","forceUpgradeOnSignin","schemaVersion","passwordPolicy","validatePasswordLengthOptions","validatePasswordCharacterOptions","meetsMinPasswordLength","meetsMaxPasswordLength","passwordChar","updatePasswordCharacterOptionsStatuses","EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION","_projectPasswordPolicy","_tenantPasswordPolicies","initializeCurrentUserFromIdToken","authIdToken","_getPasswordPolicyInternal","_updatePasswordPolicy","_getPasswordPolicy","authStateReady","tokenType","revokeToken","isUnsubscribed","externalJSProvider","loadJS","recaptchaV2Script","recaptchaEnterpriseScript","gapiScript","_ref9","_recaptchaEnterpriseScriptUrl","handleRecaptchaFlow","_handleRecaptchaFlow","actionName","actionMethod","_x210","_initializeRecaptchaConfig2","initialOptions","linkEmailPassword","_linkEmailPassword","recachePasswordPolicy","_recachePasswordPolicy","_x211","_x130","_initializeRecaptchaConfig","_validatePassword","_deleteUser","Rl","_recaptchaV2ScriptUrl","_x196","_gapiScriptUrl","_x212","_x213","_x203","_x204","_x205","_x206","_x207","_x208","_x202","_this72","_this73","_this74","authIdTokenMaxAge","lastPostedIdToken","mintCookieFactory","_ref21","idTokenResult","idTokenAge","_x209","authTokenSyncPath","isSecureContext","authTokenSyncUrl","mintCookie","authEmulatorHost","getDefaultEmulatorHost","_setExternalJSProvider","NODE_CLIENT","NODE_ADMIN","productName","emulatorHosts","areCookiesEnabled","cookieEnabled","DEFAULT_INTERVAL_MILLIS","DEFAULT_BACKOFF_FACTOR","MAX_VALUE_MILLIS","RANDOM_FACTOR","calculateBackoffMillis","backoffCount","intervalMillis","backoffFactor","currBaseValue","randomWait","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","isHTMLElement","offsetParentIsScaled","isElementScaled","scaleX","offsetWidth","scaleY","offsetHeight","getDocumentElement","scrollLeft","getNodeName","isScrollParent","getNodeScroll","getWindow","getHTMLElementScroll","getWindowScroll","clientLeft","clientTop","getWindowScrollBarX","visited","modifier","requires","requiresIfExists","dep","depModifier","debounce","pending","DEFAULT_OPTIONS","areValidElements","_len","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","reference","orderedModifiers","modifiersData","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","scrollParents","isElement","listScrollParents","contextElement","orderModifiers","modifierPhases","acc","mergeByName","merged","runModifierEffects","_ref$options","effect","forceUpdate","_state$elements","rects","getOffsetParent","getLayoutRect","_state$orderedModifie","_state$orderedModifie2","onFirstUpdate","rootNode","getRootNode","isShadowRoot","isSameNode","includeScale","isFixedStrategy","clientRect","visualViewport","addVisualOffsets","isLayoutViewport","offsetLeft","isTableElement","getTrueOffsetParent","getContainingBlock","isFirefox","getUAString","elementCss","getParentNode","css","perspective","contain","willChange","assignedSlot","defaultView","pageXOffset","pageYOffset","OwnElement","Element","ShadowRoot","_getComputedStyle","overflowX","overflowY","getScrollParent","_element$ownerDocumen","scrollParent","isBody","updatedList","auto","basePlacements","clippingParents","viewport","variationPlacements","placements","beforeRead","afterRead","beforeMain","afterMain","beforeWrite","afterWrite","__WEBPACK_DEFAULT_EXPORT__","applyStyles","attribute","_state$modifiersData$","arrowElement","popperOffsets","basePlacement","getBasePlacement","axis","getMainAxisFromPlacement","paddingObject","padding","mergePaddingObject","expandToHashMap","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","centerToReference","within","axisProp","centerOffset","_options$element","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","roundOffsetsByDPR","dpr","devicePixelRatio","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","getVariation","_options$scroll","_options$resize","resize","getOppositePlacement","matched","getOppositeVariationPlacement","modifiers_flip","_skip","_options$mainAxis","mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","boundary","rootBoundary","altBoundary","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","getExpandedFallbackPlacements","oppositePlacement","computeAutoPlacement","_options$allowedAutoP","allPlacements","allowedPlacements","overflows","detectOverflow","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","_loop","fittingPlacement","_options$offset","distanceAndSkiddingToXY","invertDistance","skidding","_data$state$placement","computeOffsets","modifiers_preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","getAltAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","getFreshSideObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","mathMin","mathMax","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","eventListeners","commonX","commonY","rectToClientRect","getClientRectFromMixedType","clippingParent","getViewportRect","html","layoutViewport","getInnerBoundingClientRect","getDocumentRect","winScroll","scrollWidth","scrollHeight","getClippingRect","mainClippingParents","getClippingParents","clipperElement","canEscapeClipping","firstClippingParent","clippingRect","accRect","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","hashMap","uaData","userAgentData","brands","brand","dijkstra","single_source_shortest_paths","graph","predecessors","costs","cost_of_s_to_u","adjacent_nodes","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","PriorityQueue","make","cost","extract_shortest_path_from_predecessor_list","find_path","T","sorter","default_sorter","exports","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","define","autoBom","Blob","responseType","MouseEvent","saveAs","HTMLAnchorElement","webkitURL","download","rel","revokeObjectURL","msSaveOrOpenBlob","safari","FileReader","onloadend","readAsDataURL","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_ARY_FLAG","INFINITY","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","require","types","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","arrayAggregator","setter","iteratee","arrayEach","arrayEachRight","arrayEvery","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","string","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","overArg","replaceHolders","setToArray","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","allocUnsafe","getPrototype","getPrototypeOf","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","toStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","writable","baseAt","paths","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","getSymbolsIn","baseAssignIn","keysIn","copySymbols","getSymbols","initCloneByTag","Ctor","cloneArrayBuffer","cloneDataView","dataView","byteLength","cloneTypedArray","cloneRegExp","regexp","cloneSymbol","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","computed","valuesIndex","templateSettings","evaluate","interpolate","variable","hashClear","hashDelete","hashGet","hashHas","hashSet","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","setCacheAdd","setCacheHas","stackClear","stackDelete","stackGet","stackHas","stackSet","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","getRawTag","isOwn","unmasked","objectToString","baseGt","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","seen","baseInvoke","baseIsArguments","baseIsEqual","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","convert","isPartial","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","objProps","objLength","othProps","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","baseMergeDeep","mergeFunc","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseNth","baseOrderBy","iteratees","orders","getIteratee","baseSortBy","comparer","criteria","compareMultiple","objCriteria","othCriteria","ordersLength","compareAscending","basePickBy","baseSet","basePullAll","basePullAt","indexes","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","guard","isIterateeCall","iterable","createCaseFirst","methodName","trailing","createCompounder","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","reorder","arrLength","oldArray","createInverter","toIteratee","baseInverter","createMathOperation","operator","createOver","arrayFunc","createPadding","charsLength","createRange","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","setData","setWrapToString","createRound","createToPairs","setToPairs","baseToPairs","createWrap","mergeData","srcBitmask","newBitmask","isCombo","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrStacked","arrValue","flatten","otherFunc","isKeyable","stubArray","hasPath","hasFunc","isLength","ctorString","isMaskable","stubFalse","otherArgs","shortOut","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","rand","memoizeCapped","memoize","quote","subString","difference","differenceBy","differenceWith","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","unzipWith","without","xorBy","xorWith","zipWith","interceptor","wrapperAt","countBy","findLast","forEachRight","invokeMap","keyBy","partition","bindKey","WRAP_BIND_FLAG","lastArgs","lastThis","maxWait","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","remainingWait","timeWaiting","debounced","isInvoking","leadingEdge","defer","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","baseIsArrayBuffer","baseIsDate","isError","baseIsMap","baseIsRegExp","baseIsSet","baseIsTypedArray","lt","lte","iteratorToArray","toLength","isBinary","assignIn","assignInWith","assignWith","propsIndex","propsLength","defaultsDeep","mergeWith","invertBy","invoke","omit","CLONE_DEEP_FLAG","basePick","pickBy","toPairs","toPairsIn","camelCase","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","multiplicand","minuend","subtrahend","castArray","chunk","cond","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","propertyOf","pullAllBy","pullAllWith","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","tail","takeRight","takeRightWhile","takeWhile","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","escapeRegExp","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","baseInRange","isBoolean","isEqualWith","isMatch","isMatchWith","isNative","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","floating","reduceRight","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sumBy","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","newEnd","eachRight","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","lazyClone","lazyReverse","lazyValue","dir","isRight","getView","iterLength","takeCount","iterIndex","wrapperChain","commit","wrapperCommit","wrapperNext","wrapperPlant","wrapperReverse","wrapperValue","wrapperToIterator","cachedGuess","zones","countries","names","guesses","logError","momentVersion","major","minor","charCodeToInt","unpackBase60","whole","fractional","sign","arrayToInt","mapIndices","indices","unpack","untils","intToUntil","abbrs","population","Zone","packedString","Country","country_name","zone_names","OffsetAt","timeString","toTimeString","abbr","getTimezoneOffset","ZoneScore","offsetScore","abbrScore","findChange","sortZoneScores","localeCompare","addToGuesses","rebuildGuess","intlName","Intl","DateTimeFormat","resolvedOptions","timeZone","normalizeName","zoneScore","userOffsets","nextOffset","startYear","offsetsLength","guessesForUserOffsets","guessesOffset","filteredGuesses","checkedOffsets","zoneScores","getZone","scoreOffsetAt","addZone","packed","normalized","caller","addLink","aliases","normal0","normal1","needsOffset","isUnixTimestamp","_tzm","utc","isMoment","unpacked","lo","hi","zone_name","country_code","offsetNext","offsetPrev","moveAmbiguousForward","moveInvalidForward","mom","utcOffset","offsetAt","dataVersion","_zones","_links","_names","_countries","loadData","addCountries","country_zones","zoneExists","didShowError","guess","ignoreCache","getNames","getCountryNames","zonesForCountry","country","with_offset","getCountry","abbrWrap","old","_z","resetZoneWrap","defaultZone","updateOffset","keepTime","_isUTC","zoneName","zoneAbbr","local","resetZoneWrap2","setDefault","momentProperties","defineLocale","monthsShort","weekdaysShort","weekdaysMin","meridiemParse","meridiem","hours","minutes","isLower","longDateFormat","LT","LTS","LLL","LLLL","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","ss","hh","dd","MM","dayOfMonthOrdinalParse","ordinal","dow","doy","pluralForm","plurals","pluralize","withoutSuffix","isFuture","weekdaysParseExact","postformat","symbolMap","preparse","numberMap","suffixes","plural","forms","relativeTimeWithPlural","isFormat","ww","lastDigit","last2Digits","meridiemHour","monthsShortRegex","monthsParseExact","relativeTimeWithMutation","mutation","specialMutationForYears","lastNumber","softMutation","mutationTable","monthsParse","monthsRegex","monthsStrictRegex","monthsShortStrictRegex","fullWeekdaysParse","shortWeekdaysParse","minWeekdaysParse","weekdaysParse","longMonthsParse","shortMonthsParse","processRelativeTime","ll","lll","llll","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","invalidDate","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","eras","since","narrow","until","eraYearOrdinalRegex","eraYearOrdinalParse","$0","$1","$2","isUpper","ezafeNumSuffix","processFutureTime","eifelerRegelAppliesToNumber","processPastTime","units","translateSeconds","translateSingular","relativeTimeWithSingular","relativeSeconds","translator","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","numbersNouns","translateFuture","translatePast","numberNoun","numberAsNoun","hundred","ten","hm","weekdaysCaseReplace","nominative","accusative","genitive","processHoursFunction","hookCallback","hooks","setHookCallback","hasOwnProp","isObjectEmpty","getOwnPropertyNames","arrLen","createUTC","strict","createLocalOrUTC","defaultParsingFlags","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","parsedDateParts","era","rfc2822","weekdayMismatch","getParsingFlags","_pf","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","isFrozen","_isValid","createInvalid","fun","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","Moment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","zeroFill","targetLength","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","replaceLongDateFormatTokens","defaultLongDateFormat","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","_relativeTime","pastFuture","D","E","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","ms","milliseconds","millisecond","quarters","quarter","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","isoweeks","isoweek","normalizeUnits","normalizeObjectUnits","inputObject","normalizedInput","priorities","isoWeekday","weekYear","isoWeekYear","isoWeek","getPrioritizedUnits","unitsObj","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","strictRegex","getParseRegexForToken","unescapeFormat","regexEscape","absFloor","toInt","argumentForCoercion","coercedNumber","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","getSetYear","makeGetSet","getIsLeapYear","set$1","isUTC","getUTCMilliseconds","getMilliseconds","getUTCSeconds","getSeconds","getUTCMinutes","getMinutes","getUTCHours","getHours","getUTCDay","setUTCMilliseconds","setMilliseconds","setUTCSeconds","setSeconds","setUTCMinutes","setMinutes","setUTCHours","setUTCDate","stringGet","stringSet","prioritized","prioritizedLen","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","localeMonthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setUTCMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","createDate","createUTCDate","firstWeekOffset","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","kInput","_isPm","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","globalLocale","baseConfig","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","loadLocale","isLocaleNameSane","oldLocale","_abbr","aliasedRequire","getSetGlobalLocale","getLocale","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","configFromRFC2822","parsedArray","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","configFromArray","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekdayOverflow","curWeek","createLocal","ISO_8601","RFC_2822","skipped","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","configFromObject","dayOrDate","createFromConfig","prepareConfig","configFromInput","prototypeMin","prototypeMax","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","_milliseconds","_days","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","diffs","offsetFromString","chunkOffset","cloneWithOffset","setTime","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","createAdder","isAdding","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","sod","calendarFormat","localInput","endOf","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","monthDiff","adjust","wholeMonthDiff","anchor","keepOffset","toDate","inspect","datetime","inputString","defaultFormatUtc","defaultFormat","humanize","toNow","newLocaleData","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","localStartOfDate","utcStartOfDate","startOfDate","unix","toObject","isValid$2","parsingFlags","invalidAt","creationData","localeEras","_eras","localeErasParse","eraName","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","isDSTShifted","proto$1","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","LIGHTBOX_EVENT","LightboxEvent","_lightboxEventSource","lightboxEvent$","broadcastLightboxEvent","LightboxWindowRef","nativeWindow","FileSaverService","isFileSaverSupported","genType","save","filtType","option","file","decodeURI","saveText","txt","FileSaverDirective","fss","httpClient","_click","HttpParams","setDisabled","fsOptions","FileSaverModule","LightboxComponent","_elemRef","_rendererRef","_lightboxEvent","_lightboxElem","_lightboxWindowRef","_fileSaverService","_sanitizer","_documentRef","album","currentImageIndex","ui","showReloader","showLeftArrow","showRightArrow","showArrowNav","showZoomButton","showRotateButton","showPageNumber","showCaption","showDownloadButton","_event","_onReceivedEvent","caption","sanitize","SecurityContext","HTML","_cssValue","containerTopPadding","_getCssStyleValue","_containerElem","containerRightPadding","containerBottomPadding","containerLeftPadding","imageBorderWidthTop","_imageElem","imageBorderWidthBottom","imageBorderWidthLeft","imageBorderWidthRight","_validateInputData","_prepareComponent","_registerImageLoadingEvent","disableKeyboardNav","_disableKeyboardNav","downloadUrl","preloader","Image","toBlob","crossOrigin","_rotateContainer","_calcTransformPoint","webkitTransform","_resetImage","transformOrigin","nextImage","_changeImage","prevImage","_onLoadImageSuccess","imageHeight","imageWidth","maxImageHeight","maxImageWidth","windowHeight","windowWidth","naturalImageWidth","naturalImageHeight","fitImageInViewPort","_sizeContainer","centerVertically","_centerVertically","topDistance","oldWidth","_outerContainerElem","oldHeight","enableTransition","_postResize","_dataContainerElem","_showImage","_updateNav","_updateDetails","_enableKeyboardNav","_addCssAnimation","_positionLightBox","showZoom","showRotate","positionFromTop","disableScrolling","resizeDuration","fadeDuration","_captionElem","_numberElem","cmpRef","showImageNumberLabel","_albumLabel","albumLabel","_hideImage","alwaysShowNav","alwaysShowNavOnTouchDevices","_showArrowNav","wrapAround","_leftArrowElem","_rightArrowElem","_showLeftArrowNav","_showRightArrowNav","keyup","_keyboardAction","keycode","KEYCODE_ESC","KEYCODE_LEFTARROW","KEYCODE_RIGHTARROW","_navArrowElem","LightboxConfig","containerElementResolver","documentRef","LightboxOverlayComponent","_sizeOverlay","onResize","_getOverlayWidth","_getOverlayHeight","Lightbox","_componentFactoryResolver","_lightboxConfig","curIndex","overlayComponentRef","_createComponent","ComponentClass","modules","installedModules","moduleId","INVALID_BYTE","Coder","_paddingCharacter","encodedLength","_encodeByte","maxDecodedLength","decodedLength","_getPaddingLength","paddingLength","haveBad","v0","v1","v2","v3","_decodeChar","stdCoder","URLSafeCoder","urlSafeCoder","encodeURLSafe","decodeURLSafe","INVALID_UTF16","INVALID_UTF8","n1","n2","n3","__webpack_exports__","ScriptReceiverFactory","lastId","callbackWrapper","ScriptReceivers","PROTOCOL","wsPort","wssPort","wsPath","httpHost","httpPort","httpsPort","httpPath","stats_host","authEndpoint","authTransport","activityTimeout","pongTimeout","unavailableTimeout","userAuthentication","endpoint","channelAuthorization","cdn_http","cdn_https","dependency_suffix","dependency_loader_DependencyLoader","loading","createScriptRequest","successCallback","wasSuccessful","getDocument","useTLS","DependenciesReceivers","Dependencies","urlStore","baseUrl","urls","authenticationEndpoint","authorizationEndpoint","javascriptQuickStart","triggeringClientEvents","encryptedChannelSupport","fullUrl","AuthRequestType","url_store","buildLogSuffix","urlPrefix","urlObj","UserAuthentication","ChannelAuthorization","BadEventName","BadChannelName","RequestTimedOut","TransportPriorityTooLow","TransportClosed","UnsupportedFeature","UnsupportedTransport","UnsupportedStrategy","HTTPAuthError","xhr_auth","authOptions","authRequestType","createXHR","headerName","setRequestHeader","headersProvider","dynamicHeaders","utob","b64chars","b64tab","base64_i","cb_utob","cc","cb_encode","ccc","padlen","ord","Timer","ensureAborted","abstract_timer","timers_clearTimeout","timers_clearInterval","timers_OneOffTimer","timers_PeriodicTimer","Util","boundArguments","util","extensions","safeJSONStringify","arrayIndexOf","nativeIndexOf","objectApply","mapObject","filterObject","any","collections_all","encodeParamsObject","buildQueryString","decycleObject","objects","derez","nu","$ref","logger_Logger","globalLog","globalLogWarn","globalLogError","defaultLoggingFunction","core_pusher","logToConsole","jsonp","callbackName","nextAuthCallbackID","auth_callbacks","callback_name","jsonp_auth","ScriptRequest","errorString","errorScript","jsonp_request_JSONPRequest","getAgent","createJSONPRequest","jsonp_timeline","getGenericURL","baseScheme","hostTLS","hostNonTLS","getGenericPath","getInitial","sockjs","callback_registry_CallbackRegistry","_callbacks","prefixedEventName","removeCallback","removeAllCallbacks","dispatcher_Dispatcher","failThrough","global_callbacks","bind_global","unbind_global","transport_connection_TransportConnection","transportConnectionInitializer","generateUniqueID","handlesActivityChecks","supportsPing","connect","socket","getSocket","changeState","bindListeners","onOpen","beforeOpen","buildTimelineMessage","closeEvent","wasClean","unbindListeners","onActivity","onactivity","cid","transport_Transport","createConnection","WSTransport","getWebSocketAPI","createWebSocket","httpConfiguration","streamingConfiguration","HTTPFactory","createStreamingSocket","pollingConfiguration","createPollingSocket","xhrConfiguration","isXHRSupported","xhr_streaming","xhr_polling","SockJSTransport","SockJS","js_path","ignore_null_origin","ignoreNullOrigin","xdrConfiguration","isXDRSupported","XDRStreamingTransport","XDRPollingTransport","xdr_streaming","xdr_polling","transports_transports","net_info_NetInfo","isOnline","net_info_Network","assistant_to_the_transport_manager_AssistantToTheTransportManager","minPingDelay","maxPingDelay","pingDelay","openTimestamp","onClosed","reportDeath","lifespan","isAlive","Protocol","decodeMessage","messageData","pusherEventData","pusherEvent","encodeMessage","processHandshake","activity_timeout","socket_id","getCloseAction","getCloseError","protocol_protocol","connection_Connection","send_event","handleCloseEvent","handshake_Handshake","timeline_sender_TimelineSender","TimelineTransport","channel_Channel","subscribed","subscriptionPending","subscriptionCancelled","authorize","socketId","handleSubscriptionSucceededEvent","handleSubscriptionCountEvent","subscription_count","subscriptionCount","channel_data","cancelSubscription","reinstateSubscription","private_channel_PrivateChannel","channelAuthorizer","members_Members","members","member","setMyID","onSubscription","subscriptionData","presence","me","addMember","memberData","user_info","removeMember","presence_channel_PresenceChannel","authData","channelData","signinDonePromise","user_data","handleInternalEvent","addedMember","removedMember","utf8","encrypted_channel_EncryptedChannel","nacl","sharedSecret","shared_secret","handleEncryptedEvent","ciphertext","cipherText","secretbox","overheadLength","nonceLength","getDataToEmit","connection_manager_ConnectionManager","usingTLS","errorCallbacks","buildErrorCallbacks","connectionCallbacks","buildConnectionCallbacks","handshakeCallbacks","buildHandshakeCallbacks","Network","getNetwork","netinfo","retryIn","sendActivityCheck","updateStrategy","switchCluster","runner","updateState","startConnecting","setUnavailableTimer","disconnectInternally","isUsingTLS","handshakeError","abortConnecting","abort","clearRetryTimer","clearUnavailableTimer","abandonConnection","getStrategy","retryTimer","unavailableTimer","stopActivityCheck","activityTimer","pong_timed_out","resetActivityCheck","shouldRetry","connected","setConnection","withErrorEmitted","tls_only","refused","backoff","retry","previousState","newStateDescription","channels_Channels","createChannel","createEncryptedChannel","errMsg","createPrivateChannel","createPresenceChannel","Factory","createChannels","createConnectionManager","createTimelineSender","createHandshake","createAssistantToTheTransportManager","transport_manager_TransportManager","livesLeft","lives","getAssistant","sequential_strategy_SequentialStrategy","strategies","failFast","timeoutLimit","minPriority","tryNextStrategy","tryStrategy","forceMinPriority","best_connected_ever_strategy_BestConnectedEverStrategy","runners","allRunnersFailed","callbackBuilder","abortRunner","aborted","websocket_prioritized_cached_strategy_WebSocketPrioritizedCachedStrategy","ttl","fetchTransportCache","cacheSkipCount","latency","startTimestamp","flushTransportCache","storeTransportCache","getTransportCacheKey","getLocalStorage","serializedCache","delayed_strategy_DelayedStrategy","IfStrategy","trueBranch","falseBranch","FirstConnectedStrategy","testSupportsStrategy","getDefaultStrategy","baseOptions","defineTransport","definedTransports","defineTransportStrategy","wsStrategy","ws_options","wsHost","wss_options","sockjs_options","timeouts","ws_manager","streaming_manager","ws_transport","wss_transport","sockjs_transport","xhr_streaming_transport","xdr_streaming_transport","xhr_polling_transport","xdr_polling_transport","ws_loop","wss_loop","sockjs_loop","streaming_loop","polling_loop","http_loop","http_fallback_loop","default_strategy","transport_connection_initializer","http_xdomain_request_hooks","getRequest","xdr","XDomainRequest","onprogress","onChunk","abortRequest","http_xdomain_request","MAX_BUFFER_LENGTH","http_request_HTTPRequest","unloader","addUnloadListener","removeUnloadListener","advanceBuffer","isBufferTooLong","unreadData","endOfLinePosition","CONNECTING","OPEN","CLOSED","autoIncrement","http_socket_HTTPSocket","randomNumber","randomString","getLocation","openStream","sendRaw","sendHeartbeat","createSocketRequest","getUniqueURL","getSendURL","reconnect","closeStream","onHeartbeat","replaceHost","getReceiveURL","onFinished","urlParts","randomInt","http_socket","http_streaming_socket_hooks","http_streaming_socket","http_polling_socket_hooks","http_polling_socket","http_xhr_request_hooks","getXHRAPI","http_xhr_request","HTTP","createSocket","createRequest","http_http","createXDR","TimelineLevel","Runtime","Transports","setup","PusherClass","initializeOnDocumentBody","onDocumentBody","getProtocol","getAuthorizers","ajax","createXMLHttpRequest","createMicrosoftXHR","ActiveXObject","Constructor","withCredentials","documentProtocol","detachEvent","msCrypto","Uint32Array","timeline_level","timeline_Timeline","uniqueID","sendfn","bundle","lib","transport_strategy_TransportStrategy","failAttempt","onInitialized","serializedTransport","strategy_builder_Transports","strategy_builder_defineTransport","transportClass","enabledTransports","disabledTransports","strategy_builder_UnsupportedStrategy","validateOptions","composeChannelQuery","paramsProvider","dynamicParams","user_authenticator","channel_authorizer_composeChannelQuery","channel_authorizer","ChannelAuthorizerProxy","channelAuthorizerGenerator","deprecatedAuthorizerOptions","statsHost","enableStats","getEnableStatsConfig","getHttpHost","shouldUseTLS","getWebsocketHost","userAuthenticator","buildUserAuthenticator","buildChannelAuthorizer","timelineParams","getWebsocketHostFromCluster","forceTLS","disableStats","hasCustomHandler","customHandler","buildChannelAuth","authorizer","watchlist_WatchlistFacade","bindWatchlistInternalEvent","watchlistEvent","flatPromise","rej","flat_promise","user_UserFacade","signin_requested","serverToUserChannel","_signinDoneResolve","_onAuthorize","_signin","_newSigninPromiseIfNeeded","watchlist","_onSigninSuccess","signin","_subscribeChannels","ensure_subscribed","setDone","pusher_Pusher","isReady","getClientFeatures","app_key","checkAppKey","global_emitter","sessionID","timelineSender","subscribeAll","internal","appKey","allChannels","timelineSenderTimer","event_name","channel_name","canPromise","CanvasRenderer","SvgRenderer","renderCanvas","renderFunc","argsNum","isLastArgCb","renderToDataURL","getSymbolSize","posCount","intervals","positions","getRowColCoords","posLength","ALPHA_NUM_CHARS","AlphanumericData","getBitsLength","getLength","bitBuffer","BitBuffer","bufIndex","putBit","getLengthInBits","reservedBit","reserved","isReserved","encodeUtf8","ByteData","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","Utils","G15_BCH","getBCHDigit","EXP_TABLE","LOG_TABLE","KanjiData","toSJIS","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","PenaltyScores","getMaskAt","Patterns","sameCountCol","sameCountRow","lastCol","bitsCol","bitsRow","darkCount","modulesCount","setupFormatFunc","numPatterns","bestPattern","lowerPenalty","getPenaltyN1","getPenaltyN2","getPenaltyN3","getPenaltyN4","VersionCheck","Regex","ccBits","testNumeric","testAlphanumeric","testKanji","NumericData","remainingNum","GF","coeff","mul","divident","MaskPattern","ECCode","FormatInfo","Segments","setupFormatInfo","getEncodedBits","createData","segments","getCharCountIndicator","dataTotalCodewordsBits","getSymbolTotalCodewords","getTotalCodewordsCount","remainingByte","createCodewords","ecTotalCodewords","dataTotalCodewords","ecTotalBlocks","getBlocksCount","blocksInGroup2","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","dcData","ecData","maxDataSize","dataSize","createSymbol","fromArray","estimatedVersion","rawSegments","rawSplit","getBestVersionForData","moduleCount","setupFinderPattern","getPositions","setupTimingPattern","setupAlignmentPattern","setupVersionInfo","setupData","inc","dark","getBestMask","toSJISFunc","setToSJISFunction","Polynomial","genPoly","generateECPolynomial","paddedData","kanji","byte","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","getStringByteLength","getSegments","getSegmentsFromString","numSegs","alphaNumSegs","byteSegs","kanjiSegs","isKanjiModeEnabled","BYTE_KANJI","s1","s2","getSegmentBitsLength","buildSingleSegment","modesHint","bestMode","getBestModeForData","buildNodes","segs","buildGraph","prevNodeIds","nodeGroup","currentNodeIds","lastCount","prevNodeId","optimizedSegs","mergeSegments","prevSeg","toSJISFunction","CODEWORDS_COUNT","G18_BCH","getReservedBitsCount","getTotalBitsFromDataArray","reservedBits","usableBits","ecl","getBestVersionForMixedData","currentVersion","getCapacity","getBestVersionForDataLength","qrData","canvasEl","getCanvasElement","getImageWidth","createImageData","qrToImageData","clearCanvas","clearRect","putImageData","rendererOpts","toDataURL","quality","getColorAttrib","attrib","svgCmd","qrcodesize","bg","light","qrToPath","moveBy","newRow","lineLength","viewBox","svgTag","hex2rgba","hexCode","hexValue","qrSize","getScale","imgData","qr","symbolSize","scaledMargin","palette","posDst","pxColor","thrownError","_throwIfClosed","lift","observable","observerOrNext","isSubscriber","Subscriber","isObserver","isSubscription","SafeSubscriber","errorContext","_trySubscribe","sink","promiseCtor","getPromiseCtor","Symbol_observable","pipeFromArray","ObjectUnsubscribedError","createErrorClass","currentObservers","isStopped","subject","AnonymousSubject","_checkFinalizedStatuses","_innerSubscribe","EMPTY_SUBSCRIPTION","arrRemove","destination","COMPLETE_NOTIFICATION","createNotification","EMPTY_OBSERVER","handleStoppedNotification","nextNotification","_next","errorNotification","_error","_complete","_bind","ConsumerObserver","partialObserver","handleUnhandledError","useDeprecatedNextContext","useDeprecatedSynchronousErrorHandling","captureError","reportUnhandledError","onStoppedNotification","timeoutProvider","defaultErrorHandler","UnsubscriptionError","initialTeardown","_parentage","_finalizers","initialFinalizer","finalizer","execFinalizer","teardown","_hasParent","_addParent","_removeParent","onUnhandledError","ConnectableObservable","subjectFactory","_subject","_refCount","_connection","hasLift","getSubject","_teardown","higherOrderRefCount","popScheduler","observables","argsArgArrayOrObject","combineLatestInit","valueTransform","maybeSchedule","remainingFirstValues","hasFirstValue","createObject","mapOneOrManyArgs","executeSchedule","concatAll","mergeAll","observableFactory","forkJoin","remainingCompletions","remainingEmissions","hasValue","scheduleAsyncIterable","asyncIterator","scheduled","isInteropObservable","scheduleObservable","scheduleArray","schedulePromise","isAsyncIterable","isIterable","scheduleIterable","Symbol_iterator","isReadableStreamLike","scheduleReadableStreamLike","readableStreamLikeToAsyncGenerator","createInvalidObservableTypeError","nodeEventEmitterMethods","eventTargetMethods","jqueryMethods","isEventTarget","isNodeStyleEventEmitter","addListener","removeListener","toCommonHandlerRegistry","isJQueryStyleEventEmitter","subTarget","fromInteropObservable","obs","fromArrayLike","fromPromise","fromAsyncIterable","fromIterable","fromReadableStreamLike","readableStream","asyncIterable","asyncIterable_1","asyncIterable_1_1","__asyncValues","concurrent","popNumber","throwError","errorOrErrorFactory","errorFactory","dueTime","intervalOrScheduler","intervalDuration","isScheduler","due","isValidDate","onNext","onFinalize","shouldUnsubscribe","auditTime","audit","durationSelector","lastValue","isComplete","endDuration","cleanupDuration","handledResult","syncUnsub","debounceTime","activeTask","lastTime","emitWhenIdle","targetTime","delayWhen","delayDurationSelector","subscriptionDelay","mapTo","defaultCompare","previousKey","currentKey","hasDefaultValue","throwIfEmpty","EmptyError","mergeInternals","onBeforeNext","innerSubScheduler","additionalFinalizer","checkComplete","outerNext","doInnerSub","innerComplete","innerValue","bufferedValue","hasPrev","refCounter","sharedConnection","seed","scanInternals","hasSeed","emitOnNext","emitBeforeComplete","hasState","resetOnError","resetOnComplete","resetOnRefCountZero","wrapperSource","resetConnection","hasCompleted","hasErrored","cancelReset","resetAndUnsubscribe","handleReset","onSubscriber","ReplaySubject","_bufferSize","_windowTime","_timestampProvider","dateTimestampProvider","_buffer","_infiniteTimeWindow","_trimBuffer","adjustedBufferSize","configOrBufferSize","windowTime","innerSubscriber","innerIndex","outerIndex","innerObservable","notifier","tapObserver","isUnsub","defaultErrorFactory","otherValues","Action","work","intervalProvider","handle","AsyncAction","recycleAsyncId","requestAsyncId","_scheduler","_execute","errorValue","errored","Scheduler","schedulerActionCtor","AsyncScheduler","SchedulerAction","nextHandle","activeHandles","findAndClearHandle","Immediate","setImmediate","clearImmediate","immediateProvider","AsapAction","_scheduled","AsapScheduler","flushId","asapScheduler","getSymbolIterator","getKeys","isPOJO","createImpl","ctorFunc","isRoot","errorThrown","parentSubscription","scheduleSubscription","isObservable","__asyncGenerator","getReader","__await","releaseLock","liftedSource","callOrApply","fns","webpackContext","webpackContextResolve","stateChangeExpr","animateChild","AnimationBuilder","BrowserAnimationBuilder","AnimationFactory","rootRenderer","animationModuleType","_nextAnimationId","typeData","ViewEncapsulation","isAnimationRenderer","issueAnimationCommand","BrowserAnimationFactory","RendererAnimationPlayer","_command","_listen","unwrapAnimationRenderer","animationRenderer","_onStart","triggerMicrotask","AnimationGroupPlayer","_players","doneCount","destroyCount","startCount","timeAtPosition","longestPlayer","longestSoFar","ID_DELIMITER","addAriaReferencedId","ids","getAriaReferenceIds","existingId","removeAriaReferencedId","filteredIds","CDK_DESCRIBEDBY_ID_PREFIX","CDK_DESCRIBEDBY_HOST_ATTRIBUTE","AriaDescriber","_messageRegistry","_messagesContainer","APP_ID","_canBeDescribed","setMessageId","messageElement","referenceCount","_createMessageElement","_isElementDescribedByMessage","_addMessageReference","_isElementNode","_removeMessageReference","registeredMessage","_deleteMessageElement","describedElements","_removeCdkDescribedByReferenceIds","_createMessagesContainer","containerClassName","serverContainers","messagesContainer","originalReferenceIds","referenceIds","messageId","trimmedMessage","ELEMENT_NODE","ListKeyManager","_activeItemIndex","_activeItem","_wrap","_letterKeyStream","_typeaheadSubscription","_vertical","_allowedModifierKeys","_homeAndEnd","_pageUpAndDown","_skipPredicateFn","_pressedLetters","tabOut","_itemChangesSubscription","newItems","_itemsChanged","isSignal","_effectRef","skipPredicate","shouldWrap","withVerticalOrientation","withHorizontalOrientation","_horizontal","withAllowedModifierKeys","withTypeAhead","debounceInterval","letter","_getItemsArray","getLabel","setActiveItem","cancelTypeahead","withPageUpDown","previousActiveItem","isModifierAllowed","TAB","DOWN_ARROW","setNextItemActive","UP_ARROW","setPreviousItemActive","RIGHT_ARROW","LEFT_ARROW","HOME","setFirstItemActive","setLastItemActive","PAGE_UP","targetIndex","_setActiveItemByIndex","PAGE_DOWN","itemsLength","toLocaleUpperCase","A","Z","ZERO","NINE","activeItemIndex","isTyping","_setActiveItemByDelta","itemArray","_setActiveInWrapMode","_setActiveInDefaultMode","fallbackDelta","ActiveDescendantKeyManager","setInactiveStyles","setActiveStyles","setFocusOrigin","InteractivityChecker","hasAttribute","hasGeometry","getClientRects","isTabbable","frameElement","getFrameElement","getTabIndexValue","tabIndexValue","WEBKIT","isPotentiallyTabbableIOS","inputType","FIREFOX","isFocusable","isPotentiallyFocusable","isHiddenInput","isInputElement","isNativeFormElement","isAnchorWithHref","isAnchorElement","hasValidTabIndex","ignoreVisibility","FocusTrap","_startAnchor","_endAnchor","_toggleAnchorTabIndex","_checker","deferAnchors","_hasAttached","startAnchorListener","focusLastTabbableElement","endAnchorListener","focusFirstTabbableElement","attachAnchors","startAnchor","endAnchor","_createAnchor","focusInitialElementWhenReady","_executeOnStable","focusInitialElement","focusFirstTabbableElementWhenReady","focusLastTabbableElementWhenReady","_getRegionBoundary","bound","_getFirstTabbableElement","_getLastTabbableElement","redirectToElement","focusableChild","tabbableChild","isEnabled","toggleAnchors","isStable","FocusTrapFactory","deferCaptureElements","CdkTrapFocus","focusTrap","_focusTrapFactory","_previouslyFocusedElement","Platform","autoCapture","_captureFocus","ngDoCheck","autoCaptureChange","_getFocusedElementPierceShadowDom","ConfigurableFocusTrap","_focusTrapManager","_inertStrategy","_enable","preventFocus","_disable","allowFocus","FOCUS_TRAP_INERT_STRATEGY","EventListenerFocusTrapInertStrategy","_trapFocus","focusTrapRoot","FocusTrapManager","_focusTrapStack","ft","ConfigurableFocusTrapFactory","configObject","isFakeMousedownFromScreenReader","detail","isFakeTouchstartFromScreenReader","touches","changedTouches","radiusX","radiusY","INPUT_MODALITY_DETECTOR_OPTIONS","INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS","ignoreKeys","ALT","CONTROL","MAC_META","META","SHIFT","modalityEventListenerOptions","capture","InputModalityDetector","mostRecentModality","_modality","_mostRecentTarget","_lastTouchMs","_onKeydown","_getEventTarget","_onMousedown","_onTouchstart","modalityDetected","modalityChanged","LIVE_ANNOUNCER_ELEMENT_TOKEN","LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY","LIVE_ANNOUNCER_DEFAULT_OPTIONS","uniqueIds","LiveAnnouncer","elementToken","_liveElement","_createLiveElement","announce","politeness","_previousTimeout","_exposeAnnouncerToModals","_currentPromise","_currentResolve","elementClass","previousElements","getElementsByClassName","liveEl","modals","modal","ariaOwns","CdkAriaLive","_politeness","_contentObserver","elementText","_previousAnnouncedText","_liveAnnouncer","FocusMonitorDetectionMode","IMMEDIATE","EVENTUAL","FOCUS_MONITOR_DEFAULT_OPTIONS","captureEventListenerOptions","FocusMonitor","_inputModalityDetector","_windowFocused","_originFromTouchInteraction","_elementInfo","_monitoredElementCount","_rootNodeFocusListenerCount","_windowFocusListener","_windowFocusTimeoutId","_stopInputModalityDetector","_rootNodeFocusAndBlurListener","_onFocus","_onBlur","_detectionMode","detectionMode","checkChildren","coerceElement","_getShadowRoot","_getDocument","cachedInfo","_registerGlobalListeners","elementInfo","_setClasses","_removeGlobalListeners","_getClosestElementsInfo","currentElement","_originChanged","_setOrigin","_info","_getWindow","_getFocusOrigin","focusEventTarget","_shouldBeAttributedToTouch","_lastFocusOrigin","_isLastInteractionFromInputLabel","isFromInteraction","_originTimeoutId","_emitOrigin","rootNodeFocusListeners","modality","mostRecentTarget","labels","CdkMonitorFocus","_focusOrigin","cdkFocusChange","focusOrigin","_monitorSubscription","HighContrastMode","BLACK_ON_WHITE","WHITE_ON_BLACK","BLACK_ON_WHITE_CSS_CLASS","WHITE_ON_BLACK_CSS_CLASS","HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS","HighContrastModeDetector","_breakpointSubscription","BreakpointObserver","_hasCheckedHighContrastMode","_applyBodyHighContrastModeCssClasses","getHighContrastMode","testElement","documentWindow","computedStyle","computedColor","bodyClasses","highContrastModeDetector","ObserversModule","DIR_DOCUMENT","DIR_DOCUMENT_FACTORY","RTL_LOCALE_PATTERN","_resolveDirectionality","rawValue","Directionality","bodyDir","htmlDir","Dir","_rawDir","BidiModule","fallbackValue","_isNumberValue","coerceArray","coerceCssPixelValue","elementOrRef","_ViewRepeaterOperation","DataSource","isDataSource","ArrayDataSource","REPLACED","INSERTED","MOVED","REMOVED","_VIEW_REPEATER_STRATEGY","_RecycleViewRepeaterStrategy","viewCacheSize","_viewCache","applyChanges","viewContainerRef","itemContextFactory","itemValueResolver","itemViewChanged","forEachOperation","adjustedPreviousIndex","currentIndex","previousIndex","viewArgsFactory","_insertView","_detachAndCacheView","_moveView","cachedView","_insertViewFromCache","viewArgs","detachedView","_maybeCacheView","move","SelectionModel","_selected","_selection","_multiple","initiallySelectedValues","_emitChanges","compareWith","_deselectedToEmit","_selectedToEmit","changed","_markSelected","_verifyValueAssignment","_hasQueuedChanges","_emitChangeEvent","deselect","_unmarkSelected","setSelection","oldValues","newSelectedSet","_getConcreteValue","isSelected","flushEvent","_unmarkAll","isMultipleSelection","added","selection","selectedValue","UniqueSelectionDispatcher","_listeners","registered","altKey","LayoutModule","mediaQueriesForWebkitCompatibility","mediaQueryStyleNode","MediaMatcher","_nonce","_matchMedia","matchMedia","noopMatchMedia","BLINK","createEmptyStyleRule","sheet","insertRule","CSP_NONCE","media","_mediaMatcher","_queries","_destroySubject","isMatched","splitQueries","mediaQuery","_registerQuery","mql","stateObservable","breakpointStates","breakpoints","Breakpoints","XSmall","Small","Medium","Large","XLarge","Handset","Tablet","Web","HandsetPortrait","TabletPortrait","WebPortrait","HandsetLandscape","TabletLandscape","WebLandscape","MutationObserverFactory","MutationObserver","ContentObserver","_mutationObserverFactory","_observedElements","_cleanupObserver","_observeElement","records","shouldIgnoreRecord","Comment","addedNodes","removedNodes","_unobserveElement","mutations","characterData","CdkObserveContent","_debounce","_currentSubscription","scrollBehaviorSupported","supportsScrollBehavior","BlockScrollStrategy","_viewportRuler","_previousHTMLStyles","_isEnabled","_canBeEnabled","_previousScrollPosition","getViewportScrollPosition","htmlStyle","previousHtmlScrollBehavior","previousBodyScrollBehavior","getViewportSize","CloseScrollStrategy","_scrollSubscription","scrolled","getElementRef","_initialScrollPosition","scrollPosition","NoopScrollStrategy","isElementScrolledOutsideView","scrollContainers","containerBounds","outsideAbove","outsideBelow","outsideLeft","outsideRight","isElementClippedByScrolling","scrollContainerRect","clippedAbove","clippedBelow","clippedLeft","clippedRight","RepositionScrollStrategy","overlayRect","ScrollStrategyOptions","OverlayConfig","hasBackdrop","disposeOnNavigation","configKeys","ConnectedOverlayPositionChange","BaseOverlayDispatcher","_attachedOverlays","OverlayKeyboardDispatcher","_keydownListener","overlays","_keydownEvents","_isAttached","OverlayOutsideClickDispatcher","_cursorStyleIsSet","_pointerDownListener","_pointerDownEventTarget","_clickListener","_outsidePointerEvents","_addEventListeners","_cursorOriginalValue","OverlayContainer","getContainerElement","_createContainer","containerClass","_isTestEnvironment","oppositePlatformContainers","OverlayRef","_portalOutlet","_pane","_keyboardDispatcher","_location","_outsideClickDispatcher","_backdropElement","_backdropClick","_attachments","_detachments","_locationChanges","_backdropClickHandler","_backdropTransitionendHandler","_disposeBackdrop","_positionStrategy","backdropElement","portal","_previousHostParent","attachResult","_updateStackingOrder","_updateElementSize","_updateElementDirection","_togglePointerEvents","_toggleClasses","detachBackdrop","detachmentResult","_detachContentWhenStable","isAttached","_disposeScrollStrategy","backdropClick","attachments","updatePositionStrategy","updateSize","sizeConfig","setDirection","classes","getDirection","updateScrollStrategy","minHeight","maxHeight","enablePointer","pointerEvents","showingClass","backdropToDetach","_backdropTimeout","cssClasses","isAdd","boundingBoxClass","cssUnitPattern","FlexibleConnectedPositionStrategy","_preferredPositions","connectedTo","_overlayContainer","_lastBoundingBoxSize","_isPushed","_canPush","_growAfterOpen","_hasFlexibleDimensions","_positionLocked","_scrollables","_positionChanges","_resizeSubscription","_offsetX","_offsetY","_appliedPanelClasses","setOrigin","_validatePositions","_boundingBox","_isDisposed","_isInitialRender","_lastPosition","reapplyLastPosition","_clearPanelClasses","_resetOverlayElementStyles","_resetBoundingBoxStyles","_viewportRect","_getNarrowedViewportRect","_originRect","_getOriginRect","_overlayRect","_containerRect","originRect","viewportRect","containerRect","flexibleFits","originPoint","_getOriginPoint","overlayPoint","_getOverlayPoint","overlayFit","_getOverlayFit","isCompletelyWithinViewport","_applyPosition","_canFitWithFlexibleDimensions","boundingBoxRect","_calculateBoundingBoxRect","visibleArea","bestFit","bestScore","fit","_previousPushAmount","extendStyles","alignItems","justifyContent","lastPosition","scrollables","flexibleDimensions","withGrowAfterOpen","growAfterOpen","withPush","canPush","withLockedPosition","isLocked","withDefaultOffsetX","withDefaultOffsetY","_transformOriginSelector","_isRtl","overlayStartX","overlayStartY","rawOverlayRect","getRoundedBoundingClientRect","_getOffset","leftOverflow","rightOverflow","topOverflow","bottomOverflow","visibleWidth","_subtractOverflows","visibleHeight","fitsInViewportVertically","fitsInViewportHorizontally","availableHeight","availableWidth","getPixelValue","verticalFit","horizontalFit","_pushOverlayOnScreen","overflowRight","overflowBottom","overflowTop","overflowLeft","pushX","pushY","_setTransformOrigin","_setOverlayElementStyles","_setBoundingBoxStyles","_addPanelClasses","scrollVisibility","_getScrollVisibility","_lastScrollVisibility","compareScrollVisibility","isOriginClipped","isOriginOutsideView","isOverlayOutsideView","changeEvent","xOrigin","yOrigin","isRtl","smallestDistanceToViewportEdge","previousHeight","isBoundedByRightViewportEdge","previousWidth","_hasExactPosition","hasExactPosition","hasFlexibleDimensions","_getExactOverlayY","_getExactOverlayX","transformString","documentHeight","horizontalStyleProperty","documentWidth","originBounds","overlayBounds","scrollContainerBounds","currentOverflow","cssClass","wrapperClass","GlobalPositionStrategy","_cssPosition","_topOffset","_bottomOffset","_alignItems","_xPosition","_xOffset","_width","_height","centerHorizontally","parentStyles","shouldBeFlushHorizontally","shouldBeFlushVertically","xPosition","xOffset","marginLeft","marginRight","marginTop","marginBottom","OverlayPositionBuilder","nextUniqueId","_positionBuilder","_directionality","_animationsModuleType","_createHostElement","_createPaneElement","portalOutlet","_createPortalOutlet","overlayConfig","_appRef","DomPortalOutlet","defaultPositionList","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY","CdkOverlayOrigin","elementRef","CdkConnectedOverlay","_updatePositionStrategy","_disposeOnNavigation","scrollStrategyFactory","_backdropSubscription","_attachSubscription","_detachSubscription","_positionSubscription","viewportMargin","lockPosition","positionChange","overlayKeydown","overlayOutsideClick","_templatePortal","_scrollStrategyFactory","_attachOverlay","_detachOverlay","_buildConfig","_getOriginElement","_createPositionStrategy","transformOriginSelector","inclusive","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY","ScrollingModule","FullscreenOverlayContainer","_fullScreenEventName","_fullScreenListener","_adjustParentForFullscreenChange","_addFullscreenChangeListener","getFullscreenElement","_getEventName","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","hasV8BreakIterator","supportedInputTypes","v8BreakIterator","EDGE","TRIDENT","SAFARI","PlatformModule","candidateInputTypes","getSupportedInputTypes","featureTestInput","supportsPassiveEvents","supportsPassiveEventListeners","RtlScrollAxisType","rtlScrollAxisType","shadowDomIsSupported","scrollToFunction","getRtlScrollAxisType","NORMAL","scrollContainer","containerStyle","contentStyle","NEGATED","INVERTED","_supportsShadowDom","createShadowRoot","attachShadow","newActiveElement","composedPath","__karma__","jasmine","jest","Mocha","Portal","_attachedHost","setAttachedHost","DomPortal","BasePortalOutlet","attachDomPortal","_attachedPortal","attachComponentPortal","attachTemplatePortal","_invokeDisposeFn","setDisposeFn","_disposeFn","outletElement","_defaultInjector","anchorNode","replaceChild","NULL","viewCount","_getComponentRootNode","viewContainer","CdkPortal","TemplatePortalDirective","ɵTemplatePortalDirective_BaseFactory","attached","_getRootNode","attachedRef","_attachedRef","PortalHostDirective","ɵPortalHostDirective_BaseFactory","animationFrameProvider","cancelAnimationFrame","AnimationFrameAction","AnimationFrameScheduler","animationFrameScheduler","VIRTUAL_SCROLL_STRATEGY","FixedSizeVirtualScrollStrategy","itemSize","minBufferPx","maxBufferPx","_scrolledIndexChange","scrolledIndexChange","_viewport","_itemSize","_minBufferPx","_maxBufferPx","_updateTotalContentSize","_updateRenderedRange","updateItemAndBufferSize","onContentScrolled","onDataLengthChanged","onContentRendered","onRenderedOffsetChanged","scrollToIndex","scrollToOffset","setTotalContentSize","getDataLength","renderedRange","getRenderedRange","newRange","viewportSize","scrollOffset","measureScrollOffset","firstVisibleIndex","maxVisibleItems","newVisibleIndex","startBuffer","expandStart","endBuffer","expandEnd","setRenderedRange","setRenderedContentOffset","_fixedSizeVirtualScrollStrategyFactory","fixedSizeDir","CdkFixedSizeVirtualScroll","ScrollDispatcher","_scrolled","_globalSubscription","_scrolledCount","elementScrolled","scrollableReference","auditTimeInMs","_addGlobalListener","_removeGlobalListener","ancestorScrolled","elementOrElementRef","ancestors","scrollingContainers","_scrollableContainsElement","scrollableElement","CdkScrollable","scrollDispatcher","_elementScrolled","_applyScrollToOptions","LEFT","ViewportRuler","_change","_changeListener","_viewportSize","_updateViewportSize","documentRect","scrollY","scrollX","throttleTime","VIRTUAL_SCROLLABLE","CdkVirtualScrollable","measureViewportSize","viewportEl","SCROLL_SCHEDULER","CdkVirtualScrollViewport","_orientation","_calculateSpacerSize","viewportRuler","_detachedSubject","_renderedRangeSubject","appendOnly","renderedRangeStream","_totalContentSize","_totalContentWidth","_totalContentHeight","_renderedRange","_dataLength","_renderedContentOffset","_renderedContentOffsetNeedsRewrite","_isChangeDetectionPending","_runAfterChangeDetection","_viewportChanges","checkViewportSize","_measureViewportSize","_markChangeDetectionNeeded","forOf","_forOf","dataStream","_doChangeDetection","measureBoundingClientRectWithScrollOffset","rangesEqual","r1","r2","getOffsetToRenderedContentStart","_renderedContentTransform","measureRenderedContentSize","_from","measureViewportOffset","fromRect","scrollerClientRect","contentEl","_contentWrapper","measureRangeSize","runAfter","runAfterChangeDetection","virtualScrollable","Inject","getOffset","CdkVirtualForOf","cdkVirtualForOf","_cdkVirtualForOf","_dataSourceChanges","cdkVirtualForTrackBy","_cdkVirtualForTrackBy","_needsUpdate","cdkVirtualForTemplate","cdkVirtualForTemplateCacheSize","_viewRepeater","_differs","viewChange","cur","_changeDataSource","_differ","_onRenderedDataChange","renderedStartIndex","rangeLen","firstNode","lastNode","_renderedItems","_applyChanges","_updateContext","oldDs","newDs","_updateComputedContextProperties","_adjustedPreviousIndex","_getEmbeddedViewArgs","forEachIdentityChange","even","odd","CdkVirtualScrollableElement","CdkVirtualScrollableWindow","_DOM","getDOM","setRootDomAdapter","adapter","DomAdapter","PlatformNavigation","PlatformLocation","historyGo","relativePosition","BrowserPlatformLocation","LOCATION_INITIALIZED","_doc","_history","history","getBaseHrefFromDOM","getBaseHref","onPopState","getGlobalEventTarget","onHashChange","pathname","newPath","pushState","replaceState","forward","go","getState","joinWithSlash","slashes","stripTrailingSlash","pathEndIdx","droppedSlashIdx","normalizeQueryParams","LocationStrategy","PathLocationStrategy","APP_BASE_HREF","_platformLocation","_removeListenerFns","_baseHref","prepareExternalUrl","includeHash","externalUrl","HashLocationStrategy","Location","locationStrategy","_urlChangeListeners","_urlChangeSubscription","_locationStrategy","baseHref","_basePath","_stripOrigin","_stripIndexHtml","ev","isCurrentPathEqualTo","_stripBasePath","basePath","strippedUrl","_notifyUrlChangeListeners","onUrlChange","fnIndex","onThrow","onReturn","createLocation","ɵɵinject","CURRENCIES_EN","ADP","AFN","ALL","AMD","AOA","ARS","AUD","AZN","BAM","BBD","BDT","BHD","BIF","BMD","BND","BOB","BRL","BSD","BWP","BYN","BYR","BZD","CAD","CHF","CLF","CLP","CNY","COP","CRC","CUC","CUP","CZK","DJF","DKK","DOP","EGP","ESP","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GNF","GTQ","GYD","HKD","HNL","HRK","HUF","IDR","ILS","INR","IQD","IRR","ISK","ITL","JMD","JOD","JPY","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LTL","LUF","LVL","LYD","MGA","MGF","MMK","MNT","MRO","MUR","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PHP","PKR","PLN","PYG","RON","RSD","RUB","RWF","SBD","SEK","SGD","SHP","SLE","SLL","SOS","SRD","SSP","STD","STN","SYP","THB","TMM","TND","TOP","TRL","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYI","UYU","UYW","UZS","VEF","VND","VUV","XAF","XCD","XOF","XPF","XXX","YER","ZAR","ZMK","ZMW","ZWD","NumberFormatStyle","Plural","FormatWidth","Decimal","Percent","Currency","Scientific","Zero","One","Two","Few","Many","Other","Format","Full","NumberSymbol","List","PercentSign","PlusSign","MinusSign","Exponential","SuperscriptingExponent","PerMille","TimeSeparator","CurrencyDecimal","CurrencyGroup","WeekDay","formStyle","ɵfindLocaleData","amPm","getLastDefinedValue","ɵLocaleDataIndex","DayPeriodsFormat","DayPeriodsStandalone","DaysFormat","DaysStandalone","MonthsFormat","MonthsStandalone","getLocaleDateFormat","DateFormat","getLocaleTimeFormat","TimeFormat","getLocaleDateTimeFormat","dateTimeFormatData","getLocaleNumberSymbol","NumberSymbols","getLocaleNumberFormat","NumberFormats","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","getLocalePluralCase","ɵgetLocalePluralCase","checkFullData","ExtraData","LocaleId","extractTime","getCurrencySymbol","getLocaleCurrencies","Currencies","symbolNarrow","DEFAULT_NB_OF_CURRENCY_DIGITS","ISO8601_DATE_REGEX","NAMED_FORMATS","DATE_FORMATS_SPLIT","ZoneWidth","DateType","TranslationType","timezone","parsedNb","isoStringToDate","tzHour","tzMin","dateSetter","timeSetter","getNamedFormat","dateTimezoneOffset","timezoneToOffset","convertTimezoneToLocal","reverseValue","timezoneOffset","addDateMinutes","dateFormatter","getDateFormatter","DATE_FORMATS","dateStrGetter","Eras","dateGetter","FullYear","weekNumberingYearGetter","Month","Months","weekGetter","Day","Days","DayPeriods","Hours","Minutes","Seconds","FractionalSeconds","timeZoneGetter","Extended","ShortGMT","localeId","getLocaleId","formatValue","shortTime","shortDate","formatDateTime","mediumTime","mediumDate","longTime","longDate","fullTime","fullDate","opt_values","minusSign","negWrap","neg","strNum","getDatePart","formatFractionalSeconds","localeMinus","extended","getDateTranslation","currentHours","currentMinutes","rules","getLocaleExtraDayPeriodRules","rule","dayPeriods","getLocaleExtraDayPeriods","afterFrom","beforeTo","getLocaleEraNames","erasData","JANUARY","THURSDAY","getThursdayThisIsoWeek","currentDay","deltaToThursday","monthBased","nbDaysBefore1stDayOfMonth","thisThurs","firstThurs","getFirstThursdayOfYear","requestedTimezoneOffset","NUMBER_FORMAT_REGEXP","MAX_DIGITS","DECIMAL_SEP","ZERO_CHAR","PATTERN_SEP","GROUP_SEP","DIGIT_CHAR","formatNumberToLocaleString","groupSymbol","decimalSymbol","digitsInfo","isPercent","formattedText","parsedNumber","parseNumber","integerLen","zeros","numStr","exponent","toPercent","fractionLen","minInt","minFraction","minFrac","maxFraction","maxFrac","minIntPart","minFractionPart","maxFractionPart","parseIntAutoRadix","roundNumber","fractionSize","roundAt","dropTrailingZeros","carry","lgSize","gSize","negPre","negSuf","posPre","posSuf","formatCurrency","currencyCode","parseNumberFormat","getNumberOfCurrencyDigits","patternParts","positive","positiveParts","fraction","trunkLen","NgLocalization","NgLocaleLocalization","getPluralCategory","ngLocalization","parseCookieValue","cookieStr","eqIndex","cookieName","cookieValue","WS_REGEXP","EMPTY_ARRAY","_ngEl","initialClasses","klass","ngClass","rawClass","_applyStateDiff","nextEnabled","stateEntry","_toggleClass","NgComponentOutlet","ngComponentOutlet","_inputsUsed","_needToReCreateNgModuleInstance","ngComponentOutletNgModule","ngComponentOutletNgModuleFactory","_needToReCreateComponentInstance","ngComponentOutletContent","ngComponentOutletInjector","_componentRef","parentInjector","_moduleRef","createNgModule","getParentInjector","ngModuleRef","ngComponentOutletInputs","_applyInputStateDiff","NgModuleRef","NgForOfContext","ngForOf","NgForOf","_ngForOf","_ngForOfDirty","ngForTrackBy","_trackByFn","_viewContainer","ngForTemplate","applyViewChange","ilen","ngTemplateContextGuard","NgIf","_context","NgIfContext","_thenTemplateRef","_elseTemplateRef","_thenViewRef","_elseViewRef","ngIf","condition","_updateView","ngIfThen","assertTemplate","ngIfElse","ɵstringify","SwitchView","_templateRef","_created","enforceState","created","NgSwitch","_defaultViews","_defaultUsed","_caseCount","_lastCaseCheckIndex","_lastCasesMatched","ngSwitch","_ngSwitch","_updateDefaultCases","_addCase","_addDefault","_matchCase","useDefault","NgSwitchCase","_view","ngSwitchCase","NgSwitchDefault","NgPlural","_localization","_caseViews","ngPlural","addCase","switchView","switchValue","_clearViews","_activateView","_activeView","NgPluralCase","isANumber","NgStyle","_ngStyle","ngStyle","_setStyle","nameAndUnit","RendererStyleFlags2","DashCase","forEachRemovedItem","forEachAddedItem","forEachChangedItem","ngTemplateOutletContext","ngTemplateOutlet","ngTemplateOutletInjector","_shouldRecreateView","viewContext","_createContextForwardProxy","Proxy","_target","Reflect","invalidPipeArgumentError","_promiseStrategy","PromiseStrategy","createSubscription","updateLatestValue","_subscribableStrategy","SubscribableStrategy","untracked","AsyncPipe","_latestValue","markForCheckOnValueUpdate","_obj","_strategy","_dispose","_selectStrategy","_updateLatestValue","ɵisPromise","ɵisSubscribable","LowerCasePipe","unicodeWordMatch","TitleCasePipe","UpperCasePipe","DATE_PIPE_DEFAULT_TIMEZONE","DATE_PIPE_DEFAULT_OPTIONS","DatePipe","defaultTimezone","_format","_timezone","_INTERPOLATION_REGEXP","I18nPluralPipe","pluralMap","I18nSelectPipe","mapping","JsonPipe","KeyValuePipe","differs","keyValues","compareFn","defaultComparator","differ","differChanges","compareFnChanged","forEachItem","makeKeyValuePair","keyValueA","keyValueB","aString","bString","DecimalPipe","isValue","formatNumber","strToNumber","formatPercent","CurrencyPipe","_defaultCurrencyCode","DEFAULT_CURRENCY_CODE","SlicePipe","supports","PLATFORM_BROWSER_ID","PLATFORM_SERVER_ID","ViewportScroller","ɵɵdefineInjectable","BrowserViewportScroller","NullViewportScroller","setOffset","getScrollPosition","scrollToPosition","scrollToAnchor","elSelected","findAnchorFromDocument","documentResult","getElementsByName","createTreeWalker","treeWalker","NodeFilter","SHOW_ELEMENT","nextNode","scrollToElement","setHistoryScrollRestoration","scrollRestoration","XhrFactory","PLACEHOLDER_QUALITY","getUrl","isAbsoluteUrl","extractHostname","isValidPath","normalizeSrc","noopImageLoader","IMAGE_LOADER","createImageLoader","buildUrlFn","exampleUrls","throwInvalidPathError","normalizePath","throwUnexpectedAbsoluteUrlError","createCloudflareUrl","isPlaceholder","createCloudinaryUrl","createImagekitUrl","urlSegments","createImgixUrl","imgDirectiveDetails","ngSrc","includeNgSrc","assertDevMode","checkName","LCPImageObserver","images","PerformanceObserver","initPerformanceObserver","entryList","getEntries","imgSrc","alreadyWarnedPriority","logMissingPriorityError","directiveDetails","ɵformatRuntimeError","modified","alreadyWarnedModified","logModifiedWarning","buffered","registerImage","rewrittenSrc","originalNgSrc","newObservedImageState","unregisterImage","updateImage","originalSrc","newSrc","originalUrl","INTERNAL_PRECONNECT_CHECK_BLOCKLIST","PRECONNECT_CHECK_BLOCKLIST","PreconnectLinkChecker","preconnectLinks","alreadySeen","blocklist","populateBlocklist","origins","deepForEach","assertPreconnect","imgUrl","queryPreconnectLinks","preconnectUrls","PRELOADED_IMAGES","PreloadLinkCreator","preloadedImages","createPreloadLinkTag","srcset","sizes","preload","VALID_WIDTH_DESCRIPTOR_SRCSET","DENSITY_SRCSET_MULTIPLIERS","NgOptimizedImage","imageLoader","processConfig","sortedBreakpoints","ɵIMAGE_CONFIG_DEFAULTS","ɵIMAGE_CONFIG","imgElement","isServer","preloadLinkCreator","lcpObserver","_renderedSrc","disableOptimizedSrcset","ɵperformanceMarkFeature","removePlaceholderOnLoad","setHostAttributes","setHostAttribute","getLoadingBehavior","getFetchPriority","rewrittenSrcset","updateSrcAndSrcset","getRewrittenSrc","isFirstChange","oldSrc","callImageLoader","configWithoutCustomParams","augmentedConfig","loaderParams","imgConfig","getRewrittenSrcset","widthSrcSet","ngSrcset","srcStr","getAutomaticSrcset","getResponsiveSrcset","getFixedSrcset","filteredBreakpoints","bp","forceSrcRecalc","shouldGenerateAutomaticSrcset","oversizedImage","generatePlaceholder","placeholderInput","placeholderResolution","shouldBlurPlaceholder","placeholderConfig","blur","removeLoadListenerFn","removeErrorListenerFn","unwrapSafeUrl","booleanOrDataUrlAttribute","ɵunwrapSafeValue","HttpHandler","HttpBackend","HttpHeaders","normalizedNames","lazyUpdate","lazyInit","line","maybeSetNormalizedName","setHeaderEntries","lcName","copyFrom","applyUpdate","toDelete","headerValues","HttpUrlEncodingCodec","encodeKey","standardEncoding","encodeValue","decodeKey","decodeValue","STANDARD_ENCODING_REGEX","STANDARD_ENCODING_REPLACEMENTS","valueToString","cloneFrom","paramParser","rawParams","codec","eqIdx","appendAll","eKey","HttpContext","isBlob","isFormData","FormData","HttpRequest","third","fourth","reportProgress","mightHaveBody","transferCache","urlWithParams","qIdx","sep","serializeBody","isUrlSearchParams","URLSearchParams","detectContentTypeHeader","setHeaders","setParams","HttpEventType","HttpStatusCode","Sent","UploadProgress","ResponseHeader","DownloadProgress","HttpResponseBase","defaultStatus","Ok","defaultStatusText","statusText","HttpHeaderResponse","HttpResponse","HttpErrorResponse","addBody","Continue","SwitchingProtocols","Processing","EarlyHints","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","events$","res$","callbackParam","XSSI_PREFIX$1","getResponseUrl$1","xRequestUrl","FetchBackend","FetchFactory","aborter","AbortController","doRequest","signal","createRequestInit","fetchPromise","silenceSuperfluousUnhandledPromiseRejection","contentLength","chunks","partialText","receivedLength","reqZone","chunksAll","concatChunks","contentType","parseBody","binContent","credentials","Accept","detectedType","totalLength","interceptorChainEndFn","finalHandlerFn","adaptLegacyInterceptorToChain","chainTailFn","initialRequest","intercept","downstreamRequest","HTTP_INTERCEPTORS","HTTP_INTERCEPTOR_FNS","HTTP_ROOT_INTERCEPTOR_FNS","PRIMARY_HTTP_BACKEND","legacyInterceptorFnFactory","pendingTasks","ɵPendingTasks","taskId","HttpInterceptorHandler","backend","primaryHttpBackend","dedupedInterceptorFns","nextSequencedFn","interceptorFn","chainedInterceptorFn","runInInjectionContext","foreignDocument","nextRequestId","JsonpCallbackContext","jsonpCallbackContext","JsonpClientBackend","callbackMap","resolvedPromise","nextCallback","removeListeners","implementation","createHTMLDocument","adoptNode","jsonpInterceptorFn","JsonpInterceptor","XSSI_PREFIX","HttpXhrBackend","xhrFactory","ɵloadImpl","reqBody","headerResponse","partialFromXhr","getAllResponseHeaders","getResponseUrl","responseURL","getResponseHeader","onLoad","originalBody","sentHeaders","onDownProgress","progressEvent","lengthComputable","onUpProgress","progress","upload","DONE","XSRF_ENABLED","XSRF_DEFAULT_COOKIE_NAME","XSRF_COOKIE_NAME","XSRF_DEFAULT_HEADER_NAME","XSRF_HEADER_NAME","HttpXsrfTokenExtractor","HttpXsrfCookieExtractor","lastCookieString","lastToken","parseCount","cookieString","ɵparseCookieValue","xsrfInterceptorFn","lcUrl","HttpXsrfInterceptor","HttpFeatureKind","makeHttpFeature","ɵkind","ɵproviders","provideHttpClient","feature","makeEnvironmentProviders","Interceptors","LegacyInterceptors","CustomXsrfConfiguration","NoXsrfProtection","JsonpSupport","RequestsMadeViaParent","Fetch","LEGACY_INTERCEPTOR_FN","withInterceptorsFromDi","withXsrfConfiguration","withJsonpSupport","HttpClientXsrfModule","withOptions","HttpClientJsonpModule","defaultEquals","is","activeConsumer","inNotificationPhase","epoch","SIGNAL","setActiveConsumer","REACTIVE_NODE","lastCleanEpoch","dirty","producerNode","producerLastReadVersion","producerIndexOfThis","nextProducerIndex","liveConsumerNode","liveConsumerIndexOfThis","consumerAllowSignalWrites","consumerIsAlwaysLive","producerMustRecompute","producerRecomputeValue","consumerMarkedDirty","consumerOnSignalRead","producerAccessed","assertConsumerNode","consumerIsLive","producerRemoveLiveConsumerAtIndex","producerAddLiveConsumer","producerUpdateValueVersion","consumerPollProducersForChange","producerNotifyConsumers","consumerMarkDirty","producerUpdatesAllowed","consumerBeforeComputation","consumerAfterComputation","prevConsumer","producer","seenVersion","consumerDestroy","indexOfThis","assertProducerNode","lastIdx","idxProducer","UNSET","COMPUTING","ERRORED","COMPUTED_NODE","equal","computation","throwInvalidWriteToSignalErrorFn","defaultThrowError","throwInvalidWriteToSignalError","postSignalSetFn","signalSetFn","signalValueChanged","producerIncrementEpoch","SIGNAL_NODE","createWatch","allowSignalWrites","WATCH_NODE","registerOnCleanup","isInNotificationPhase","hasRun","NOOP_CLEANUP_FN","destroyWatchNode","isWatchNodeDestroyed","XSS_SECURITY_URL","RuntimeError","formatRuntimeError","REQUIRED_UNSET_VALUE","INPUT_SIGNAL_NODE","SIGNAL_NODE$1","transformFn","applyValueToInputSignal","signalSetFn$1","createInputSignal","initialValue","inputValueFn","producerAccessed$1","SIGNAL$1","noSideEffects","ANNOTATIONS","PARAMETERS","PROP_METADATA","makeDecorator","parentClass","additionalProcessing","typeFn","metaCtor","makeMetadataCtor","DecoratorFactory","annotationInstance","ngMetadataName","annotationCls","propName","makeParamDecorator","ParamDecoratorFactory","ParamDecorator","annotation","unusedKey","makePropDecorator","PropDecoratorFactory","decoratorInstance","PropDecorator","_global","getClosureSafeProperty","objWithPropertyToExtract","fillProperties","overriddenName","newLineIndex","concatStringsWithSpace","__forward_ref__","forwardRefFn","resolveForwardRef","isForwardRef","assertEqual","comparison","ɵɵdefineInjector","getInjectableDef","getOwnDefinition","NG_PROV_DEF","NG_INJECTABLE_DEF","isInjectable","getInjectorDef","NG_INJ_DEF","NG_INJECTOR_DEF","ngInjectableDef","ngInjectorDef","_desc","__NG_ELEMENT_ID__","isEnvironmentProviders","NG_COMP_DEF","NG_DIR_DEF","NG_PIPE_DEF","NG_MOD_DEF","NG_FACTORY_DEF","NG_ELEMENT_ID","NG_ENV_ID","__NG_ENV_ID__","renderStringify","stringifyForError","throwProviderNotFoundError","injectorName","InjectFlags","_injectImplementation","getInjectImplementation","setInjectImplementation","impl","injectRootLimpMode","notFoundValue","injectableDef","Host","Self","SkipSelf","THROW_IF_NOT_FOUND","DI_DECORATOR_FLAG","NG_TEMP_TOKEN_PATH","NEW_LINE","NO_NEW_LINE","SOURCE","_currentInjector","setCurrentInjector","former","injectInjectorOnly","ɵɵinvalidFactoryDep","convertToBitFlags","skipSelf","injectArgs","flag","getInjectFlag","attachInjectFlag","decorator","catchInjectorError","injectorErrorName","tokenPath","formatError","getFactoryDef","throwNotFound","flat","addToArray","removeFromArray","arraySplice","arrayInsert2","value1","value2","previousEnd","keyValueArraySet","keyValueArray","keyValueArrayIndexOf","keyValueArrayGet","_arrayIndexOfSorted","EMPTY_OBJ","ENVIRONMENT_INITIALIZER","INJECTOR$1","INJECTOR_DEF_TYPES","NullInjector","ChangeDetectionStrategy","ViewEncapsulation$1","InputFlags","classIndexOf","classToSearch","startingIndex","foundIndex","setUpAttributes","namespaceURI","attrName","attrVal","isAnimationProp","isNameOnlyAttributeMarker","mergeHostAttrs","dst","srcMarker","mergeHostAttribute","markerInsertPosition","dstValue","OnPush","Emulated","ShadowDom","SignalBased","NG_TEMPLATE_SELECTOR","isCssClassMatching","tNode","cssClassToMatch","isProjectionMode","isInlineTemplate","hasTagAndTypeMatch","currentSelector","isNodeMatchingSelector","nodeAttrs","nameOnlyMarkerIdx","getNameOnlyMarkerIndex","skipToNextSelector","isPositive","selectorAttrValue","attrIndexInNode","findAttrIndexInNode","nodeAttrValue","bindingsMode","maybeAttrName","matchTemplateAttribute","isNodeMatchingSelectorList","isSelectorInSelectorList","selectorListLoop","currentSelectorInList","maybeWrapInNotSelector","isNegativeMode","stringifyCSSSelector","currentChunk","valueOrMarker","attrValue","ɵɵdefineComponent","componentDefinition","baseDef","getNgDirectiveDef","onPush","directiveDefs","pipeDefs","getStandaloneInjector","signals","schemas","tView","initFeatures","extractDefListOrFactory","getComponentId","componentDef","hashSelectors","imul","extractDirectiveDef","getComponentDef","getDirectiveDef","nonNull","ɵɵdefineNgModule","declarations","transitiveCompileScopes","parseAndConvertBindingsForDefinition","declaredInputs","newLookup","minifiedKey","publicName","declaredName","inputFlags","ɵɵdefineDirective","directiveDefinition","ɵɵdefinePipe","pipeDef","getPipeDef$1","isStandalone","getNgModuleDef","ngModuleDef","providersResolver","inputTransforms","inputConfig","findHostDirectiveDefs","hostDirectives","debugInfo","definition","defExtractor","importProvidersFrom","internalImportProvidersFrom","ɵfromNgModule","checkForStandaloneCmp","providersOut","dedup","injectorTypesWithProviders","collectProviders","internalSource","walkProviderTree","processInjectorTypesWithProviders","typesWithProviders","deepForEachProvider","parents","defType","injDef","cmpDef","isDuplicate","importTypesWithProviders","imported","defProviders","injectorType","USE_VALUE$1","isValueProvider","isExistingProvider","isFactoryProvider","isTypeProvider","INJECTOR_SCOPE","NOT_YET","CIRCULAR","NULL_INJECTOR","getNullInjector","R3Injector","_ngOnDestroyHooks","_onDestroyHooks","forEachSingleProvider","processProvider","makeRecord","injectorDefTypes","setActiveConsumer$1","onDestroyHooks","hook","removeOnDestroy","previousInjector","previousInjectImplementation","couldBeInjectableType","injectableDefInScope","injectableDefOrInjectorDefFactory","hydrate","nextInjector","resolveInjectorInitializers","initializers","providerToRecord","providerToFactory","multiRecord","hasOnDestroy","destroyCBIdx","getUndecoratedInjectableFactory","inheritedInjectableDef","getInheritedInjectableDef","ngModuleType","unwrappedProvider","classRef","hasDeps","prevInjector","isInInjectionContext","getCurrentInjector","debugFn","FactoryTarget","R3TemplateDependencyKind","getCompilerFacade","globalNg","ng","ɵcompilerFacade","Directive","Injectable","Pipe","NgModule","angularCoreDiEnv","Type","ES5_DELEGATE_CTOR","ES2015_INHERITED_CLASS","ES2015_INHERITED_CLASS_WITH_CTOR","ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR","ReflectionCapabilities","reflect","_reflect","_zipTypesAndAnnotations","paramTypes","paramAnnotations","_ownParameters","parentCtor","isDelegateCtor","typeStr","tsickleCtorParams","ctorParameters","ctorParam","convertTsickleDecoratorIntoMetadata","decorators","getOwnMetadata","getParentCtor","_ownAnnotations","typeOrFunc","annotations","ownAnnotations","_ownPropMetadata","propMetadata","propDecorators","parentPropMetadata","ownPropMetadata","hasLifecycleHook","lcProperty","decoratorInvocations","decoratorInvocation","ctor","parentProto","HOST","TVIEW","FLAGS","PARENT","T_HOST","HYDRATION","CLEANUP","CONTEXT","INJECTOR","ENVIRONMENT","RENDERER","CHILD_HEAD","CHILD_TAIL","DECLARATION_VIEW","DECLARATION_COMPONENT_VIEW","DECLARATION_LCONTAINER","PREORDER_HOOK_FLAGS","QUERIES","ID","EMBEDDED_VIEW_INJECTOR","ON_DESTROY_HOOKS","EFFECTS_TO_SCHEDULE","REACTIVE_TEMPLATE_CONSUMER","HEADER_OFFSET","TYPE","NATIVE","MOVED_VIEWS","CONTAINER_HEADER_OFFSET","LContainerFlags","isLView","isLContainer","isContentQueryHost","isComponentHost","componentOffset","isDirectiveHost","isComponentDef","isRootView","lView","HasTransplantedViews","SimpleChange","applyValueToInputField","inputSignalNode","privateName","ɵɵNgOnChangesFeature","NgOnChangesFeatureImpl","ngOnChangesSetInput","rememberChangeHistoryAndInvokeOnChangesHook","simpleChangesStore","getSimpleChangesStore","setSimpleChangesStore","store","SIMPLE_CHANGES_STORE","previousChange","ngInherit","profilerCallback","profiler","hookOrListener","SVG_NAMESPACE","_ensureDirtyViewsAreAlwaysReachable","unwrapRNode","unwrapLView","getNativeByIndex","getNativeByTNode","getTNode","getComponentLViewByIndex","nodeIndex","slotValue","viewAttachedToChangeDetector","getConstant","resetPreOrderHookFlags","markViewForRefresh","markAncestorsForTraversal","walkUpViews","nestingLevel","currentView","requiresRefreshOrTraversal","updateAncestorTraversalFlagsOnAttach","changeDetectionScheduler","getEnsureDirtyViewsAreAlwaysReachable","getLViewParent","storeLViewOnDestroy","onDestroyCallback","removeLViewOnDestroy","instructionState","lFrame","createLFrame","bindingsEnabled","skipHydrationRootTNode","getBindingsEnabled","isInSkipHydrationBlock$1","getLView","getTView","ɵɵrestoreView","viewToRestore","contextLView","ɵɵresetView","getCurrentTNode","currentTNode","getCurrentTNodePlaceholderOk","getCurrentParentTNode","isParent","setCurrentTNode","isCurrentTNodeParent","setCurrentTNodeAsNotParent","getBindingRoot","bindingRootIndex","bindingStartIndex","getBindingIndex","bindingIndex","setBindingIndex","nextBindingIndex","incrementBindingIndex","setInI18nBlock","isInI18nBlock","inI18n","setBindingRootForHostBindings","currentDirectiveIndex","setCurrentDirectiveIndex","getCurrentDirectiveDef","tData","getCurrentQueryIndex","setCurrentQueryIndex","getDeclarationTNode","declTNode","enterDI","parentTNode","parentLView","allocLFrame","enterView","newView","newLFrame","currentLFrame","childLFrame","selectedIndex","elementDepthCount","currentNamespace","leaveViewLight","oldLFrame","leaveDI","leaveView","getSelectedIndex","setSelectedIndex","getSelectedTNode","ɵɵnamespaceSVG","ɵɵnamespaceHTML","namespaceHTMLInternal","getNamespace$1","_wasLastNodeCreated","wasLastNodeCreated","lastNodeWasCreated","registerPostOrderHooks","directiveStart","directiveEnd","lifecycleHooks","contentHooks","contentCheckHooks","viewHooks","viewCheckHooks","destroyHooks","executeCheckHooks","callHooks","executeInitAndCheckHooks","initPhase","incrementInitPhaseFlags","currentNodeIndex","nodeIndexLimit","lastNodeIndexFound","callHook","callHookInternal","directive","isInitHook","NO_PARENT_INJECTOR","NodeInjectorFactory","isViewProvider","injectImplementation","resolving","canSeeViewProviders","injectImpl","hasParentInjector","parentLocation","getParentInjectorIndex","getParentInjectorView","startView","viewOffset","getParentInjectorViewOffset","parentView","includeViewProviders","setIncludeViewProviders","BLOOM_MASK","BLOOM_BUCKET_BITS","nextNgElementId","NOT_FOUND","getOrCreateNodeInjectorForNode","existingInjectorIndex","getInjectorIndex","firstCreatePass","injectorIndex","insertBloom","blueprint","parentLoc","getParentInjectorLocation","parentIndex","parentData","footer","declarationViewOffset","lViewCursor","getTNodeFromLView","diPublicInInjector","bloomAdd","bloomHash","notFoundValueOrThrow","lookupTokenUsingModuleInjector","moduleInjector","getOrCreateInjectable","embeddedInjectorValue","lookupTokenUsingEmbeddedInjector","currentLView","nodeInjectorValue","lookupTokenUsingNodeInjector","embeddedViewInjector","embeddedViewInjectorValue","bloomHashBitOrFactory","tokenId","createNodeInjector","previousTView","hostTElementNode","shouldSearchParent","bloomHasToken","searchTokensOnInjector","currentTView","injectableIdx","locateDirectiveOrProvider","getNodeInjectable","canAccessViewProviders","isHostSpecialCase","nodeProviderIndexes","providerIndexes","tInjectables","injectablesStart","directivesStart","cptViewProvidersCount","providerTokenOrDef","dirDef","isFactory","throwCyclicDependencyError","previousIncludeViewProviders","registerPreOrderHooks","directiveIndex","directiveDef","wrappedOnChanges","preOrderHooks","preOrderCheckHooks","injectorView","isFirstHostTNode","NodeInjector","_tNode","_lView","ɵɵgetInheritedFactory","ownConstructor","ownFactory","getFactoryOf","objectPrototype","tViewType","ɵɵinjectAttribute","attrNameToInject","injectAttributeImpl","attrsLength","Attribute","attributeName","getReflect","reflectDependencies","convertDependencies","reflectDependency","compileInjectable","ngFactoryDef","getInjectableMetadata","srcMeta","compilerMeta","typeArgumentCount","isUseClassProvider","isUseFactoryProvider","isUseValueProvider","USE_VALUE","isUseExistingProvider","compiler","compileFactory","createInjector","additionalProviders","createInjectorWithoutInjectorInstances","ERROR_ORIGINAL_ERROR","getOriginalError","ErrorHandler","_console","originalError","_findOriginalError","INTERNAL_APPLICATION_ERROR_HANDLER","injectDestroyRef","NodeInjectorDestroyRef","OutputEmitterRef","errorHandler","previousConsumer","listenerFn","inputFunction","inputRequiredFunction","injectElementRef","createElementRef","unwrapElementRef","EventEmitter_","isAsync","__isAsync","nextFn","completeFn","_wrapInTimeout","symbolIterator","_results","_changes","_emitDistinctChangesOnly","_onDirty","_changesDetected","resultsTree","identityAccessor","newResultFlat","arrayEquals","valueA","valueB","onDirty","setDirty","hasInSkipHydrationBlockFlag","TRACKED_LVIEWS","uniqueIdCounter","MONKEY_PATCH_KEY_NAME","attachPatchData","registerLView","getFirstLContainer","getNearestLContainer","getNextLContainer","viewOrContainer","setDocument","DEFAULT_APP_ID","PLATFORM_INITIALIZER","IMAGE_CONFIG_DEFAULTS","disableImageSizeWarning","disableImageLazyLoadWarning","IMAGE_CONFIG","initTransferState","transferState","TransferState","retrieveTransferredState","onSerializeCallbacks","hasKey","onSerialize","toJson","REFERENCE_NODE_HOST","REFERENCE_NODE_BODY","NodeNavigationStep","FirstChild","NextSibling","_retrieveHydrationInfoImpl","retrieveHydrationInfo","rNode","HydrationStatus","Hydrated","Skipped","Mismatched","PRESERVE_HOST_CONTENT","policy$1","policy","getPolicy$1","trustedTypes","createPolicy","createHTML","createScript","createScriptURL","trustedHTMLFromString","getPolicy","trustedHTMLFromStringBypass","trustedScriptFromStringBypass","trustedScriptURLFromStringBypass","SafeValueImpl","changingThisBreaksApplicationSecurity","SafeHtmlImpl","getTypeName","SafeStyleImpl","SafeScriptImpl","SafeUrlImpl","SafeResourceUrlImpl","unwrapSafeValue","allowSanitizationBypassAndThrow","actualType","getSanitizationBypassType","bypassSanitizationTrustHtml","trustedHtml","bypassSanitizationTrustStyle","trustedStyle","bypassSanitizationTrustScript","trustedScript","bypassSanitizationTrustUrl","trustedUrl","bypassSanitizationTrustResourceUrl","trustedResourceUrl","getInertBodyHelper","defaultDoc","inertDocumentHelper","InertDocumentHelper","isDOMParserAvailable","DOMParser","DOMParserHelper","getInertBodyElement","inertDocument","templateEl","SAFE_URL_PATTERN","_sanitizeUrl","tagSet","tags","sets","VOID_ELEMENTS","OPTIONAL_END_TAG_BLOCK_ELEMENTS","OPTIONAL_END_TAG_INLINE_ELEMENTS","OPTIONAL_END_TAG_ELEMENTS","BLOCK_ELEMENTS","INLINE_ELEMENTS","VALID_ELEMENTS","URI_ATTRS","HTML_ATTRS","ARIA_ATTRS","VALID_ATTRS","SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS","SanitizingHtmlSerializer","sanitizedSomething","sanitizeChildren","traverseContent","parentNodes","startElement","TEXT_NODE","nodeValue","endElement","getNextSibling","tagName","elAttrs","elAttr","encodeEntities","previousSibling","clobberedElementError","isClobberedElement","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","outerHTML","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","inertBodyHelper","_sanitizeHtml","unsafeHtmlInput","inertBodyElement","unsafeHtml","mXSSAttempts","parsedHtml","getTemplateContent","isTemplateElement","ɵɵsanitizeHtml","getSanitizer","ɵɵsanitizeUrl","unsafeUrl","ɵɵsanitizeResourceUrl","unsafeResourceUrl","RESOURCE_URL","ɵɵsanitizeUrlOrResourceUrl","getUrlSanitizer","STYLE","SCRIPT","COMMENT_DISALLOWED","COMMENT_DELIMITER","COMMENT_DELIMITER_ESCAPED","escapeCommentText","getDeclarationComponentDef","getTemplateLocationDetails","componentClassName","ɵɵresolveWindow","ɵɵresolveBody","maybeUnwrapFn","_icuContainerIterate","icuContainerIterate","tIcuContainerNode","applyToElementOrContainer","lNodeToHandle","beforeNode","lContainer","isComponent","nativeAppendChild","nativeInsertBefore","nativeRemoveNode","applyContainer","parentRElement","applyView","updateTextNode","createCommentNode","createElementNode","detachViewFromDOM","insertView","indexInContainer","containerLength","declarationLContainer","trackMovedView","declarationContainer","movedViews","insertedComponentLView","lQueries","detachMovedView","declarationViewIndex","removeIndex","viewToDetach","removedLView","removeViewFromDOM","destroyLView","destroyViewTree","rootView","lViewOrLContainer","cleanUpView","firstView","consumerDestroy$1","executeOnDestroys","toCall","callContext","processCleanups","tCleanup","lCleanup","targetIdx","destroyHooksFn","unregisterLView","getParentRElement","getClosestRElement","nativeAppendOrInsertBefore","nativeParentNode","getInsertInFrontOfRNode","_getInsertInFrontOfRNodeWithI18n","getInsertInFrontOfRNodeWithNoI18n","Important","_processI18nInsertBefore","setI18nHandling","getInsertInFrontOfRNodeWithI18n","processI18nInsertBefore","childRNode","childTNode","parentRNode","getFirstNativeNode","tNodeType","getBeforeNodeForView","elIcuContainerChild","rNodeOrLContainer","projectionNodes","getProjectionNodes","componentHost","slotIdx","projection","viewIndexInContainer","nextViewIndex","firstTNodeOfView","nativeParent","nativeRemoveChild","applyNodes","isProjection","rawSlotValue","nextRNode","applyProjectionRecursive","projectionNext","tProjectionNode","componentLView","nodeToProjectOrRNodes","nodeToProject","projectedComponentLView","writeDirectClass","setupStaticAttributes","mergedAttrs","writeDirectStyle","NO_CHANGE","ɵɵadvance","selectIndexInternal","checkNoChangesMode","ɵɵdirectiveInject","ɵɵinvalidFactory","writeToDirectiveInput","createLView","tHostNode","hydrationInfo","getUniqueLViewId","getOrCreateTNode","createTNodeAtIndex","createTNode","tParent","insertBeforeIndex","directiveStylingLast","propertyBindings","localNames","initialInputs","stylesWithoutHost","residualStyles","classesWithoutHost","residualClasses","classBindings","styleBindings","allocExpando","numSlotsToAlloc","allocIdx","executeTemplate","templateFn","prevSelectedIndex","isUpdatePhase","executeContentQueries","directiveInstance","createDirectivesInstances","instantiateAllDirectives","addComponentLogic","hostTNode","getOrCreateComponentTView","rendererFactory","lViewFlags","componentView","addToViewTree","setInputsFromAttrs","invokeDirectivesHostBindings","saveResolvedLocalsInData","viewData","localRefExtractor","localIndex","incompleteFirstPass","createTView","directives","pipes","constsOrFactory","ssrId","initialViewLength","createViewBlueprint","expandoStartIndex","hostBindingOpCodes","firstUpdatePass","staticViewQueries","staticContentQueries","components","directiveRegistry","pipeRegistry","locateHostElement","elementOrSelector","applyRootElementTransform","_applyRootElementTransformImpl","captureNodeBindings","aliasMap","bindingsResult","hostDirectiveAliasMap","internalName","finalPublicName","addPropertyBinding","bindings","elementPropertyInternal","nativeOnly","dataValue","inputData","setInputsForProperty","markDirtyIfOnPush","viewIndex","childComponentLView","mapPropName","resolveDirectives","localRefs","exportsMap","matchResult","findDirectiveDefMatches","registry","hostDirectiveDefs","hostDirectiveMatches","markAsComponentHost","initializeDirectives","cacheMatchingLocalNames","initTNodeFlags","numberOfDirectives","preOrderHooksFound","preOrderCheckHooksFound","directiveIdx","configureViewWithDirective","saveNameToExportMap","lifeCycleHooks","initializeInputAndOutputAliases","hostDirectiveDefinitionMap","tViewData","tNodeAttrs","inputsFromAttrs","inputsStore","outputsStore","aliasData","aliasedInputs","aliasedOutputs","generateInitialInputs","elementIndex","getCurrentDirectiveIndex","invokeHostBindingsInCreationMode","directiveFactory","nodeInjectorFactory","registerHostBindingOpCodes","directiveVarsIdx","elementIndx","lastSelectedElementIdx","elementAttributeInternal","setElementAttribute","initialInputData","inputsToStore","createLContainer","hostNative","refreshContentQueries","queryStartIdx","directiveDefIdx","executeViewQueryFn","viewQueryFn","getOrCreateLViewCleanup","getOrCreateTViewCleanup","loadComponentRenderer","currentDef","textBindingInternal","renderComponent","hostLView","componentHostIdx","componentTView","syncViewWithBlueprint","hostRNode","renderView","finishViewCreation","renderChildComponents","createAndRenderEmbeddedLView","declarationLView","templateTNode","embeddedTView","embeddedLView","dehydratedView","declarationViewLQueries","getLViewFromLContainer","adjustedIndex","shouldAddViewToDom","addLViewToLContainer","addToDOM","addViewToDOM","parentNativeNode","removeLViewFromLContainer","collectNativeNodes","lNode","collectNativeNodesInLContainer","nodesInSlot","lViewInAContainer","lViewFirstChildTNode","freeConsumers","getOrBorrowReactiveLViewConsumer","borrowReactiveLViewConsumer","REACTIVE_LVIEW_CONSUMER_NODE","REACTIVE_NODE$1","MAXIMUM_REFRESH_RERUNS","detectChangesInternal","notifyErrorHandler","detectChangesInViewWhileDirty","detectChangesInView$1","retries","inlineEffectRunner","refreshView","currentConsumer","viewShouldHaveReactiveConsumer","consumerBeforeComputation$1","hooksInitPhaseCompleted","markTransplantedViewsForRefresh","movedLView","detectChangesInEmbeddedViews","processHostBindingOpCodes","opCode","bindingRootIndx","hostBindingFn","detectChangesInChildComponents","notifyEffect","consumerAfterComputation$1","maybeReturnReactiveLViewConsumer","detectChangesInViewIfAttached","detectChangesInComponent","shouldRefreshView","consumerPollProducersForChange$1","markViewDirty","ViewRef$1","_cdRefInjectingView","_attachedToViewContainer","viewRefs","reattach","checkNoChanges","attachToViewContainerRef","detachFromAppRef","attachToAppRef","appRef","injectTemplateRef","ViewEngineTemplateRef","R3TemplateRef","_declarationLView","_declarationTContainer","createEmbeddedViewImpl","createTemplateRef","_findMatchingDehydratedViewImpl","findMatchingDehydratedView","ChangeDetectionScheduler","ComponentRef$1","ComponentFactory$1","ERROR_COMPONENT","_NullComponentFactoryResolver","noComponentFactoryError","ComponentFactoryResolver$1","injectRenderer2","nodeAtIndex","Sanitizer","NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR","markedFeatures","performanceMarkFeature","performance","mark","enableLongStackTrace","shouldCoalesceEventChangeDetection","shouldCoalesceRunChangeDetection","hasPendingMacrotasks","hasPendingMicrotasks","onUnstable","assertZonePatched","_nesting","_outer","_inner","TaskTrackingZoneSpec","longStackTraceZoneSpec","lastRequestAnimationFrameId","nativeRequestAnimationFrame","getNativeRequestAnimationFrame","nativeCancelAnimationFrame","unpatchedRequestAnimationFrame","__symbol__","unpatchedCancelAnimationFrame","forkInnerZoneWithAngularBehavior","delayChangeDetectionForEventsDelegate","delayChangeDetectionForEvents","isCheckStableRunning","fakeTopEventTask","scheduleEventTask","updateMicroTaskStatus","checkStable","isAngularZone","onInvokeTask","applyThis","applyArgs","shouldBeIgnoredByZone","__ignore_ng_zone__","invokeTask","onEnter","onLeave","onInvoke","onHasTask","hasTaskState","hasTask","_hasPendingMicrotasks","microTask","macroTask","onHandleError","isInAngularZone","assertInAngularZone","assertNotInAngularZone","runTask","EMPTY_PAYLOAD","cancelTask","runGuarded","NoopNgZone","AfterRenderPhase","EarlyRead","Write","MixedReadWrite","Read","NOOP_AFTER_RENDER_REF","internalAfterNextRender","runOnServer","AfterRenderEventManager","internalCallbacks","afterNextRender","afterRenderEventManager","callbackHandler","AfterRenderCallbackHandlerImpl","unregister","unregisterFn","AfterRenderCallback","executingCallbacks","deferredCallbacks","executeInternalCallbacks","isModuleWithProviders","isNgModule","isPipe","isDirective","verifyStandaloneImport","depType","importingType","getDependencyTypeForError","USE_RUNTIME_DEPS_TRACKER_FOR_JIT","DepsTracker","ownerNgModule","ngModulesWithSomeUnresolvedDecls","ngModulesScopeCache","standaloneComponentsScopeCache","resolveNgModulesDecls","moduleType","decl","getComponentDependencies","rawImports","getStandaloneComponentScope","compilation","isPoisoned","ngModules","getNgModuleScope","registerNgModule","scopeInfo","clearScopeCacheFor","computeNgModuleScope","exported","importedScope","addSet","exportedScope","ans","computeStandaloneComponentScope","rawImport","isOrphanComponent","sourceSet","targetSet","depsTracker","computeStaticStyling","writeToHost","ComponentFactoryResolver","ComponentFactory","toRefArray","templateName","ChainedInjector","refArray","stringifyCSSSelectorList","selectorList","isBoundToModule","rootSelectorOrNode","realEnvironmentInjector","rootViewInjector","hostRenderer","elementName","getNamespace","rootFlags","rootTView","rootLView","tElementNode","rootComponentDef","rootDirectives","createRootComponentTNode","createRootComponentView","applyRootComponentStyling","viewRenderer","setRootNodeAttributes","extractAttrsAndClassesFromSelector","projectNodes","nodesforSlot","createRootComponent","hostFeatures","rootTNode","LifecycleHooksFeature","ComponentRef","_rootLView","previousInputValues","injectViewContainerRef","createContainerRef","VE_ViewContainerRef","R3ViewContainerRef","_lContainer","_hostTNode","_hostLView","getViewRefs","indexOrOptions","insertImpl","componentFactoryOrType","isComponentFactory","contextInjector","viewAttachedToContainer","prevIdx","prevLContainer","prevVCRef","adjustedIdx","_adjustIndex","getOrCreateViewRefs","viewRefsArr","_locateOrCreateAnchorNode","createAnchorNode","_populateDehydratedViewsInLContainer","populateDehydratedViewsInLContainer","commentNode","insertAnchorNode","nativeNextSibling","LQuery_","queryList","LQueries_","tQueries","noOfInheritedQueries","viewLQueries","tQuery","getByIndex","parentLQuery","indexInDeclarationView","dirtyQueriesWithMatches","getTQuery","TQueryMetadata_","splitQueryMultiSelectors","locator","TQueries_","elementStart","elementEnd","queriesForTemplateRef","childQueryIndex","tqueryClone","tquery","TQuery_","crossesNgTemplate","_appliesToNextNode","_declarationNodeIndex","isApplyingToNode","matchTNode","addMatch","declarationNodeIdx","matchTNodeWithReadOption","getIdxOfMatchingSelector","nodeMatchIdx","directiveOrProviderIdx","tNodeIdx","matchIdx","createResultForNode","matchingIdx","createResultByTNodeType","createSpecialToken","materializeViewResults","queryIndex","lQuery","tQueryMatches","matchedNodeIdx","collectQueryResults","lViewResults","embeddedLViews","loadQueryInternal","createLQuery","storeCleanupWithContext","createViewQuery","createTQuery","createContentQuery","saveContentQueryAndDirectiveIndex","tViewContentQueries","lastSavedDirectiveIndex","getQueryResults","signalFn","createSignal","createSignal$1","updateFn","signalUpdateFn","signalUpdateFn$1","asReadonly","signalAsReadonlyFn","readonlyFn","isWritableSignal","createQuerySignalFn","firstOnly","createComputed","createComputed$1","_dirtyCounter","refreshSignalQuery","_queryIndex","_flatValue","createSingleResultOptionalQuerySignalFn","createSingleResultRequiredQuerySignalFn","bindQueryToSignal","_queryList","viewChildFn","viewChildRequiredFn","contentChildFn","contentChildRequiredFn","createModelSignal","emitterRef","assertModelSet","modelFunction","modelRequiredFunction","ContentChildren","isViewQuery","descendants","emitDistinctChangesOnly","ContentChild","ViewChildren","ViewChild","componentResourceResolutionQueue","componentDefPendingResolution","componentNeedsResolution","templateUrl","styleUrls","styleUrl","checkForDuplicateNgModules","registerNgModuleType","assertSameOrNotExisting","incoming","getSuperType","ɵɵInheritDefinitionFeature","superType","shouldInheritFields","inheritanceChain","superDef","writeableDef","maybeUnwrapEmpty","superHostBindings","inheritHostBindings","superViewQuery","superContentQueries","inheritViewQuery","inheritContentQueries","mergeInputsWithTransforms","defData","mergeHostAttrsAcrossInheritance","minifiedName","prevViewQuery","prevContentQueries","prevHostBindings","COPY_DIRECTIVE_FIELDS","COPY_COMPONENT_FIELDS","ɵɵHostDirectivesFeature","rawHostDirectives","bindingArrayToMap","matchedDefs","hostDirectiveConfig","hostDirectiveDef","patchDeclaredInputs","exposedInputs","remappedPublicName","ɵɵInputTransformsFeature","NgModuleRef$1","NgModuleFactory$1","_parent","_bootstrapComponents","destroyCbs","_r3Injector","NgModuleFactory","EnvironmentNgModuleRefAdapter","debugName","runEnvironmentInitializers","createEnvironmentInjector","CachedInjectorService","cachedInjectors","getOrCreateInjector","setClassMetadata","clazz","PendingTasks","hasPendingTasks","_hasPendingTasks","isListLikeIterable","isJsObject","updateBinding","getBinding","bindingUpdated","bindingUpdated2","exp1","exp2","different","bindingUpdated3","exp3","bindingUpdated4","exp4","isDetachedByI18n","ɵɵtemplate","attrsIndex","localRefsIndex","templateFirstCreatePass","tViewConsts","_locateOrCreateContainerAnchor","createContainerAnchorImpl","DeferDependenciesLoadingState","NOT_STARTED","IN_PROGRESS","COMPLETE","FAILED","MINIMUM_SLOT","LOADING_AFTER_SLOT","DeferBlockState","DeferBlockInternalState","Placeholder","Loading","Complete","Initial","NEXT_DEFER_BLOCK_STATE","DEFER_BLOCK_STATE","STATE_IS_FROZEN_UNTIL","LOADING_AFTER_CLEANUP_FN","TRIGGER_CLEANUP_FNS","PREFETCH_TRIGGER_CLEANUP_FNS","DeferBlockBehavior","storeTriggerCleanupFn","lDetails","invokeTriggerCleanupFns","invokeAllTriggerCleanupFns","getDeferBlockDataIndex","deferBlockIndex","getLDeferBlockDetails","getTDeferBlockDetails","slotIndex","getMinimumDurationForState","tDetails","placeholderBlockConfig","loadingBlockConfig","getLoadingBlockAfter","addDepsToRegistry","currentDeps","newDeps","currentDepSet","Manual","Playthrough","eventListenerOptions","hoverTriggers","interactionTriggers","viewportTriggers","interactionEventNames","hoverEventNames","intersectionObserver","observedViewportElements","DeferEventEntry","onInteraction","onHover","onViewport","registerDomTrigger","initialLView","triggerIndex","walkUpTimes","registerFn","pollDomTrigger","renderedState","triggerLView","getTriggerLView","deferredHostLView","deferredTNode","getTriggerElement","onIdle","IdleScheduler","idleId","requestIdleCallbackFn","requestIdleCallback","cancelIdleCallbackFn","cancelIdleCallback","scheduleIdleCallback","onTimer","scheduleTimerTrigger","TimerScheduler","invokeTimerAt","addToQueue","scheduleTimer","removeFromQueue","invokeAt","insertAtIndex","lastCallbackIndex","FRAME_DURATION_MS","DEFER_BLOCK_CONFIG","shouldTriggerDeferBlock","applyDeferBlockStateWithSchedulingImpl","scheduleDelayedTrigger","scheduleFn","renderPlaceholder","triggerDeferBlock","scheduleDelayedPrefetching","loadingState","prefetch","triggerPrefetching","renderDeferBlockState","skipTimerScheduling","hostTView","isValidStateChange","applyStateFn","applyDeferBlockState","stateTmplIndex","getTemplateIndexForState","primaryTmplIndex","loadingTmplIndex","errorTmplIndex","placeholderTmplIndex","activeBlockTNode","isParentOutletInjector","isRouterOutletInjector","currentInjector","__ngOutletInjector","parentEnvInjector","createRouterOutletInjector","parentOutletInjector","applyDeferBlockStateWithScheduling","loadingAfter","inLoadingAfterPhase","scheduleDeferBlockUpdate","triggerResourceLoading","loadingPromise","primaryBlockTNode","getPrimaryBlockTNode","dependenciesFn","dependencyResolverFn","allSettled","failed","dependency","primaryBlockTView","renderDeferStateAfterResourceLoading","ɵɵattribute","interpolationV","isBindingUpdated","interpolation1","interpolation2","interpolation3","interpolation4","interpolation5","interpolation6","v5","interpolation7","v6","interpolation8","v7","toTStylingRange","getTStylingRangePrev","tStylingRange","setTStylingRangePrevDuplicate","getTStylingRangeNext","setTStylingRangeNext","setTStylingRangeNextDuplicate","insertTStylingBinding","tStylingKeyWithStatic","isHostBinding","isClassBinding","tBindings","tmplHead","tmplTail","tStylingKey","isKeyDuplicateOfStatic","staticKeyValueArray","setTStylingRangePrev","markDuplicates","markDuplicateOfResidualStyling","residual","isPrevDir","tStylingAtIndex","foundDuplicate","tStylingValueAtCursor","tStyleRangeAtCursor","isStylingMatch","tStylingKeyCursor","parserState","textEnd","keyEnd","valueEnd","getLastParsedKey","getLastParsedValue","parseClassNameNext","consumeClassToken","consumeWhitespace","parseStyleNext","consumeStyleKey","consumeSeparator","consumeStyleValue","ch1","ch2","ch3","lastChIndex","consumeQuotedText","resetParserState","quoteCharCode","ɵɵproperty","setDirectiveInputsWhichShadowsStyling","isClassBased","ɵɵstyleProp","checkStylingProperty","ɵɵclassProp","ɵɵstyleMap","checkStylingMap","styleKeyValueArraySet","styleStringParser","parseStyle","ɵɵclassMap","classKeyValueArraySet","classStringParser","parseClassName","stylingFirstUpdatePass","updateStyling","normalizeSuffix","stringParser","hasStylingInputShadow","isInHostBindings","staticPrefix","updateStylingMap","oldKeyValueArray","newKeyValueArray","oldIndex","oldKey","newKey","setKey","toStylingKeyValueArray","styleKeyValueArray","unwrappedValue","isHostBindings","wrapInStaticStylingKey","stylingKey","collectStylingFromDirectives","collectStylingFromTAttrs","templateStylingKey","getTemplateHeadTStylingKey","setTemplateHeadTStylingKey","collectResidual","currentDirective","desiredMarker","currentMarker","stringKey","tRange","higherPriorityValue","getTStylingRangeNextDuplicate","findStylingValue","isStylingValuePresent","getTStylingRangePrevDuplicate","applyStyling","isPrevDirection","rawKey","containsStatics","isStylingMap","valueAtLViewIndex","ɵɵclassMapInterpolate1","ɵɵclassMapInterpolate2","LiveCollection","updateValue","swap","index1","index2","startIdx","endIdx","endItem","startItem","prevIndex","newIdx","valuesMatching","liveIdx","liveValue","trackBy","attachPreviouslyDetached","prevCollection","detachedItems","createOrAttach","liveCollection","trackByFn","newItem","initLiveItemsInTheFuture","UniqueValueMultiKeyMap","kvMap","_vMap","prevValue","vMap","ɵɵconditional","containerIndex","matchingTemplateIndex","getLContainer","getExistingTNode","RepeaterContext","ɵɵrepeaterTrackByIdentity","RepeaterMetadata","hasEmptyBlock","ɵɵrepeaterCreate","trackByUsesComponentInstance","emptyTemplateFn","emptyDecls","emptyVars","emptyTagName","emptyAttrsIndex","boundTrackBy","LiveCollectionLContainerImpl","needsIndexUpdate","detachExistingView","updateIndexes","getExistingLViewFromLContainer","ɵɵrepeater","metadataSlotIdx","itemTemplateTNode","reconcile","newCollection","liveKeysInTheFuture","liveStartIdx","liveEndIdx","newEndIdx","liveStartValue","newStartValue","isStartMatching","liveEndValue","newEndValue","isEndMatching","liveStartKey","liveEndKey","newStartKey","newEndKey","newCollectionIterator","newIterationResult","liveKey","isCollectionEmpty","emptyTemplateIndex","lContainerForEmpty","emptyTemplateTNode","ɵɵelementStart","elementStartFirstCreatePass","_locateOrCreateElementNode","hasDirectives","getElementDepthCount","increaseElementDepthCount","ɵɵelementEnd","isSkipHydrationRootTNode","leaveSkipHydrationBlock","decreaseElementDepthCount","hasClassInput","hasStyleInput","ɵɵelement","ɵɵelementContainerStart","elementContainerStartFirstCreatePass","_locateOrCreateElementContainerNode","ɵɵelementContainerEnd","ɵɵelementContainer","ɵɵgetCurrentView","ɵɵhostProperty","ɵɵsyntheticHostProperty","localeEn","LOCALE_DATA","findLocaleData","normalizedLocale","getLocaleData","LocaleDataIndex","PluralCase","common","FirstDayOfWeek","WeekendRange","CurrencyCode","CurrencySymbol","CurrencyName","pluralMapping","DEFAULT_LOCALE_ID","ELEMENT_MARKER","ICU_MARKER","I18nCreateOpCode","APPEND_EAGERLY","COMMENT","LOCALE_ID$1","setLocaleId","tNodeInsertBeforeIndex","i18nParent","anchorRNode","addTNodeAndUpdateInsertBeforeIndex","previousTNodes","newTNode","existingTNode","isI18nText","isNewTNodeCreatedBefore","getInsertBeforeIndex","setInsertBeforeIndex","getTIcu","createTNodePlaceholder","getCurrentICUCaseIndex","tIcu","currentCase","currentCaseLViewIndex","getParentFromIcuCreateOpCode","mergedCode","getRefFromIcuCreateOpCode","changeMask","changeMaskCounter","createNodeWithoutHydration","textOrName","_locateOrCreateNode","applyMutableOpCodes","mutableOpCodes","rootRNode","rootIdx","textNodeIndex","parentIdx","insertInFrontOf","refIdx","caseIndex","anchorIdx","elementNodeIndex","commentValue","commentNodeIndex","applyUpdateOpCodes","updateOpCodes","bindingsStartIndex","checkBit","skipCodes","sanitizeFn","tNodeOrTagName","rText","applyIcuSwitchCase","applyIcuUpdateCase","activeCaseIndex","getCaseIndex","icuExpression","bindingValue","resolvedCase","getPluralCase","applyIcuSwitchCaseRemove","removeCodes","nodeOrIcuIndex","loadIcuContainerVisitor","_stack","_removes","enterIcu","icuContainerIteratorNext","removeOpCode","tIcuIndex","icuContainerIteratorStart","BINDING_REGEXP","ICU_REGEXP","NESTED_ICU","ICU_BLOCK_REGEXP","MARKER","SUBTEMPLATE_REGEXP","PH_REGEXP","NGSP_UNICODE_REGEXP","i18nStartFirstCreatePass","parentTNodeIndex","subTemplateIndex","createOpCodes","existingTNodeStack","astStack","getTranslationForTemplate","isRootTemplateMessage","removeInnerTemplateTranslation","msgParts","replaceNgsp","isClosing","placeholderNode","i18nParseTextIntoPartsAndICU","icuNodeIndex","createTNodeAndAddOpCode","icuStart","i18nStartFirstCreatePassProcessTextNode","existingTNodes","isICU","i18nNodeIdx","ensureIcuContainerVisitorLoaded","setTNodeInsertBeforeIndex","hasBinding","generateBindingUpdateOpCodes","destinationNode","bindingStart","maskIndex","sizeIndex","textParts","textValue","toMaskBit","countBindings","opCodes","tagMatched","inTemplate","bindingMask","addUpdateIcuSwitch","mainBinding","setTIcu","valueArr","nestedIcus","icuIndex","caseAst","parseIcuCase","addUpdateIcuUpdate","parseICUBlock","icuType","prevPos","braceStack","braces","caseName","unsafeCaseHtml","inertRootNode","walkIcuTree","sharedUpdateOpCodes","addCreateNodeAndAppend","lowerAttrName","addCreateAttribute","elementNode","addRemoveNode","isNestedIcu","addRemoveNestedIcu","appendToParentIdx","createAtIdx","icuCreateOpCode","ROOT_TEMPLATE_ID","PP_MULTI_VALUE_PLACEHOLDERS_REGEXP","PP_PLACEHOLDERS_REGEXP","PP_ICU_VARS_REGEXP","PP_ICU_PLACEHOLDERS_REGEXP","PP_ICUS_REGEXP","PP_CLOSE_TEMPLATE_REGEXP","PP_TEMPLATE_ID_REGEXP","ɵɵi18nStart","messageIndex","tI18n","applyCreateOpCodes","isComment","appendNow","ɵɵi18nEnd","ɵɵi18n","ɵɵi18nExp","setMaskBit","hasChange","ɵɵi18nApply","applyI18n","ɵɵlistener","useCapture","eventTargetResolver","listenerInternal","ɵɵsyntheticHostListener","isTNodeDirectiveHost","processOutputs","lCleanupIndex","idxOrTargetGetter","existingListener","findExistingListener","cleanupEventName","listenerIdxInLCleanup","__ngLastListenerFn__","__ngNextListenerFn__","wrapListener","executeListenerWithErrorHandling","wrapWithPreventDefault","wrapListenerIn_markDirtyAndPreventDefault","nextListenerFn","ɵɵnextContext","nextContextImpl","matchingProjectionSlotIndex","projectionSlots","wildcardNgContentIndex","ngProjectAsAttrVal","getProjectAsAttrValue","ngProjectAsAttrIdx","ɵɵprojectionDef","componentNode","numProjectionSlots","projectionHeads","tails","componentChild","ɵɵprojection","selectorIndex","applyProjection","ɵɵpropertyInterpolate","ɵɵpropertyInterpolate1","interpolatedValue","ɵɵcontentQuery","ɵɵviewQuery","ɵɵqueryRefresh","isCreationMode","ɵɵloadQuery","ɵɵreference","getContextLView","ɵɵtext","textNative","_locateOrCreateTextNode","ɵɵtextInterpolate","ɵɵtextInterpolate1","interpolated","ɵɵtextInterpolate2","ɵɵtextInterpolate3","ɵɵtwoWayProperty","ɵɵtwoWayBindingSet","canWrite","ɵɵtwoWayListener","resolveProvider","lInjectablesBlueprint","providerFactory","beginIndex","existingFactoryIndex","registerDestroyHooksIfSupported","existingProvidersFactoryIndex","existingViewProvidersFactoryIndex","doesProvidersFactoryExist","doesViewProvidersFactoryExist","multiFactory","factoryFn","componentProviders","multiFactoryAdd","multiViewProvidersFactoryResolver","multiProvidersFactoryResolver","contextIndex","indexInFactory","providerIsTypeProvider","providerIsClassProvider","isClassProvider","existingCallbacksIndex","isComponentProvider","lData","multiResolve","factories","componentCount","multiProviders","ɵɵProvidersFeature","viewProviders","processProvidersFn","StandaloneService","getOrCreateStandaloneInjector","standaloneInjector","ɵɵStandaloneFeature","ɵɵsetNgModuleScope","convertToTypeArray","flattenValues","maybeUnwrapModuleWithProviders","ɵɵpureFunction0","slotOffset","pureFn","ɵɵpureFunction1","pureFunction1Internal","ɵɵpureFunction2","pureFunction2Internal","ɵɵpureFunction3","pureFunction3Internal","getPureFunctionReturnValue","returnValueIndex","lastReturnValue","bindingRoot","pureFunction4Internal","pureFunctionVInternal","exps","ɵɵpipe","pipeName","getPipeDef","pipeFactory","pipeInstance","ɵɵpipeBind1","isPure","ɵɵpipeBind2","ɵɵpipeBind4","ɵɵtemplateRefExtractor","angularCoreEnv","ɵɵattributeInterpolate1","ɵɵattributeInterpolate2","ɵɵattributeInterpolate3","ɵɵattributeInterpolate4","ɵɵattributeInterpolate5","ɵɵattributeInterpolate6","ɵɵattributeInterpolate7","ɵɵattributeInterpolate8","ɵɵattributeInterpolateV","ɵɵCopyDefinitionFeature","defAny","ɵɵnamespaceMathML","ɵɵenableBindings","ɵɵdisableBindings","ɵɵpureFunction4","ɵɵpureFunction5","exp5","ɵɵpureFunction6","exp6","ɵɵpureFunction7","exp7","ɵɵpureFunction8","exp8","ɵɵpureFunctionV","ɵɵpipeBind3","ɵɵpipeBindV","ɵɵpropertyInterpolate2","ɵɵpropertyInterpolate3","ɵɵpropertyInterpolate4","ɵɵpropertyInterpolate5","ɵɵpropertyInterpolate6","ɵɵpropertyInterpolate7","ɵɵpropertyInterpolate8","ɵɵpropertyInterpolateV","ɵɵqueryAdvance","indexOffset","ɵɵviewQuerySignal","ɵɵcontentQuerySignal","ɵɵclassMapInterpolate3","ɵɵclassMapInterpolate4","ɵɵclassMapInterpolate5","ɵɵclassMapInterpolate6","ɵɵclassMapInterpolate7","ɵɵclassMapInterpolate8","ɵɵclassMapInterpolateV","ɵɵstyleMapInterpolate1","ɵɵstyleMapInterpolate2","ɵɵstyleMapInterpolate3","ɵɵstyleMapInterpolate4","ɵɵstyleMapInterpolate5","ɵɵstyleMapInterpolate6","ɵɵstyleMapInterpolate7","ɵɵstyleMapInterpolate8","ɵɵstyleMapInterpolateV","ɵɵstylePropInterpolate1","valueSuffix","ɵɵstylePropInterpolate2","ɵɵstylePropInterpolate3","ɵɵstylePropInterpolate4","ɵɵstylePropInterpolate5","ɵɵstylePropInterpolate6","ɵɵstylePropInterpolate7","ɵɵstylePropInterpolate8","ɵɵstylePropInterpolateV","ɵɵdefer","loadingConfigIndex","placeholderConfigIndex","enableTimerScheduling","setTDeferBlockDetails","deferBlockConfig","setLDeferBlockDetails","cleanupTriggersFn","ɵɵdeferWhen","ɵɵdeferOnIdle","ɵɵdeferOnImmediate","ɵɵdeferOnTimer","ɵɵdeferOnHover","ɵɵdeferOnInteraction","ɵɵdeferOnViewport","ɵɵdeferPrefetchWhen","ɵɵdeferPrefetchOnIdle","ɵɵdeferPrefetchOnImmediate","ɵɵdeferPrefetchOnTimer","ɵɵdeferPrefetchOnHover","ɵɵdeferPrefetchOnInteraction","ɵɵdeferPrefetchOnViewport","ɵɵdeferEnableTimerScheduling","ɵɵrepeaterTrackByIndex","ɵɵcomponentInstance","ɵɵtextInterpolate4","ɵɵtextInterpolate5","ɵɵtextInterpolate6","ɵɵtextInterpolate7","ɵɵtextInterpolate8","ɵɵtextInterpolateV","ɵɵi18nAttributes","i18nAttributesFirstPass","previousElementIndex","ɵɵi18nPostprocess","replacements","i18nPostprocess","templateIdsStack","phs","tmpl","placeholders","templateId","isCloseTemplateTag","currentTemplateId","_type","_idx","ɵɵresolveDocument","ɵɵsetComponentScope","ɵɵgetComponentDepsFactory","ɵsetClassDebugInfo","ɵɵsanitizeStyle","unsafeStyle","ɵɵsanitizeScript","unsafeScript","ɵɵtrustConstantHtml","ɵɵtrustConstantResourceUrl","trustedScriptURLFromString","ɵɵvalidateIframeAttribute","srcdoc","jitOptions","moduleQueue","flushingModuleQueue","isResolvedDeclaration","declaration","compileNgModule","compileNgModuleDefs","allowDuplicateDeclarationsInRoot","expandModuleWithProviders","compileInjector","enqueueModuleForDelayedScoping","setScopeOnDeclaredComponents","transitiveScopes","transitiveScopesFor","patchComponentDefWithScope","ngSelectorScope","transitiveScopesForNgModule","declared","exportedType","compilationDepth","compileComponent","ngComponentDef","maybeQueueResolutionOfComponentResources","addDirectiveFactoryDef","getJitOptions","preserveWhitespaces","defaultEncapsulation","directiveMetadata","typeSourceSpan","createParseSourceSpan","animations","interpolation","usesInheritance","addDirectiveDefToUndecoratedParents","getStandaloneDefFunctions","cachedDirectiveDefs","cachedPipeDefs","rawDep","flushModuleScopingQueueAsMuchAsPossible","hasSelectorScope","compileDirective","ngDirectiveDef","getDirectiveMetadata","sourceMapUrl","facade","extendsDirectlyFromObject","extractQueriesMetadata","isContentQuery","lifecycle","usesOnChanges","extractExportAs","viewQueries","objPrototype","shouldAddAbstractDirective","convertToR3QueryPredicate","splitByComma","convertToR3QueryMetadata","ann","isQueryAnn","queriesMeta","isInputAnnotation","LIFECYCLE_HOOKS","hookName","getPipeMetadata","compilePipe","ngPipeDef","Output","HostBinding","hostPropertyName","HostListener","Console","DIDebugData","resolverToTokenToDependencies","resolverToProviders","standaloneInjectorToComponent","TESTABILITY","TESTABILITY_GETTER","Testability","testabilityGetter","_pendingCount","_isZoneStable","taskTrackingZone","_testabilityGetter","setTestabilityGetter","addToWindow","_watchAngularEvents","_runCallbacksIfReady","increasePendingRequestCount","decreasePendingRequestCount","doneCb","getPendingTasks","updateCb","macroTasks","creationLocation","addCallback","whenStable","getPendingRequestCount","registerApplication","unregisterApplication","findProviders","using","exactMatch","TestabilityRegistry","_applications","testability","unregisterAllApplications","getTestability","getAllTestabilities","getAllRootElements","findTestabilityInTree","findInAncestors","isSubscribable","ApplicationInitStatus","donePromise","appInits","runInitializers","asyncInitPromises","initResult","observableAsPromise","APP_BOOTSTRAP_LISTENER","publishSignalConfiguration","setThrowInvalidWriteToSignalError","setThrowInvalidWriteToSignalError$1","_callAndReportToErrorHandler","optionsReducer","objs","_bootstrapListeners","_runningTick","_destroyListeners","_views","internalErrorHandler","afterRenderEffectManager","externalTestViews","beforeRender","afterTick","componentTypes","componentOrFactory","cf","compRef","_loadComponent","tick","_tick","refreshViews","detectChangesInAttachedViews","runs","isFirstPass","detectChangesInViewIfRequired","shouldRecheckView","warnIfDestroyed","detectChangesInView","ModuleWithComponentFactories","ngModuleFactory","componentFactories","Compiler","compileModuleSync","compileModuleAsync","compileModuleAndAllComponentsSync","compileModuleAndAllComponentsAsync","clearCache","clearCacheFor","getModuleId","NgZoneChangeDetectionScheduler","applicationRef","_onMicrotaskEmptySubscription","internalProvideZoneChangeDetection","ngZoneFactory","ngZoneChangeDetectionScheduler","ZoneStablePendingTask","ngZoneApplicationErrorHandlerFactory","userErrorHandler","getNgZoneOptions","eventCoalescing","runCoalescing","getGlobalLocale","MissingTranslationStrategy","Warning","Ignore","PLATFORM_DESTROY_LISTENERS","PlatformRef","_modules","bootstrapModuleFactory","moduleFactory","getNgZone","ngZoneToUse","ngZoneEventCoalescing","ngZoneRunCoalescing","moduleRef","createNgModuleRefWithProviders","exceptionHandler","initStatus","_moduleDoBootstrap","compilerOptions","compileNgModuleFactory","ngDoBootstrap","destroyListeners","_platformInjector","ALLOW_MULTIPLE_PLATFORMS","createPlatformFactory","parentPlatformFactory","desc","extraProviders","getPlatform","platformProviders","createPlatform","runPlatformInitializers","createPlatformInjector","assertPlatform","requiredToken","isDevMode","injectChangeDetectorRef","createViewRef","hostComponentView","DefaultIterableDifferFactory","DefaultIterableDiffer","trackByIdentity","_linkedRecords","_unlinkedRecords","_previousItHead","_itHead","_itTail","_additionsHead","_additionsTail","_movesHead","_movesTail","_removalsHead","_removalsTail","_identityChangesHead","_identityChangesTail","nextIt","nextRemove","addRemoveOffset","moveOffsets","getPreviousIndex","adjPreviousIndex","_nextRemoved","localMovePreviousIndex","localCurrentIndex","forEachPreviousItem","_nextPrevious","_nextAdded","forEachMovedItem","_nextMoved","_nextIdentityChange","itemTrackBy","mayBeDirty","trackById","_verifyReinsertion","_addIdentityChange","_mismatch","iterateListLike","_truncate","isDirty","previousRecord","_prev","_reinsertAfter","_moveAfter","_addAfter","IterableChangeRecord_","reinsertRecord","_addToMoves","nextRecord","_addToRemovals","prevRecord","_prevRemoved","_insertAfter","_DuplicateMap","_prevDup","_nextDup","_DuplicateItemRecordList","_head","_tail","atOrAfterIndex","duplicates","recordList","moveOffset","DefaultKeyValueDifferFactory","DefaultKeyValueDiffer","_records","_mapHead","_appendAfter","_previousMapHead","_changesHead","_changesTail","_nextChanged","_forEach","_maybeAddToChanges","_getOrCreateRecordForKey","_insertBeforeOrAppend","KeyValueChangeRecord_","_addToAdditions","_addToChanges","defaultIterableDiffersFactory","IterableDiffers","copied","defaultKeyValueDiffersFactory","KeyValueDiffers","keyValDiff","iterableDiff","platformCore","ApplicationModule","ImagePerformanceWarning","waitToScan","scanImages","lcpImageUrl","lcpElementFound","lcpElementLoadedCorrectly","isOversized","logOversizedImageWarning","logLazyLCPWarning","renderedWidth","renderedHeight","boxSizing","paddingTop","paddingBottom","paddingLeft","intrinsicWidth","intrinsicHeight","recommendedWidth","recommendedHeight","ChangeDetectionSchedulerImpl","taskService","pendingRenderTaskId","shouldRefreshViews","raceTimeoutAndRequestAnimationFrame","rAF","nonReactiveReadsFn","APP_EFFECT_SCHEDULER","EffectScheduler","ZoneAwareEffectScheduler","queuedEffectCount","queues","scheduleEffect","enqueue","creationZone","flushQueue","EffectHandle","effectFn","watcher","createWatch$1","onCleanup","runEffect","unregisterOnDestroy","manualCleanup","cdr","reflectComponentType","AngularFireAuth","logins","redirectResult","authStateChanged","idTokenChanged","spy","noopFunctions","derivedCtor","constructors","baseCtor","getOwnPropertyDescriptor","nameOrConfig","hmr","hot","log$1","FIREBASE_APP_PROVIDER","VERSION$1","moduleName","cachedDeps","ɵAngularfireInstanceCache","matchDep","IS_HMR","was","QueueAction","QueueScheduler","queueScheduler","providedUsingDefaultApp","ɵAppCheckInstances","ɵAPP_CHECK_PROVIDER_NAME","ɵZoneScheduler","targetZone","BlockUntilFirstOperator","unscheduleTask","scheduleMacroTask","ɵAngularFireSchedulers","ɵAngularFireScheduler","getSchedulers","obs$","ɵkeepUnstableUntilFirstFactory","zoneWrapFn","macrotask","blockUntilFirst","ANALYTICS_TYPE","GA_FID_KEY","ORIGIN_KEY","FETCH_TIMEOUT_MILLIS","DYNAMIC_CONFIG_URL","GTAG_URL","createGtagTrustedTypesScriptURL","gtagURL","promiseAllSettled","insertScriptTag","dataLayerName","trustedTypesPolicy","createTrustedTypesPolicy","policyName","policyOptions","gtagScriptURL","_gtagOnConfig","gtagCore","initializationPromisesMap","dynamicConfigPromisesList","measurementIdToAppId","gtagParams","correspondingAppId","foundConfig","_gtagOnEvent","initializationPromisesToWaitFor","send_to","gaSendToList","dynamicConfigResults","sendToId","initializationPromise","wrapGtag","_gtagWrapper","gtagOnEvent","gtagOnConfig","consentAction","fieldName","customParams","gtagWrapper","LONG_RETRY_FACTOR","defaultRetryData","RetryData","throttleMetadata","getThrottleMetadata","setThrottleMetadata","deleteThrottleMetadata","getHeaders","_fetchDynamicConfig","appFields","appUrl","jsonResponse","httpStatus","responseMessage","_fetchDynamicConfigWithRetry","retryData","timeoutMillis","throttleEndTimeMillis","AnalyticsAbortSignal","attemptFetchDynamicConfigWithRetry","_attemptFetchDynamicConfigWithRetry","setAbortableTimeout","backoffMillis","fetchDynamicConfig","isRetriableError","defaultEventParametersForInit","defaultConsentSettingsForInit","_logEvent$","gtagFunction","eventParams","_setCurrentScreen$","screen_name","_setUserId$","_setUserProperties$","flatProperties","user_properties","_internalGetGoogleAnalyticsClientId","clientId","_setAnalyticsCollectionEnabled$","_setConsentDefaultForInit","consentSettings","_setDefaultEventParametersForInit","_validateIndexedDB","errorInfo","_initializeAnalytics2","installations","dynamicConfigPromise","fetchDynamicConfigWithRetry","fidPromise","validateIndexedDB","envIsValid","getId","dynamicConfig","fid","findGtagScriptOnPage","scriptTags","configProperties","AnalyticsService","gtagCoreFunction","wrappedGtagFunction","gtagName","globalInitDone","warnOnBrowserContextMismatch","mismatchedEnvMessages","getOrCreateDataLayer","wrappedGtag","wrapOrCreateGtag","gtagFunctionName","_initializeAnalytics","analyticsProvider","_isSupported","analyticsInstance","_getGoogleAnalyticsClientId","internalGetGoogleAnalyticsClientId","registerAnalytics","analyticsOptions","internalFactory","_firebase_util__WEBPACK_IMPORTED_MODULE_0__","tD","FA","name$p","version$1","F","_serverApps","serverApp","_isFirebaseApp","FirebaseServerAppImpl","serverConfig","_serverConfig","_finalizationRegistry","FinalizationRegistry","automaticCleanup","incRefCount","releaseOnDeref","decRefCount","_serverAppConfig","appOptions","nameObj","nameString","cleanupProviders","idbHeartbeatObject","PENDING_TIMEOUT_MS","PACKAGE_VERSION","INTERNAL_AUTH_VERSION","INSTALLATIONS_API_URL","TOKEN_EXPIRATION_BUFFER","isServerError","getInstallationsEndpoint","extractAuthTokenInfoFromResponse","requestStatus","getExpiresInFromResponseExpiresIn","getErrorFromResponse","_getErrorFromResponse","requestName","errorData","serverCode","serverMessage","serverStatus","getHeadersWithAuth","appConfig","getAuthorizationHeader","retryIfServerError","_retryIfServerError","responseExpiresIn","_createInstallationRequest","heartbeatService","authVersion","responseValue","registrationStatus","sleep","VALID_FID_PATTERN","INVALID_FID","generateFid","fidByteArray","bufferToBase64UrlSafe","fidChangeCallbacks","fidChanged","callFidChangeCallbacks","broadcastFidChange","getBroadcastChannel","closeBroadcastChannel","broadcastChannel","BroadcastChannel","DATABASE_NAME","DATABASE_VERSION","OBJECT_STORE_NAME","_update","getInstallationEntry","_getInstallationEntry","registrationPromise","installationEntry","oldEntry","updateOrCreateInstallationEntry","clearTimedOutRequest","entryWithPromise","triggerRegistrationIfNecessary","inProgressEntry","registrationTime","registerInstallation","_registerInstallation","waitUntilFidRegistration","registeredInstallationEntry","createInstallationRequest","_waitUntilFidRegistration","updateInstallationRequest","hasInstallationRequestTimedOut","_generateAuthTokenRequest","getGenerateAuthTokenEndpoint","installation","_refreshAuthToken","tokenPromise","isEntryRegistered","oldAuthToken","isAuthTokenValid","isAuthTokenExpired","waitUntilAuthTokenRequest","_waitUntilAuthTokenRequest","makeAuthTokenRequestInProgressEntry","inProgressAuthToken","requestTime","fetchAuthTokenFromServer","_fetchAuthTokenFromServer","updateAuthTokenRequest","hasAuthTokenRequestTimedOut","generateAuthTokenRequest","updatedInstallationEntry","_getId","installationsImpl","_getToken","completeInstallationRegistration","_completeInstallationRegistration","getMissingValueError","valueName","INSTALLATIONS_NAME","publicFactory","extractAppConfig","keyName","registerInstallations","DEFAULT_SW_PATH","DEFAULT_SW_SCOPE","DEFAULT_VAPID_KEY","CONSOLE_CAMPAIGN_ID","CONSOLE_CAMPAIGN_NAME","CONSOLE_CAMPAIGN_TIME","CONSOLE_CAMPAIGN_ANALYTICS_ENABLED","MessageType$1","MessageType","arrayToBase64","uint8Array","base64ToArray","base64String","rawData","outputArray","DATA_MESSAGE","DISPLAY_NOTIFICATION","PUSH_RECEIVED","NOTIFICATION_CLICKED","OLD_DB_NAME","OLD_DB_VERSION","OLD_OBJECT_STORE_NAME","_migrateOldDatabase","senderId","databases","tokenDetails","newVersion","upgradeTransaction","oldDetails","p256dh","fcmToken","createTime","subscriptionOptions","swScope","deleteDB","checkTokenDetails","upgradeDb","dbGet","_dbGet","firebaseDependencies","oldTokenDetails","migrateOldDatabase","dbSet","_dbSet","_dbRemove","requestGetToken","_requestGetToken","getBody","subscribeOptions","getEndpoint","_requestUpdateToken","requestDeleteToken","_requestDeleteToken","unsubscribeOptions","_getHeaders","web","applicationPubKey","TOKEN_EXPIRATION_MS","_getTokenInternal","pushSubscription","getPushSubscription","_getPushSubscription","swRegistration","isTokenValid","dbOptions","isVapidKeyEqual","isEndpointEqual","isAuthEqual","isP256dhEqual","updateToken","_updateToken","getNewToken","_deleteTokenInternal","dbRemove","pushManager","getSubscription","updatedToken","requestUpdateToken","updatedTokenDetails","_getNewToken","userVisibleOnly","applicationServerKey","externalizePayload","internalPayload","collapseKey","collapse_key","fcmMessageId","propagateNotificationPayload","messagePayloadInternal","propagateDataPayload","propagateFcmOptions","fcmOptions","click_action","analyticsLabel","analytics_label","_mergeStrings","resultArray","deliveryMetricsExportedToBigQueryEnabled","onBackgroundMessageHandler","onMessageHandler","logEvents","isLogServiceStarted","registerDefaultSw","_registerDefaultSw","browserErrorMessage","_updateSwReg","ServiceWorkerRegistration","_updateVapidKey","getToken$1","_getToken$","updateVapidKey","updateSwReg","getTokenInternal","_logToScion","messageType","message_id","message_name","message_time","message_device_time","_messageEventListener","isFirebaseMessaging","dataPayload","isConsoleMessage","logToScion","WindowMessagingFactory","messageEventListener","WindowMessagingInternalFactory","isWindowSupported","_isWindowSupported","PushSubscription","_deleteToken$","deleteTokenInternal","deleteToken$1","onMessage$1","registerMessagingInWindow","BaseControlValueAccessor","BuiltInControlValueAccessor","ɵBuiltInControlValueAccessor_BaseFactory","CHECKBOX_VALUE_ACCESSOR","CheckboxControlValueAccessor","ɵCheckboxControlValueAccessor_BaseFactory","checked","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","COMPOSITION_BUFFER_MODE","_compositionMode","_composing","ɵgetDOM","getUserAgent","_handleInput","_compositionStart","_compositionEnd","isEmptyInputValue","hasValidLength","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","minValidator","maxValidator","requiredValidator","requiredTrue","requiredTrueValidator","emailValidator","minLengthValidator","maxLengthValidator","patternValidator","nullValidator","validators","composeAsync","minlength","requiredLength","actualLength","maxlength","regexStr","requiredPattern","isPresent","toObservable","mergeErrors","arrayOfErrors","executeValidators","validator","normalizeValidators","isValidatorFn","presentValidators","composeValidators","composeAsyncValidators","mergeValidators","controlValidators","dirValidator","getControlValidators","_rawValidators","getControlAsyncValidators","_rawAsyncValidators","makeValidatorsArray","hasValidator","addValidators","currentValidators","validatorsToAdd","removeValidators","AbstractControlDirective","_onDestroyCallbacks","pristine","untouched","statusChanges","_setValidators","_composedValidatorFn","_setAsyncValidators","_composedAsyncValidatorFn","asyncValidator","_registerOnDestroy","_invokeOnDestroyCallbacks","errorCode","getError","ControlContainer","formDirective","NgControl","valueAccessor","AbstractControlStatus","isTouched","isUntouched","isPristine","isPending","isSubmitted","submitted","NgControlStatus","NgControlStatusGroup","VALID","INVALID","PENDING","DISABLED","pickValidators","validatorOrOpts","isOptionsObj","pickAsyncValidators","asyncValidators","assertControlPresent","isGroup","assertAllValuesPresent","_forEachChild","AbstractControl","_pendingDirty","_hasOwnPendingAsyncValidator","_pendingTouched","_onCollectionChange","_onDisabledChange","_assignValidators","_assignAsyncValidators","validatorFn","asyncValidatorFn","updateOn","_updateOn","setValidators","setAsyncValidators","addAsyncValidators","removeAsyncValidators","hasAsyncValidator","clearValidators","clearAsyncValidators","markAsTouched","onlySelf","markAllAsTouched","markAsUntouched","_updateTouched","markAsDirty","markAsPristine","_updatePristine","markAsPending","skipPristineCheck","_parentMarkedDirty","_updateValue","_updateAncestors","changeFn","updateValueAndValidity","setParent","getRawValue","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","_updateTreeValidity","ctrl","_allControlsDisabled","_asyncValidationSubscription","setErrors","_updateControlsErrors","currPath","_find","_initObservables","_anyControlsHaveStatus","_anyControls","_anyControlsDirty","_anyControlsTouched","_registerOnCollectionChange","_setUpdateStrategy","parentDirty","coerceToValidator","coerceToAsyncValidator","FormGroup","_setUpControls","registerControl","removeControl","setControl","controlName","patchValue","_reduceChildren","_syncPendingControls","subtreeUpdated","updated","_reduceValue","initValue","FormRecord","CALL_SET_DISABLED_STATE","setDisabledStateDefault","controlPath","setUpControl","callSetDisabledState","setUpValidators","setUpViewChangePipeline","_pendingValue","_pendingChange","updateControl","setUpModelChangePipeline","emitModelEvent","viewToModelUpdate","_unregisterOnChange","setUpBlurPipeline","setUpDisabledChangeHandler","onDisabledChange","registerOnDisabledChange","_unregisterOnDisabledChange","cleanUpControl","validateControlPresenceOnChange","cleanUpValidators","onValidatorChange","isControlUpdated","updatedValidators","updatedAsyncValidators","emitModelToViewChange","setUpFormContainer","isPropertyUpdated","syncPendingControls","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","isBuiltInAccessor","formDirectiveProvider$1","NgForm","resolvedPromise$1","_directives","ngSubmit","_findContainer","getControl","addFormGroup","removeFormGroup","getFormGroup","updateModel","onSubmit","onReset","resetForm","removeListItem","isFormControlState","formState","FormControl","_applyFormState","nonNullable","initialValueIsDefault","emitViewToModelChange","AbstractFormGroupDirective","_checkParentType","ɵAbstractFormGroupDirective_BaseFactory","modelGroupProvider","NgModelGroup","formControlBinding$1","NgModel","_registered","_checkForErrors","_checkName","oldName","_getPath","_setUpControl","_updateDisabled","_isStandalone","_setUpStandalone","disabledValue","ɵNgNoValidate","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","ɵNumberValueAccessor_BaseFactory","RADIO_VALUE_ACCESSOR","RadioControlValueAccessor","RadioControlRegistry","_accessors","accessor","_isSameGroup","fireUncheck","controlPair","_control","_registry","setDisabledStateFired","_fn","formControlName","RANGE_VALUE_ACCESSOR","RangeValueAccessor","ɵRangeValueAccessor_BaseFactory","NG_MODEL_WITH_FORM_CONTROL_WARNING","formControlBinding","FormControlDirective","_ngModelWarningSentOnce","_ngModelWarningConfig","_ngModelWarningSent","_isControlChanged","previousForm","formDirectiveProvider","FormGroupDirective","_updateDomValue","_checkFormPresent","_updateValidators","_updateRegistrations","_oldForm","removeListItem$1","_setUpFormContainer","_cleanUpFormContainer","addFormArray","removeFormArray","getFormArray","oldCtrl","newCtrl","cleanUpFormContainer","formGroupNameProvider","FormGroupName","_hasInvalidParent","formArrayNameProvider","FormArrayName","controlNameBinding","FormControlName","_added","SELECT_VALUE_ACCESSOR","SelectControlValueAccessor","_buildValueString$1","_optionMap","_idCounter","_compareWith","valueString","_getOptionId","_getOptionValue","_registerOption","_extractId$1","ɵSelectControlValueAccessor_BaseFactory","NgSelectOption","_select","ngValue","_setElementValue","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","_buildValueString","optionSelectedStateSetter","_setSelected","selectedOptions","_extractId","ɵSelectMultipleControlValueAccessor_BaseFactory","ɵNgSelectMultipleOption","toFloat","AbstractValidatorDirective","_validator","normalizeInput","createValidator","MAX_VALIDATOR","MaxValidator","ɵMaxValidator_BaseFactory","MIN_VALIDATOR","MinValidator","ɵMinValidator_BaseFactory","REQUIRED_VALIDATOR","RequiredValidator","CHECKBOX_REQUIRED_VALIDATOR","CheckboxRequiredValidator","ɵRequiredValidator_BaseFactory","ɵCheckboxRequiredValidator_BaseFactory","EMAIL_VALIDATOR","EmailValidator","ɵEmailValidator_BaseFactory","MIN_LENGTH_VALIDATOR","MinLengthValidator","ɵMinLengthValidator_BaseFactory","MAX_LENGTH_VALIDATOR","MaxLengthValidator","ɵMaxLengthValidator_BaseFactory","PATTERN_VALIDATOR","PatternValidator","ɵPatternValidator_BaseFactory","ɵInternalFormsSharedModule","FormArray","_registerControl","removeAt","isAbstractControlOptions","FormBuilder","useNonNullable","nnfb","reducedControls","_reduceControls","createdControls","_createControl","NonNullableFormBuilder","UntypedFormBuilder","controlsConfig","ɵUntypedFormBuilder_BaseFactory","warnOnNgModelWithFormControl","MapEventManager","_clearListeners","_pending","_targetStream","getLazyEmitter","setTarget","zoom","mapTypeId","GoogleMap","_center","_zoom","_eventManager","mapInitialized","authFailure","boundsChanged","centerChanged","mapClick","mapDblclick","mapDrag","mapDragend","mapDragstart","headingChanged","idle","maptypeidChanged","mapMousemove","mapMouseout","mapMouseover","projectionChanged","mapRightclick","tilesloaded","tiltChanged","zoomChanged","_isBrowser","googleMapsWindow","google","_existingAuthFailureCallback","gm_authFailure","_setSize","googleMap","_combineOptions","setCenter","setZoom","setMapTypeId","_mapEl","maps","importLibrary","mapConstructor","fitBounds","bounds","_assertInitialized","panBy","panTo","latLng","panToBounds","latLngBounds","getBounds","getCenter","getClickableIcons","getHeading","getMapTypeId","getProjection","getStreetView","getTilt","getZoom","mapTypes","overlayMapTypes","_resolveMap","mapId","cssUnitsPattern","MapBaseLayer","_initializeObject","_setMap","_unsetMap","MapBicyclingLayer","bicyclingLayerInitialized","BicyclingLayer","layerConstructor","bicyclingLayer","_assertLayerInitialized","setMap","MapCircle","radius","_radius","circleClick","circleDblclick","circleDrag","circleDragend","circleDragstart","circleMousedown","circleMousemove","circleMouseout","circleMouseover","circleMouseup","radiusChanged","circleRightclick","circleInitialized","Circle","circleConstructor","circle","_watchForOptionsChanges","_watchForCenterChanges","_watchForRadiusChanges","getDraggable","getEditable","getRadius","getVisible","setRadius","MapDirectionsRenderer","directions","_directions","_googleMap","directionsChanged","directionsRendererInitialized","DirectionsRenderer","rendererConstructor","directionsRenderer","setDirections","getDirections","getRouteIndex","MapGroundOverlay","_url","_bounds","_opacity","clickable","groundOverlayInitialized","groundOverlay","GroundOverlay","overlayConstructor","_hasWatchers","_watchForOpacityChanges","_watchForUrlChanges","getOpacity","setOpacity","MapInfoWindow","_destroy","closeclick","contentChanged","domready","positionChanged","zindexChanged","infoWindowInitialized","InfoWindow","infoWindowConstructor","infoWindow","_watchForPositionChanges","getContent","getZIndex","openAdvancedMarkerElement","advancedMarkerElement","getAnchor","shouldFocus","anchorObject","setContent","MapKmlLayer","kmlClick","defaultviewportChanged","statusChanged","kmlLayerInitialized","KmlLayer","kmlLayer","getDefaultViewport","getMetadata","getStatus","setUrl","DEFAULT_MARKER_OPTIONS$1","MapMarker","_title","_label","_clickable","_icon","_visible","animationChanged","clickableChanged","cursorChanged","draggableChanged","flatChanged","iconChanged","mapMousedown","mapMouseup","shapeChanged","titleChanged","visibleChanged","markerInitialized","Marker","markerConstructor","setTitle","setLabel","setClickable","setIcon","setVisible","getAnimation","getClickable","getCursor","getIcon","getShape","_resolveMarker","DEFAULT_CLUSTERER_OPTIONS","MapMarkerClusterer","averageCenter","_averageCenter","batchSizeIE","_batchSizeIE","calculator","_calculator","clusterClass","_clusterClass","enableRetinaIcons","_enableRetinaIcons","gridSize","_gridSize","ignoreHidden","_ignoreHidden","imageExtension","_imageExtension","imagePath","_imagePath","imageSizes","_imageSizes","maxZoom","_maxZoom","minimumClusterSize","_minimumClusterSize","_styles","_zIndex","zoomOnClick","_zoomOnClick","_currentMarkers","ariaLabelFn","clusteringbegin","clusteringend","clusterClick","markerClustererInitialized","_canInitialize","markerClusterer","MarkerClusterer","_watchForMarkerChanges","clusterer","setAverageCenter","setBatchSizeIE","setCalculator","setClusterClass","setEnableRetinaIcons","setGridSize","setIgnoreHidden","setImageExtension","setImagePath","setImageSizes","setMaxZoom","setMinimumClusterSize","setZIndex","setZoomOnClick","fitMapToMarkers","getAverageCenter","getBatchSizeIE","getCalculator","getClusterClass","getClusters","getEnableRetinaIcons","getGridSize","getIgnoreHidden","getImageExtension","getImagePath","getImageSizes","getMaxZoom","getMinimumClusterSize","getStyles","getTotalClusters","getTotalMarkers","getZoomOnClick","batchSize","_getInternalMarkers","_markers","initialMarkers","addMarkers","markerComponents","newMarkers","markersToAdd","markersToRemove","removeMarkers","repaint","markerComponent","MapPolygon","_paths","polygonClick","polygonDblclick","polygonDrag","polygonDragend","polygonDragstart","polygonMousedown","polygonMousemove","polygonMouseout","polygonMouseover","polygonMouseup","polygonRightclick","polygonInitialized","Polygon","polygonConstructor","polygon","_watchForPathChanges","getPaths","setPaths","MapPolyline","polylineClick","polylineDblclick","polylineDrag","polylineDragend","polylineDragstart","polylineMousedown","polylineMousemove","polylineMouseout","polylineMouseover","polylineMouseup","polylineRightclick","polylineInitialized","Polyline","polylineConstructor","polyline","setPath","MapRectangle","rectangleClick","rectangleDblclick","rectangleDrag","rectangleDragend","rectangleDragstart","rectangleMousedown","rectangleMousemove","rectangleMouseout","rectangleMouseover","rectangleMouseup","rectangleRightclick","rectangleInitialized","Rectangle","rectangleConstructor","rectangle","_watchForBoundsChanges","setBounds","MapTrafficLayer","autoRefresh","_autoRefresh","trafficLayerInitialized","TrafficLayer","trafficLayer","_watchForAutoRefreshChanges","MapTransitLayer","transitLayerInitialized","TransitLayer","transitLayer","MapHeatmapLayer","heatmapInitialized","visualization","HeatmapLayer","heatmapConstructor","heatmap","_normalizeData","isLatLngLiteral","LatLng","DEFAULT_MARKER_OPTIONS","MapAdvancedMarker","_content","gmpDraggable","_draggable","AdvancedMarkerElement","advancedMarkerConstructor","advancedMarker","MapDirectionsService","_directionsService","DirectionsService","MapGeocoder","geocode","_getGeocoder","geocoder","_geocoder","Geocoder","BADGE_CONTENT_CLASS","badgeApps","_MatBadgeStyleLoader","MatBadge","_color","_setColor","newContent","_updateRenderedContent","_description","newDescription","_updateDescription","overlap","_interactivityChecker","isAbove","getBadgeElement","_badgeElement","_clearExistingBadges","_createBadgeElement","_inlineBadgeDescription","_isHostInteractive","badgeElement","activeClass","newContentNormalized","_removeInlineDescription","_updateInlineDescription","colorPalette","badges","MAT_BUTTON_CONFIG","HOST_SELECTOR_MDC_CLASS_PAIR","mdcClasses","MatButtonBase","ripple","_rippleLoader","getRipple","attachRipple","disableRipple","_disableRipple","_updateRippleDisabled","MatRippleLoader","_isFab","disabledInteractive","configureRipple","destroyRipple","_getAriaDisabled","ariaDisabled","_getDisabledAttribute","MatAnchorBase","_haltDisabledEvents","stopImmediatePropagation","MatButton","MatAnchor","MAT_FAB_DEFAULT_OPTIONS","MAT_FAB_DEFAULT_OPTIONS_FACTORY","MatFabButton","MatMiniFabButton","MatFabAnchor","MatMiniFabAnchor","MatIconButton","MatIconAnchor","MatRippleModule","MAT_CARD_CONFIG","MatCard","appearance","MatCardTitle","MatCardTitleGroup","MatCardContent","MatCardSubtitle","MatCardActions","align","MatCardHeader","MatCardFooter","MatCardImage","MatCardSmImage","MatCardMdImage","MatCardLgImage","MatCardXlImage","MatCardAvatar","MAT_CHECKBOX_DEFAULT_OPTIONS","MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY","clickAction","TransitionCheckState","Init","Checked","Unchecked","Indeterminate","MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR","MatCheckbox","MatCheckboxChange","_inputElement","_createChangeEvent","_getAnimationTargetElement","inputId","_uniqueId","_animationClasses","uncheckedToChecked","uncheckedToIndeterminate","checkedToUnchecked","checkedToIndeterminate","indeterminateToChecked","indeterminateToUnchecked","ariaLabelledby","labelPosition","indeterminateChange","_currentAnimationClass","_currentCheckState","_controlValueAccessorChangeFn","_validatorChangeFn","_checked","_indeterminate","_syncIndeterminate","indeterminate","_transitionCheckState","_isRippleDisabled","_onLabelTextChange","_getAnimationClassForCheckStateTransition","animationClass","_handleInputClick","_onInteractionEvent","nativeCheckbox","_onInputClick","_onTouchTargetClick","_preventBubblingFromLabel","_labelElement","MatRipple","ariaDescribedby","checkbox_r2","_MatInternalFormField","MAT_CHECKBOX_REQUIRED_VALIDATOR","MatCheckboxRequiredValidator","ɵMatCheckboxRequiredValidator_BaseFactory","_MatCheckboxRequiredValidatorModule","MatOption_Conditional_0_Template","MatOption_Conditional_5_Template","MatOption_Conditional_6_Template","AnimationCurves","STANDARD_CURVE","DECELERATION_CURVE","ACCELERATION_CURVE","SHARP_CURVE","AnimationDurations","COMPLEX","ENTERING","EXITING","MATERIAL_SANITY_CHECKS","MATERIAL_SANITY_CHECKS_FACTORY","_sanityChecks","_hasDoneGlobalChecks","_checkIsEnabled","_ErrorStateTracker","_defaultMatcher","ngControl","_parentFormGroup","_parentForm","errorState","updateErrorState","isErrorState","MAT_DATE_LOCALE","MAT_DATE_LOCALE_FACTORY","DateAdapter","_localeChanges","localeChanges","getValidDateOrNull","isDateInstance","deserialize","setLocale","compareDate","getYear","sameDate","firstValid","secondValid","clampDate","MAT_DATE_FORMATS","ISO_8601_REGEX","valueFunction","valuesArray","NativeDateAdapter","matDateLocale","useUtcForDisplay","_matDateLocale","getDayOfWeek","getMonthNames","dtf","getDateNames","getDayOfWeekNames","getYearName","getFirstDayOfWeek","getNumDaysInMonth","_createDateWithOverflow","parseFormat","displayFormat","addCalendarYears","addCalendarMonths","addCalendarDays","toIso8601","_2digit","MAT_NATIVE_DATE_FORMATS","dateInput","monthYearLabel","dateA11yLabel","monthYearA11yLabel","NativeDateModule","MatNativeDateModule","provideNativeDateAdapter","ShowOnDirtyErrorStateMatcher","ErrorStateMatcher","MatLine","MatLineModule","RippleState","FADING_IN","VISIBLE","FADING_OUT","HIDDEN","RippleRef","_animationForciblyDisabledThroughCss","fadeOut","fadeOutRipple","passiveCapturingEventOptions$1","RippleEventManager","_events","_delegateEventHandler","handlersForEvent","handlersForElement","defaultRippleAnimationConfig","enterDuration","exitDuration","passiveCapturingEventOptions","pointerDownEvents","pointerUpEvents","RippleRenderer","_isPointerDown","_activeRipples","_pointerUpEventsRegistered","fadeInRipple","animationConfig","distanceToFurthestCorner","distX","distY","computedStyles","userTransitionProperty","userTransitionDuration","animationForciblyDisabledThroughCss","rippleRef","_mostRecentTransientRipple","onTransitionEnd","_finishRippleTransition","onTransitionCancel","_destroyRipple","rippleEl","fadeOutAll","_getActiveRipples","fadeOutAllNonPersistent","setupTriggerEvents","_removeTriggerEvents","_onTouchStart","_onPointerUp","_startFadeOutTransition","isMostRecentTransientRipple","isFakeMousedown","isSyntheticEvent","_lastTouchStartEvent","rippleDisabled","rippleConfig","terminateOnPointerUp","MAT_RIPPLE_GLOBAL_OPTIONS","_setupTriggerEventsIfEnabled","_trigger","globalOptions","_globalOptions","_rippleRenderer","launch","configOrX","unbounded","MatPseudoCheckbox","MatPseudoCheckboxModule","MAT_OPTION_PARENT_COMPONENT","_uniqueOptgroupIdCounter","MAT_OPTGROUP","MatOptgroup","_labelId","_inert","inertGroups","_uniqueIdCounter","MatOptionSelectionChange","isUserInput","MatOption","hideSingleSelectionIndicator","_mostRecentViewValue","onSelectionChange","viewValue","_text","_emitSelectionChangeEvent","_getHostElement","_handleKeydown","_selectViaInteraction","_getTabIndex","_countGroupLabelsBeforeOption","optionIndex","optionGroups","optionsArray","groupCounter","_getOptionScrollPosition","optionOffset","optionHeight","currentScrollPosition","panelHeight","MatOptionModule","rippleInteractionEvents","matRippleUninitialized","matRippleClassName","matRippleCentered","matRippleDisabled","_globalRippleOptions","_hosts","_onInteraction","_createRipple","hosts","existingRipple","CdkDialogContainer_ng_template_0_Template","DialogConfig","ariaModal","autoFocus","closeOnNavigation","closeOnDestroy","closeOnOverlayDetachments","CdkDialogContainer","_focusTrap","_elementFocusedBeforeDialogWasOpened","_closeInteractionType","_ariaLabelledByQueue","_contentAttached","_addAriaLabelledBy","_removeAriaLabelledBy","_initializeFocusTrap","_handleBackdropClicks","_captureInitialFocus","_recaptureFocus","_forceFocus","_focusByCssSelector","focusedSuccessfully","_focusDialogContainer","focusConfig","focusTargetElement","DialogRef","containerInstance","closedSubject","DIALOG_SCROLL_STRATEGY","DIALOG_DATA","DEFAULT_DIALOG_CONFIG","Dialog","openDialogs","_parentDialog","_openDialogsAtThisLevel","afterOpened","_afterOpenedAtThisLevel","_afterAllClosedAtThisLevel","_ariaHiddenElements","afterAllClosed","_getAfterAllClosed","componentOrTemplateRef","getDialogById","_getOverlayConfig","dialogContainer","_attachContainer","_attachDialogContent","_hideNonDialogContentFromAssistiveTechnology","_removeOpenDialog","reverseForEach","userInjector","containerType","containerPortal","_createInjector","fallbackInjector","overlayContainer","siblings","DialogModule","MatDialogContainer_ng_template_2_Template","MatDialogConfig","delayFocusTrap","OPEN_CLASS","OPENING_CLASS","CLOSING_CLASS","MatDialogContainer","focusTrapFactory","dialogConfig","interactivityChecker","focusMonitor","_animationStateChanged","_animationsEnabled","_actionSectionCount","_hostElement","_enterAnimationDuration","parseCssTime","enterAnimationDuration","_exitAnimationDuration","exitAnimationDuration","_animationTimer","_finishDialogOpen","_clearAnimationClasses","_openAnimationDone","_finishDialogClose","_startOpenAnimation","TRANSITION_DURATION_PROPERTY","_requestAnimationFrame","_waitForAnimationToComplete","_startExitAnimation","_updateActionSectionCount","MatDialogState","CLOSING","MatDialogRef","_containerInstance","_afterOpened","_beforeClosed","_closeFallbackTimeout","_result","_closeDialogVia","dialogResult","beforeClosed","interactionType","MAT_DIALOG_DEFAULT_OPTIONS","MAT_DIALOG_SCROLL_STRATEGY","MatDialog","dialogConfigClass","_dialog","_dialogRefConstructor","_dialogContainerType","_dialogDataToken","cdkRef","cdkConfig","_closeDialogs","dialogs","dialogElementUid","MatDialogClose","getClosestDialog","proxiedChange","_matDialogClose","_matDialogCloseResult","_onButtonClick","screenX","screenY","MatDialogLayoutSection","_dialogRef","_onAdd","_onRemove","MatDialogTitle","ɵMatDialogTitle_BaseFactory","MatDialogContent","MatDialogActions","ɵMatDialogActions_BaseFactory","_defaultParams","SingleBoxSharedResizeObserver","_box","_resizeSubject","_elementObservables","ResizeObserver","_resizeObserver","box","SharedResizeObserver","_observers","MatFormField_ng_template_0_Conditional_0_Conditional_2_Template","MatFormField_ng_template_0_Conditional_0_Template","_shouldLabelFloat","_hasOutline","disableAutomaticLabeling","hideRequiredMarker","MatFormField_ng_template_0_Template","_hasFloatingLabel","MatFormField_Conditional_4_Template","MatFormField_Conditional_6_Conditional_1_ng_template_0_Template","MatFormField_Conditional_6_Conditional_1_Template","labelTemplate_r3","MatFormField_Conditional_6_Template","_forceDisplayInfixLabel","MatFormField_Conditional_7_Template","MatFormField_Conditional_8_Template","MatFormField_Conditional_10_ng_template_0_Template","MatFormField_Conditional_10_Template","MatFormField_Conditional_12_Template","MatFormField_Conditional_13_Template","MatFormField_Conditional_14_Template","MatFormField_Case_16_Template","_subscriptAnimationState","MatFormField_Case_17_Conditional_1_Template","_hintLabelId","hintLabel","MatFormField_Case_17_Template","MatLabel","nextUniqueId$2","MAT_ERROR","MatError","nextUniqueId$1","MatHint","MAT_PREFIX","MatPrefix","_isText","_isTextSelector","MAT_SUFFIX","MatSuffix","FLOATING_LABEL_PARENT","MatFormFieldFloatingLabel","_floating","monitorResize","_handleResize","_monitorResize","_subscribeToResize","estimateScrollWidth","htmlEl","cloneNode","_handleLabelResized","ACTIVATE_CLASS","DEACTIVATING_CLASS","MatFormFieldLineRipple","_handleTransitionEnd","isDeactivating","activate","deactivate","MatFormFieldNotchedOutline","_setNotchWidth","labelWidth","_notch","matFormFieldAnimations","transitionMessages","MatFormFieldControl","MAT_FORM_FIELD","MAT_FORM_FIELD_DEFAULT_OPTIONS","MatFormField","_hideRequiredMarker","floatLabel","_floatLabel","_defaults","_appearance","newAppearance","_needsOutlineLabelOffsetUpdateOnStable","subscriptSizing","_subscriptSizing","_hintLabel","_processHints","_explicitFormFieldControl","_formFieldControl","_unusedDocument","_hasIconPrefix","_hasTextPrefix","_hasIconSuffix","_hasTextSuffix","_updateFocusState","_assertFormFieldControl","_initializeControl","_initializeSubscript","_initializePrefixAndSuffix","_initializeOutlineLabelOffsetSubscriptions","getLabelId","getConnectedOverlayOrigin","_textField","_animateAndLockLabel","controlType","_syncDescribedByIds","_checkPrefixAndSuffixTypes","_prefixChildren","_suffixChildren","_hintChildren","_errorChildren","_validateHints","_lineRipple","_updateOutlineLabelOffset","_shouldAlwaysFloat","_labelChildNonStatic","_labelChildStatic","shouldLabelFloat","_shouldForward","_getDisplayedMessages","_refreshOutlineNotchWidth","_floatingLabel","_notchedOutline","userAriaDescribedBy","startHint","endHint","setDescribedByIds","floatingLabel","_iconPrefixContainer","_textPrefixContainer","_isAttachedToDom","iconPrefixContainer","textPrefixContainer","iconPrefixContainerWidth","textPrefixContainerWidth","labelHorizontalOffset","autofilled","onContainerClick","tmp_16_0","ttWindow","getMatIconNameNotFoundError","iconName","getMatIconFailedToSanitizeUrlError","getMatIconFailedToSanitizeLiteralError","literal","SvgIconConfig","svgText","MatIconRegistry","_httpClient","_errorHandler","_svgIconConfigs","_iconSetConfigs","_cachedIconsByUrl","_inProgressUrlFetches","_fontCssClassesByAlias","_resolvers","_defaultFontSetClass","addSvgIcon","addSvgIconInNamespace","addSvgIconLiteral","addSvgIconLiteralInNamespace","_addSvgIconConfig","addSvgIconResolver","cleanLiteral","trustedLiteral","addSvgIconSet","addSvgIconSetInNamespace","addSvgIconSetLiteral","addSvgIconSetLiteralInNamespace","_addSvgIconSetConfig","registerFontClassAlias","classNames","classNameForFontAlias","setDefaultFontSetClass","getDefaultFontSetClass","getSvgIconFromUrl","safeUrl","cachedIcon","cloneSvg","_loadSvgIconFromConfig","svg","getNamedSvgIcon","iconKey","_getSvgFromConfig","_getIconConfigFromResolvers","iconSetConfigs","_getSvgFromIconSetConfigs","_svgElementFromConfig","namedIcon","_extractIconWithNameFromAnySet","iconSetFetchRequests","iconSetConfig","_loadSvgIconSetFromConfig","foundIcon","_extractSvgIconFromSet","_fetchIcon","iconSet","iconSource","iconElement","_setSvgAttributes","_toSvgElement","_svgElementFromString","iconConfig","getMatIconNoHttpProviderError","inProgressFetch","configNamespace","DomSanitizer","MAT_ICON_DEFAULT_OPTIONS","MAT_ICON_LOCATION","MAT_ICON_LOCATION_FACTORY","getPathname","funcIriAttributes","funcIriAttributeSelector","funcIriPattern","MatIcon","_defaultColor","svgIcon","_svgIcon","_updateSvgIcon","_clearSvgElement","fontSet","_fontSet","_cleanupFontValue","_updateFontIconClasses","fontIcon","_fontIcon","_iconRegistry","ariaHidden","inline","_previousFontSetClass","_currentIconFetch","_splitIconName","cachedElements","_elementsWithExternalReferences","_previousPath","_prependPathToReferences","_usingFontIcon","_setSvgElement","_cacheChildrenWithExternalReferences","layoutElement","fontSetClasses","_previousFontIconClass","elementsWithFuncIri","elementWithReference","rawName","_svgNamespace","_svgName","listenerOptions","AutofillMonitor","_monitoredElements","isAutofilled","CdkAutofill","_autofillMonitor","cdkAutofill","CdkTextareaAutosize","minRows","_minRows","_setMinHeight","maxRows","_maxRows","_setMaxHeight","resizeToFitContent","_textareaElement","_cachedPlaceholderHeight","_cacheTextareaPlaceholderHeight","_previousMinRows","_isViewInited","_handleFocusEvent","_hasFocus","_cachedLineHeight","_initialHeight","_cacheTextareaLineHeight","textareaClone","_measureScrollHeight","previousMargin","needsMarginFiller","measuringClass","textarea","_scrollToCaretPosition","_noopInputHandler","TextFieldModule","MAT_INPUT_VALUE_ACCESSOR","MAT_INPUT_INVALID_TYPES","MatInput","_uid","_required","_validateType","_isTextarea","errorStateMatcher","_errorStateTracker","_inputValueAccessor","_readonly","parentForm","parentFormGroup","defaultErrorStateMatcher","inputValueAccessor","_formField","_neverEmptyInputTypes","_iOSKeyupListener","_previousNativeValue","_isServer","_isNativeSelect","_isInFormField","_dirtyCheckNativeValue","_dirtyCheckPlaceholder","_focusChanged","isFocused","_onInput","_getPlaceholder","_previousPlaceholder","_isNeverEmpty","_isBadInput","validity","badInput","selectElement","firstOption","_isInlineSelect","MatMenuItem_Conditional_4_Template","MatMenu_ng_template_0_Template","_onAnimationStart","_onAnimationDone","_classList","panelId","_panelAnimationState","MAT_MENU_PANEL","MatMenuItem","_parentMenu","_hovered","_focused","_highlighted","_triggersSubmenu","addItem","_checkDisabled","_handleMouseEnter","icons","_setHighlighted","isHighlighted","_setTriggersSubmenu","triggersSubmenu","MAT_MENU_CONTENT","MatMenuContent","_attached","_outlet","matMenuAnimations","transformMenu","fadeInItems","menuPanelUid","MAT_MENU_DEFAULT_OPTIONS","MAT_MENU_DEFAULT_OPTIONS_FACTORY","overlapTrigger","yPosition","MatMenu","setPositionClasses","_yPosition","previousPanelClass","_previousPanelClass","newClassList","_elevationPrefix","_baseElevation","_directDescendantItems","overlayPanelClass","_updateDirectDescendants","focusedItem","itemsList","_firstItemFocusSubscription","parentMenu","focusFirstItem","menuPanel","resetActiveItem","setElevation","elevation","newElevation","customElevation","_previousElevation","_startAnimation","_resetAnimation","_isAnimating","_allItems","lazyContent","MAT_MENU_SCROLL_STRATEGY","MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER","MAT_MENU_SCROLL_STRATEGY_FACTORY","passiveEventListenerOptions","MatMenuTrigger","_deprecatedMatMenuTriggerFor","_menuCloseSubscription","_parentMaterialMenu","_destroyMenu","_menuItemInstance","_menuOpen","_closingActionsSubscription","_hoverSubscription","_handleTouchStart","_openedBy","menuOpened","onMenuOpen","menuClosed","onMenuClose","_handleHover","menuOpen","toggleMenu","closeMenu","openMenu","_setPosition","_getPortal","menuData","_menuClosingActions","_initMenu","_setIsMenuOpen","_setMenuElevation","_subscribeToPositions","originFallbackX","overlayFallbackY","originFallbackY","overlayFallbackX","_parentInnerPadding","firstItem","parentClose","_handleMousedown","_handleClick","MatProgressSpinner_ng_template_0_Template","_viewBox","_strokeCircumference","_circleStrokeWidth","_circleRadius","MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS","MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY","diameter","BASE_SIZE","MatProgressSpinner","_diameter","_noopAnimations","_forceAnimations","strokeWidth","_strokeWidth","_strokeDashOffset","_determinateCircle","circle_r2","MatSelect_Conditional_4_Template","MatSelect_Conditional_5_Conditional_1_Template","MatSelect_Conditional_5_Conditional_2_Template","triggerValue","MatSelect_Conditional_5_Template","customTrigger","MatSelect_ng_template_10_Template","_panelDoneAnimatingStream","_getPanelTheme","_getPanelAriaLabelledby","matSelectAnimations","transformPanelWrap","transformPanel","MAT_SELECT_SCROLL_STRATEGY","MAT_SELECT_CONFIG","MAT_SELECT_SCROLL_STRATEGY_PROVIDER","MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY","MAT_SELECT_TRIGGER","MatSelectChange","MatSelect","_scrollOptionIntoView","labelCount","_positioningSettled","_getChangeEvent","_panelOpen","_hideSingleSelectionIndicator","_syncParentProperties","_placeholder","_selectionModel","_initializeSelection","_assignValue","_unusedNgZone","_parentFormField","_positions","_triggerAriaLabelledBy","_valueId","_overlayPanelClass","disableOptionCentering","panelWidth","optionSelectionChanges","openedChange","_openedStream","_closedStream","selectionChange","valueChange","_trackedModal","_skipPredicate","panelOpen","typeaheadDebounceInterval","_panelDoneAnimating","_overlayWidth","_preferredOverlayOrigin","_initKeyManager","_resetOptions","newAriaLabelledby","_getTriggerAriaLabelledby","_previousControl","_clearFromModal","_canOpen","_applyModalPanelOwnership","_highlightCorrectOption","_handleOpenKeydown","_handleClosedKeydown","isArrowKey","isOpenKey","previouslySelectedOption","selectedOption","hasDeselectedOptions","previouslyFocusedIndex","_onAttached","_overlayDir","_setSelectionByValue","_selectOptionByValue","_sortValues","correspondingOption","preferredOrigin","changedOrDestroyed","_onSelect","wasSelected","_propagateChanges","sortComparator","valueToEmit","firstEnabledOptionIndex","labelId","labelExpression","_getAriaActiveDescendant","fallbackOverlayOrigin_r4","MatSelectTrigger","SimpleSnackBar_Conditional_2_Template","MatSnackBarContainer_ng_template_4_Template","MAX_TIMEOUT","MatSnackBarRef","_afterDismissed","_onAction","_dismissedByAction","_onExit","_finishDismiss","exit","_durationTimeoutId","dismissWithAction","closeWithAction","_dismissAfter","dismissedByAction","_onEnter","MAT_SNACK_BAR_DATA","MatSnackBarConfig","announcementMessage","MatSnackBarLabel","MatSnackBarActions","MatSnackBarAction","SimpleSnackBar","snackBarRef","hasAction","matSnackBarAnimations","snackBarState","MatSnackBarContainer","snackBarConfig","_trackedModals","_announceDelay","_onAnnounce","_animationState","_liveElementId","_assertNotAttached","_afterPortalAttached","_role","onAnimationEnd","_completeExit","_screenReaderAnnounce","_announceTimeoutId","_clearFromModals","panelClasses","_exposeToModals","labelClass","inertElement","liveElement","MAT_SNACK_BAR_DEFAULT_OPTIONS","MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY","MatSnackBar","_openedSnackBarRef","_parentSnackBar","_snackBarRefAtThisLevel","_breakpointObserver","_defaultConfig","simpleSnackBarComponent","snackBarContainerComponent","handsetCssClass","openFromComponent","_attach","openFromTemplate","_attachSnackBarContainer","containerRef","userConfig","_animateSnackBar","MatToolbarRow","MatToolbar","_checkToolbarMixedModes","_toolbarRows","GenericBrowserDomAdapter","ɵDomAdapter","supportsDOMEvents","BrowserDomAdapter","makeCurrent","ɵsetRootDomAdapter","onAndCancel","evt","getDefaultDocument","createHtmlDocument","DocumentFragment","getBaseElementHref","baseElement","baseURI","resetBaseElement","getCookie","BrowserXhr","EVENT_MANAGER_PLUGINS","EventManager","_eventNameToPlugin","plugin","_plugins","_findPluginFor","EventManagerPlugin","APP_ID_ATTRIBUTE_NAME","SharedStylesHost","styleRef","hostNodes","styleNodesInDOM","collectServerRenderedStyles","platformIsServer","resetHostNodes","addStyles","changeUsageCount","onStyleAdded","removeStyles","onStyleRemoved","getAllStyles","addHost","hostNode","addStyleToHost","removeHost","styleMap","styleRefValue","usage","getStyleElement","styleEl","styleElRef","NAMESPACE_URIS","xhtml","xlink","xml","xmlns","math","COMPONENT_REGEX","HOST_ATTR","CONTENT_ATTR","REMOVE_STYLES_ON_COMPONENT_DESTROY","shimStylesContent","compId","DomRendererFactory2","sharedStylesHost","removeStylesOnCompDestroy","rendererByCompId","defaultRenderer","DefaultDomRenderer2","getOrCreateRenderer","EmulatedEncapsulationDomRenderer2","applyToHost","NoneEncapsulationDomRenderer","ShadowDomRenderer","throwOnSyntheticProps","isTemplateNode","namespaceUri","removeAttributeNS","removeProperty","decoratePreventDefault","hostEl","nodeOrShadowRoot","contentAttr","shimContentAttribute","componentShortId","hostAttr","shimHostAttribute","DomEventsPlugin","MODIFIER_KEYS","_keyMap","Del","Esc","Left","Right","Up","Down","Menu","Scroll","Win","MODIFIER_KEY_GETTERS","alt","KeyEventsPlugin","parseEventName","parsedEvent","outsideHandler","eventCallback","fullKey","domEventName","_normalizeKey","codeIX","modifierName","matchEventFullKeyCode","fullKeyCode","modifierGetter","INTERNAL_BROWSER_PLATFORM_PROVIDERS","ɵPLATFORM_BROWSER_ID","initDomAdapter","ɵsetDocument","platformBrowser","BROWSER_MODULE_PROVIDERS_MARKER","TESTABILITY_PROVIDERS","ɵTESTABILITY_GETTER","BrowserGetTestability","ɵglobal","getAngularTestability","getAllAngularTestabilities","getAllAngularRootElements","frameworkStabilizers","testabilities","ɵTESTABILITY","BROWSER_MODULE_PROVIDERS","ɵINJECTOR_SCOPE","providersAlreadyPresent","withServerTransition","Meta","_dom","forceCreation","_getOrCreateElement","addTags","attrSelector","getTags","updateTag","_parseSelector","_setMetaElementAttributes","removeTag","removeTagElement","_containsAttributes","_getMetaKeyMap","META_KEYS_MAP","httpEquiv","Title","newTitle","EVENT_NAMES","pan","panstart","panmove","panend","pancancel","panleft","panright","panup","pandown","pinch","pinchstart","pinchmove","pinchend","pinchcancel","pinchin","pinchout","press","pressup","rotatestart","rotatemove","rotateend","rotatecancel","swipe","swipeleft","swiperight","swipeup","swipedown","doubletap","HAMMER_GESTURE_CONFIG","HAMMER_LOADER","HammerGestureConfig","overrides","buildHammer","mc","Hammer","HammerGesturesPlugin","_loaderPromise","isCustomEvent","cancelRegistration","eventObj","HammerModule","ɵConsole","DomSanitizerImpl","ɵallowSanitizationBypassAndThrow","ɵ_sanitizeHtml","ɵ_sanitizeUrl","ɵbypassSanitizationTrustHtml","bypassSecurityTrustStyle","ɵbypassSanitizationTrustStyle","ɵbypassSanitizationTrustScript","bypassSecurityTrustUrl","ɵbypassSanitizationTrustUrl","bypassSecurityTrustResourceUrl","ɵbypassSanitizationTrustResourceUrl","HydrationFeatureKind","NoHttpTransferCache","HttpTransferCacheOptions","takeLast","PRIMARY_OUTLET","RouteTitleKey","ParamsAsMap","convertToParamMap","defaultUrlMatcher","segmentGroup","posParams","consumed","shallowEqual","getDataKeys","equalArraysOrString","aSorted","bSorted","wrapIntoObservable","pathCompareMap","equalSegmentGroups","containee","matrixParams","equalPath","matrixParamsMatch","numberOfChildren","containsSegmentGroup","paramCompareMap","equalParams","containsParams","containsTree","containsSegmentGroupHelper","containeePaths","containerPaths","containeeSegment","UrlTree","UrlSegmentGroup","queryParamMap","_queryParamMap","DEFAULT_SERIALIZER","serialize","serializePaths","UrlSegment","parameterMap","_parameterMap","serializePath","bs","UrlSerializer","DefaultUrlSerializer","UrlParser","parseRootSegment","parseQueryParams","parseFragment","serializeSegment","serializeQueryParams","strParams","encodeUriQuery","encodeUriFragment","encodeURI","mapChildrenIntoArray","childOutlet","encodeUriString","encodeUriSegment","serializeMatrixParams","SEGMENT_RE","matchSegments","MATRIX_PARAM_SEGMENT_RE","QUERY_PARAM_RE","QUERY_PARAM_VALUE_RE","consumeOptional","peekStartsWith","parseChildren","parseQueryParam","parseSegment","parseParens","parseMatrixParams","parseParam","matchMatrixKeySegments","valueMatch","matchQueryParams","matchUrlQueryParamValue","decodedKey","decodedVal","currentVal","allowPrimary","outletName","createRoot","rootCandidate","Bt","squashSegmentGroup","childCandidate","grandChildOutlet","grandChild","mergeTrivialChildren","isUrlTree","createSegmentGroupFromRoute","targetGroup","createSegmentGroupFromRouteRecursive","currentRoute","childOutlets","childSnapshot","rootSegmentGroup","createUrlTreeFromSegmentGroup","relativeTo","commands","computeNavigation","Navigation","numberOfDoubleDots","isAbsolute","cmdIdx","outlets","segmentPath","urlPart","partIndex","toRoot","findStartingPositionForTargetGroup","Position","isMatrixParams","createPositionApplyingDoubleDots","newSegmentGroup","processChildren","updateSegmentGroupChildren","updateSegmentGroup","isCommandWithOutlets","oldRoot","oldSegmentGroup","qp","replaceSegment","newRoot","oldSegment","newSegment","cmdWithOutlet","prefixedWith","currentCommandIndex","currentPathIndex","noMatch","pathIndex","commandIndex","slicedCommands","createNewSegmentGroup","getOutlets","childrenOfEmptyChild","createNewSegmentChildren","IMPERATIVE_NAVIGATION","EventType","NavigationCancellationCode","NavigationSkippedCode","NavigationStart","NavigationEnd","NavigationCancel","NavigationError","RoutesRecognized","ResolveStart","ResolveEnd","GuardsCheckStart","GuardsCheckEnd","RouteConfigLoadStart","RouteConfigLoadEnd","ChildActivationStart","ChildActivationEnd","ActivationStart","NavigationSkipped","RouterEvent","navigationTrigger","restoredState","urlAfterRedirects","Redirect","SupersededByNewNavigation","NoDataFromResolver","GuardRejected","IgnoredSameUrlNavigation","IgnoredByUrlHandlingStrategy","shouldActivate","routerEvent","BeforeActivateRoutes","RedirectRequest","OutletContext","ChildrenOutletContexts","attachRef","onChildOutletCreated","getOrCreateContext","onChildOutletDestroyed","onOutletDeactivated","onOutletReAttached","findNode","findPath","TreeNode","nodeChildrenAsMap","RouterState","setRouterState","createEmptyState","rootComponent","createEmptyStateSnapshot","emptyParams","emptyData","emptyQueryParams","activated","ActivatedRouteSnapshot","RouterStateSnapshot","emptyUrl","ActivatedRoute","urlSubject","paramsSubject","queryParamsSubject","fragmentSubject","dataSubject","futureSnapshot","_futureSnapshot","_routerState","_paramMap","getInherited","paramsInheritanceStrategy","loadComponent","_resolvedData","hasStaticTitle","serializeNode","advanceActivatedRoute","nextSnapshot","shallowEqualArrays","equalParamsAndUrlSegments","equalUrlParams","equalSegments","parentsMismatch","RouterOutlet","activateEvents","deactivateEvents","attachEvents","detachEvents","parentContexts","changeDetector","inputBinder","INPUT_BINDER","supportsBindingToComponentInputs","activatedComponentRef","isTrackedInParentContexts","initializeOutletWithName","unsubscribeFromRouteData","activateWith","isActivated","activatedRoute","activatedRouteData","bindActivatedRouteToOutletComponent","childContexts","OutletInjector","RoutedComponentInputBinder","outletDataSubscriptions","subscribeToRouteData","dataSubscription","createNode","routeReuseStrategy","prevState","shouldReuseRoute","createOrReuseChildren","shouldAttach","detachedRouteHandle","retrieve","createActivatedRoute","NAVIGATION_CANCELING_ERROR","redirectingNavigationError","urlSerializer","redirect","navigationBehaviorOptions","navigationCancelingError","cancellationCode","isNavigationCancelingError","standardizeConfig","getOutlet","getClosestRouteInjector","_loadedInjector","ActivateRoutes","futureState","currState","forwardEvent","inputBindingEnabled","futureRoot","currRoot","deactivateChildRoutes","activateChildRoutes","futureNode","currNode","futureChild","childOutletName","deactivateRoutes","deactivateRouteAndItsChildren","shouldDetach","detachAndStoreRouteSubtree","deactivateRouteAndOutlet","treeNode","activateRoutes","stored","CanActivate","CanDeactivate","getAllRouteGuards","getChildRouteGuards","getTokenOrFunctionIdentity","tokenOrFunction","ɵisInjectable","futurePath","canDeactivateChecks","canActivateChecks","prevChildren","getRouteGuards","shouldRun","shouldRunGuardsAndResolvers","runGuardsAndResolvers","isEmptyError","INITIAL_VALUE","prioritizedGuardValue","checkGuards","targetSnapshot","guards","guardsResult","runCanDeactivateChecks","futureRSS","currRSS","runCanDeactivate","currARS","canDeactivate","canDeactivateObservables","closestInjector","isCanDeactivate","runCanActivateChecks","fireChildActivationStart","fireActivationStart","runCanActivateChild","futureARS","canActivateChildGuardsMapped","getCanActivateChild","canActivateChild","guardsMapped","isCanActivateChild","runCanActivate","canActivate","canActivateObservables","isCanActivate","runCanLoadGuards","canLoad","canLoadObservables","injectionToken","isCanLoad","redirectIfUrlTree","runCanMatchGuards","canMatch","canMatchObservables","isCanMatch","NoMatch","AbsoluteRedirect","urlTree","noMatch$1","ApplyRedirects","lineralizeSegments","applyRedirectCommands","applyRedirectCreateUrlTree","createSegmentGroup","createQueryParams","redirectToParams","actualParams","sourceName","updatedSegments","createSegments","redirectToSegments","actualSegments","findPosParam","findOrReturn","redirectToUrlSegment","consumedSegments","remainingSegments","positionalParamSegments","matchWithChecks","getOrCreateRouteInjectorIfNeeded","createWildcardMatchResult","slicedSegments","containsEmptyPathMatchesWithNamedOutlets","emptyPathMatch","createChildrenForEmptyPaths","containsEmptyPathMatches","addEmptyPathsToChildrenIfNeeded","primarySegment","NoLeftoversInUrl","Recognizer","configLoader","rootComponentType","applyRedirects","absoluteRedirectCount","allowRedirects","noMatchError","recognize","routeState","createUrlTreeFromSnapshot","inheritParamsAndData","processSegmentGroup","routeNode","processSegment","sortedConfig","sortByMatchingOutlets","outletChildren","last$1","mergedChildren","mergeEmptyPathMatches","sortActivatedRouteSnapshots","processSegmentAgainstRoute","noLeftoversInUrl","rawSegment","isImmediateMatch","matchSegmentAgainstRoute","expandSegmentAgainstRouteUsingRedirect","newSegments","getChildConfig","childInjector","_loadedComponent","getResolve","matchedOnOutlet","_loadedRoutes","shouldLoadResult","cfg","canLoadFails","hasEmptyPathConfig","mergedNodes","duplicateEmptyPathNode","resultNode","mergedNode","serializer","recognize$1","extractedUrl","resolveData","routesWithResolversToRun","routesNeedingDataUpdates","newRoute","flattenRouteTree","routesProcessed","runResolve","resolveNode","getResolver","resolverValue","resolvedData","switchTap","nextResult","TitleStrategy","buildTitle","pageTitle","getResolvedTitleForRoute","DefaultTitleStrategy","updateTitle","ROUTER_CONFIGURATION","ROUTES","RouterConfigLoader","componentLoaders","childrenLoaders","onLoadStartListener","loadRunner","maybeUnwrapDefaultExport","onLoadEndListener","factoryOrRoutes","rawRoutes","requireStandaloneComponents","isWrappedDefaultExport","UrlHandlingStrategy","DefaultUrlHandlingStrategy","shouldProcessUrl","extract","newUrlPart","wholeUrl","CREATE_VIEW_TRANSITION","VIEW_TRANSITION_OPTIONS","createViewTransition","transitionOptions","startViewTransition","skipNextTransition","resolveViewTransitionStarted","viewTransitionStarted","createRenderPromise","onViewTransitionCreated","NavigationTransitions","hasRequestedNavigation","navigationId","currentNavigation","lastSuccessfulNavigation","transitionAbortSubject","rootContexts","titleStrategy","urlHandlingStrategy","afterPreactivation","handleNavigationRequest","setupNavigations","initialUrlTree","initialRouterState","currentUrlTree","currentRawUrl","rawUrl","extras","currentRouterState","targetRouterState","overallTransitionState","cancelNavigationTransition","initialUrl","previousNavigation","urlTransition","navigated","isUpdatingInternalState","isUpdatedBrowserUrl","onSameUrlNavigation","finalUrl","routesRecognized","navStart","skipLocationChange","replaceUrl","guardsStart","guardsEnd","resolveStart","dataResolved","resolveEnd","loadComponents","loaders","loadedComponent","createRouterState","isRedirectingNavigationCancelingError","ee","resolveNavigationPromiseOnError","navCancel","isBrowserTriggeredNavigation","RouteReuseStrategy","DefaultRouteReuseStrategy","BaseRouteReuseStrategy","detachedTree","ɵDefaultRouteReuseStrategy_BaseFactory","StateManager","HistoryStateManager","canceledNavigationResolution","urlUpdateStrategy","rawUrlTree","currentPageId","lastSuccessfulId","stateMemento","createStateMemento","getCurrentUrlTree","getRawUrlTree","browserPageId","ɵrouterPageId","getRouterState","registerNonRouterCurrentEntryChangeListener","handleRouterEvent","setBrowserUrl","restoreHistory","currentBrowserPageId","generateNgRouterState","restoringFromCaughtError","targetPagePosition","resetState","resetUrlToCurrentUrlTree","routerPageId","ɵHistoryStateManager_BaseFactory","NavigationResult","afterNextNavigation","REDIRECTING","exactMatchOptions","subsetMatchOptions","Router","stateManager","disposed","isNgZoneEnabled","navigationTransitions","componentInputBindingEnabled","eventsSubscription","resetConfig","subscribeToNavigationEvents","mergedTree","scheduleNavigation","isPublicRouterEvent","resetRootComponentType","initialNavigation","setUpLocationChangeListener","navigateToSyncWithBrowser","nonRouterCurrentEntryChangeSubscription","stateCopy","serializeUrl","getCurrentNavigation","createUrlTree","navigationExtras","queryParamsHandling","preserveFragment","relativeToUrlSegmentGroup","removeEmptyProps","navigateByUrl","validateCommands","matchOptions","priorPromise","RouterLink","tabIndexAttribute","onChanges","updateHref","setTabIndexIfNotOnNativeEl","newTabIndex","applyAttributeValue","routerLink","sanitizedValue","RouterLinkActive","routerLinkActiveOptions","isActiveChange","routerEventsSubscription","subscribeToEachLinkOnChanges","linkInputChangesSubscription","allLinkChanges","isLinkActive","routerLinkActive","hasActiveLinks","ariaCurrentWhenActive","isActiveMatchOptions","isActiveCheckFn","PreloadingStrategy","PreloadAllModules","NoPreloading","RouterPreloader","preloadingStrategy","setUpPreloading","processRoutes","injectorForCurrentRoute","injectorForChildren","preloadConfig","loadedChildren$","recursiveLoadChildren$","loadComponent$","ROUTER_SCROLLER","RouterScroller","viewportScroller","lastSource","restoredId","scrollPositionRestoration","anchorScrolling","createScrollEvents","scrollEventsSubscription","consumeScrollEvents","scheduleScrollEvent","rootRoute","routerFeature","getBootstrapListener","bootstrappedComponentRef","bootstrapDone","BOOTSTRAP_DONE","INITIAL_NAVIGATION","ROUTER_PRELOADER","withPreloading","withViewTransitions","skipInitialTransition","ROUTER_FORROOT_GUARD","ROUTER_PROVIDERS","provideForRootGuard","useHash","provideInitialNavigation","bindToComponentInputs","enableViewTransitions","ROUTER_INITIALIZER","locationInitialized","TranslateFakeLoader","getTranslation","ɵTranslateFakeLoader_BaseFactory","MissingTranslationHandler","FakeMissingTranslationHandler","keySet","t1","mergeDeep","Te","TranslateParser","TranslateDefaultParser","templateMatcher","interpolateString","interpolateFunction","ɵTranslateDefaultParser_BaseFactory","TranslateCompiler","TranslateFakeCompiler","compile","compileTranslations","translations","ɵTranslateFakeCompiler_BaseFactory","TranslateStore","defaultLang","onTranslationChange","onLangChange","onDefaultLangChange","USE_STORE","USE_DEFAULT_LANG","DEFAULT_LANGUAGE","USE_EXTEND","TranslateService","currentLoader","missingTranslationHandler","useDefaultLang","isolate","loadingTranslations","_onTranslationChange","_onLangChange","_onDefaultLangChange","_defaultLang","_currentLang","_langs","_translations","_translationRequests","defaultLanguage","retrieveTranslations","changeDefaultLang","getDefaultLang","changeLang","updateLangs","setTranslation","shouldMerge","getLangs","getParsedResult","getStreamOnTranslationChange","reloadLang","resetLang","getBrowserLang","browserLang","browserLanguage","userLanguage","getBrowserCultureLang","browserCultureLang","TranslatePipe","lastKey","lastParams","onTranslation","validArgs","SyntaxError","QRCodeComponent","allowEmptyString","colorDark","colorLight","qrdata","qrCodeURL","createQRCode","isValidQrCodeText","qrCodeConfig","toCanvas","toSVG","renderElement","qrcElement","centerImageSrc","imageSrc","centerImageHeight","centerImageWidth","centerImage","emitQRCodeURL","svgParentElement","svgString","dataUrl","SVGSVGElement","svgHTML","urlSvg","urlSanitized","urlImage","HTMLCanvasElement","isIntegerNumber","isPositiveAndFinite","alphabetChars","saltChars","transformed","codePointAt","fromAlphabet","inputChars","throwIfBigIntNotAvailable","safeToParseNumberRegExp","makeAnyOfCharsRegExp","salt","alphabet","seps","sepsChars","uniqueAlphabet","withoutChars","charsToExclude","filteredSeps","onlyChars","keepChars","sepsLength","guardCount","guardsRegExp","sepsRegExp","allowedCharsRegExp","makeAtLeastSomeCharRegExp","inputNumbers","int10","safeParseInt10","_encode","_decode","encodeHex","inputHex","splitAtIntervalAndMap","decodeHex","isValidId","numbersIdInt","lottery","toAlphabet","alphabetLength","extraNumber","prefixGuardIndex","suffixGuardIndex","halfLength","excess","halfOfExcess","idGuardsArray","idBreakdown","lotteryChar","idArray","lastAlphabet","subId","nextAlphabet","instanceOfAny","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","IDBTransaction","wrapFunction","IDBDatabase","getCursorAdvanceMethods","IDBCursor","advance","continue","continuePrimaryKey","storeNames","transformCachableValue","cacheDonePromiseForTransaction","DOMException","getIdbProxyableTypes","IDBObjectStore","IDBIndex","IDBRequest","promisifyRequest","blocked","blocking","terminated","openPromise","readMethods","writeMethods","cachedMethods","getMethod","targetFuncName","useIndex","isWrite","storeName","replaceTraps","oldTraps","RECAPTCHA_LANGUAGE","RECAPTCHA_BASE_URL","RECAPTCHA_NONCE","RECAPTCHA_SETTINGS","RECAPTCHA_LOADER_OPTIONS","renderMode","onBeforeLoad","onLoaded","ng2recaptchaloaded","onBeforeLoadNonce","nonceValue","newLoadScript","v3SiteKey","RecaptchaLoaderService","toNonNullObservable","newUrl","RecaptchaComponent","errorMode","badge","renderRecaptcha","grecaptchaReset","widget","executeRequested","__unsafe_widgetValue","expired","captchaResponseCallback","renderOptions","expired-callback","RecaptchaCommonModule","RecaptchaModule","ReCaptchaV3Service","recaptchaLoader","onExecute","onExecuteSubject","onExecuteObservable","onExecuteError","onExecuteErrorSubject","onExecuteErrorObservable","executeActionWithSubject","actionBacklog","RecaptchaValueAccessorDirective","requiresControllerReset","onResolve","RecaptchaFormsModule","GENERAL","UKNOWN","BROWSERS","CHROME","OPERA","IE","MS_EDGE","MS_EDGE_CHROMIUM","FB_MESSANGER","SAMSUNG","UCBROWSER","UNKNOWN","MOBILES_RE","HTC","NEXUS_PHONE","DELL","MOTOROLA","LG","SONY","ASUS","NOKIA_LUMIA","MICROMAX","PALM","VERTU","PANTECH","FLY","WIKO","I_MOBILE","SIMVALLEY","WOLFGANG","ALCATEL","NINTENDO","AMOI","INQ","VITA","BLACKBERRY","FIREFOX_OS","IPHONE","iPod","WINDOWS_PHONE","GENERIC_PHONE","TABLETS_RE","iPad","NexusTablet","GoogleTablet","SamsungTablet","Kindle","SurfaceTablet","HPTablet","AsusTablet","BlackBerryTablet","HTCtablet","MotorolaTablet","NookTablet","AcerTablet","ToshibaTablet","LGTablet","FujitsuTablet","PrestigioTablet","LenovoTablet","DellTablet","YarvikTablet","MedionTablet","ArnovaTablet","IntensoTablet","IRUTablet","MegafonTablet","EbodaTablet","AllViewTablet","ArchosTablet","AinolTablet","NokiaLumiaTablet","SonyTablet","PhilipsTablet","CubeTablet","CobyTablet","MIDTablet","MSITablet","SMiTTablet","RockChipTablet","FlyTablet","bqTablet","HuaweiTablet","NecTablet","PantechTablet","BronchoTablet","VersusTablet","ZyncTablet","PositivoTablet","NabiTablet","KoboTablet","DanewTablet","TexetTablet","PlaystationTablet","TrekstorTablet","PyleAudioTablet","AdvanTablet","DanyTechTablet","GalapadTablet","MicromaxTablet","KarbonnTablet","AllFineTablet","PROSCANTablet","YONESTablet","ChangJiaTablet","GUTablet","PointOfViewTablet","OvermaxTablet","HCLTablet","DPSTablet","VistureTablet","CrestaTablet","MediatekTablet","ConcordeTablet","GoCleverTablet","ModecomTablet","VoninoTablet","ECSTablet","StorexTablet","VodafoneTablet","EssentielBTablet","RossMoorTablet","iMobileTablet","TolinoTablet","AudioSonicTablet","AMPETablet","SkkTablet","TecnoTablet","JXDTablet","iJoyTablet","FX2Tablet","XoroTablet","ViewsonicTablet","VerizonTablet","OdysTablet","CaptivaTablet","IconbitTablet","TeclastTablet","OndaTablet","JaytechTablet","BlaupunktTablet","DigmaTablet","EvolioTablet","LavaTablet","AocTablet","MpmanTablet","CelkonTablet","WolderTablet","MediacomTablet","MiTablet","NibiruTablet","NexoTablet","LeaderTablet","UbislateTablet","PocketBookTablet","KocasoTablet","HisenseTablet","Hudl","TelstraTablet","Honeywell","GenericTablet","DEVICES","CHROME_BOOK","PS4","MAC","CHROMECAST","APPLE_TV","GOOGLE_TV","Tesla","HONEYWELL","MI_SE_9","DESKTOP_DEVICES","OS","WINDOWS","LINUX","UNIX","CHROME_OS","OS_VERSIONS","WINDOWS_3_11","WINDOWS_95","WINDOWS_ME","WINDOWS_98","WINDOWS_CE","WINDOWS_2000","WINDOWS_XP","WINDOWS_SERVER_2003","WINDOWS_VISTA","WINDOWS_7","WINDOWS_8_1","WINDOWS_8","WINDOWS_10","WINDOWS_PHONE_7_5","WINDOWS_PHONE_8_1","WINDOWS_PHONE_10","WINDOWS_NT_4_0","MACOSX_11_0","MACOSX_16","MACOSX_15","MACOSX_14","MACOSX_13","MACOSX_12","MACOSX_11","MACOSX_10","MACOSX_9","MACOSX_8","MACOSX_7","MACOSX_6","MACOSX_5","MACOSX_4","MACOSX_3","MACOSX_2","MACOSX","ANDROID_9","OS_RE","and","or","not","DEVICES_RE","OS_VERSIONS_RE_MAP","BROWSER_VERSIONS_RE_MAP","OS_VERSIONS_RE","BROWSER_VERSIONS_RE","DeviceType","OrientationType","Constants","BROWSERS_RE","ReTree","Mobile","Desktop","Unknown","Portrait","Landscape","DeviceDetectorService","os_version","browser_version","reTree","deviceType","setDeviceInfo","mappings","const","isTablet","mobile","asyncGeneratorStep","gen","_throw","fulfill","settle","SuppressedError"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/boticario/boticario-start/boticario-start.component.html","./src/app/boticario/boticario-start/boticario-start.component.ts","./src/app/boticario/boticario-schedule/boticario-schedule.component.html","./src/app/boticario/boticario-schedule/boticario-schedule.component.ts","./src/app/boticario/boticario-track/boticario-track.component.html","./src/app/boticario/boticario-track/boticario-track.component.ts","./src/app/boticario/boticario.routing.ts","./src/app/boticario/boticario.module.ts","./node_modules/@angular/cdk/fesm2022/accordion.mjs","./node_modules/@angular/material/fesm2022/expansion.mjs","./src/app/components/components.module.ts","./src/app/components/empty-state/empty-state.component.ts","./src/app/components/empty-state/empty-state.component.html","./src/app/components/exit-alert-modal/exit-alert-modal.component.ts","./src/app/components/exit-alert-modal/exit-alert-modal.component.html","./src/app/components/navigation-bar/navigation-bar.component.html","./src/app/components/navigation-bar/navigation-bar.component.ts","./src/app/components/header/header.component.html","./src/app/components/header/header.component.ts","./src/app/components/secondary-header/secondary-header.component.html","./src/app/components/secondary-header/secondary-header.component.ts","./src/app/components/sound-alert/sound-alert.component.ts","./src/app/components/sound-alert/sound-alert.component.html","./src/app/filazero/home/home.component.ts","./src/app/filazero/home/home.component.html","./node_modules/ts-custom-error/dist/custom-error.mjs","./node_modules/@zxing/library/esm/core/Exception.js","./node_modules/@zxing/library/esm/core/ArgumentException.js","./node_modules/@zxing/library/esm/core/IllegalArgumentException.js","./node_modules/@zxing/library/esm/core/BinaryBitmap.js","./node_modules/@zxing/library/esm/core/ChecksumException.js","./node_modules/@zxing/library/esm/core/Binarizer.js","./node_modules/@zxing/library/esm/core/util/System.js","./node_modules/@zxing/library/esm/core/IndexOutOfBoundsException.js","./node_modules/@zxing/library/esm/core/ArrayIndexOutOfBoundsException.js","./node_modules/@zxing/library/esm/core/util/Arrays.js","./node_modules/@zxing/library/esm/core/util/Integer.js","./node_modules/@zxing/library/esm/core/common/BitArray.js","./node_modules/@zxing/library/esm/core/DecodeHintType.js","./node_modules/@zxing/library/esm/core/FormatException.js","./node_modules/@zxing/library/esm/core/common/CharacterSetECI.js","./node_modules/@zxing/library/esm/core/UnsupportedOperationException.js","./node_modules/@zxing/library/esm/core/util/StringEncoding.js","./node_modules/@zxing/library/esm/core/common/StringUtils.js","./node_modules/@zxing/library/esm/core/util/StringBuilder.js","./node_modules/@zxing/library/esm/core/common/BitMatrix.js","./node_modules/@zxing/library/esm/core/NotFoundException.js","./node_modules/@zxing/library/esm/core/common/GlobalHistogramBinarizer.js","./node_modules/@zxing/library/esm/core/common/HybridBinarizer.js","./node_modules/@zxing/library/esm/core/LuminanceSource.js","./node_modules/@zxing/library/esm/core/InvertedLuminanceSource.js","./node_modules/@zxing/library/esm/browser/HTMLCanvasElementLuminanceSource.js","./node_modules/@zxing/library/esm/browser/VideoInputDevice.js","./node_modules/@zxing/library/esm/browser/BrowserCodeReader.js","./node_modules/@zxing/library/esm/core/Result.js","./node_modules/@zxing/library/esm/core/BarcodeFormat.js","./node_modules/@zxing/library/esm/core/ResultMetadataType.js","./node_modules/@zxing/library/esm/core/common/DecoderResult.js","./node_modules/@zxing/library/esm/core/common/reedsolomon/AbstractGenericGF.js","./node_modules/@zxing/library/esm/core/common/reedsolomon/GenericGFPoly.js","./node_modules/@zxing/library/esm/core/ArithmeticException.js","./node_modules/@zxing/library/esm/core/common/reedsolomon/GenericGF.js","./node_modules/@zxing/library/esm/core/ReedSolomonException.js","./node_modules/@zxing/library/esm/core/IllegalStateException.js","./node_modules/@zxing/library/esm/core/common/reedsolomon/ReedSolomonDecoder.js","./node_modules/@zxing/library/esm/core/aztec/decoder/Decoder.js","./node_modules/@zxing/library/esm/core/common/detector/MathUtils.js","./node_modules/@zxing/library/esm/core/util/Float.js","./node_modules/@zxing/library/esm/core/ResultPoint.js","./node_modules/@zxing/library/esm/core/common/DetectorResult.js","./node_modules/@zxing/library/esm/core/aztec/AztecDetectorResult.js","./node_modules/@zxing/library/esm/core/common/detector/WhiteRectangleDetector.js","./node_modules/@zxing/library/esm/core/common/GridSampler.js","./node_modules/@zxing/library/esm/core/common/PerspectiveTransform.js","./node_modules/@zxing/library/esm/core/common/DefaultGridSampler.js","./node_modules/@zxing/library/esm/core/common/GridSamplerInstance.js","./node_modules/@zxing/library/esm/core/aztec/detector/Detector.js","./node_modules/@zxing/library/esm/core/aztec/AztecReader.js","./node_modules/@zxing/library/esm/browser/BrowserAztecCodeReader.js","./node_modules/@zxing/library/esm/core/oned/OneDReader.js","./node_modules/@zxing/library/esm/core/oned/Code128Reader.js","./node_modules/@zxing/library/esm/core/oned/Code39Reader.js","./node_modules/@zxing/library/esm/core/oned/Code93Reader.js","./node_modules/@zxing/library/esm/core/oned/ITFReader.js","./node_modules/@zxing/library/esm/core/oned/AbstractUPCEANReader.js","./node_modules/@zxing/library/esm/core/oned/UPCEANExtension5Support.js","./node_modules/@zxing/library/esm/core/oned/UPCEANExtension2Support.js","./node_modules/@zxing/library/esm/core/oned/UPCEANExtensionSupport.js","./node_modules/@zxing/library/esm/core/oned/UPCEANReader.js","./node_modules/@zxing/library/esm/core/oned/EAN13Reader.js","./node_modules/@zxing/library/esm/core/oned/EAN8Reader.js","./node_modules/@zxing/library/esm/core/oned/UPCAReader.js","./node_modules/@zxing/library/esm/core/oned/UPCEReader.js","./node_modules/@zxing/library/esm/core/oned/MultiFormatUPCEANReader.js","./node_modules/@zxing/library/esm/core/oned/CodaBarReader.js","./node_modules/@zxing/library/esm/core/oned/rss/AbstractRSSReader.js","./node_modules/@zxing/library/esm/core/oned/rss/DataCharacter.js","./node_modules/@zxing/library/esm/core/oned/rss/FinderPattern.js","./node_modules/@zxing/library/esm/core/oned/rss/RSSUtils.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/BitArrayBuilder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/BlockParsedResult.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/DecodedObject.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/DecodedChar.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/DecodedInformation.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/DecodedNumeric.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/FieldParser.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/GeneralAppIdDecoder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AbstractExpandedDecoder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01decoder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01AndOtherAIs.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AnyAIDecoder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01weightDecoder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI013x0xDecoder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI013103decoder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01320xDecoder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01392xDecoder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01393xDecoder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI013x0x1xDecoder.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/ExpandedPair.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/ExpandedRow.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/RSSExpandedReader.js","./node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AbstractExpandedDecoderComplement.js","./node_modules/@zxing/library/esm/core/oned/rss/Pair.js","./node_modules/@zxing/library/esm/core/oned/rss/RSS14Reader.js","./node_modules/@zxing/library/esm/core/oned/MultiFormatOneDReader.js","./node_modules/@zxing/library/esm/browser/BrowserBarcodeReader.js","./node_modules/@zxing/library/esm/core/datamatrix/decoder/Version.js","./node_modules/@zxing/library/esm/core/datamatrix/decoder/BitMatrixParser.js","./node_modules/@zxing/library/esm/core/datamatrix/decoder/DataBlock.js","./node_modules/@zxing/library/esm/core/common/BitSource.js","./node_modules/@zxing/library/esm/core/datamatrix/decoder/DecodedBitStreamParser.js","./node_modules/@zxing/library/esm/core/datamatrix/decoder/Decoder.js","./node_modules/@zxing/library/esm/core/datamatrix/detector/Detector.js","./node_modules/@zxing/library/esm/core/datamatrix/DataMatrixReader.js","./node_modules/@zxing/library/esm/browser/BrowserDatamatrixCodeReader.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/ErrorCorrectionLevel.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/FormatInformation.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/ECBlocks.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/ECB.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/Version.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/DataMask.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/BitMatrixParser.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/DataBlock.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/Mode.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/DecodedBitStreamParser.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/QRCodeDecoderMetaData.js","./node_modules/@zxing/library/esm/core/qrcode/decoder/Decoder.js","./node_modules/@zxing/library/esm/core/qrcode/detector/AlignmentPattern.js","./node_modules/@zxing/library/esm/core/qrcode/detector/AlignmentPatternFinder.js","./node_modules/@zxing/library/esm/core/qrcode/detector/FinderPattern.js","./node_modules/@zxing/library/esm/core/qrcode/detector/FinderPatternInfo.js","./node_modules/@zxing/library/esm/core/qrcode/detector/FinderPatternFinder.js","./node_modules/@zxing/library/esm/core/qrcode/detector/Detector.js","./node_modules/@zxing/library/esm/core/qrcode/QRCodeReader.js","./node_modules/@zxing/library/esm/core/pdf417/PDF417Common.js","./node_modules/@zxing/library/esm/core/pdf417/detector/PDF417DetectorResult.js","./node_modules/@zxing/library/esm/core/pdf417/detector/Detector.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/ec/ModulusPoly.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/ec/ModulusBase.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/ec/ModulusGF.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/ec/ErrorCorrection.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/BoundingBox.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/BarcodeMetadata.js","./node_modules/@zxing/library/esm/core/util/Formatter.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/DetectionResultColumn.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/BarcodeValue.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/DetectionResultRowIndicatorColumn.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/DetectionResult.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/Codeword.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/PDF417CodewordDecoder.js","./node_modules/@zxing/library/esm/core/pdf417/PDF417ResultMetadata.js","./node_modules/@zxing/library/esm/core/util/Long.js","./node_modules/@zxing/library/esm/core/NullPointerException.js","./node_modules/@zxing/library/esm/core/util/OutputStream.js","./node_modules/@zxing/library/esm/core/OutOfMemoryError.js","./node_modules/@zxing/library/esm/core/util/ByteArrayOutputStream.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/DecodedBitStreamParser.js","./node_modules/@zxing/library/esm/core/pdf417/decoder/PDF417ScanningDecoder.js","./node_modules/@zxing/library/esm/core/pdf417/PDF417Reader.js","./node_modules/@zxing/library/esm/core/ReaderException.js","./node_modules/@zxing/library/esm/core/MultiFormatReader.js","./node_modules/@zxing/library/esm/browser/BrowserMultiFormatReader.js","./node_modules/@zxing/library/esm/core/EncodeHintType.js","./node_modules/@zxing/library/esm/browser/BrowserPDF417Reader.js","./node_modules/@zxing/library/esm/browser/BrowserQRCodeReader.js","./node_modules/@zxing/library/esm/core/common/reedsolomon/ReedSolomonEncoder.js","./node_modules/@zxing/library/esm/core/qrcode/encoder/MaskUtil.js","./node_modules/@zxing/library/esm/core/qrcode/encoder/ByteMatrix.js","./node_modules/@zxing/library/esm/core/qrcode/encoder/QRCode.js","./node_modules/@zxing/library/esm/core/WriterException.js","./node_modules/@zxing/library/esm/core/qrcode/encoder/MatrixUtil.js","./node_modules/@zxing/library/esm/core/qrcode/encoder/BlockPair.js","./node_modules/@zxing/library/esm/core/qrcode/encoder/Encoder.js","./node_modules/@zxing/library/esm/browser/BrowserQRCodeSvgWriter.js","./node_modules/@zxing/library/esm/core/qrcode/QRCodeWriter.js","./node_modules/@zxing/library/esm/core/MultiFormatWriter.js","./node_modules/@zxing/library/esm/core/PlanarYUVLuminanceSource.js","./node_modules/@zxing/library/esm/core/RGBLuminanceSource.js","./node_modules/@zxing/library/esm/core/util/Charset.js","./node_modules/@zxing/library/esm/core/util/StandardCharsets.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/DefaultPlacement.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/constants.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/ErrorCorrection.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/ASCIIEncoder.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/Base256Encoder.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/C40Encoder.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/EdifactEncoder.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/SymbolInfo.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/EncoderContext.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/X12Encoder.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/TextEncoder.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/HighLevelEncoder.js","./node_modules/@zxing/library/esm/core/common/ECIEncoderSet.js","./node_modules/@zxing/library/esm/core/datamatrix/encoder/MinimalEncoder.js","./node_modules/@zxing/library/esm/core/common/MinimalECIInput.js","./node_modules/@zxing/library/esm/core/datamatrix/DataMatrixWriter.js","./node_modules/@zxing/library/esm/core/aztec/encoder/AztecCode.js","./node_modules/@zxing/library/esm/core/util/Collections.js","./node_modules/@zxing/library/esm/core/aztec/encoder/Token.js","./node_modules/@zxing/library/esm/core/aztec/encoder/SimpleToken.js","./node_modules/@zxing/library/esm/core/aztec/encoder/BinaryShiftToken.js","./node_modules/@zxing/library/esm/core/aztec/encoder/TokenHelpers.js","./node_modules/@zxing/library/esm/core/aztec/encoder/EncoderConstants.js","./node_modules/@zxing/library/esm/core/aztec/encoder/LatchTable.js","./node_modules/@zxing/library/esm/core/aztec/encoder/ShiftTable.js","./node_modules/@zxing/library/esm/core/aztec/encoder/State.js","./node_modules/@zxing/library/esm/core/aztec/encoder/CharMap.js","./node_modules/@zxing/library/esm/core/aztec/encoder/HighLevelEncoder.js","./node_modules/@zxing/library/esm/core/aztec/encoder/Encoder.js","./node_modules/@zxing/library/esm/core/aztec/AztecWriter.js","./node_modules/@zxing/browser/esm/common/HTMLCanvasElementLuminanceSource.js","./node_modules/@zxing/browser/esm/common/navigator-utils.js","./node_modules/@zxing/browser/esm/readers/BrowserCodeReader.js","./node_modules/@zxing/browser/esm/readers/BrowserAztecCodeReader.js","./node_modules/@zxing/browser/esm/readers/BrowserMultiFormatOneDReader.js","./node_modules/@zxing/browser/esm/readers/BrowserDatamatrixCodeReader.js","./node_modules/@zxing/browser/esm/readers/BrowserMultiFormatReader.js","./node_modules/@zxing/browser/esm/readers/BrowserPDF417Reader.js","./node_modules/@zxing/browser/esm/readers/BrowserQRCodeReader.js","./node_modules/@zxing/browser/esm/writers/BrowserCodeSvgWriter.js","./node_modules/@zxing/browser/esm/writers/BrowserQRCodeSvgWriter.js","./node_modules/@zxing/ngx-scanner/fesm2022/zxing-ngx-scanner.mjs","./src/app/filazero/qr-code-scan/qr-code-scan.component.html","./src/app/filazero/qr-code-scan/qr-code-scan.component.ts","./src/app/shared/models/terminal.model.ts","./src/app/shared/utils/colors.ts","./src/app/components/priority-modal/priority-modal.component.ts","./src/app/components/priority-modal/priority-modal.component.html","./node_modules/uuid/dist/esm-browser/native.js","./node_modules/uuid/dist/esm-browser/rng.js","./node_modules/uuid/dist/esm-browser/stringify.js","./node_modules/uuid/dist/esm-browser/v4.js","./src/app/components/collapsable-option-button/collapsable-option-button.component.html","./src/app/components/collapsable-option-button/collapsable-option-button.component.ts","./src/app/components/service-list-wrapper/service-list-wrapper.component.html","./src/app/components/service-list-wrapper/service-list-wrapper.component.ts","./src/app/components/embed-chat/embed-chat.component.ts","./src/app/modules/custom-fields/validator/custom-field-validator.ts","./src/app/modules/custom-fields/field-control.service.ts","./node_modules/ngx-mask/fesm2022/ngx-mask.mjs","./src/app/modules/custom-fields/components/custom-fields.component.html","./src/app/modules/custom-fields/components/custom-fields.component.ts","./src/app/modules/custom-fields/components/custom-fields-form.component.html","./src/app/modules/custom-fields/components/custom-fields-form.component.ts","./src/app/filazero/schedule/schedule.component.html","./src/app/filazero/schedule/schedule.component.ts","./src/app/components/terms-modal/terms-modal.component.html","./src/app/components/terms-modal/terms-modal.component.ts","./src/app/components/terms-noel-modal/terms-noel-modal.component.ts","./src/app/components/terms-noel-modal/terms-noel-modal.component.html","./src/app/components/privacy-policy-modal/privacy-policy-modal.component.html","./src/app/components/privacy-policy-modal/privacy-policy-modal.component.ts","./src/app/filazero/start/start.component.html","./src/app/filazero/start/start.component.ts","./src/app/filazero/ticket/ticket.component.ts","./src/app/filazero/ticket/ticket.component.html","./src/app/components/vidoconference-alert/vidoconference-alert.component.ts","./src/app/components/vidoconference-alert/vidoconference-alert.component.html","./src/app/components/track-information/track-information.component.ts","./src/app/components/track-information/track-information.component.html","./src/app/components/ticket-details/ticket-details.component.html","./src/app/components/ticket-details/ticket-details.component.ts","./node_modules/@angular/core/fesm2022/rxjs-interop.mjs","./node_modules/rxjs/dist/esm/internal/util/argsOrArgArray.js","./node_modules/rxjs/dist/esm/internal/observable/race.js","./node_modules/rxjs/dist/esm/internal/observable/never.js","./node_modules/rxjs/dist/esm/internal/observable/zip.js","./node_modules/@ng-bootstrap/ng-bootstrap/fesm2022/ng-bootstrap.mjs","./node_modules/rxjs/dist/esm/internal/operators/endWith.js","./src/app/shared/pipe/safe-html.pipe.ts","./src/app/filazero/track/track.component.html","./src/app/filazero/track/track.component.ts","./src/app/filazero/filazero.routing.ts","./src/app/filazero/filazero.module.ts","./node_modules/@angular/material/fesm2022/tooltip.mjs","./src/app/material/material.module.ts","./src/app/modules/custom-fields/models/field-base.model.ts","./src/app/modules/custom-fields/models/field-input.model.ts","./src/app/modules/custom-fields/custom-field.service.ts","./src/app/modules/custom-fields/custom-fields.module.ts","./src/app/shared/pages/not-found/not-found.component.ts","./src/app/shared/pages/not-found/not-found.component.html","./src/app/shared/pages/pages.module.ts","./src/app/shared/pipe/date-format.pipe.ts","./src/app/shared/pipe/pipe.module.ts","./src/app/shared/pipe/relative-time-format.pipe.ts","./node_modules/rxjs/dist/esm/internal/observable/interval.js","./src/app/shared/pipe/timezone-format.pipe.ts","./src/app/shared/services/feedback.service.ts","./src/app/shared/services/locale.service.ts","./node_modules/@angular/fire/fesm2022/angular-fire-compat-messaging.mjs","./src/app/shared/services/messaging.service.ts","./src/app/shared/services/pusher.service.ts","./src/app/shared/services/notification.service.ts","./node_modules/@angular/fire/node_modules/@firebase/database/dist/index.esm2017.js","./node_modules/@angular/fire/node_modules/@firebase/database-compat/dist/index.esm2017.js","./node_modules/@angular/fire/fesm2022/angular-fire-compat-database.mjs","./node_modules/rxjs/dist/esm/internal/operators/skipWhile.js","./src/app/shared/services/presence.service.ts","./src/app/shared/services/remote-config.service.ts","./src/app/shared/services/service-locator.service.ts","./src/app/shared/services/storage.service.ts","./src/app/shared/services/terminal.service.ts","./src/app/shared/services/ticket.service.ts","./src/app/shared/utils/position-util.service.ts","./src/environments/environment.dev.ts","./src/app/modules/display/display.service.ts","./src/app/modules/display/components/queue-tracker/queue-tracker.component.ts","./src/app/modules/display/components/queue-tracker/queue-tracker.component.html","./src/app/modules/display/components/queue-tracker-list/queue-tracker-list.component.ts","./src/app/modules/display/components/queue-tracker-list/queue-tracker-list.component.html","./src/app/modules/display/components/store-scanner/store-scanner.component.ts","./src/app/modules/display/components/store-scanner/store-scanner.component.html","./src/app/display/display.component.html","./src/app/display/display.component.ts","./src/app/components/ticket-list-tile/ticket-list-tile.component.html","./src/app/components/ticket-list-tile/ticket-list-tile.component.ts","./src/app/ticket-list/ticket-list.component.html","./src/app/ticket-list/ticket-list.component.ts","./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.component.html","./node_modules/@angular/animations/fesm2022/browser.mjs","./node_modules/@angular/platform-browser/fesm2022/animations.mjs","./node_modules/@firebase/util/dist/index.esm2017.js","./node_modules/@firebase/component/dist/esm/index.esm2017.js","./node_modules/@firebase/logger/dist/esm/index.esm2017.js","./node_modules/@firebase/app/dist/esm/index.esm2017.js","./node_modules/@firebase/app-compat/dist/esm/index.esm2017.js","./node_modules/firebase/compat/app/dist/esm/index.esm.js","./node_modules/@firebase/auth/dist/esm2017/index-e3d5d3f4.js","./node_modules/@firebase/auth/dist/esm2017/internal.js","./node_modules/@firebase/auth-compat/dist/index.esm2017.js","./node_modules/@firebase/database/dist/index.esm2017.js","./node_modules/@firebase/database-compat/dist/index.esm2017.js","./node_modules/rxjs/dist/esm/internal/operators/distinct.js","./node_modules/rxjs/dist/esm/internal/operators/groupBy.js","./node_modules/@angular/fire/fesm2022/angular-fire-app.mjs","./node_modules/rxfire/auth/index.esm.js","./node_modules/@angular/fire/fesm2022/angular-fire-auth.mjs","./node_modules/@angular/fire/fesm2022/angular-fire-analytics.mjs","./node_modules/@angular/fire/fesm2022/angular-fire-compat-analytics.mjs","./src/app/modules/display/display.module.ts","./src/app/app.module.ts","./src/main.ts","./node_modules/@angular/fire/node_modules/@firebase/auth/dist/esm2017/index-d0d29856.js","./node_modules/@angular/fire/node_modules/@firebase/util/dist/index.esm2017.js","./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","./node_modules/@popperjs/core/lib/utils/orderModifiers.js","./node_modules/@popperjs/core/lib/utils/debounce.js","./node_modules/@popperjs/core/lib/createPopper.js","./node_modules/@popperjs/core/lib/utils/mergeByName.js","./node_modules/@popperjs/core/lib/dom-utils/contains.js","./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","./node_modules/@popperjs/core/lib/enums.js","./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","./node_modules/@popperjs/core/lib/modifiers/arrow.js","./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","./node_modules/@popperjs/core/lib/modifiers/flip.js","./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","./node_modules/@popperjs/core/lib/modifiers/offset.js","./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","./node_modules/@popperjs/core/lib/utils/getAltAxis.js","./node_modules/@popperjs/core/lib/popper-lite.js","./node_modules/@popperjs/core/lib/utils/computeOffsets.js","./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","./node_modules/@popperjs/core/lib/utils/detectOverflow.js","./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","./node_modules/@popperjs/core/lib/utils/getVariation.js","./node_modules/@popperjs/core/lib/utils/math.js","./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","./node_modules/@popperjs/core/lib/utils/userAgent.js","./node_modules/@popperjs/core/lib/utils/within.js","./node_modules/dijkstrajs/dijkstra.js","./node_modules/encode-utf8/index.js","./node_modules/file-saver/dist/FileSaver.min.js","./node_modules/lodash/lodash.js","./node_modules/moment-timezone/index.js","./node_modules/moment-timezone/moment-timezone.js","./node_modules/moment/locale/af.js","./node_modules/moment/locale/ar-dz.js","./node_modules/moment/locale/ar-kw.js","./node_modules/moment/locale/ar-ly.js","./node_modules/moment/locale/ar-ma.js","./node_modules/moment/locale/ar-ps.js","./node_modules/moment/locale/ar-sa.js","./node_modules/moment/locale/ar-tn.js","./node_modules/moment/locale/ar.js","./node_modules/moment/locale/az.js","./node_modules/moment/locale/be.js","./node_modules/moment/locale/bg.js","./node_modules/moment/locale/bm.js","./node_modules/moment/locale/bn-bd.js","./node_modules/moment/locale/bn.js","./node_modules/moment/locale/bo.js","./node_modules/moment/locale/br.js","./node_modules/moment/locale/bs.js","./node_modules/moment/locale/ca.js","./node_modules/moment/locale/cs.js","./node_modules/moment/locale/cv.js","./node_modules/moment/locale/cy.js","./node_modules/moment/locale/da.js","./node_modules/moment/locale/de-at.js","./node_modules/moment/locale/de-ch.js","./node_modules/moment/locale/de.js","./node_modules/moment/locale/dv.js","./node_modules/moment/locale/el.js","./node_modules/moment/locale/en-au.js","./node_modules/moment/locale/en-ca.js","./node_modules/moment/locale/en-gb.js","./node_modules/moment/locale/en-ie.js","./node_modules/moment/locale/en-il.js","./node_modules/moment/locale/en-in.js","./node_modules/moment/locale/en-nz.js","./node_modules/moment/locale/en-sg.js","./node_modules/moment/locale/eo.js","./node_modules/moment/locale/es-do.js","./node_modules/moment/locale/es-mx.js","./node_modules/moment/locale/es-us.js","./node_modules/moment/locale/es.js","./node_modules/moment/locale/et.js","./node_modules/moment/locale/eu.js","./node_modules/moment/locale/fa.js","./node_modules/moment/locale/fi.js","./node_modules/moment/locale/fil.js","./node_modules/moment/locale/fo.js","./node_modules/moment/locale/fr-ca.js","./node_modules/moment/locale/fr-ch.js","./node_modules/moment/locale/fr.js","./node_modules/moment/locale/fy.js","./node_modules/moment/locale/ga.js","./node_modules/moment/locale/gd.js","./node_modules/moment/locale/gl.js","./node_modules/moment/locale/gom-deva.js","./node_modules/moment/locale/gom-latn.js","./node_modules/moment/locale/gu.js","./node_modules/moment/locale/he.js","./node_modules/moment/locale/hi.js","./node_modules/moment/locale/hr.js","./node_modules/moment/locale/hu.js","./node_modules/moment/locale/hy-am.js","./node_modules/moment/locale/id.js","./node_modules/moment/locale/is.js","./node_modules/moment/locale/it-ch.js","./node_modules/moment/locale/it.js","./node_modules/moment/locale/ja.js","./node_modules/moment/locale/jv.js","./node_modules/moment/locale/ka.js","./node_modules/moment/locale/kk.js","./node_modules/moment/locale/km.js","./node_modules/moment/locale/kn.js","./node_modules/moment/locale/ko.js","./node_modules/moment/locale/ku-kmr.js","./node_modules/moment/locale/ku.js","./node_modules/moment/locale/ky.js","./node_modules/moment/locale/lb.js","./node_modules/moment/locale/lo.js","./node_modules/moment/locale/lt.js","./node_modules/moment/locale/lv.js","./node_modules/moment/locale/me.js","./node_modules/moment/locale/mi.js","./node_modules/moment/locale/mk.js","./node_modules/moment/locale/ml.js","./node_modules/moment/locale/mn.js","./node_modules/moment/locale/mr.js","./node_modules/moment/locale/ms-my.js","./node_modules/moment/locale/ms.js","./node_modules/moment/locale/mt.js","./node_modules/moment/locale/my.js","./node_modules/moment/locale/nb.js","./node_modules/moment/locale/ne.js","./node_modules/moment/locale/nl-be.js","./node_modules/moment/locale/nl.js","./node_modules/moment/locale/nn.js","./node_modules/moment/locale/oc-lnc.js","./node_modules/moment/locale/pa-in.js","./node_modules/moment/locale/pl.js","./node_modules/moment/locale/pt-br.js","./node_modules/moment/locale/pt.js","./node_modules/moment/locale/ro.js","./node_modules/moment/locale/ru.js","./node_modules/moment/locale/sd.js","./node_modules/moment/locale/se.js","./node_modules/moment/locale/si.js","./node_modules/moment/locale/sk.js","./node_modules/moment/locale/sl.js","./node_modules/moment/locale/sq.js","./node_modules/moment/locale/sr-cyrl.js","./node_modules/moment/locale/sr.js","./node_modules/moment/locale/ss.js","./node_modules/moment/locale/sv.js","./node_modules/moment/locale/sw.js","./node_modules/moment/locale/ta.js","./node_modules/moment/locale/te.js","./node_modules/moment/locale/tet.js","./node_modules/moment/locale/tg.js","./node_modules/moment/locale/th.js","./node_modules/moment/locale/tk.js","./node_modules/moment/locale/tl-ph.js","./node_modules/moment/locale/tlh.js","./node_modules/moment/locale/tr.js","./node_modules/moment/locale/tzl.js","./node_modules/moment/locale/tzm-latn.js","./node_modules/moment/locale/tzm.js","./node_modules/moment/locale/ug-cn.js","./node_modules/moment/locale/uk.js","./node_modules/moment/locale/ur.js","./node_modules/moment/locale/uz-latn.js","./node_modules/moment/locale/uz.js","./node_modules/moment/locale/vi.js","./node_modules/moment/locale/x-pseudo.js","./node_modules/moment/locale/yo.js","./node_modules/moment/locale/zh-cn.js","./node_modules/moment/locale/zh-hk.js","./node_modules/moment/locale/zh-mo.js","./node_modules/moment/locale/zh-tw.js","./node_modules/moment/moment.js","./node_modules/ngx-lightbox/lightbox-event.service.js","./node_modules/ngx-filesaver/fesm2020/ngx-filesaver.mjs","./node_modules/ngx-lightbox/lightbox.component.js","./node_modules/ngx-lightbox/lightbox-config.service.js","./node_modules/ngx-lightbox/lightbox-overlay.component.js","./node_modules/ngx-lightbox/lightbox.service.js","./node_modules/ngx-lightbox/lightbox.module.js","./node_modules/pusher-js/dist/web/pusher.js","./node_modules/qrcode/lib/browser.js","./node_modules/qrcode/lib/can-promise.js","./node_modules/qrcode/lib/core/alignment-pattern.js","./node_modules/qrcode/lib/core/alphanumeric-data.js","./node_modules/qrcode/lib/core/bit-buffer.js","./node_modules/qrcode/lib/core/bit-matrix.js","./node_modules/qrcode/lib/core/byte-data.js","./node_modules/qrcode/lib/core/error-correction-code.js","./node_modules/qrcode/lib/core/error-correction-level.js","./node_modules/qrcode/lib/core/finder-pattern.js","./node_modules/qrcode/lib/core/format-info.js","./node_modules/qrcode/lib/core/galois-field.js","./node_modules/qrcode/lib/core/kanji-data.js","./node_modules/qrcode/lib/core/mask-pattern.js","./node_modules/qrcode/lib/core/mode.js","./node_modules/qrcode/lib/core/numeric-data.js","./node_modules/qrcode/lib/core/polynomial.js","./node_modules/qrcode/lib/core/qrcode.js","./node_modules/qrcode/lib/core/reed-solomon-encoder.js","./node_modules/qrcode/lib/core/regex.js","./node_modules/qrcode/lib/core/segments.js","./node_modules/qrcode/lib/core/utils.js","./node_modules/qrcode/lib/core/version-check.js","./node_modules/qrcode/lib/core/version.js","./node_modules/qrcode/lib/renderer/canvas.js","./node_modules/qrcode/lib/renderer/svg-tag.js","./node_modules/qrcode/lib/renderer/utils.js","./node_modules/rxjs/dist/esm/internal/BehaviorSubject.js","./node_modules/rxjs/dist/esm/internal/Observable.js","./node_modules/rxjs/dist/esm/internal/util/ObjectUnsubscribedError.js","./node_modules/rxjs/dist/esm/internal/Subject.js","./node_modules/rxjs/dist/esm/internal/NotificationFactories.js","./node_modules/rxjs/dist/esm/internal/Subscriber.js","./node_modules/rxjs/dist/esm/internal/util/UnsubscriptionError.js","./node_modules/rxjs/dist/esm/internal/Subscription.js","./node_modules/rxjs/dist/esm/internal/config.js","./node_modules/rxjs/dist/esm/internal/observable/ConnectableObservable.js","./node_modules/rxjs/dist/esm/internal/observable/combineLatest.js","./node_modules/rxjs/dist/esm/internal/observable/concat.js","./node_modules/rxjs/dist/esm/internal/operators/concatAll.js","./node_modules/rxjs/dist/esm/internal/observable/defer.js","./node_modules/rxjs/dist/esm/internal/observable/empty.js","./node_modules/rxjs/dist/esm/internal/observable/forkJoin.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleAsyncIterable.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduled.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleObservable.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleArray.js","./node_modules/rxjs/dist/esm/internal/scheduled/schedulePromise.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleIterable.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleReadableStreamLike.js","./node_modules/rxjs/dist/esm/internal/observable/from.js","./node_modules/rxjs/dist/esm/internal/observable/fromEvent.js","./node_modules/rxjs/dist/esm/internal/observable/innerFrom.js","./node_modules/rxjs/dist/esm/internal/observable/merge.js","./node_modules/rxjs/dist/esm/internal/observable/of.js","./node_modules/rxjs/dist/esm/internal/observable/throwError.js","./node_modules/rxjs/dist/esm/internal/observable/timer.js","./node_modules/rxjs/dist/esm/internal/util/isDate.js","./node_modules/rxjs/dist/esm/internal/operators/OperatorSubscriber.js","./node_modules/rxjs/dist/esm/internal/operators/auditTime.js","./node_modules/rxjs/dist/esm/internal/operators/audit.js","./node_modules/rxjs/dist/esm/internal/operators/catchError.js","./node_modules/rxjs/dist/esm/internal/operators/concatMap.js","./node_modules/rxjs/dist/esm/internal/operators/debounceTime.js","./node_modules/rxjs/dist/esm/internal/operators/defaultIfEmpty.js","./node_modules/rxjs/dist/esm/internal/operators/delayWhen.js","./node_modules/rxjs/dist/esm/internal/operators/ignoreElements.js","./node_modules/rxjs/dist/esm/internal/operators/delay.js","./node_modules/rxjs/dist/esm/internal/operators/distinctUntilChanged.js","./node_modules/rxjs/dist/esm/internal/operators/filter.js","./node_modules/rxjs/dist/esm/internal/operators/finalize.js","./node_modules/rxjs/dist/esm/internal/operators/first.js","./node_modules/rxjs/dist/esm/internal/operators/map.js","./node_modules/rxjs/dist/esm/internal/operators/mapTo.js","./node_modules/rxjs/dist/esm/internal/operators/mergeAll.js","./node_modules/rxjs/dist/esm/internal/operators/mergeMap.js","./node_modules/rxjs/dist/esm/internal/operators/mergeInternals.js","./node_modules/rxjs/dist/esm/internal/operators/observeOn.js","./node_modules/rxjs/dist/esm/internal/operators/pairwise.js","./node_modules/rxjs/dist/esm/internal/operators/refCount.js","./node_modules/rxjs/dist/esm/internal/operators/scan.js","./node_modules/rxjs/dist/esm/internal/operators/scanInternals.js","./node_modules/rxjs/dist/esm/internal/operators/share.js","./node_modules/rxjs/dist/esm/internal/ReplaySubject.js","./node_modules/rxjs/dist/esm/internal/operators/shareReplay.js","./node_modules/rxjs/dist/esm/internal/operators/skip.js","./node_modules/rxjs/dist/esm/internal/operators/startWith.js","./node_modules/rxjs/dist/esm/internal/operators/subscribeOn.js","./node_modules/rxjs/dist/esm/internal/operators/switchMap.js","./node_modules/rxjs/dist/esm/internal/operators/switchMapTo.js","./node_modules/rxjs/dist/esm/internal/operators/take.js","./node_modules/rxjs/dist/esm/internal/operators/takeUntil.js","./node_modules/rxjs/dist/esm/internal/operators/tap.js","./node_modules/rxjs/dist/esm/internal/operators/throwIfEmpty.js","./node_modules/rxjs/dist/esm/internal/operators/withLatestFrom.js","./node_modules/rxjs/dist/esm/internal/scheduler/Action.js","./node_modules/rxjs/dist/esm/internal/scheduler/intervalProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js","./node_modules/rxjs/dist/esm/internal/Scheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsyncScheduler.js","./node_modules/rxjs/dist/esm/internal/util/Immediate.js","./node_modules/rxjs/dist/esm/internal/scheduler/immediateProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsapAction.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsapScheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/asap.js","./node_modules/rxjs/dist/esm/internal/scheduler/async.js","./node_modules/rxjs/dist/esm/internal/scheduler/dateTimestampProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/timeoutProvider.js","./node_modules/rxjs/dist/esm/internal/symbol/iterator.js","./node_modules/rxjs/dist/esm/internal/symbol/observable.js","./node_modules/rxjs/dist/esm/internal/util/EmptyError.js","./node_modules/rxjs/dist/esm/internal/util/args.js","./node_modules/rxjs/dist/esm/internal/util/argsArgArrayOrObject.js","./node_modules/rxjs/dist/esm/internal/util/arrRemove.js","./node_modules/rxjs/dist/esm/internal/util/createErrorClass.js","./node_modules/rxjs/dist/esm/internal/util/createObject.js","./node_modules/rxjs/dist/esm/internal/util/errorContext.js","./node_modules/rxjs/dist/esm/internal/util/executeSchedule.js","./node_modules/rxjs/dist/esm/internal/util/identity.js","./node_modules/rxjs/dist/esm/internal/util/isArrayLike.js","./node_modules/rxjs/dist/esm/internal/util/isAsyncIterable.js","./node_modules/rxjs/dist/esm/internal/util/isFunction.js","./node_modules/rxjs/dist/esm/internal/util/isInteropObservable.js","./node_modules/rxjs/dist/esm/internal/util/isIterable.js","./node_modules/rxjs/dist/esm/internal/util/isObservable.js","./node_modules/rxjs/dist/esm/internal/util/isPromise.js","./node_modules/rxjs/dist/esm/internal/util/isReadableStreamLike.js","./node_modules/rxjs/dist/esm/internal/util/isScheduler.js","./node_modules/rxjs/dist/esm/internal/util/lift.js","./node_modules/rxjs/dist/esm/internal/util/mapOneOrManyArgs.js","./node_modules/rxjs/dist/esm/internal/util/noop.js","./node_modules/rxjs/dist/esm/internal/util/pipe.js","./node_modules/rxjs/dist/esm/internal/util/reportUnhandledError.js","./node_modules/rxjs/dist/esm/internal/util/throwUnobservableError.js","./node_modules/moment/locale/ sync ^\\.\\/.*$","./node_modules/@angular/animations/fesm2022/animations.mjs","./node_modules/@angular/cdk/fesm2022/a11y.mjs","./node_modules/@angular/cdk/fesm2022/bidi.mjs","./node_modules/@angular/cdk/fesm2022/coercion.mjs","./node_modules/@angular/cdk/fesm2022/collections.mjs","./node_modules/@angular/cdk/fesm2022/keycodes.mjs","./node_modules/@angular/cdk/fesm2022/layout.mjs","./node_modules/@angular/cdk/fesm2022/observers.mjs","./node_modules/@angular/cdk/fesm2022/overlay.mjs","./node_modules/rxjs/dist/esm/internal/operators/takeWhile.js","./node_modules/@angular/cdk/fesm2022/platform.mjs","./node_modules/@angular/cdk/fesm2022/portal.mjs","./node_modules/rxjs/dist/esm/internal/scheduler/animationFrameProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/AnimationFrameAction.js","./node_modules/rxjs/dist/esm/internal/scheduler/AnimationFrameScheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/animationFrame.js","./node_modules/@angular/cdk/fesm2022/scrolling.mjs","./node_modules/@angular/common/fesm2022/common.mjs","./node_modules/@angular/common/fesm2022/http.mjs","./node_modules/@angular/core/fesm2022/primitives/signals.mjs","./node_modules/@angular/core/fesm2022/core.mjs","./node_modules/@angular/fire/fesm2022/angular-fire-compat-auth.mjs","./node_modules/@angular/fire/fesm2022/angular-fire-compat.mjs","./node_modules/rxjs/dist/esm/internal/scheduler/QueueAction.js","./node_modules/rxjs/dist/esm/internal/scheduler/QueueScheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/queue.js","./node_modules/@angular/fire/fesm2022/angular-fire.mjs","./node_modules/@angular/fire/node_modules/@firebase/analytics/dist/esm/index.esm2017.js","./node_modules/@angular/fire/node_modules/@firebase/app-compat/dist/esm/index.esm2017.js","./node_modules/@angular/fire/node_modules/@firebase/app/dist/esm/index.esm2017.js","./node_modules/@angular/fire/node_modules/@firebase/component/dist/esm/index.esm2017.js","./node_modules/@angular/fire/node_modules/@firebase/installations/dist/esm/index.esm2017.js","./node_modules/@angular/fire/node_modules/@firebase/logger/dist/esm/index.esm2017.js","./node_modules/@angular/fire/node_modules/@firebase/messaging/dist/esm/index.esm2017.js","./node_modules/@angular/fire/node_modules/firebase/app/dist/esm/index.esm.js","./node_modules/@angular/fire/node_modules/firebase/compat/app/dist/esm/index.esm.js","./node_modules/@angular/fire/node_modules/@firebase/auth/dist/esm2017/internal.js","./node_modules/@angular/fire/node_modules/@firebase/auth-compat/dist/index.esm2017.js","./node_modules/@angular/forms/fesm2022/forms.mjs","./node_modules/@angular/google-maps/fesm2022/google-maps.mjs","./node_modules/@angular/material/fesm2022/badge.mjs","./node_modules/@angular/material/fesm2022/button.mjs","./node_modules/@angular/material/fesm2022/card.mjs","./node_modules/@angular/material/fesm2022/checkbox.mjs","./node_modules/@angular/cdk/fesm2022/cdk.mjs","./node_modules/@angular/material/fesm2022/core.mjs","./node_modules/@angular/cdk/fesm2022/dialog.mjs","./node_modules/@angular/material/fesm2022/dialog.mjs","./node_modules/@angular/cdk/fesm2022/observers/private.mjs","./node_modules/@angular/material/fesm2022/form-field.mjs","./node_modules/@angular/material/fesm2022/icon.mjs","./node_modules/@angular/cdk/fesm2022/text-field.mjs","./node_modules/@angular/material/fesm2022/input.mjs","./node_modules/@angular/material/fesm2022/menu.mjs","./node_modules/@angular/material/fesm2022/progress-spinner.mjs","./node_modules/@angular/material/fesm2022/select.mjs","./node_modules/@angular/material/fesm2022/snack-bar.mjs","./node_modules/@angular/material/fesm2022/toolbar.mjs","./node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs","./node_modules/rxjs/dist/esm/internal/operators/takeLast.js","./node_modules/@angular/router/fesm2022/router.mjs","./node_modules/rxjs/dist/esm/internal/operators/last.js","./node_modules/@ngx-translate/core/dist/fesm2022/ngx-translate-core.mjs","./node_modules/@ngx-translate/http-loader/dist/fesm2022/ngx-translate-http-loader.mjs","./node_modules/angularx-qrcode/fesm2022/angularx-qrcode.mjs","./node_modules/hashids/esm/util.js","./node_modules/hashids/esm/hashids.js","./node_modules/idb/build/wrap-idb-value.js","./node_modules/idb/build/index.js","./node_modules/ng-recaptcha/fesm2022/ng-recaptcha.mjs","./node_modules/ngx-device-detector/fesm2022/ngx-device-detector.mjs","./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","./node_modules/tslib/tslib.es6.mjs"],"sourcesContent":["\n\n\n
\n \n
\n
\n\n\n
\n \n
\n
\n
\n\n
\n

\n {{ 'boticario.pages.start.wellcome' | translate }}\n

\n\n

\n {{ terminal.location.name }}\n

\n
\n\n
\n
\n \n \n \n \n {{ 'boticario.actions.getIn' | translate }}\n \n \n arrow_right_alt\n \n \n \n
\n
\n
\n\n\n
\n

A url acessada não conrresponde a nenhuma fila.

\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Terminal, TerminalPayload } from 'src/app/shared/models';\nimport { StorageService, TerminalService, TicketService } from 'src/app/shared/services';\nimport { finalize } from 'rxjs/operators';\n\n@Component({\n selector: 'app-boticario-start',\n templateUrl: './boticario-start.component.html',\n styleUrls: ['./boticario-start.component.scss']\n})\nexport class BoticarioStartComponent implements OnInit {\n terminal: Terminal;\n payload: TerminalPayload;\n isLoading = true;\n\n constructor(\n private route: ActivatedRoute,\n private terminalService: TerminalService,\n private router: Router,\n private storageService: StorageService \n ) { }\n\n ngOnInit() {\n this.payload = {} as TerminalPayload;\n this.route.paramMap\n .subscribe(params => {\n const accessKey = params.get('accessKey');\n\n localStorage.setItem('terminalKey', accessKey);\n\n if (accessKey !== undefined) {\n this.terminalService.getTerminal(accessKey)\n .pipe(finalize(() => this.isLoading = false))\n .subscribe(terminal => {\n if (!(terminal.messages && terminal.messages[0].type === 'ERROR')) {\n this.terminal = terminal;\n this.storageService.addTerminal(terminal);\n this.terminalService.initPayload(terminal.provider.id, terminal.location.id, accessKey, terminal.id);\n this.payload = this.terminalService.getCurrentTerminalPayload();\n }\n });\n }\n });\n\n this.loadGoogleAnalytics();\n this.gtm();\n }\n\n next(): void {\n this.router.navigate(['/boticario/schedule']);\n }\n\n loadGoogleAnalytics(): void {\n const gaScript = document.createElement('script');\n gaScript.setAttribute('async', 'true');\n gaScript.setAttribute('id', 'boticario_gtag');\n gaScript.setAttribute('src', 'https://www.googletagmanager.com/gtag/js?id=UA-173624925-2');\n\n const gaScript2 = document.createElement('script');\n gaScript2.innerText = `window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag(\\'js\\', new Date());gtag(\\'config\\', \\'UA-173624925-2\\');`;\n\n document.documentElement.firstChild.appendChild(gaScript);\n document.documentElement.firstChild.appendChild(gaScript2);\n }\n\n gtm(): void {\n const gtmScript = document.createElement('script');\n gtmScript.innerText = `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-PL9TCGC');`;\n\n document.documentElement.firstChild.appendChild(gtmScript);\n\n const noScript = document.createElement('noscript');\n noScript.innerHTML = '';\n\n document.body.appendChild(noScript);\n }\n\n startEvent() {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Inicial_Entrar'\n });\n }\n\n logoEvent() {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Inicial_Logo'\n });\n }\n\n digitalQueueEvent() {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Inicial_Fila_Digital'\n });\n }\n\n nameStoreEvent() {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Inicial_Nome_Loja'\n });\n }\n}\n","\n\n\n\n\n
\n
\n

{{ 'boticario.pages.schedule.howDoYouPreferToBeServed' | translate }}

\n\n
\n
\n
\n

{{ 'boticario.pages.schedule.form.service.title' | translate }}

\n \n {{ 'boticario.pages.schedule.form.service.label' | translate }}\n \n \n {{ service.name }}\n \n \n \n
\n
\n \n \n {{ 'boticario.pages.schedule.form.name.label' | translate }}\n \n \n
\n
\n
\n \n \n accessible\n \n {{ 'boticario.pages.schedule.form.preferential' | translate }}\n \n report\n \n \n
\n
\n
\n
\n \n new_releases\n \n
\n
\n {{ 'boticario.pages.schedule.warningTerms.firstSentence' | translate }}\n {{ 'boticario.pages.schedule.warningTerms.termsOfUse' | translate }}\n {{ 'boticario.pages.schedule.warningTerms.and' | translate }}\n {{ 'boticario.pages.schedule.warningTerms.privacyPolicy' | translate }}.\n\n
\n
\n
\n
\n
\n \n \n \n \n {{ 'boticario.actions.confirm' | translate }}\n \n \n arrow_right_alt\n \n \n \n
\n
\n
\n
\n\n
\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { Terminal, TerminalPayload, Ticket } from 'src/app/shared/models';\nimport { PusherService, StorageService, TerminalService, TicketService } from 'src/app/shared/services';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { finalize } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { DeviceDetectorService } from 'ngx-device-detector';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ReCaptchaV3Service } from 'ng-recaptcha';\n\n@Component({\n selector: 'app-boticario-schedule',\n templateUrl: './boticario-schedule.component.html',\n styleUrls: ['./boticario-schedule.component.scss']\n})\n\nexport class BoticarioScheduleComponent implements OnInit {\n terminal: Terminal;\n payload: TerminalPayload;\n isLoading = true;\n isLoadingEmit = false;\n completed = false;\n ticketId: number;\n isNameFocus = false;\n isPhoneFocus = false;\n isPriority = false;\n\n constructor(\n private terminalService: TerminalService,\n private pusherService: PusherService,\n private ticketService: TicketService,\n private snackBar: MatSnackBar,\n private router: Router,\n private deviceService: DeviceDetectorService,\n private translateService: TranslateService,\n private storageService: StorageService,\n private reCaptchaV3Service: ReCaptchaV3Service\n ) { }\n\n ngOnInit() {\n this.terminal = this.storageService.currentTerminal;\n this.payload = this.terminalService.getCurrentTerminalPayload();\n this.isLoading = false;\n }\n\n get isValid() {\n return this.payload.serviceId !== undefined && this.payload.customer.name !== undefined;\n }\n\n selectService(serviceId: number) {\n this.payload.serviceId = serviceId;\n const service = this.terminal.services.find((s) => s.id === serviceId);\n this.payload.terminalSchedule.sessions = service.sessions;\n this.terminalService.setCurrentTerminalPayload(this.payload);\n\n this.reCaptchaV3Service\n .execute('schedule')\n .subscribe((token) => this.resolvedCaptcha(token));\n\n if (service.name === 'QUERO COMPRAR') {\n this.selectBuyEvent();\n } else {\n this.selectRemovalEvent();\n }\n }\n\n private selectServicePreference() {\n this.isPriority\n ? this.payload.priority = 1\n : this.payload.priority = 0;\n }\n\n get currentLang(): string {\n return this.translateService.currentLang;\n }\n\n get hasServices() {\n return this.terminal.services &&\n this.terminal.services.length > 0 &&\n this.terminalService.providerAvailableServices(this.terminal.services, this.terminal.showOptionsBasedOnSessions, new Date()).length > 0;\n }\n\n get hasSessions() {\n if (this.hasServices) {\n return this.terminal.services.some((service) => service.sessions && service.sessions.length > 0);\n }\n\n return false;\n }\n\n booking() {\n this.selectServicePreference();\n this.terminalService.setCurrentTerminalPayload(this.payload);\n this.isLoadingEmit = true;\n this.terminalService.booking(this.payload)\n .pipe(finalize(() => {\n setTimeout(() => {\n if (!this.completed) {\n this.getTicket();\n }\n }, 5000);\n }))\n .subscribe((result) => {\n if (result.responseData) {\n this.subscribeBooking(result.responseData.aggregatorId);\n this.ticketId = result.responseData.tickets[0];\n } else {\n this.isLoadingEmit = false;\n this.snackBar.open(result.messages[0].description, 'Erro', { duration: 3000 });\n this.completed = true;\n }\n }, (error) => {\n this.isLoadingEmit = false;\n this.snackBar.open('Não foi possível emitir o bilhete', 'Erro', { duration: 3000 });\n this.completed = true;\n });\n }\n\n subscribeBooking(aggregatorId: string) {\n const scheduleChannel = this.pusherService.pusher.subscribe('schedule-' + aggregatorId);\n\n scheduleChannel.bind('ScheduleAuthorized', data => {\n this.isLoadingEmit = false;\n this.completed = true;\n this.ticketService.getPrevision(data.tickets[0].Id)\n .subscribe((result) => {\n if (!(result.messages && result.messages[0].type === 'ERROR')) {\n const ticket: Ticket = {\n accessKey: data.tickets[0].AccessKey,\n friendlyCode: data.tickets[0].FriendlyCode,\n locationId: data.tickets[0].LocationId,\n id: data.tickets[0].Id,\n providerId: data.tickets[0].TenantId,\n timezoneId: data.tickets[0].Timezone,\n serviceConfigId: data.tickets[0].ServiceConfigId\n } as Ticket;\n this.storageService.addTicket(ticket);\n this.storageService.setCurrentTicket(ticket);\n this.goToTrack();\n }\n\n\n });\n });\n\n scheduleChannel.bind('ScheduleUnauthorized', data => {\n this.isLoadingEmit = false;\n this.completed = true;\n });\n }\n\n private getTicket() {\n this.ticketService.getTicket(this.ticketId)\n .pipe()\n .subscribe((ticket) => {\n\n const t: Ticket = {\n accessKey: ticket.accessKey,\n friendlyCode: ticket.friendlyCode,\n locationId: ticket.location.id,\n id: ticket.id,\n providerId: ticket.provider.id,\n timezoneId: ticket.location.timezoneId,\n serviceConfigId: ticket.session.serviceConfigId,\n prevision: ticket.estimatedServiceStart\n } as Ticket;\n\n this.storageService.addTicket(t);\n this.storageService.setCurrentTicket(t);\n this.goToTrack();\n });\n }\n\n resolvedCaptcha(result) {\n this.payload.recaptcha = result;\n\n this.booking();\n }\n\n private goToTrack() {\n this.router.navigate(['/boticario/track']);\n }\n\n onFocus(event: FocusEvent, el: HTMLElement) {\n if (this.deviceService.os === 'Android') {\n setTimeout(() => el.scrollIntoView(), 300);\n }\n }\n\n continueEvent() {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Escolha_Fila_Continuar'\n });\n }\n\n backEvent() {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Escolha_Fila_Voltar'\n });\n }\n\n selectRemovalEvent() {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Escolha_Fila_Selected_Retirada'\n });\n }\n\n selectBuyEvent() {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Escolha_Fila_Selected_Compra'\n });\n }\n\n checkPreferentialEvent() {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Escolha_Fila_Check_Preferencial'\n });\n }\n\n tooltipPreferentialEvent() {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Escolha_Fila_Tooltip_Preferencial'\n });\n }\n}\n\n","\n\n\n\n
\n\n \n
\n \n
\n
\n\n
\n

\n

{{ 'boticario.pages.track.info2' | translate }}

\n

{{ 'boticario.pages.track.ticketCode' | translate }}

\n

{{ ticket.friendlyCode }}

\n

{{ 'boticario.pages.track.queuePosition' | translate }}

\n

{{ticket.position}}

\n

--

\n

{{ 'boticario.pages.track.previsionInfo' | translate }}

\n\n
\n

{{ ticket.prevision | timezoneFormat: ticket.timezoneId | dateFormat: { format: 'LL', locale: currentLang } }}

\n
\n
\n\n
\n
\n \n
\n
\n\n
\n

{{ 'boticario.pages.track.itsYourTurn' | translate }}

\n\n

{{ticket.resource}}

\n
 
\n
\n\n
\n
\n \n
\n
\n\n
\n

{{ 'boticario.pages.track.ticketWasCanceled' | translate }}

\n \n
\n
\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { ExitAlertModalComponent } from 'src/app/components/exit-alert-modal/exit-alert-modal.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { TicketService, StorageService, NotificationService } from 'src/app/shared/services';\nimport { Ticket, Terminal } from 'src/app/shared/models';\nimport { Router } from '@angular/router';\nimport { finalize } from 'rxjs/operators';\nimport * as moment from 'moment';\nimport { SoundAlertComponent } from 'src/app/components/sound-alert/sound-alert.component';\nimport { Subscription } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DeviceDetectorService } from 'ngx-device-detector';\n\nmoment.locale('pt-br');\n\n@Component({\n selector: 'app-boticario-track',\n templateUrl: './boticario-track.component.html',\n styleUrls: ['./boticario-track.component.scss']\n})\nexport class BoticarioTrackComponent implements OnInit, OnDestroy {\n\n ticket: Ticket;\n terminal: Terminal;\n accessKey: string;\n isLoading = false;\n audio: HTMLAudioElement;\n subscription: Subscription;\n\n constructor(\n public dialog: MatDialog,\n private ticketService: TicketService,\n private notificationService: NotificationService,\n private translateService: TranslateService,\n private router: Router,\n private storageService: StorageService,\n private deviceService: DeviceDetectorService\n ) {\n if (this.isSafari) {\n this.openSoundAlertModal();\n } else {\n this.audio = new Audio();\n }\n }\n\n ngOnInit() {\n this.terminal = this.storageService.currentTerminal;\n this.ticket = this.storageService.currentTicket;\n this.getTicket();\n this.accessKey = localStorage.getItem('terminalKey');\n\n this.notificationService.add(\n this.ticket.id,\n this.ticket.serviceConfigId,\n ['TicketCheckin', 'PrevisionChanged', 'TicketCalled', 'TicketStart', 'TicketComplete', 'TicketCancel']\n )\n\n this.subscription = this.notificationService.notifications.subscribe(\n (response) => {\n switch (response.eventName) {\n case 'TicketCheckin':\n this.getTicket();\n break;\n case 'PrevisionChanged':\n this.ticket.prevision = response.ticket.prevision;\n this.getPosition();\n break;\n case 'TicketCalled':\n if (this.ticket.id === response.ticket.id) {\n this.ticket.status = 'Called';\n this.ticket.resource = response.ticket.resource;\n this.playNotification();\n this.storageService.updateTicket(this.ticket);\n }\n break;\n case 'TicketStart':\n if (this.ticket.id === response.ticket.id) {\n this.ticket.status = 'Started';\n this.storageService.updateTicket(this.ticket);\n }\n break;\n case 'TicketComplete':\n if (response.ticket.id === this.ticket.id) {\n this.backStart();\n }\n break;\n case 'TicketCancel':\n this.ticket.status = 'Canceled';\n this.storageService.updateTicket(this.ticket);\n break;\n case 'ServiceConfigTicketCalled':\n if (this.ticket.id === response.ticket.id) {\n this.getPosition();\n }\n break;\n }\n }\n )\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n openExitAlertModal() {\n this.dialog.open(ExitAlertModalComponent, {\n data: { ticketId: this.ticket.id, accessKey: this.accessKey, providerId: this.ticket.providerId, isBoticario: true }\n });\n }\n\n openSoundAlertModal() {\n const modal = this.dialog.open(SoundAlertComponent);\n\n modal.afterClosed().subscribe((audio: HTMLAudioElement) => {\n this.audio = audio;\n this.audio.src = '../../../assets/audio/no-sound.mp3';\n this.audio.load();\n this.audio.play();\n });\n }\n\n get currentLang(): string {\n return this.translateService.currentLang;\n }\n\n backStart() {\n this.storageService.removeTicket(this.ticket.id);\n\n if (this.storageService.tickets.length > 0){\n this.storageService.setCurrentTicket(this.storageService.tickets[0]);\n }\n else {\n this.storageService.setCurrentTicket(null);\n }\n\n this.router.navigate([`/boticario/${this.accessKey}`]);\n }\n\n getPosition() {\n const positionEl = document.getElementById('queuePosition');\n const previsionEl = document.getElementById('prevision');\n\n this.ticketService.getPosition(this.ticket.providerId, this.ticket.id).subscribe((response) => {\n if (response > 0) {\n this.ticket.position = response;\n\n if (this.isSafari) {\n this.forceRedraw(positionEl);\n this.forceRedraw(previsionEl);\n }\n }\n\n if (response === 1) {\n this.playNotification();\n }\n\n this.storageService.updateTicket(this.ticket);\n\n });\n }\n\n isCanceled() {\n return this.ticket.status === 'Canceled';\n }\n\n private getTicket() {\n this.isLoading = true;\n this.ticketService.getTicket(this.ticket.id)\n .pipe(finalize(() => this.isLoading = false))\n .subscribe((response) => {\n this.ticket = {\n id: response.id,\n prevision: this.ticket.prevision || response.estimatedServiceStart,\n status: response.status,\n resource: response.resource ? response.resource.name : null,\n attendanceType: response.attendanceType,\n position: null,\n timezoneId: response.location.timezoneId,\n locationName: response.location.name,\n providerId: response.provider.id,\n serviceConfigId: response.session.serviceConfigId,\n friendlyCode: response.friendlyCode,\n accessKey: response.accessKey,\n locationId: response.location.id,\n providerName: response.provider.name,\n serviceName: response.service.name,\n feedback: response.feedback,\n smartCode: response.smartCode\n };\n this.getPosition();\n\n if (this.isOlder || this.isCompleted || this.isOpened) {\n this.backStart();\n }\n });\n }\n\n get isSafari() {\n return this.deviceService.getDeviceInfo().browser === 'Safari';\n }\n\n get isOlder() {\n const ticketPrevision = moment(this.ticket.prevision)\n .tz(this.ticket.timezoneId)\n .startOf('day');\n\n const now = moment(Date.now()).startOf('day');\n\n return now.diff(ticketPrevision, 'days') >= 1;\n }\n\n get isCompleted() {\n return this.ticket.status === 'Completed';\n }\n\n get isOpened() {\n return this.ticket.status === 'Opened';\n }\n\n exitQueueEvent() {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Sala_Espera_Sair'\n });\n }\n\n playNotification() {\n if (this.audio !== undefined) {\n this.audio.src = '../../../assets/audio/got-it-done.mp3';\n this.audio.load();\n this.audio.play();\n }\n }\n\n forceRedraw(element: HTMLElement) {\n if (!element) {\n return;\n }\n\n element.style.opacity = '0.9';\n\n setTimeout(() => {\n element.style.opacity = '1';\n }, 20);\n }\n}\n","import { Routes } from '@angular/router';\nimport { BoticarioStartComponent } from './boticario-start/boticario-start.component';\nimport { BoticarioScheduleComponent } from './boticario-schedule/boticario-schedule.component';\nimport { BoticarioTrackComponent } from './boticario-track/boticario-track.component';\nimport { NotFoundComponent } from '../shared/pages/not-found/not-found.component';\n\nexport const BoticarioRoutes: Routes = [\n { path: 'schedule', component: BoticarioScheduleComponent },\n { path: 'track', component: BoticarioTrackComponent },\n { path: ':accessKey', component: BoticarioStartComponent },\n { path: '**', component: NotFoundComponent }\n];\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BoticarioStartComponent } from './boticario-start/boticario-start.component';\nimport { BoticarioScheduleComponent } from './boticario-schedule/boticario-schedule.component';\nimport { BoticarioTrackComponent } from './boticario-track/boticario-track.component';\nimport { RouterModule } from '@angular/router';\nimport { BoticarioRoutes } from './boticario.routing';\nimport { ComponentsModule } from '../components/components.module';\nimport { MaterialModule } from '../material/material.module';\nimport { FormsModule } from '@angular/forms';\nimport { PipeModule } from '../shared/pipe/pipe.module';\nimport { NgxMaskDirective, NgxMaskPipe } from 'ngx-mask';\nimport { PagesModule } from '../shared/pages/pages.module';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { HttpClient } from '@angular/common/http';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\n\nexport function HttpLoaderFactory(http: HttpClient) {\n return new TranslateHttpLoader(http);\n}\n\n@NgModule({\n declarations: [\n BoticarioStartComponent,\n BoticarioScheduleComponent,\n BoticarioTrackComponent\n ],\n imports: [\n CommonModule,\n ComponentsModule,\n FormsModule,\n MaterialModule,\n PipeModule,\n RouterModule.forChild(BoticarioRoutes),\n NgxMaskDirective, NgxMaskPipe,\n PagesModule,\n TranslateModule.forChild({\n loader: {\n provide: TranslateModule,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ]\n})\nexport class BoticarioModule { }\n","import * as i0 from '@angular/core';\nimport { InjectionToken, booleanAttribute, Directive, Input, EventEmitter, Optional, Inject, SkipSelf, Output, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/collections';\nimport { Subject, Subscription } from 'rxjs';\n\n/** Used to generate unique ID for each accordion. */\nlet nextId$1 = 0;\n/**\n * Injection token that can be used to reference instances of `CdkAccordion`. It serves\n * as alternative token to the actual `CdkAccordion` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_ACCORDION = new InjectionToken('CdkAccordion');\n/**\n * Directive whose purpose is to manage the expanded state of CdkAccordionItem children.\n */\nclass CdkAccordion {\n constructor() {\n /** Emits when the state of the accordion changes */\n this._stateChanges = new Subject();\n /** Stream that emits true/false when openAll/closeAll is triggered. */\n this._openCloseAllActions = new Subject();\n /** A readonly id value to use for unique selection coordination. */\n this.id = `cdk-accordion-${nextId$1++}`;\n /** Whether the accordion should allow multiple expanded accordion items simultaneously. */\n this.multi = false;\n }\n /** Opens all enabled accordion items in an accordion where multi is enabled. */\n openAll() {\n if (this.multi) {\n this._openCloseAllActions.next(true);\n }\n }\n /** Closes all enabled accordion items. */\n closeAll() {\n this._openCloseAllActions.next(false);\n }\n ngOnChanges(changes) {\n this._stateChanges.next(changes);\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n this._openCloseAllActions.complete();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkAccordion, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"17.2.0\", type: CdkAccordion, isStandalone: true, selector: \"cdk-accordion, [cdkAccordion]\", inputs: { multi: [\"multi\", \"multi\", booleanAttribute] }, providers: [{ provide: CDK_ACCORDION, useExisting: CdkAccordion }], exportAs: [\"cdkAccordion\"], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkAccordion, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-accordion, [cdkAccordion]',\n exportAs: 'cdkAccordion',\n providers: [{ provide: CDK_ACCORDION, useExisting: CdkAccordion }],\n standalone: true,\n }]\n }], propDecorators: { multi: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }] } });\n\n/** Used to generate unique ID for each accordion item. */\nlet nextId = 0;\n/**\n * An basic directive expected to be extended and decorated as a component. Sets up all\n * events and attributes needed to be managed by a CdkAccordion parent.\n */\nclass CdkAccordionItem {\n /** Whether the AccordionItem is expanded. */\n get expanded() {\n return this._expanded;\n }\n set expanded(expanded) {\n // Only emit events and update the internal value if the value changes.\n if (this._expanded !== expanded) {\n this._expanded = expanded;\n this.expandedChange.emit(expanded);\n if (expanded) {\n this.opened.emit();\n /**\n * In the unique selection dispatcher, the id parameter is the id of the CdkAccordionItem,\n * the name value is the id of the accordion.\n */\n const accordionId = this.accordion ? this.accordion.id : this.id;\n this._expansionDispatcher.notify(this.id, accordionId);\n }\n else {\n this.closed.emit();\n }\n // Ensures that the animation will run when the value is set outside of an `@Input`.\n // This includes cases like the open, close and toggle methods.\n this._changeDetectorRef.markForCheck();\n }\n }\n constructor(accordion, _changeDetectorRef, _expansionDispatcher) {\n this.accordion = accordion;\n this._changeDetectorRef = _changeDetectorRef;\n this._expansionDispatcher = _expansionDispatcher;\n /** Subscription to openAll/closeAll events. */\n this._openCloseAllSubscription = Subscription.EMPTY;\n /** Event emitted every time the AccordionItem is closed. */\n this.closed = new EventEmitter();\n /** Event emitted every time the AccordionItem is opened. */\n this.opened = new EventEmitter();\n /** Event emitted when the AccordionItem is destroyed. */\n this.destroyed = new EventEmitter();\n /**\n * Emits whenever the expanded state of the accordion changes.\n * Primarily used to facilitate two-way binding.\n * @docs-private\n */\n this.expandedChange = new EventEmitter();\n /** The unique AccordionItem id. */\n this.id = `cdk-accordion-child-${nextId++}`;\n this._expanded = false;\n /** Whether the AccordionItem is disabled. */\n this.disabled = false;\n /** Unregister function for _expansionDispatcher. */\n this._removeUniqueSelectionListener = () => { };\n this._removeUniqueSelectionListener = _expansionDispatcher.listen((id, accordionId) => {\n if (this.accordion &&\n !this.accordion.multi &&\n this.accordion.id === accordionId &&\n this.id !== id) {\n this.expanded = false;\n }\n });\n // When an accordion item is hosted in an accordion, subscribe to open/close events.\n if (this.accordion) {\n this._openCloseAllSubscription = this._subscribeToOpenCloseAllActions();\n }\n }\n /** Emits an event for the accordion item being destroyed. */\n ngOnDestroy() {\n this.opened.complete();\n this.closed.complete();\n this.destroyed.emit();\n this.destroyed.complete();\n this._removeUniqueSelectionListener();\n this._openCloseAllSubscription.unsubscribe();\n }\n /** Toggles the expanded state of the accordion item. */\n toggle() {\n if (!this.disabled) {\n this.expanded = !this.expanded;\n }\n }\n /** Sets the expanded state of the accordion item to false. */\n close() {\n if (!this.disabled) {\n this.expanded = false;\n }\n }\n /** Sets the expanded state of the accordion item to true. */\n open() {\n if (!this.disabled) {\n this.expanded = true;\n }\n }\n _subscribeToOpenCloseAllActions() {\n return this.accordion._openCloseAllActions.subscribe(expanded => {\n // Only change expanded state if item is enabled\n if (!this.disabled) {\n this.expanded = expanded;\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkAccordionItem, deps: [{ token: CDK_ACCORDION, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }, { token: i1.UniqueSelectionDispatcher }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"17.2.0\", type: CdkAccordionItem, isStandalone: true, selector: \"cdk-accordion-item, [cdkAccordionItem]\", inputs: { expanded: [\"expanded\", \"expanded\", booleanAttribute], disabled: [\"disabled\", \"disabled\", booleanAttribute] }, outputs: { closed: \"closed\", opened: \"opened\", destroyed: \"destroyed\", expandedChange: \"expandedChange\" }, providers: [\n // Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from\n // registering to the same accordion.\n { provide: CDK_ACCORDION, useValue: undefined },\n ], exportAs: [\"cdkAccordionItem\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkAccordionItem, decorators: [{\n type: Directive,\n args: [{\n selector: 'cdk-accordion-item, [cdkAccordionItem]',\n exportAs: 'cdkAccordionItem',\n providers: [\n // Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from\n // registering to the same accordion.\n { provide: CDK_ACCORDION, useValue: undefined },\n ],\n standalone: true,\n }]\n }], ctorParameters: () => [{ type: CdkAccordion, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CDK_ACCORDION]\n }, {\n type: SkipSelf\n }] }, { type: i0.ChangeDetectorRef }, { type: i1.UniqueSelectionDispatcher }], propDecorators: { closed: [{\n type: Output\n }], opened: [{\n type: Output\n }], destroyed: [{\n type: Output\n }], expandedChange: [{\n type: Output\n }], expanded: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], disabled: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }] } });\n\nclass CdkAccordionModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkAccordionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkAccordionModule, imports: [CdkAccordion, CdkAccordionItem], exports: [CdkAccordion, CdkAccordionItem] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkAccordionModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: CdkAccordionModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CdkAccordion, CdkAccordionItem],\n exports: [CdkAccordion, CdkAccordionItem],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CDK_ACCORDION, CdkAccordion, CdkAccordionItem, CdkAccordionModule };\n","import { CdkAccordionItem, CdkAccordion, CdkAccordionModule } from '@angular/cdk/accordion';\nimport { TemplatePortal, CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Inject, Optional, EventEmitter, ANIMATION_MODULE_TYPE, booleanAttribute, Component, ViewEncapsulation, ChangeDetectionStrategy, SkipSelf, Input, Output, ContentChild, ViewChild, numberAttribute, Host, Attribute, QueryList, ContentChildren, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport * as i2 from '@angular/cdk/a11y';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { startWith, filter, take } from 'rxjs/operators';\nimport { ENTER, hasModifierKey, SPACE } from '@angular/cdk/keycodes';\nimport { Subject, Subscription, EMPTY, merge } from 'rxjs';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i1 from '@angular/cdk/collections';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * Token used to provide a `MatAccordion` to `MatExpansionPanel`.\n * Used primarily to avoid circular imports between `MatAccordion` and `MatExpansionPanel`.\n */\nconst MAT_ACCORDION = new InjectionToken('MAT_ACCORDION');\n\n/** Time and timing curve for expansion panel animations. */\n// Note: Keep this in sync with the Sass variable for the panel header animation.\nconst EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';\n/**\n * Animations used by the Material expansion panel.\n *\n * A bug in angular animation's `state` when ViewContainers are moved using ViewContainerRef.move()\n * causes the animation state of moved components to become `void` upon exit, and not update again\n * upon reentry into the DOM. This can lead a to situation for the expansion panel where the state\n * of the panel is `expanded` or `collapsed` but the animation state is `void`.\n *\n * To correctly handle animating to the next state, we animate between `void` and `collapsed` which\n * are defined to have the same styles. Since angular animates from the current styles to the\n * destination state's style definition, in situations where we are moving from `void`'s styles to\n * `collapsed` this acts a noop since no style values change.\n *\n * In the case where angular's animation state is out of sync with the expansion panel's state, the\n * expansion panel being `expanded` and angular animations being `void`, the animation from the\n * `expanded`'s effective styles (though in a `void` animation state) to the collapsed state will\n * occur as expected.\n *\n * Angular Bug: https://github.com/angular/angular/issues/18847\n *\n * @docs-private\n */\nconst matExpansionAnimations = {\n /** Animation that rotates the indicator arrow. */\n indicatorRotate: trigger('indicatorRotate', [\n state('collapsed, void', style({ transform: 'rotate(0deg)' })),\n state('expanded', style({ transform: 'rotate(180deg)' })),\n transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n /** Animation that expands and collapses the panel content. */\n bodyExpansion: trigger('bodyExpansion', [\n state('collapsed, void', style({ height: '0px', visibility: 'hidden' })),\n // Clear the `visibility` while open, otherwise the content will be visible when placed in\n // a parent that's `visibility: hidden`, because `visibility` doesn't apply to descendants\n // that have a `visibility` of their own (see #27436).\n state('expanded', style({ height: '*', visibility: '' })),\n transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n};\n\n/**\n * Token used to provide a `MatExpansionPanel` to `MatExpansionPanelContent`.\n * Used to avoid circular imports between `MatExpansionPanel` and `MatExpansionPanelContent`.\n */\nconst MAT_EXPANSION_PANEL = new InjectionToken('MAT_EXPANSION_PANEL');\n\n/**\n * Expansion panel content that will be rendered lazily\n * after the panel is opened for the first time.\n */\nclass MatExpansionPanelContent {\n constructor(_template, _expansionPanel) {\n this._template = _template;\n this._expansionPanel = _expansionPanel;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanelContent, deps: [{ token: i0.TemplateRef }, { token: MAT_EXPANSION_PANEL, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: MatExpansionPanelContent, isStandalone: true, selector: \"ng-template[matExpansionPanelContent]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanelContent, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[matExpansionPanelContent]',\n standalone: true,\n }]\n }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL]\n }, {\n type: Optional\n }] }] });\n\n/** Counter for generating unique element ids. */\nlet uniqueId = 0;\n/**\n * Injection token that can be used to configure the default\n * options for the expansion panel component.\n */\nconst MAT_EXPANSION_PANEL_DEFAULT_OPTIONS = new InjectionToken('MAT_EXPANSION_PANEL_DEFAULT_OPTIONS');\n/**\n * This component can be used as a single element to show expandable content, or as one of\n * multiple children of an element with the MatAccordion directive attached.\n */\nclass MatExpansionPanel extends CdkAccordionItem {\n /** Whether the toggle indicator should be hidden. */\n get hideToggle() {\n return this._hideToggle || (this.accordion && this.accordion.hideToggle);\n }\n set hideToggle(value) {\n this._hideToggle = value;\n }\n /** The position of the expansion indicator. */\n get togglePosition() {\n return this._togglePosition || (this.accordion && this.accordion.togglePosition);\n }\n set togglePosition(value) {\n this._togglePosition = value;\n }\n constructor(accordion, _changeDetectorRef, _uniqueSelectionDispatcher, _viewContainerRef, _document, _animationMode, defaultOptions) {\n super(accordion, _changeDetectorRef, _uniqueSelectionDispatcher);\n this._viewContainerRef = _viewContainerRef;\n this._animationMode = _animationMode;\n this._hideToggle = false;\n /** An event emitted after the body's expansion animation happens. */\n this.afterExpand = new EventEmitter();\n /** An event emitted after the body's collapse animation happens. */\n this.afterCollapse = new EventEmitter();\n /** Stream that emits for changes in `@Input` properties. */\n this._inputChanges = new Subject();\n /** ID for the associated header element. Used for a11y labelling. */\n this._headerId = `mat-expansion-panel-header-${uniqueId++}`;\n this.accordion = accordion;\n this._document = _document;\n this._animationsDisabled = _animationMode === 'NoopAnimations';\n if (defaultOptions) {\n this.hideToggle = defaultOptions.hideToggle;\n }\n }\n /** Determines whether the expansion panel should have spacing between it and its siblings. */\n _hasSpacing() {\n if (this.accordion) {\n return this.expanded && this.accordion.displayMode === 'default';\n }\n return false;\n }\n /** Gets the expanded state string. */\n _getExpandedState() {\n return this.expanded ? 'expanded' : 'collapsed';\n }\n /** Toggles the expanded state of the expansion panel. */\n toggle() {\n this.expanded = !this.expanded;\n }\n /** Sets the expanded state of the expansion panel to false. */\n close() {\n this.expanded = false;\n }\n /** Sets the expanded state of the expansion panel to true. */\n open() {\n this.expanded = true;\n }\n ngAfterContentInit() {\n if (this._lazyContent && this._lazyContent._expansionPanel === this) {\n // Render the content as soon as the panel becomes open.\n this.opened\n .pipe(startWith(null), filter(() => this.expanded && !this._portal), take(1))\n .subscribe(() => {\n this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);\n });\n }\n }\n ngOnChanges(changes) {\n this._inputChanges.next(changes);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._inputChanges.complete();\n }\n /** Checks whether the expansion panel's content contains the currently-focused element. */\n _containsFocus() {\n if (this._body) {\n const focusedElement = this._document.activeElement;\n const bodyElement = this._body.nativeElement;\n return focusedElement === bodyElement || bodyElement.contains(focusedElement);\n }\n return false;\n }\n /** Called when the expansion animation has started. */\n _animationStarted(event) {\n if (!isInitialAnimation(event) && !this._animationsDisabled && this._body) {\n // Prevent the user from tabbing into the content while it's animating.\n // TODO(crisbeto): maybe use `inert` to prevent focus from entering while closed as well\n // instead of `visibility`? Will allow us to clean up some code but needs more testing.\n this._body?.nativeElement.setAttribute('inert', '');\n }\n }\n /** Called when the expansion animation has finished. */\n _animationDone(event) {\n if (!isInitialAnimation(event)) {\n if (event.toState === 'expanded') {\n this.afterExpand.emit();\n }\n else if (event.toState === 'collapsed') {\n this.afterCollapse.emit();\n }\n // Re-enable tabbing once the animation is finished.\n if (!this._animationsDisabled && this._body) {\n this._body.nativeElement.removeAttribute('inert');\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanel, deps: [{ token: MAT_ACCORDION, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }, { token: i1.UniqueSelectionDispatcher }, { token: i0.ViewContainerRef }, { token: DOCUMENT }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"16.1.0\", version: \"17.2.0\", type: MatExpansionPanel, isStandalone: true, selector: \"mat-expansion-panel\", inputs: { hideToggle: [\"hideToggle\", \"hideToggle\", booleanAttribute], togglePosition: \"togglePosition\" }, outputs: { afterExpand: \"afterExpand\", afterCollapse: \"afterCollapse\" }, host: { properties: { \"class.mat-expanded\": \"expanded\", \"class._mat-animation-noopable\": \"_animationsDisabled\", \"class.mat-expansion-panel-spacing\": \"_hasSpacing()\" }, classAttribute: \"mat-expansion-panel\" }, providers: [\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n { provide: MAT_ACCORDION, useValue: undefined },\n { provide: MAT_EXPANSION_PANEL, useExisting: MatExpansionPanel },\n ], queries: [{ propertyName: \"_lazyContent\", first: true, predicate: MatExpansionPanelContent, descendants: true }], viewQueries: [{ propertyName: \"_body\", first: true, predicate: [\"body\"], descendants: true }], exportAs: [\"matExpansionPanel\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"\\n
\\n
\\n \\n \\n
\\n \\n
\\n\", styles: [\".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative;background:var(--mat-expansion-container-background-color);color:var(--mat-expansion-container-text-color);border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:var(--mat-expansion-container-shape);border-top-left-radius:var(--mat-expansion-container-shape)}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:var(--mat-expansion-container-shape);border-bottom-left-radius:var(--mat-expansion-container-shape)}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible;font-family:var(--mat-expansion-container-text-font);font-size:var(--mat-expansion-container-text-size);font-weight:var(--mat-expansion-container-text-weight);line-height:var(--mat-expansion-container-text-line-height);letter-spacing:var(--mat-expansion-container-text-tracking)}.mat-expansion-panel-content[style*=\\\"visibility: hidden\\\"] *{visibility:hidden !important}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px;border-top-color:var(--mat-expansion-actions-divider-color)}.mat-action-row .mat-button-base,.mat-action-row .mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row .mat-button-base,[dir=rtl] .mat-action-row .mat-mdc-button-base{margin-left:0;margin-right:8px}\"], dependencies: [{ kind: \"directive\", type: CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }], animations: [matExpansionAnimations.bodyExpansion], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanel, decorators: [{\n type: Component,\n args: [{ selector: 'mat-expansion-panel', exportAs: 'matExpansionPanel', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [matExpansionAnimations.bodyExpansion], providers: [\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n { provide: MAT_ACCORDION, useValue: undefined },\n { provide: MAT_EXPANSION_PANEL, useExisting: MatExpansionPanel },\n ], host: {\n 'class': 'mat-expansion-panel',\n '[class.mat-expanded]': 'expanded',\n '[class._mat-animation-noopable]': '_animationsDisabled',\n '[class.mat-expansion-panel-spacing]': '_hasSpacing()',\n }, standalone: true, imports: [CdkPortalOutlet], template: \"\\n
\\n
\\n \\n \\n
\\n \\n
\\n\", styles: [\".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative;background:var(--mat-expansion-container-background-color);color:var(--mat-expansion-container-text-color);border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:var(--mat-expansion-container-shape);border-top-left-radius:var(--mat-expansion-container-shape)}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:var(--mat-expansion-container-shape);border-bottom-left-radius:var(--mat-expansion-container-shape)}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible;font-family:var(--mat-expansion-container-text-font);font-size:var(--mat-expansion-container-text-size);font-weight:var(--mat-expansion-container-text-weight);line-height:var(--mat-expansion-container-text-line-height);letter-spacing:var(--mat-expansion-container-text-tracking)}.mat-expansion-panel-content[style*=\\\"visibility: hidden\\\"] *{visibility:hidden !important}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px;border-top-color:var(--mat-expansion-actions-divider-color)}.mat-action-row .mat-button-base,.mat-action-row .mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row .mat-button-base,[dir=rtl] .mat-action-row .mat-mdc-button-base{margin-left:0;margin-right:8px}\"] }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }, {\n type: Inject,\n args: [MAT_ACCORDION]\n }] }, { type: i0.ChangeDetectorRef }, { type: i1.UniqueSelectionDispatcher }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]\n }, {\n type: Optional\n }] }], propDecorators: { hideToggle: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], togglePosition: [{\n type: Input\n }], afterExpand: [{\n type: Output\n }], afterCollapse: [{\n type: Output\n }], _lazyContent: [{\n type: ContentChild,\n args: [MatExpansionPanelContent]\n }], _body: [{\n type: ViewChild,\n args: ['body']\n }] } });\n/** Checks whether an animation is the initial setup animation. */\nfunction isInitialAnimation(event) {\n return event.fromState === 'void';\n}\n/**\n * Actions of a ``.\n */\nclass MatExpansionPanelActionRow {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanelActionRow, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: MatExpansionPanelActionRow, isStandalone: true, selector: \"mat-action-row\", host: { classAttribute: \"mat-action-row\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanelActionRow, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-action-row',\n host: {\n class: 'mat-action-row',\n },\n standalone: true,\n }]\n }] });\n\n/**\n * Header element of a ``.\n */\nclass MatExpansionPanelHeader {\n constructor(panel, _element, _focusMonitor, _changeDetectorRef, defaultOptions, _animationMode, tabIndex) {\n this.panel = panel;\n this._element = _element;\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n this._parentChangeSubscription = Subscription.EMPTY;\n /** Tab index of the header. */\n this.tabIndex = 0;\n const accordionHideToggleChange = panel.accordion\n ? panel.accordion._stateChanges.pipe(filter(changes => !!(changes['hideToggle'] || changes['togglePosition'])))\n : EMPTY;\n this.tabIndex = parseInt(tabIndex || '') || 0;\n // Since the toggle state depends on an @Input on the panel, we\n // need to subscribe and trigger change detection manually.\n this._parentChangeSubscription = merge(panel.opened, panel.closed, accordionHideToggleChange, panel._inputChanges.pipe(filter(changes => {\n return !!(changes['hideToggle'] || changes['disabled'] || changes['togglePosition']);\n }))).subscribe(() => this._changeDetectorRef.markForCheck());\n // Avoids focus being lost if the panel contained the focused element and was closed.\n panel.closed\n .pipe(filter(() => panel._containsFocus()))\n .subscribe(() => _focusMonitor.focusVia(_element, 'program'));\n if (defaultOptions) {\n this.expandedHeight = defaultOptions.expandedHeight;\n this.collapsedHeight = defaultOptions.collapsedHeight;\n }\n }\n /**\n * Whether the associated panel is disabled. Implemented as a part of `FocusableOption`.\n * @docs-private\n */\n get disabled() {\n return this.panel.disabled;\n }\n /** Toggles the expanded state of the panel. */\n _toggle() {\n if (!this.disabled) {\n this.panel.toggle();\n }\n }\n /** Gets whether the panel is expanded. */\n _isExpanded() {\n return this.panel.expanded;\n }\n /** Gets the expanded state string of the panel. */\n _getExpandedState() {\n return this.panel._getExpandedState();\n }\n /** Gets the panel id. */\n _getPanelId() {\n return this.panel.id;\n }\n /** Gets the toggle position for the header. */\n _getTogglePosition() {\n return this.panel.togglePosition;\n }\n /** Gets whether the expand indicator should be shown. */\n _showToggle() {\n return !this.panel.hideToggle && !this.panel.disabled;\n }\n /**\n * Gets the current height of the header. Null if no custom height has been\n * specified, and if the default height from the stylesheet should be used.\n */\n _getHeaderHeight() {\n const isExpanded = this._isExpanded();\n if (isExpanded && this.expandedHeight) {\n return this.expandedHeight;\n }\n else if (!isExpanded && this.collapsedHeight) {\n return this.collapsedHeight;\n }\n return null;\n }\n /** Handle keydown event calling to toggle() if appropriate. */\n _keydown(event) {\n switch (event.keyCode) {\n // Toggle for space and enter keys.\n case SPACE:\n case ENTER:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this._toggle();\n }\n break;\n default:\n if (this.panel.accordion) {\n this.panel.accordion._handleHeaderKeydown(event);\n }\n return;\n }\n }\n /**\n * Focuses the panel header. Implemented as a part of `FocusableOption`.\n * @param origin Origin of the action that triggered the focus.\n * @docs-private\n */\n focus(origin, options) {\n if (origin) {\n this._focusMonitor.focusVia(this._element, origin, options);\n }\n else {\n this._element.nativeElement.focus(options);\n }\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._element).subscribe(origin => {\n if (origin && this.panel.accordion) {\n this.panel.accordion._handleHeaderFocus(this);\n }\n });\n }\n ngOnDestroy() {\n this._parentChangeSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._element);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanelHeader, deps: [{ token: MatExpansionPanel, host: true }, { token: i0.ElementRef }, { token: i2.FocusMonitor }, { token: i0.ChangeDetectorRef }, { token: MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: 'tabindex', attribute: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.2.0\", type: MatExpansionPanelHeader, isStandalone: true, selector: \"mat-expansion-panel-header\", inputs: { expandedHeight: \"expandedHeight\", collapsedHeight: \"collapsedHeight\", tabIndex: [\"tabIndex\", \"tabIndex\", (value) => (value == null ? 0 : numberAttribute(value))] }, host: { attributes: { \"role\": \"button\" }, listeners: { \"click\": \"_toggle()\", \"keydown\": \"_keydown($event)\" }, properties: { \"attr.id\": \"panel._headerId\", \"attr.tabindex\": \"disabled ? -1 : tabIndex\", \"attr.aria-controls\": \"_getPanelId()\", \"attr.aria-expanded\": \"_isExpanded()\", \"attr.aria-disabled\": \"panel.disabled\", \"class.mat-expanded\": \"_isExpanded()\", \"class.mat-expansion-toggle-indicator-after\": \"_getTogglePosition() === 'after'\", \"class.mat-expansion-toggle-indicator-before\": \"_getTogglePosition() === 'before'\", \"class._mat-animation-noopable\": \"_animationMode === \\\"NoopAnimations\\\"\", \"style.height\": \"_getHeaderHeight()\" }, classAttribute: \"mat-expansion-panel-header mat-focus-indicator\" }, ngImport: i0, template: \"\\n \\n \\n \\n\\n\\n@if (_showToggle()) {\\n \\n \\n \\n \\n \\n}\\n\", styles: [\".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-expansion-header-collapsed-state-height);font-family:var(--mat-expansion-header-text-font);font-size:var(--mat-expansion-header-text-size);font-weight:var(--mat-expansion-header-text-weight);line-height:var(--mat-expansion-header-text-line-height);letter-spacing:var(--mat-expansion-header-text-tracking)}.mat-expansion-panel-header.mat-expanded{height:var(--mat-expansion-header-expanded-state-height)}.mat-expansion-panel-header[aria-disabled=true]{color:var(--mat-expansion-header-disabled-state-text-color)}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-header-hover-state-layer-color)}@media(hover: none){.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-container-background-color)}}.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused{background:var(--mat-expansion-header-focus-state-layer-color)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-content.mat-content-hide-toggle{margin-right:8px}[dir=rtl] .mat-content.mat-content-hide-toggle{margin-right:0;margin-left:8px}.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-left:24px;margin-right:0}[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-right:24px;margin-left:0}.mat-expansion-panel-header-title{color:var(--mat-expansion-header-text-color)}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;flex-basis:0;margin-right:16px;align-items:center}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit}.mat-expansion-panel-header-description{flex-grow:2;color:var(--mat-expansion-header-description-color)}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\\\"\\\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle;color:var(--mat-expansion-header-indicator-color);display:inline-block;display:var(--mat-expansion-legacy-header-indicator-display, inline-block)}.mat-expansion-indicator svg{width:24px;height:24px;margin:0 -8px;vertical-align:middle;fill:var(--mat-expansion-header-indicator-color);display:none;display:var(--mat-expansion-header-indicator-display, none)}.cdk-high-contrast-active .mat-expansion-panel-content{border-top:1px solid;border-top-left-radius:0;border-top-right-radius:0}\"], animations: [matExpansionAnimations.indicatorRotate], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanelHeader, decorators: [{\n type: Component,\n args: [{ selector: 'mat-expansion-panel-header', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [matExpansionAnimations.indicatorRotate], host: {\n 'class': 'mat-expansion-panel-header mat-focus-indicator',\n 'role': 'button',\n '[attr.id]': 'panel._headerId',\n '[attr.tabindex]': 'disabled ? -1 : tabIndex',\n '[attr.aria-controls]': '_getPanelId()',\n '[attr.aria-expanded]': '_isExpanded()',\n '[attr.aria-disabled]': 'panel.disabled',\n '[class.mat-expanded]': '_isExpanded()',\n '[class.mat-expansion-toggle-indicator-after]': `_getTogglePosition() === 'after'`,\n '[class.mat-expansion-toggle-indicator-before]': `_getTogglePosition() === 'before'`,\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[style.height]': '_getHeaderHeight()',\n '(click)': '_toggle()',\n '(keydown)': '_keydown($event)',\n }, standalone: true, template: \"\\n \\n \\n \\n\\n\\n@if (_showToggle()) {\\n \\n \\n \\n \\n \\n}\\n\", styles: [\".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-expansion-header-collapsed-state-height);font-family:var(--mat-expansion-header-text-font);font-size:var(--mat-expansion-header-text-size);font-weight:var(--mat-expansion-header-text-weight);line-height:var(--mat-expansion-header-text-line-height);letter-spacing:var(--mat-expansion-header-text-tracking)}.mat-expansion-panel-header.mat-expanded{height:var(--mat-expansion-header-expanded-state-height)}.mat-expansion-panel-header[aria-disabled=true]{color:var(--mat-expansion-header-disabled-state-text-color)}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-header-hover-state-layer-color)}@media(hover: none){.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-container-background-color)}}.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused{background:var(--mat-expansion-header-focus-state-layer-color)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-content.mat-content-hide-toggle{margin-right:8px}[dir=rtl] .mat-content.mat-content-hide-toggle{margin-right:0;margin-left:8px}.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-left:24px;margin-right:0}[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-right:24px;margin-left:0}.mat-expansion-panel-header-title{color:var(--mat-expansion-header-text-color)}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;flex-basis:0;margin-right:16px;align-items:center}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit}.mat-expansion-panel-header-description{flex-grow:2;color:var(--mat-expansion-header-description-color)}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\\\"\\\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle;color:var(--mat-expansion-header-indicator-color);display:inline-block;display:var(--mat-expansion-legacy-header-indicator-display, inline-block)}.mat-expansion-indicator svg{width:24px;height:24px;margin:0 -8px;vertical-align:middle;fill:var(--mat-expansion-header-indicator-color);display:none;display:var(--mat-expansion-header-indicator-display, none)}.cdk-high-contrast-active .mat-expansion-panel-content{border-top:1px solid;border-top-left-radius:0;border-top-right-radius:0}\"] }]\n }], ctorParameters: () => [{ type: MatExpansionPanel, decorators: [{\n type: Host\n }] }, { type: i0.ElementRef }, { type: i2.FocusMonitor }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }], propDecorators: { expandedHeight: [{\n type: Input\n }], collapsedHeight: [{\n type: Input\n }], tabIndex: [{\n type: Input,\n args: [{\n transform: (value) => (value == null ? 0 : numberAttribute(value)),\n }]\n }] } });\n/**\n * Description element of a ``.\n */\nclass MatExpansionPanelDescription {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanelDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: MatExpansionPanelDescription, isStandalone: true, selector: \"mat-panel-description\", host: { classAttribute: \"mat-expansion-panel-header-description\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanelDescription, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-panel-description',\n host: {\n class: 'mat-expansion-panel-header-description',\n },\n standalone: true,\n }]\n }] });\n/**\n * Title element of a ``.\n */\nclass MatExpansionPanelTitle {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanelTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: MatExpansionPanelTitle, isStandalone: true, selector: \"mat-panel-title\", host: { classAttribute: \"mat-expansion-panel-header-title\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionPanelTitle, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-panel-title',\n host: {\n class: 'mat-expansion-panel-header-title',\n },\n standalone: true,\n }]\n }] });\n\n/**\n * Directive for a Material Design Accordion.\n */\nclass MatAccordion extends CdkAccordion {\n constructor() {\n super(...arguments);\n /** Headers belonging to this accordion. */\n this._ownHeaders = new QueryList();\n /** Whether the expansion indicator should be hidden. */\n this.hideToggle = false;\n /**\n * Display mode used for all expansion panels in the accordion. Currently two display\n * modes exist:\n * default - a gutter-like spacing is placed around any expanded panel, placing the expanded\n * panel at a different elevation from the rest of the accordion.\n * flat - no spacing is placed around expanded panels, showing all panels at the same\n * elevation.\n */\n this.displayMode = 'default';\n /** The position of the expansion indicator. */\n this.togglePosition = 'after';\n }\n ngAfterContentInit() {\n this._headers.changes\n .pipe(startWith(this._headers))\n .subscribe((headers) => {\n this._ownHeaders.reset(headers.filter(header => header.panel.accordion === this));\n this._ownHeaders.notifyOnChanges();\n });\n this._keyManager = new FocusKeyManager(this._ownHeaders).withWrap().withHomeAndEnd();\n }\n /** Handles keyboard events coming in from the panel headers. */\n _handleHeaderKeydown(event) {\n this._keyManager.onKeydown(event);\n }\n _handleHeaderFocus(header) {\n this._keyManager.updateActiveItem(header);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._keyManager?.destroy();\n this._ownHeaders.destroy();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatAccordion, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"17.2.0\", type: MatAccordion, isStandalone: true, selector: \"mat-accordion\", inputs: { hideToggle: [\"hideToggle\", \"hideToggle\", booleanAttribute], displayMode: \"displayMode\", togglePosition: \"togglePosition\" }, host: { properties: { \"class.mat-accordion-multi\": \"this.multi\" }, classAttribute: \"mat-accordion\" }, providers: [\n {\n provide: MAT_ACCORDION,\n useExisting: MatAccordion,\n },\n ], queries: [{ propertyName: \"_headers\", predicate: MatExpansionPanelHeader, descendants: true }], exportAs: [\"matAccordion\"], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatAccordion, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-accordion',\n exportAs: 'matAccordion',\n providers: [\n {\n provide: MAT_ACCORDION,\n useExisting: MatAccordion,\n },\n ],\n host: {\n class: 'mat-accordion',\n // Class binding which is only used by the test harness as there is no other\n // way for the harness to detect if multiple panel support is enabled.\n '[class.mat-accordion-multi]': 'this.multi',\n },\n standalone: true,\n }]\n }], propDecorators: { _headers: [{\n type: ContentChildren,\n args: [MatExpansionPanelHeader, { descendants: true }]\n }], hideToggle: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], displayMode: [{\n type: Input\n }], togglePosition: [{\n type: Input\n }] } });\n\nclass MatExpansionModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionModule, imports: [MatCommonModule,\n CdkAccordionModule,\n PortalModule,\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent], exports: [MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionModule, imports: [MatCommonModule,\n CdkAccordionModule,\n PortalModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatExpansionModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n MatCommonModule,\n CdkAccordionModule,\n PortalModule,\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ],\n exports: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { EXPANSION_PANEL_ANIMATION_TIMING, MAT_ACCORDION, MAT_EXPANSION_PANEL, MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, MatAccordion, MatExpansionModule, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelContent, MatExpansionPanelDescription, MatExpansionPanelHeader, MatExpansionPanelTitle, matExpansionAnimations };\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HeaderComponent } from './header/header.component';\nimport { SecondaryHeaderComponent } from './secondary-header/secondary-header.component';\nimport { ExitAlertModalComponent } from './exit-alert-modal/exit-alert-modal.component';\nimport { TermsModalComponent } from './terms-modal/terms-modal.component';\nimport { TermsNoelModalComponent } from './terms-noel-modal/terms-noel-modal.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { PipeModule } from '../shared/pipe/pipe.module';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { HttpClient } from '@angular/common/http';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { SoundAlertComponent } from './sound-alert/sound-alert.component';\nimport { EmptyStateComponent } from './empty-state/empty-state.component';\nimport { TrackInformationComponent } from './track-information/track-information.component';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { TicketListTileComponent } from './ticket-list-tile/ticket-list-tile.component';\nimport { OptionButtonComponent } from './option-button/option-button.component';\nimport { NavigationBarComponent } from './navigation-bar/navigation-bar.component';\nimport { CollapsableOptionButtonComponent } from './collapsable-option-button/collapsable-option-button.component';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { ServiceListWrapperComponent } from './service-list-wrapper/service-list-wrapper.component';\nimport { PriorityModalComponent } from './priority-modal/priority-modal.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { PrivacyPolicyModalComponent } from './privacy-policy-modal/privacy-policy-modal.component';\nimport { EmbedChatComponent } from './embed-chat/embed-chat.component';\nimport { VidoconferenceAlertComponent } from './vidoconference-alert/vidoconference-alert.component';\nimport { TicketDetailsComponent } from './ticket-details/ticket-details.component';\nimport { QRCodeModule } from 'angularx-qrcode';\nimport { GoogleMapsModule } from '@angular/google-maps';\n\n\nexport function HttpLoaderFactory(http: HttpClient) {\n return new TranslateHttpLoader(http);\n}\n\n@NgModule({\n declarations: [\n HeaderComponent,\n SecondaryHeaderComponent,\n ExitAlertModalComponent,\n TermsModalComponent,\n TermsNoelModalComponent,\n SoundAlertComponent,\n EmptyStateComponent,\n TrackInformationComponent,\n TicketListTileComponent,\n OptionButtonComponent,\n NavigationBarComponent,\n CollapsableOptionButtonComponent,\n ServiceListWrapperComponent,\n PriorityModalComponent,\n PrivacyPolicyModalComponent,\n EmbedChatComponent,\n VidoconferenceAlertComponent,\n TicketDetailsComponent\n ],\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatToolbarModule,\n PipeModule,\n MatMenuModule,\n MatBadgeModule,\n MatExpansionModule,\n MatDialogModule,\n QRCodeModule,\n GoogleMapsModule,\n TranslateModule.forChild({\n loader: {\n provide: TranslateModule,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ],\n exports: [\n HeaderComponent,\n SecondaryHeaderComponent,\n ExitAlertModalComponent,\n TermsModalComponent,\n TermsNoelModalComponent,\n SoundAlertComponent,\n EmptyStateComponent,\n TrackInformationComponent,\n TicketListTileComponent,\n OptionButtonComponent,\n NavigationBarComponent,\n CollapsableOptionButtonComponent,\n ServiceListWrapperComponent,\n EmbedChatComponent,\n TicketDetailsComponent\n ]\n})\nexport class ComponentsModule { }\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'app-empty-state',\n templateUrl: './empty-state.component.html',\n styleUrls: ['./empty-state.component.scss']\n})\nexport class EmptyStateComponent {\n @Input() color: string;\n @Input() icon: string;\n @Input() message: string;\n\n constructor() { }\n}\n","
\n
\n {{ icon }}\n
\n
\n

{{ message }}

\n
\n \n
\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { StorageService, TicketService } from '../../shared/services';\nimport { Cancellation } from '../../shared/models';\nimport { environment } from 'src/environments/environment';\n\n@Component({\n selector: 'app-exit-alert-modal',\n templateUrl: './exit-alert-modal.component.html',\n styleUrls: ['./exit-alert-modal.component.scss']\n})\nexport class ExitAlertModalComponent implements OnInit {\n accessKey: string;\n ticketId: number;\n cancellation: Cancellation;\n providerId: number;\n isBoticario: boolean;\n\n constructor(\n private ticketService: TicketService,\n private storageService: StorageService,\n private router: Router,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) { }\n\n ngOnInit(): void {\n this.accessKey = this.data.accessKey;\n this.ticketId = this.data.ticketId;\n this.providerId = this.data.providerId;\n this.isBoticario = this.data.isBoticario;\n }\n\n cancelTicket() {\n if (this.isBoticario) {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Saida_Fila_Sair'\n });\n }\n\n this.cancellation = {\n operatorId: this.accessKey ?? environment.operatorId,\n reason: '',\n };\n\n this.ticketService.cancel(this.ticketId, this.providerId, this.cancellation).subscribe(() => {\n this.storageService.removeTicket(this.ticketId);\n\n if (this.storageService.tickets.length > 0) {\n this.storageService.setCurrentTicket(this.storageService.tickets[0]);\n } else {\n this.storageService.setCurrentTicket(null);\n }\n\n this.dialogRef.close();\n\n this.router.navigate([`/tickets`]);\n });\n }\n\n closeDialog() {\n if (this.isBoticario) {\n window['dataLayer'] = window['dataLayer'] || [];\n\n window['dataLayer'].push({\n event: 'click',\n data: 'Saida_Fila_Voltar'\n });\n }\n\n this.dialogRef.close();\n }\n\n}\n","
\n warning\n
\n
\n
\n \n \n
\n","\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { Ticket } from 'src/app/shared/models';\nimport { LocaleService, NotificationService, StorageService } from 'src/app/shared/services';\n\n@Component({\n selector: 'app-navigation-bar',\n templateUrl: './navigation-bar.component.html',\n styleUrls: ['./navigation-bar.component.scss']\n})\nexport class NavigationBarComponent implements OnInit {\n langs = [\n {\n code: 'pt-BR',\n name: 'Brasil'\n },\n {\n code: 'pt-PT',\n name: 'Portugal'\n },\n {\n code: 'en-US',\n name: 'EUA'\n }\n ];\n\n hasTicketChanged: boolean = false;\n tickets: Ticket[];\n\n constructor(\n private translateService: TranslateService,\n private localeService: LocaleService,\n private notificationService: NotificationService,\n private router: Router,\n private storageService: StorageService\n ) { }\n\n ngOnInit() {\n this.tickets = this.storageService.tickets;\n }\n\n next(): void {\n this.router.navigate(['/tickets']);\n this.hasTicketChanged = false;\n }\n\n changeTicketStatus(): void {\n this.hasTicketChanged = !this.hasTicketChanged;\n }\n\n shouldHideBadge(): boolean {\n return this.isRouteTicketList() || this.isRouteHome() || !this.hasTicketChanged;\n }\n\n isRouteTicketList(): boolean {\n return this.router.url === '/tickets';\n }\n\n isRouteHome(): boolean {\n return this.router.url === '/home';\n }\n\n setLang(lang: string) {\n this.translateService.use(lang)\n .subscribe(() => this.localeService.storeUserLocale(lang));\n }\n\n get currentLang() {\n return this.localeService.getUserLocale();\n }\n\n goHome() {\n this.router.navigate(['/home']);\n }\n}\n\n","\n \n \n Fila Digital\n\n \n \n \n \n \n\n \n\n \n \n {{ lang.name }}\n \n \n\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { Ticket } from 'src/app/shared/models';\nimport { LocaleService, NotificationService, StorageService } from 'src/app/shared/services';\n\n@Component({\n selector: 'app-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss']\n})\nexport class HeaderComponent implements OnInit {\n\n @Input() bgColor: string;\n @Input() logoUrl: string;\n @Input() logoHeight = '24px';\n @Input() showText = false;\n @Input() textColor = 'white';\n @Output() logoClick = new EventEmitter();\n @Output() digitalQueueClick = new EventEmitter();\n\n langs = [\n {\n code: 'pt-BR',\n name: 'Brasil'\n },\n {\n code: 'pt-PT',\n name: 'Portugal'\n },\n {\n code: 'en-US',\n name: 'EUA'\n }\n ];\n\n hasTicketChanged: boolean = false;\n tickets: Ticket[];\n eventNames = ['TicketCheckin', 'PrevisionChanged', 'TicketCalled', 'TicketStart', 'TicketComplete', 'TicketCancel'];\n subscription: Subscription;\n\n constructor(\n private translateService: TranslateService,\n private localeService: LocaleService,\n private notificationService: NotificationService,\n private router: Router,\n private storageService: StorageService\n ) { }\n\n ngOnInit() {\n this.tickets = this.storageService.tickets;\n this.addTicketsToChannels();\n this.subscribe();\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n subscribe(): void {\n this.subscription = this.notificationService.notifications.subscribe((response) => {\n if (response.ticket.id !== this.storageService.currentTicket.id) {\n if (this.eventNames.includes(response.eventName)) {\n this.changeTicketStatus();\n }\n }\n });\n }\n\n addTicketsToChannels(): void {\n this.tickets.forEach(ticket => {\n if (ticket.id !== this.storageService.currentTicket.id) {\n this.notificationService.add(ticket.id, ticket.serviceConfigId, this.eventNames)\n }\n });\n }\n\n next(): void {\n this.router.navigate(['/tickets']);\n this.hasTicketChanged = false;\n }\n\n changeTicketStatus(): void {\n this.hasTicketChanged = !this.hasTicketChanged;\n }\n\n shouldHideBadge(): boolean {\n return this.isRouteTicketList() || this.isRouteHome() || !this.hasTicketChanged;\n }\n\n isRouteTicketList(): boolean {\n return this.router.url === '/tickets';\n }\n\n isRouteHome(): boolean {\n return this.router.url === '/home';\n }\n\n setLang(lang: string) {\n this.translateService.use(lang)\n .subscribe(() => this.localeService.storeUserLocale(lang));\n }\n\n get currentLang() {\n return this.localeService.getUserLocale();\n }\n\n onLogoClick() {\n this.logoClick.emit();\n }\n\n onDigitalQueueClick() {\n this.digitalQueueClick.emit();\n }\n\n}\n","\n \n {{ icon }}\n {{ text }}\n\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-secondary-header',\n templateUrl: './secondary-header.component.html',\n styleUrls: ['./secondary-header.component.scss']\n})\nexport class SecondaryHeaderComponent implements OnInit {\n @Input() icon: string;\n @Input() text: string;\n @Input() isClickable: boolean;\n @Input() isBoticario: boolean;\n @Input() bgColor: string;\n @Input() reduceHeight: boolean;\n @Output() backClick = new EventEmitter();\n\n accessKey: string;\n constructor(private router: Router) { }\n\n ngOnInit() {\n this.accessKey = localStorage.getItem('terminalKey');\n }\n\n goToStart() {\n if (this.isBoticario) {\n this.router.navigate([`boticario/${this.accessKey}`]);\n } else {\n this.router.navigate([`/start/${this.accessKey}`]);\n }\n }\n\n onBackClick() {\n this.backClick.emit();\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-sound-alert',\n templateUrl: './sound-alert.component.html',\n styleUrls: ['./sound-alert.component.scss']\n})\nexport class SoundAlertComponent implements OnInit {\n\n constructor(private dialogRef: MatDialogRef) {\n this.dialogRef.disableClose = true;\n }\n\n ngOnInit() {\n }\n\n closeDialog() {\n const audio = new Audio();\n this.dialogRef.close(audio);\n }\n\n}\n","
\n notifications\n
\n
\n

{{ 'components.soundAlertModal.message' | translate }}

\n
\n
\n \n
\n","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-home',\n templateUrl: './home.component.html',\n styleUrls: ['./home.component.scss']\n})\nexport class HomeComponent implements OnInit {\n container: HTMLElement;\n constructor(private router: Router) { } \n\n ngOnInit() {\n this.container = document.getElementById('container');\n const height = window.innerHeight;\n this.container.style.height = `calc(${height}px - (64px + 61px))`;\n }\n\n next(): void {\n this.router.navigate(['/qrcode-scan'])\n }\n\n}\n","\n\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n

{{ \"general.pages.home.scanTutorial\" | translate }}

\n
\n
\n
\n\n
\n
\n \n
\n
\n","function fixProto(target, prototype) {\n var setPrototypeOf = Object.setPrototypeOf;\n setPrototypeOf ? setPrototypeOf(target, prototype) : target.__proto__ = prototype;\n}\nfunction fixStack(target, fn) {\n if (fn === void 0) {\n fn = target.constructor;\n }\n\n var captureStackTrace = Error.captureStackTrace;\n captureStackTrace && captureStackTrace(target, fn);\n}\n\nvar __extends = undefined && undefined.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar CustomError = function (_super) {\n __extends(CustomError, _super);\n\n function CustomError(message, options) {\n var _newTarget = this.constructor;\n\n var _this = _super.call(this, message, options) || this;\n\n Object.defineProperty(_this, 'name', {\n value: _newTarget.name,\n enumerable: false,\n configurable: true\n });\n fixProto(_this, _newTarget.prototype);\n fixStack(_this);\n return _this;\n }\n\n return CustomError;\n}(Error);\n\nvar __spreadArray = undefined && undefined.__spreadArray || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nfunction customErrorFactory(fn, parent) {\n if (parent === void 0) {\n parent = Error;\n }\n\n function CustomError() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n if (!(this instanceof CustomError)) return new (CustomError.bind.apply(CustomError, __spreadArray([void 0], args, false)))();\n parent.apply(this, args);\n Object.defineProperty(this, 'name', {\n value: fn.name || parent.name,\n enumerable: false,\n configurable: true\n });\n fn.apply(this, args);\n fixStack(this, CustomError);\n }\n\n return Object.defineProperties(CustomError, {\n prototype: {\n value: Object.create(parent.prototype, {\n constructor: {\n value: CustomError,\n writable: true,\n configurable: true\n }\n })\n }\n });\n}\n\nexport { CustomError, customErrorFactory };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CustomError } from 'ts-custom-error';\n/**\n * Custom Error class of type Exception.\n */\nvar Exception = /** @class */ (function (_super) {\n __extends(Exception, _super);\n /**\n * Allows Exception to be constructed directly\n * with some message and prototype definition.\n */\n function Exception(message) {\n if (message === void 0) { message = undefined; }\n var _this = _super.call(this, message) || this;\n _this.message = message;\n return _this;\n }\n Exception.prototype.getKind = function () {\n var ex = this.constructor;\n return ex.kind;\n };\n /**\n * It's typed as string so it can be extended and overriden.\n */\n Exception.kind = 'Exception';\n return Exception;\n}(CustomError));\nexport default Exception;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar ArgumentException = /** @class */ (function (_super) {\n __extends(ArgumentException, _super);\n function ArgumentException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ArgumentException.kind = 'ArgumentException';\n return ArgumentException;\n}(Exception));\nexport default ArgumentException;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar IllegalArgumentException = /** @class */ (function (_super) {\n __extends(IllegalArgumentException, _super);\n function IllegalArgumentException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IllegalArgumentException.kind = 'IllegalArgumentException';\n return IllegalArgumentException;\n}(Exception));\nexport default IllegalArgumentException;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport IllegalArgumentException from './IllegalArgumentException';\nvar BinaryBitmap = /** @class */ (function () {\n function BinaryBitmap(binarizer) {\n this.binarizer = binarizer;\n if (binarizer === null) {\n throw new IllegalArgumentException('Binarizer must be non-null.');\n }\n }\n /**\n * @return The width of the bitmap.\n */\n BinaryBitmap.prototype.getWidth = function () {\n return this.binarizer.getWidth();\n };\n /**\n * @return The height of the bitmap.\n */\n BinaryBitmap.prototype.getHeight = function () {\n return this.binarizer.getHeight();\n };\n /**\n * Converts one row of luminance data to 1 bit data. May actually do the conversion, or return\n * cached data. Callers should assume this method is expensive and call it as seldom as possible.\n * This method is intended for decoding 1D barcodes and may choose to apply sharpening.\n *\n * @param y The row to fetch, which must be in [0, bitmap height)\n * @param row An optional preallocated array. If null or too small, it will be ignored.\n * If used, the Binarizer will call BitArray.clear(). Always use the returned object.\n * @return The array of bits for this row (true means black).\n * @throws NotFoundException if row can't be binarized\n */\n BinaryBitmap.prototype.getBlackRow = function (y /*int*/, row) {\n return this.binarizer.getBlackRow(y, row);\n };\n /**\n * Converts a 2D array of luminance data to 1 bit. As above, assume this method is expensive\n * and do not call it repeatedly. This method is intended for decoding 2D barcodes and may or\n * may not apply sharpening. Therefore, a row from this matrix may not be identical to one\n * fetched using getBlackRow(), so don't mix and match between them.\n *\n * @return The 2D array of bits for the image (true means black).\n * @throws NotFoundException if image can't be binarized to make a matrix\n */\n BinaryBitmap.prototype.getBlackMatrix = function () {\n // The matrix is created on demand the first time it is requested, then cached. There are two\n // reasons for this:\n // 1. This work will never be done if the caller only installs 1D Reader objects, or if a\n // 1D Reader finds a barcode before the 2D Readers run.\n // 2. This work will only be done once even if the caller installs multiple 2D Readers.\n if (this.matrix === null || this.matrix === undefined) {\n this.matrix = this.binarizer.getBlackMatrix();\n }\n return this.matrix;\n };\n /**\n * @return Whether this bitmap can be cropped.\n */\n BinaryBitmap.prototype.isCropSupported = function () {\n return this.binarizer.getLuminanceSource().isCropSupported();\n };\n /**\n * Returns a new object with cropped image data. Implementations may keep a reference to the\n * original data rather than a copy. Only callable if isCropSupported() is true.\n *\n * @param left The left coordinate, which must be in [0,getWidth())\n * @param top The top coordinate, which must be in [0,getHeight())\n * @param width The width of the rectangle to crop.\n * @param height The height of the rectangle to crop.\n * @return A cropped version of this object.\n */\n BinaryBitmap.prototype.crop = function (left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n var newSource = this.binarizer.getLuminanceSource().crop(left, top, width, height);\n return new BinaryBitmap(this.binarizer.createBinarizer(newSource));\n };\n /**\n * @return Whether this bitmap supports counter-clockwise rotation.\n */\n BinaryBitmap.prototype.isRotateSupported = function () {\n return this.binarizer.getLuminanceSource().isRotateSupported();\n };\n /**\n * Returns a new object with rotated image data by 90 degrees counterclockwise.\n * Only callable if {@link #isRotateSupported()} is true.\n *\n * @return A rotated version of this object.\n */\n BinaryBitmap.prototype.rotateCounterClockwise = function () {\n var newSource = this.binarizer.getLuminanceSource().rotateCounterClockwise();\n return new BinaryBitmap(this.binarizer.createBinarizer(newSource));\n };\n /**\n * Returns a new object with rotated image data by 45 degrees counterclockwise.\n * Only callable if {@link #isRotateSupported()} is true.\n *\n * @return A rotated version of this object.\n */\n BinaryBitmap.prototype.rotateCounterClockwise45 = function () {\n var newSource = this.binarizer.getLuminanceSource().rotateCounterClockwise45();\n return new BinaryBitmap(this.binarizer.createBinarizer(newSource));\n };\n /*@Override*/\n BinaryBitmap.prototype.toString = function () {\n try {\n return this.getBlackMatrix().toString();\n }\n catch (e /*: NotFoundException*/) {\n return '';\n }\n };\n return BinaryBitmap;\n}());\nexport default BinaryBitmap;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar ChecksumException = /** @class */ (function (_super) {\n __extends(ChecksumException, _super);\n function ChecksumException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ChecksumException.getChecksumInstance = function () {\n return new ChecksumException();\n };\n ChecksumException.kind = 'ChecksumException';\n return ChecksumException;\n}(Exception));\nexport default ChecksumException;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * This class hierarchy provides a set of methods to convert luminance data to 1 bit data.\n * It allows the algorithm to vary polymorphically, for example allowing a very expensive\n * thresholding technique for servers and a fast one for mobile. It also permits the implementation\n * to vary, e.g. a JNI version for Android and a Java fallback version for other platforms.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n */\nvar Binarizer = /** @class */ (function () {\n function Binarizer(source) {\n this.source = source;\n }\n Binarizer.prototype.getLuminanceSource = function () {\n return this.source;\n };\n Binarizer.prototype.getWidth = function () {\n return this.source.getWidth();\n };\n Binarizer.prototype.getHeight = function () {\n return this.source.getHeight();\n };\n return Binarizer;\n}());\nexport default Binarizer;\n","var System = /** @class */ (function () {\n function System() {\n }\n // public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)\n /**\n * Makes a copy of a array.\n */\n System.arraycopy = function (src, srcPos, dest, destPos, length) {\n // TODO: better use split or set?\n while (length--) {\n dest[destPos++] = src[srcPos++];\n }\n };\n /**\n * Returns the current time in milliseconds.\n */\n System.currentTimeMillis = function () {\n return Date.now();\n };\n return System;\n}());\nexport default System;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar IndexOutOfBoundsException = /** @class */ (function (_super) {\n __extends(IndexOutOfBoundsException, _super);\n function IndexOutOfBoundsException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IndexOutOfBoundsException.kind = 'IndexOutOfBoundsException';\n return IndexOutOfBoundsException;\n}(Exception));\nexport default IndexOutOfBoundsException;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport IndexOutOfBoundsException from './IndexOutOfBoundsException';\n/**\n * Custom Error class of type Exception.\n */\nvar ArrayIndexOutOfBoundsException = /** @class */ (function (_super) {\n __extends(ArrayIndexOutOfBoundsException, _super);\n function ArrayIndexOutOfBoundsException(index, message) {\n if (index === void 0) { index = undefined; }\n if (message === void 0) { message = undefined; }\n var _this = _super.call(this, message) || this;\n _this.index = index;\n _this.message = message;\n return _this;\n }\n ArrayIndexOutOfBoundsException.kind = 'ArrayIndexOutOfBoundsException';\n return ArrayIndexOutOfBoundsException;\n}(IndexOutOfBoundsException));\nexport default ArrayIndexOutOfBoundsException;\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport System from './System';\nimport IllegalArgumentException from '../IllegalArgumentException';\nimport ArrayIndexOutOfBoundsException from '../ArrayIndexOutOfBoundsException';\nvar Arrays = /** @class */ (function () {\n function Arrays() {\n }\n /**\n * Assigns the specified int value to each element of the specified array\n * of ints.\n *\n * @param a the array to be filled\n * @param val the value to be stored in all elements of the array\n */\n Arrays.fill = function (a, val) {\n for (var i = 0, len = a.length; i < len; i++)\n a[i] = val;\n };\n /**\n * Assigns the specified int value to each element of the specified\n * range of the specified array of ints. The range to be filled\n * extends from index {@code fromIndex}, inclusive, to index\n * {@code toIndex}, exclusive. (If {@code fromIndex==toIndex}, the\n * range to be filled is empty.)\n *\n * @param a the array to be filled\n * @param fromIndex the index of the first element (inclusive) to be\n * filled with the specified value\n * @param toIndex the index of the last element (exclusive) to be\n * filled with the specified value\n * @param val the value to be stored in all elements of the array\n * @throws IllegalArgumentException if {@code fromIndex > toIndex}\n * @throws ArrayIndexOutOfBoundsException if {@code fromIndex < 0} or\n * {@code toIndex > a.length}\n */\n Arrays.fillWithin = function (a, fromIndex, toIndex, val) {\n Arrays.rangeCheck(a.length, fromIndex, toIndex);\n for (var i = fromIndex; i < toIndex; i++)\n a[i] = val;\n };\n /**\n * Checks that {@code fromIndex} and {@code toIndex} are in\n * the range and throws an exception if they aren't.\n */\n Arrays.rangeCheck = function (arrayLength, fromIndex, toIndex) {\n if (fromIndex > toIndex) {\n throw new IllegalArgumentException('fromIndex(' + fromIndex + ') > toIndex(' + toIndex + ')');\n }\n if (fromIndex < 0) {\n throw new ArrayIndexOutOfBoundsException(fromIndex);\n }\n if (toIndex > arrayLength) {\n throw new ArrayIndexOutOfBoundsException(toIndex);\n }\n };\n Arrays.asList = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return args;\n };\n Arrays.create = function (rows, cols, value) {\n var arr = Array.from({ length: rows });\n return arr.map(function (x) { return Array.from({ length: cols }).fill(value); });\n };\n Arrays.createInt32Array = function (rows, cols, value) {\n var arr = Array.from({ length: rows });\n return arr.map(function (x) { return Int32Array.from({ length: cols }).fill(value); });\n };\n Arrays.equals = function (first, second) {\n if (!first) {\n return false;\n }\n if (!second) {\n return false;\n }\n if (!first.length) {\n return false;\n }\n if (!second.length) {\n return false;\n }\n if (first.length !== second.length) {\n return false;\n }\n for (var i = 0, length_1 = first.length; i < length_1; i++) {\n if (first[i] !== second[i]) {\n return false;\n }\n }\n return true;\n };\n Arrays.hashCode = function (a) {\n var e_1, _a;\n if (a === null) {\n return 0;\n }\n var result = 1;\n try {\n for (var a_1 = __values(a), a_1_1 = a_1.next(); !a_1_1.done; a_1_1 = a_1.next()) {\n var element = a_1_1.value;\n result = 31 * result + element;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (a_1_1 && !a_1_1.done && (_a = a_1.return)) _a.call(a_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return result;\n };\n Arrays.fillUint8Array = function (a, value) {\n for (var i = 0; i !== a.length; i++) {\n a[i] = value;\n }\n };\n Arrays.copyOf = function (original, newLength) {\n return original.slice(0, newLength);\n };\n Arrays.copyOfUint8Array = function (original, newLength) {\n if (original.length <= newLength) {\n var newArray = new Uint8Array(newLength);\n newArray.set(original);\n return newArray;\n }\n return original.slice(0, newLength);\n };\n Arrays.copyOfRange = function (original, from, to) {\n var newLength = to - from;\n var copy = new Int32Array(newLength);\n System.arraycopy(original, from, copy, 0, newLength);\n return copy;\n };\n /*\n * Returns the index of of the element in a sorted array or (-n-1) where n is the insertion point\n * for the new element.\n * Parameters:\n * ar - A sorted array\n * el - An element to search for\n * comparator - A comparator function. The function takes two arguments: (a, b) and returns:\n * a negative number if a is less than b;\n * 0 if a is equal to b;\n * a positive number of a is greater than b.\n * The array may contain duplicate elements. If there are more than one equal elements in the array,\n * the returned value can be the index of any one of the equal elements.\n *\n * http://jsfiddle.net/aryzhov/pkfst550/\n */\n Arrays.binarySearch = function (ar, el, comparator) {\n if (undefined === comparator) {\n comparator = Arrays.numberComparator;\n }\n var m = 0;\n var n = ar.length - 1;\n while (m <= n) {\n var k = (n + m) >> 1;\n var cmp = comparator(el, ar[k]);\n if (cmp > 0) {\n m = k + 1;\n }\n else if (cmp < 0) {\n n = k - 1;\n }\n else {\n return k;\n }\n }\n return -m - 1;\n };\n Arrays.numberComparator = function (a, b) {\n return a - b;\n };\n return Arrays;\n}());\nexport default Arrays;\n","/**\n * Ponyfill for Java's Integer class.\n */\nvar Integer = /** @class */ (function () {\n function Integer() {\n }\n Integer.numberOfTrailingZeros = function (i) {\n var y;\n if (i === 0)\n return 32;\n var n = 31;\n y = i << 16;\n if (y !== 0) {\n n -= 16;\n i = y;\n }\n y = i << 8;\n if (y !== 0) {\n n -= 8;\n i = y;\n }\n y = i << 4;\n if (y !== 0) {\n n -= 4;\n i = y;\n }\n y = i << 2;\n if (y !== 0) {\n n -= 2;\n i = y;\n }\n return n - ((i << 1) >>> 31);\n };\n Integer.numberOfLeadingZeros = function (i) {\n // HD, Figure 5-6\n if (i === 0) {\n return 32;\n }\n var n = 1;\n if (i >>> 16 === 0) {\n n += 16;\n i <<= 16;\n }\n if (i >>> 24 === 0) {\n n += 8;\n i <<= 8;\n }\n if (i >>> 28 === 0) {\n n += 4;\n i <<= 4;\n }\n if (i >>> 30 === 0) {\n n += 2;\n i <<= 2;\n }\n n -= i >>> 31;\n return n;\n };\n Integer.toHexString = function (i) {\n return i.toString(16);\n };\n Integer.toBinaryString = function (intNumber) {\n return String(parseInt(String(intNumber), 2));\n };\n // Returns the number of one-bits in the two's complement binary representation of the specified int value. This function is sometimes referred to as the population count.\n // Returns:\n // the number of one-bits in the two's complement binary representation of the specified int value.\n Integer.bitCount = function (i) {\n // HD, Figure 5-2\n i = i - ((i >>> 1) & 0x55555555);\n i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);\n i = (i + (i >>> 4)) & 0x0f0f0f0f;\n i = i + (i >>> 8);\n i = i + (i >>> 16);\n return i & 0x3f;\n };\n Integer.truncDivision = function (dividend, divisor) {\n return Math.trunc(dividend / divisor);\n };\n /**\n * Converts A string to an integer.\n * @param s A string to convert into a number.\n * @param radix A value between 2 and 36 that specifies the base of the number in numString. If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. All other strings are considered decimal.\n */\n Integer.parseInt = function (num, radix) {\n if (radix === void 0) { radix = undefined; }\n return parseInt(num, radix);\n };\n Integer.MIN_VALUE_32_BITS = -2147483648;\n Integer.MAX_VALUE = Number.MAX_SAFE_INTEGER;\n return Integer;\n}());\nexport default Integer;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.common {*/\n/*import java.util.Arrays;*/\nimport IllegalArgumentException from '../IllegalArgumentException';\nimport Arrays from '../util/Arrays';\nimport Integer from '../util/Integer';\nimport System from '../util/System';\n/**\n *

A simple, fast array of bits, represented compactly by an array of ints internally.

\n *\n * @author Sean Owen\n */\nvar BitArray /*implements Cloneable*/ = /** @class */ (function () {\n // public constructor() {\n // this.size = 0\n // this.bits = new Int32Array(1)\n // }\n // public constructor(size?: number /*int*/) {\n // if (undefined === size) {\n // this.size = 0\n // } else {\n // this.size = size\n // }\n // this.bits = this.makeArray(size)\n // }\n // For testing only\n function BitArray(size /*int*/, bits) {\n if (undefined === size) {\n this.size = 0;\n this.bits = new Int32Array(1);\n }\n else {\n this.size = size;\n if (undefined === bits || null === bits) {\n this.bits = BitArray.makeArray(size);\n }\n else {\n this.bits = bits;\n }\n }\n }\n BitArray.prototype.getSize = function () {\n return this.size;\n };\n BitArray.prototype.getSizeInBytes = function () {\n return Math.floor((this.size + 7) / 8);\n };\n BitArray.prototype.ensureCapacity = function (size /*int*/) {\n if (size > this.bits.length * 32) {\n var newBits = BitArray.makeArray(size);\n System.arraycopy(this.bits, 0, newBits, 0, this.bits.length);\n this.bits = newBits;\n }\n };\n /**\n * @param i bit to get\n * @return true iff bit i is set\n */\n BitArray.prototype.get = function (i /*int*/) {\n return (this.bits[Math.floor(i / 32)] & (1 << (i & 0x1F))) !== 0;\n };\n /**\n * Sets bit i.\n *\n * @param i bit to set\n */\n BitArray.prototype.set = function (i /*int*/) {\n this.bits[Math.floor(i / 32)] |= 1 << (i & 0x1F);\n };\n /**\n * Flips bit i.\n *\n * @param i bit to set\n */\n BitArray.prototype.flip = function (i /*int*/) {\n this.bits[Math.floor(i / 32)] ^= 1 << (i & 0x1F);\n };\n /**\n * @param from first bit to check\n * @return index of first bit that is set, starting from the given index, or size if none are set\n * at or beyond this given index\n * @see #getNextUnset(int)\n */\n BitArray.prototype.getNextSet = function (from /*int*/) {\n var size = this.size;\n if (from >= size) {\n return size;\n }\n var bits = this.bits;\n var bitsOffset = Math.floor(from / 32);\n var currentBits = bits[bitsOffset];\n // mask off lesser bits first\n currentBits &= ~((1 << (from & 0x1F)) - 1);\n var length = bits.length;\n while (currentBits === 0) {\n if (++bitsOffset === length) {\n return size;\n }\n currentBits = bits[bitsOffset];\n }\n var result = (bitsOffset * 32) + Integer.numberOfTrailingZeros(currentBits);\n return result > size ? size : result;\n };\n /**\n * @param from index to start looking for unset bit\n * @return index of next unset bit, or {@code size} if none are unset until the end\n * @see #getNextSet(int)\n */\n BitArray.prototype.getNextUnset = function (from /*int*/) {\n var size = this.size;\n if (from >= size) {\n return size;\n }\n var bits = this.bits;\n var bitsOffset = Math.floor(from / 32);\n var currentBits = ~bits[bitsOffset];\n // mask off lesser bits first\n currentBits &= ~((1 << (from & 0x1F)) - 1);\n var length = bits.length;\n while (currentBits === 0) {\n if (++bitsOffset === length) {\n return size;\n }\n currentBits = ~bits[bitsOffset];\n }\n var result = (bitsOffset * 32) + Integer.numberOfTrailingZeros(currentBits);\n return result > size ? size : result;\n };\n /**\n * Sets a block of 32 bits, starting at bit i.\n *\n * @param i first bit to set\n * @param newBits the new value of the next 32 bits. Note again that the least-significant bit\n * corresponds to bit i, the next-least-significant to i+1, and so on.\n */\n BitArray.prototype.setBulk = function (i /*int*/, newBits /*int*/) {\n this.bits[Math.floor(i / 32)] = newBits;\n };\n /**\n * Sets a range of bits.\n *\n * @param start start of range, inclusive.\n * @param end end of range, exclusive\n */\n BitArray.prototype.setRange = function (start /*int*/, end /*int*/) {\n if (end < start || start < 0 || end > this.size) {\n throw new IllegalArgumentException();\n }\n if (end === start) {\n return;\n }\n end--; // will be easier to treat this as the last actually set bit -- inclusive\n var firstInt = Math.floor(start / 32);\n var lastInt = Math.floor(end / 32);\n var bits = this.bits;\n for (var i = firstInt; i <= lastInt; i++) {\n var firstBit = i > firstInt ? 0 : start & 0x1F;\n var lastBit = i < lastInt ? 31 : end & 0x1F;\n // Ones from firstBit to lastBit, inclusive\n var mask = (2 << lastBit) - (1 << firstBit);\n bits[i] |= mask;\n }\n };\n /**\n * Clears all bits (sets to false).\n */\n BitArray.prototype.clear = function () {\n var max = this.bits.length;\n var bits = this.bits;\n for (var i = 0; i < max; i++) {\n bits[i] = 0;\n }\n };\n /**\n * Efficient method to check if a range of bits is set, or not set.\n *\n * @param start start of range, inclusive.\n * @param end end of range, exclusive\n * @param value if true, checks that bits in range are set, otherwise checks that they are not set\n * @return true iff all bits are set or not set in range, according to value argument\n * @throws IllegalArgumentException if end is less than start or the range is not contained in the array\n */\n BitArray.prototype.isRange = function (start /*int*/, end /*int*/, value) {\n if (end < start || start < 0 || end > this.size) {\n throw new IllegalArgumentException();\n }\n if (end === start) {\n return true; // empty range matches\n }\n end--; // will be easier to treat this as the last actually set bit -- inclusive\n var firstInt = Math.floor(start / 32);\n var lastInt = Math.floor(end / 32);\n var bits = this.bits;\n for (var i = firstInt; i <= lastInt; i++) {\n var firstBit = i > firstInt ? 0 : start & 0x1F;\n var lastBit = i < lastInt ? 31 : end & 0x1F;\n // Ones from firstBit to lastBit, inclusive\n var mask = (2 << lastBit) - (1 << firstBit) & 0xFFFFFFFF;\n // TYPESCRIPTPORT: & 0xFFFFFFFF added to discard anything after 32 bits, as ES has 53 bits\n // Return false if we're looking for 1s and the masked bits[i] isn't all 1s (is: that,\n // equals the mask, or we're looking for 0s and the masked portion is not all 0s\n if ((bits[i] & mask) !== (value ? mask : 0)) {\n return false;\n }\n }\n return true;\n };\n BitArray.prototype.appendBit = function (bit) {\n this.ensureCapacity(this.size + 1);\n if (bit) {\n this.bits[Math.floor(this.size / 32)] |= 1 << (this.size & 0x1F);\n }\n this.size++;\n };\n /**\n * Appends the least-significant bits, from value, in order from most-significant to\n * least-significant. For example, appending 6 bits from 0x000001E will append the bits\n * 0, 1, 1, 1, 1, 0 in that order.\n *\n * @param value {@code int} containing bits to append\n * @param numBits bits from value to append\n */\n BitArray.prototype.appendBits = function (value /*int*/, numBits /*int*/) {\n if (numBits < 0 || numBits > 32) {\n throw new IllegalArgumentException('Num bits must be between 0 and 32');\n }\n this.ensureCapacity(this.size + numBits);\n // const appendBit = this.appendBit;\n for (var numBitsLeft = numBits; numBitsLeft > 0; numBitsLeft--) {\n this.appendBit(((value >> (numBitsLeft - 1)) & 0x01) === 1);\n }\n };\n BitArray.prototype.appendBitArray = function (other) {\n var otherSize = other.size;\n this.ensureCapacity(this.size + otherSize);\n // const appendBit = this.appendBit;\n for (var i = 0; i < otherSize; i++) {\n this.appendBit(other.get(i));\n }\n };\n BitArray.prototype.xor = function (other) {\n if (this.size !== other.size) {\n throw new IllegalArgumentException('Sizes don\\'t match');\n }\n var bits = this.bits;\n for (var i = 0, length_1 = bits.length; i < length_1; i++) {\n // The last int could be incomplete (i.e. not have 32 bits in\n // it) but there is no problem since 0 XOR 0 == 0.\n bits[i] ^= other.bits[i];\n }\n };\n /**\n *\n * @param bitOffset first bit to start writing\n * @param array array to write into. Bytes are written most-significant byte first. This is the opposite\n * of the internal representation, which is exposed by {@link #getBitArray()}\n * @param offset position in array to start writing\n * @param numBytes how many bytes to write\n */\n BitArray.prototype.toBytes = function (bitOffset /*int*/, array, offset /*int*/, numBytes /*int*/) {\n for (var i = 0; i < numBytes; i++) {\n var theByte = 0;\n for (var j = 0; j < 8; j++) {\n if (this.get(bitOffset)) {\n theByte |= 1 << (7 - j);\n }\n bitOffset++;\n }\n array[offset + i] = /*(byte)*/ theByte;\n }\n };\n /**\n * @return underlying array of ints. The first element holds the first 32 bits, and the least\n * significant bit is bit 0.\n */\n BitArray.prototype.getBitArray = function () {\n return this.bits;\n };\n /**\n * Reverses all bits in the array.\n */\n BitArray.prototype.reverse = function () {\n var newBits = new Int32Array(this.bits.length);\n // reverse all int's first\n var len = Math.floor((this.size - 1) / 32);\n var oldBitsLen = len + 1;\n var bits = this.bits;\n for (var i = 0; i < oldBitsLen; i++) {\n var x = bits[i];\n x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1);\n x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2);\n x = ((x >> 4) & 0x0f0f0f0f) | ((x & 0x0f0f0f0f) << 4);\n x = ((x >> 8) & 0x00ff00ff) | ((x & 0x00ff00ff) << 8);\n x = ((x >> 16) & 0x0000ffff) | ((x & 0x0000ffff) << 16);\n newBits[len - i] = /*(int)*/ x;\n }\n // now correct the int's if the bit size isn't a multiple of 32\n if (this.size !== oldBitsLen * 32) {\n var leftOffset = oldBitsLen * 32 - this.size;\n var currentInt = newBits[0] >>> leftOffset;\n for (var i = 1; i < oldBitsLen; i++) {\n var nextInt = newBits[i];\n currentInt |= nextInt << (32 - leftOffset);\n newBits[i - 1] = currentInt;\n currentInt = nextInt >>> leftOffset;\n }\n newBits[oldBitsLen - 1] = currentInt;\n }\n this.bits = newBits;\n };\n BitArray.makeArray = function (size /*int*/) {\n return new Int32Array(Math.floor((size + 31) / 32));\n };\n /*@Override*/\n BitArray.prototype.equals = function (o) {\n if (!(o instanceof BitArray)) {\n return false;\n }\n var other = o;\n return this.size === other.size && Arrays.equals(this.bits, other.bits);\n };\n /*@Override*/\n BitArray.prototype.hashCode = function () {\n return 31 * this.size + Arrays.hashCode(this.bits);\n };\n /*@Override*/\n BitArray.prototype.toString = function () {\n var result = '';\n for (var i = 0, size = this.size; i < size; i++) {\n if ((i & 0x07) === 0) {\n result += ' ';\n }\n result += this.get(i) ? 'X' : '.';\n }\n return result;\n };\n /*@Override*/\n BitArray.prototype.clone = function () {\n return new BitArray(this.size, this.bits.slice());\n };\n /**\n * converts to boolean array.\n */\n BitArray.prototype.toArray = function () {\n var result = [];\n for (var i = 0, size = this.size; i < size; i++) {\n result.push(this.get(i));\n }\n return result;\n };\n return BitArray;\n}());\nexport default BitArray;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing {*/\n/**\n * Encapsulates a type of hint that a caller may pass to a barcode reader to help it\n * more quickly or accurately decode it. It is up to implementations to decide what,\n * if anything, to do with the information that is supplied.\n *\n * @author Sean Owen\n * @author dswitkin@google.com (Daniel Switkin)\n * @see Reader#decode(BinaryBitmap,java.util.Map)\n */\nvar DecodeHintType;\n(function (DecodeHintType) {\n /**\n * Unspecified, application-specific hint. Maps to an unspecified {@link Object}.\n */\n DecodeHintType[DecodeHintType[\"OTHER\"] = 0] = \"OTHER\"; /*(Object.class)*/\n /**\n * Image is a pure monochrome image of a barcode. Doesn't matter what it maps to;\n * use {@link Boolean#TRUE}.\n */\n DecodeHintType[DecodeHintType[\"PURE_BARCODE\"] = 1] = \"PURE_BARCODE\"; /*(Void.class)*/\n /**\n * Image is known to be of one of a few possible formats.\n * Maps to a {@link List} of {@link BarcodeFormat}s.\n */\n DecodeHintType[DecodeHintType[\"POSSIBLE_FORMATS\"] = 2] = \"POSSIBLE_FORMATS\"; /*(List.class)*/\n /**\n * Spend more time to try to find a barcode; optimize for accuracy, not speed.\n * Doesn't matter what it maps to; use {@link Boolean#TRUE}.\n */\n DecodeHintType[DecodeHintType[\"TRY_HARDER\"] = 3] = \"TRY_HARDER\"; /*(Void.class)*/\n /**\n * Specifies what character encoding to use when decoding, where applicable (type String)\n */\n DecodeHintType[DecodeHintType[\"CHARACTER_SET\"] = 4] = \"CHARACTER_SET\"; /*(String.class)*/\n /**\n * Allowed lengths of encoded data -- reject anything else. Maps to an {@code Int32Array}.\n */\n DecodeHintType[DecodeHintType[\"ALLOWED_LENGTHS\"] = 5] = \"ALLOWED_LENGTHS\"; /*(Int32Array.class)*/\n /**\n * Assume Code 39 codes employ a check digit. Doesn't matter what it maps to;\n * use {@link Boolean#TRUE}.\n */\n DecodeHintType[DecodeHintType[\"ASSUME_CODE_39_CHECK_DIGIT\"] = 6] = \"ASSUME_CODE_39_CHECK_DIGIT\"; /*(Void.class)*/\n /**\n * Enable extended mode for Code 39 codes. Doesn't matter what it maps to;\n * use {@link Boolean#TRUE}.\n */\n DecodeHintType[DecodeHintType[\"ENABLE_CODE_39_EXTENDED_MODE\"] = 7] = \"ENABLE_CODE_39_EXTENDED_MODE\"; /*(Void.class)*/\n /**\n * Assume the barcode is being processed as a GS1 barcode, and modify behavior as needed.\n * For example this affects FNC1 handling for Code 128 (aka GS1-128). Doesn't matter what it maps to;\n * use {@link Boolean#TRUE}.\n */\n DecodeHintType[DecodeHintType[\"ASSUME_GS1\"] = 8] = \"ASSUME_GS1\"; /*(Void.class)*/\n /**\n * If true, return the start and end digits in a Codabar barcode instead of stripping them. They\n * are alpha, whereas the rest are numeric. By default, they are stripped, but this causes them\n * to not be. Doesn't matter what it maps to; use {@link Boolean#TRUE}.\n */\n DecodeHintType[DecodeHintType[\"RETURN_CODABAR_START_END\"] = 9] = \"RETURN_CODABAR_START_END\"; /*(Void.class)*/\n /**\n * The caller needs to be notified via callback when a possible {@link ResultPoint}\n * is found. Maps to a {@link ResultPointCallback}.\n */\n DecodeHintType[DecodeHintType[\"NEED_RESULT_POINT_CALLBACK\"] = 10] = \"NEED_RESULT_POINT_CALLBACK\"; /*(ResultPointCallback.class)*/\n /**\n * Allowed extension lengths for EAN or UPC barcodes. Other formats will ignore this.\n * Maps to an {@code Int32Array} of the allowed extension lengths, for example [2], [5], or [2, 5].\n * If it is optional to have an extension, do not set this hint. If this is set,\n * and a UPC or EAN barcode is found but an extension is not, then no result will be returned\n * at all.\n */\n DecodeHintType[DecodeHintType[\"ALLOWED_EAN_EXTENSIONS\"] = 11] = \"ALLOWED_EAN_EXTENSIONS\"; /*(Int32Array.class)*/\n // End of enumeration values.\n /**\n * Data type the hint is expecting.\n * Among the possible values the {@link Void} stands out as being used for\n * hints that do not expect a value to be supplied (flag hints). Such hints\n * will possibly have their value ignored, or replaced by a\n * {@link Boolean#TRUE}. Hint suppliers should probably use\n * {@link Boolean#TRUE} as directed by the actual hint documentation.\n */\n // private valueType: Class\n // DecodeHintType(valueType: Class) {\n // this.valueType = valueType\n // }\n // public getValueType(): Class {\n // return valueType\n // }\n})(DecodeHintType || (DecodeHintType = {}));\nexport default DecodeHintType;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar FormatException = /** @class */ (function (_super) {\n __extends(FormatException, _super);\n function FormatException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FormatException.getFormatInstance = function () {\n return new FormatException();\n };\n FormatException.kind = 'FormatException';\n return FormatException;\n}(Exception));\nexport default FormatException;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.common {*/\nimport FormatException from '../FormatException';\n/*import java.util.HashMap;*/\n/*import java.util.Map;*/\nexport var CharacterSetValueIdentifiers;\n(function (CharacterSetValueIdentifiers) {\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp437\"] = 0] = \"Cp437\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_1\"] = 1] = \"ISO8859_1\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_2\"] = 2] = \"ISO8859_2\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_3\"] = 3] = \"ISO8859_3\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_4\"] = 4] = \"ISO8859_4\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_5\"] = 5] = \"ISO8859_5\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_6\"] = 6] = \"ISO8859_6\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_7\"] = 7] = \"ISO8859_7\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_8\"] = 8] = \"ISO8859_8\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_9\"] = 9] = \"ISO8859_9\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_10\"] = 10] = \"ISO8859_10\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_11\"] = 11] = \"ISO8859_11\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_13\"] = 12] = \"ISO8859_13\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_14\"] = 13] = \"ISO8859_14\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_15\"] = 14] = \"ISO8859_15\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_16\"] = 15] = \"ISO8859_16\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"SJIS\"] = 16] = \"SJIS\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1250\"] = 17] = \"Cp1250\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1251\"] = 18] = \"Cp1251\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1252\"] = 19] = \"Cp1252\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1256\"] = 20] = \"Cp1256\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"UnicodeBigUnmarked\"] = 21] = \"UnicodeBigUnmarked\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"UTF8\"] = 22] = \"UTF8\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ASCII\"] = 23] = \"ASCII\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Big5\"] = 24] = \"Big5\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"GB18030\"] = 25] = \"GB18030\";\n CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"EUC_KR\"] = 26] = \"EUC_KR\";\n})(CharacterSetValueIdentifiers || (CharacterSetValueIdentifiers = {}));\n/**\n * Encapsulates a Character Set ECI, according to \"Extended Channel Interpretations\" 5.3.1.1\n * of ISO 18004.\n *\n * @author Sean Owen\n */\nvar CharacterSetECI = /** @class */ (function () {\n function CharacterSetECI(valueIdentifier, valuesParam, name) {\n var e_1, _a;\n var otherEncodingNames = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n otherEncodingNames[_i - 3] = arguments[_i];\n }\n this.valueIdentifier = valueIdentifier;\n this.name = name;\n if (typeof valuesParam === 'number') {\n this.values = Int32Array.from([valuesParam]);\n }\n else {\n this.values = valuesParam;\n }\n this.otherEncodingNames = otherEncodingNames;\n CharacterSetECI.VALUE_IDENTIFIER_TO_ECI.set(valueIdentifier, this);\n CharacterSetECI.NAME_TO_ECI.set(name, this);\n var values = this.values;\n for (var i = 0, length_1 = values.length; i !== length_1; i++) {\n var v = values[i];\n CharacterSetECI.VALUES_TO_ECI.set(v, this);\n }\n try {\n for (var otherEncodingNames_1 = __values(otherEncodingNames), otherEncodingNames_1_1 = otherEncodingNames_1.next(); !otherEncodingNames_1_1.done; otherEncodingNames_1_1 = otherEncodingNames_1.next()) {\n var otherName = otherEncodingNames_1_1.value;\n CharacterSetECI.NAME_TO_ECI.set(otherName, this);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (otherEncodingNames_1_1 && !otherEncodingNames_1_1.done && (_a = otherEncodingNames_1.return)) _a.call(otherEncodingNames_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n // CharacterSetECI(value: number /*int*/) {\n // this(new Int32Array {value})\n // }\n // CharacterSetECI(value: number /*int*/, String... otherEncodingNames) {\n // this.values = new Int32Array {value}\n // this.otherEncodingNames = otherEncodingNames\n // }\n // CharacterSetECI(values: Int32Array, String... otherEncodingNames) {\n // this.values = values\n // this.otherEncodingNames = otherEncodingNames\n // }\n CharacterSetECI.prototype.getValueIdentifier = function () {\n return this.valueIdentifier;\n };\n CharacterSetECI.prototype.getName = function () {\n return this.name;\n };\n CharacterSetECI.prototype.getValue = function () {\n return this.values[0];\n };\n /**\n * @param value character set ECI value\n * @return {@code CharacterSetECI} representing ECI of given value, or null if it is legal but\n * unsupported\n * @throws FormatException if ECI value is invalid\n */\n CharacterSetECI.getCharacterSetECIByValue = function (value /*int*/) {\n if (value < 0 || value >= 900) {\n throw new FormatException('incorect value');\n }\n var characterSet = CharacterSetECI.VALUES_TO_ECI.get(value);\n if (undefined === characterSet) {\n throw new FormatException('incorect value');\n }\n return characterSet;\n };\n /**\n * @param name character set ECI encoding name\n * @return CharacterSetECI representing ECI for character encoding, or null if it is legal\n * but unsupported\n */\n CharacterSetECI.getCharacterSetECIByName = function (name) {\n var characterSet = CharacterSetECI.NAME_TO_ECI.get(name);\n if (undefined === characterSet) {\n throw new FormatException('incorect value');\n }\n return characterSet;\n };\n CharacterSetECI.prototype.equals = function (o) {\n if (!(o instanceof CharacterSetECI)) {\n return false;\n }\n var other = o;\n return this.getName() === other.getName();\n };\n CharacterSetECI.VALUE_IDENTIFIER_TO_ECI = new Map();\n CharacterSetECI.VALUES_TO_ECI = new Map();\n CharacterSetECI.NAME_TO_ECI = new Map();\n // Enum name is a Java encoding valid for java.lang and java.io\n // TYPESCRIPTPORT: changed the main label for ISO as the TextEncoder did not recognized them in the form from java\n // (eg ISO8859_1 must be ISO88591 or ISO8859-1 or ISO-8859-1)\n // later on: well, except 16 wich does not work with ISO885916 so used ISO-8859-1 form for default\n CharacterSetECI.Cp437 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp437, Int32Array.from([0, 2]), 'Cp437');\n CharacterSetECI.ISO8859_1 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_1, Int32Array.from([1, 3]), 'ISO-8859-1', 'ISO88591', 'ISO8859_1');\n CharacterSetECI.ISO8859_2 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_2, 4, 'ISO-8859-2', 'ISO88592', 'ISO8859_2');\n CharacterSetECI.ISO8859_3 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_3, 5, 'ISO-8859-3', 'ISO88593', 'ISO8859_3');\n CharacterSetECI.ISO8859_4 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_4, 6, 'ISO-8859-4', 'ISO88594', 'ISO8859_4');\n CharacterSetECI.ISO8859_5 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_5, 7, 'ISO-8859-5', 'ISO88595', 'ISO8859_5');\n CharacterSetECI.ISO8859_6 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_6, 8, 'ISO-8859-6', 'ISO88596', 'ISO8859_6');\n CharacterSetECI.ISO8859_7 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_7, 9, 'ISO-8859-7', 'ISO88597', 'ISO8859_7');\n CharacterSetECI.ISO8859_8 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_8, 10, 'ISO-8859-8', 'ISO88598', 'ISO8859_8');\n CharacterSetECI.ISO8859_9 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_9, 11, 'ISO-8859-9', 'ISO88599', 'ISO8859_9');\n CharacterSetECI.ISO8859_10 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_10, 12, 'ISO-8859-10', 'ISO885910', 'ISO8859_10');\n CharacterSetECI.ISO8859_11 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_11, 13, 'ISO-8859-11', 'ISO885911', 'ISO8859_11');\n CharacterSetECI.ISO8859_13 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_13, 15, 'ISO-8859-13', 'ISO885913', 'ISO8859_13');\n CharacterSetECI.ISO8859_14 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_14, 16, 'ISO-8859-14', 'ISO885914', 'ISO8859_14');\n CharacterSetECI.ISO8859_15 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_15, 17, 'ISO-8859-15', 'ISO885915', 'ISO8859_15');\n CharacterSetECI.ISO8859_16 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_16, 18, 'ISO-8859-16', 'ISO885916', 'ISO8859_16');\n CharacterSetECI.SJIS = new CharacterSetECI(CharacterSetValueIdentifiers.SJIS, 20, 'SJIS', 'Shift_JIS');\n CharacterSetECI.Cp1250 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1250, 21, 'Cp1250', 'windows-1250');\n CharacterSetECI.Cp1251 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1251, 22, 'Cp1251', 'windows-1251');\n CharacterSetECI.Cp1252 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1252, 23, 'Cp1252', 'windows-1252');\n CharacterSetECI.Cp1256 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1256, 24, 'Cp1256', 'windows-1256');\n CharacterSetECI.UnicodeBigUnmarked = new CharacterSetECI(CharacterSetValueIdentifiers.UnicodeBigUnmarked, 25, 'UnicodeBigUnmarked', 'UTF-16BE', 'UnicodeBig');\n CharacterSetECI.UTF8 = new CharacterSetECI(CharacterSetValueIdentifiers.UTF8, 26, 'UTF8', 'UTF-8');\n CharacterSetECI.ASCII = new CharacterSetECI(CharacterSetValueIdentifiers.ASCII, Int32Array.from([27, 170]), 'ASCII', 'US-ASCII');\n CharacterSetECI.Big5 = new CharacterSetECI(CharacterSetValueIdentifiers.Big5, 28, 'Big5');\n CharacterSetECI.GB18030 = new CharacterSetECI(CharacterSetValueIdentifiers.GB18030, 29, 'GB18030', 'GB2312', 'EUC_CN', 'GBK');\n CharacterSetECI.EUC_KR = new CharacterSetECI(CharacterSetValueIdentifiers.EUC_KR, 30, 'EUC_KR', 'EUC-KR');\n return CharacterSetECI;\n}());\nexport default CharacterSetECI;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar UnsupportedOperationException = /** @class */ (function (_super) {\n __extends(UnsupportedOperationException, _super);\n function UnsupportedOperationException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n UnsupportedOperationException.kind = 'UnsupportedOperationException';\n return UnsupportedOperationException;\n}(Exception));\nexport default UnsupportedOperationException;\n","import UnsupportedOperationException from '../UnsupportedOperationException';\nimport CharacterSetECI from '../common/CharacterSetECI';\n/**\n * Responsible for en/decoding strings.\n */\nvar StringEncoding = /** @class */ (function () {\n function StringEncoding() {\n }\n /**\n * Decodes some Uint8Array to a string format.\n */\n StringEncoding.decode = function (bytes, encoding) {\n var encodingName = this.encodingName(encoding);\n if (this.customDecoder) {\n return this.customDecoder(bytes, encodingName);\n }\n // Increases browser support.\n if (typeof TextDecoder === 'undefined' || this.shouldDecodeOnFallback(encodingName)) {\n return this.decodeFallback(bytes, encodingName);\n }\n return new TextDecoder(encodingName).decode(bytes);\n };\n /**\n * Checks if the decoding method should use the fallback for decoding\n * once Node TextDecoder doesn't support all encoding formats.\n *\n * @param encodingName\n */\n StringEncoding.shouldDecodeOnFallback = function (encodingName) {\n return !StringEncoding.isBrowser() && encodingName === 'ISO-8859-1';\n };\n /**\n * Encodes some string into a Uint8Array.\n */\n StringEncoding.encode = function (s, encoding) {\n var encodingName = this.encodingName(encoding);\n if (this.customEncoder) {\n return this.customEncoder(s, encodingName);\n }\n // Increases browser support.\n if (typeof TextEncoder === 'undefined') {\n return this.encodeFallback(s);\n }\n // TextEncoder only encodes to UTF8 by default as specified by encoding.spec.whatwg.org\n return new TextEncoder().encode(s);\n };\n StringEncoding.isBrowser = function () {\n return (typeof window !== 'undefined' && {}.toString.call(window) === '[object Window]');\n };\n /**\n * Returns the string value from some encoding character set.\n */\n StringEncoding.encodingName = function (encoding) {\n return typeof encoding === 'string'\n ? encoding\n : encoding.getName();\n };\n /**\n * Returns character set from some encoding character set.\n */\n StringEncoding.encodingCharacterSet = function (encoding) {\n if (encoding instanceof CharacterSetECI) {\n return encoding;\n }\n return CharacterSetECI.getCharacterSetECIByName(encoding);\n };\n /**\n * Runs a fallback for the native decoding funcion.\n */\n StringEncoding.decodeFallback = function (bytes, encoding) {\n var characterSet = this.encodingCharacterSet(encoding);\n if (StringEncoding.isDecodeFallbackSupported(characterSet)) {\n var s = '';\n for (var i = 0, length_1 = bytes.length; i < length_1; i++) {\n var h = bytes[i].toString(16);\n if (h.length < 2) {\n h = '0' + h;\n }\n s += '%' + h;\n }\n return decodeURIComponent(s);\n }\n if (characterSet.equals(CharacterSetECI.UnicodeBigUnmarked)) {\n return String.fromCharCode.apply(null, new Uint16Array(bytes.buffer));\n }\n throw new UnsupportedOperationException(\"Encoding \" + this.encodingName(encoding) + \" not supported by fallback.\");\n };\n StringEncoding.isDecodeFallbackSupported = function (characterSet) {\n return characterSet.equals(CharacterSetECI.UTF8) ||\n characterSet.equals(CharacterSetECI.ISO8859_1) ||\n characterSet.equals(CharacterSetECI.ASCII);\n };\n /**\n * Runs a fallback for the native encoding funcion.\n *\n * @see https://stackoverflow.com/a/17192845/4367683\n */\n StringEncoding.encodeFallback = function (s) {\n var encodedURIstring = btoa(unescape(encodeURIComponent(s)));\n var charList = encodedURIstring.split('');\n var uintArray = [];\n for (var i = 0; i < charList.length; i++) {\n uintArray.push(charList[i].charCodeAt(0));\n }\n return new Uint8Array(uintArray);\n };\n return StringEncoding;\n}());\nexport default StringEncoding;\n","/*\n * Copyright (C) 2010 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.common {*/\n/*import java.nio.charset.Charset;*/\n/*import java.util.Map;*/\nimport DecodeHintType from '../DecodeHintType';\nimport CharacterSetECI from './CharacterSetECI';\nimport StringEncoding from '../util/StringEncoding';\n/**\n * Common string-related functions.\n *\n * @author Sean Owen\n * @author Alex Dupre\n */\nvar StringUtils = /** @class */ (function () {\n function StringUtils() {\n }\n // SHIFT_JIS.equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING) ||\n // EUC_JP.equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING);\n StringUtils.castAsNonUtf8Char = function (code, encoding) {\n if (encoding === void 0) { encoding = null; }\n // ISO 8859-1 is the Java default as UTF-8 is JavaScripts\n // you can see this method as a Java version of String.fromCharCode\n var e = encoding ? encoding.getName() : this.ISO88591;\n // use passed format (fromCharCode will return UTF8 encoding)\n return StringEncoding.decode(new Uint8Array([code]), e);\n };\n /**\n * @param bytes bytes encoding a string, whose encoding should be guessed\n * @param hints decode hints if applicable\n * @return name of guessed encoding; at the moment will only guess one of:\n * {@link #SHIFT_JIS}, {@link #UTF8}, {@link #ISO88591}, or the platform\n * default encoding if none of these can possibly be correct\n */\n StringUtils.guessEncoding = function (bytes, hints) {\n if (hints !== null && hints !== undefined && undefined !== hints.get(DecodeHintType.CHARACTER_SET)) {\n return hints.get(DecodeHintType.CHARACTER_SET).toString();\n }\n // For now, merely tries to distinguish ISO-8859-1, UTF-8 and Shift_JIS,\n // which should be by far the most common encodings.\n var length = bytes.length;\n var canBeISO88591 = true;\n var canBeShiftJIS = true;\n var canBeUTF8 = true;\n var utf8BytesLeft = 0;\n // int utf8LowChars = 0\n var utf2BytesChars = 0;\n var utf3BytesChars = 0;\n var utf4BytesChars = 0;\n var sjisBytesLeft = 0;\n // int sjisLowChars = 0\n var sjisKatakanaChars = 0;\n // int sjisDoubleBytesChars = 0\n var sjisCurKatakanaWordLength = 0;\n var sjisCurDoubleBytesWordLength = 0;\n var sjisMaxKatakanaWordLength = 0;\n var sjisMaxDoubleBytesWordLength = 0;\n // int isoLowChars = 0\n // int isoHighChars = 0\n var isoHighOther = 0;\n var utf8bom = bytes.length > 3 &&\n bytes[0] === /*(byte) */ 0xEF &&\n bytes[1] === /*(byte) */ 0xBB &&\n bytes[2] === /*(byte) */ 0xBF;\n for (var i = 0; i < length && (canBeISO88591 || canBeShiftJIS || canBeUTF8); i++) {\n var value = bytes[i] & 0xFF;\n // UTF-8 stuff\n if (canBeUTF8) {\n if (utf8BytesLeft > 0) {\n if ((value & 0x80) === 0) {\n canBeUTF8 = false;\n }\n else {\n utf8BytesLeft--;\n }\n }\n else if ((value & 0x80) !== 0) {\n if ((value & 0x40) === 0) {\n canBeUTF8 = false;\n }\n else {\n utf8BytesLeft++;\n if ((value & 0x20) === 0) {\n utf2BytesChars++;\n }\n else {\n utf8BytesLeft++;\n if ((value & 0x10) === 0) {\n utf3BytesChars++;\n }\n else {\n utf8BytesLeft++;\n if ((value & 0x08) === 0) {\n utf4BytesChars++;\n }\n else {\n canBeUTF8 = false;\n }\n }\n }\n }\n } // else {\n // utf8LowChars++\n // }\n }\n // ISO-8859-1 stuff\n if (canBeISO88591) {\n if (value > 0x7F && value < 0xA0) {\n canBeISO88591 = false;\n }\n else if (value > 0x9F) {\n if (value < 0xC0 || value === 0xD7 || value === 0xF7) {\n isoHighOther++;\n } // else {\n // isoHighChars++\n // }\n } // else {\n // isoLowChars++\n // }\n }\n // Shift_JIS stuff\n if (canBeShiftJIS) {\n if (sjisBytesLeft > 0) {\n if (value < 0x40 || value === 0x7F || value > 0xFC) {\n canBeShiftJIS = false;\n }\n else {\n sjisBytesLeft--;\n }\n }\n else if (value === 0x80 || value === 0xA0 || value > 0xEF) {\n canBeShiftJIS = false;\n }\n else if (value > 0xA0 && value < 0xE0) {\n sjisKatakanaChars++;\n sjisCurDoubleBytesWordLength = 0;\n sjisCurKatakanaWordLength++;\n if (sjisCurKatakanaWordLength > sjisMaxKatakanaWordLength) {\n sjisMaxKatakanaWordLength = sjisCurKatakanaWordLength;\n }\n }\n else if (value > 0x7F) {\n sjisBytesLeft++;\n // sjisDoubleBytesChars++\n sjisCurKatakanaWordLength = 0;\n sjisCurDoubleBytesWordLength++;\n if (sjisCurDoubleBytesWordLength > sjisMaxDoubleBytesWordLength) {\n sjisMaxDoubleBytesWordLength = sjisCurDoubleBytesWordLength;\n }\n }\n else {\n // sjisLowChars++\n sjisCurKatakanaWordLength = 0;\n sjisCurDoubleBytesWordLength = 0;\n }\n }\n }\n if (canBeUTF8 && utf8BytesLeft > 0) {\n canBeUTF8 = false;\n }\n if (canBeShiftJIS && sjisBytesLeft > 0) {\n canBeShiftJIS = false;\n }\n // Easy -- if there is BOM or at least 1 valid not-single byte character (and no evidence it can't be UTF-8), done\n if (canBeUTF8 && (utf8bom || utf2BytesChars + utf3BytesChars + utf4BytesChars > 0)) {\n return StringUtils.UTF8;\n }\n // Easy -- if assuming Shift_JIS or at least 3 valid consecutive not-ascii characters (and no evidence it can't be), done\n if (canBeShiftJIS && (StringUtils.ASSUME_SHIFT_JIS || sjisMaxKatakanaWordLength >= 3 || sjisMaxDoubleBytesWordLength >= 3)) {\n return StringUtils.SHIFT_JIS;\n }\n // Distinguishing Shift_JIS and ISO-8859-1 can be a little tough for short words. The crude heuristic is:\n // - If we saw\n // - only two consecutive katakana chars in the whole text, or\n // - at least 10% of bytes that could be \"upper\" not-alphanumeric Latin1,\n // - then we conclude Shift_JIS, else ISO-8859-1\n if (canBeISO88591 && canBeShiftJIS) {\n return (sjisMaxKatakanaWordLength === 2 && sjisKatakanaChars === 2) || isoHighOther * 10 >= length\n ? StringUtils.SHIFT_JIS : StringUtils.ISO88591;\n }\n // Otherwise, try in order ISO-8859-1, Shift JIS, UTF-8 and fall back to default platform encoding\n if (canBeISO88591) {\n return StringUtils.ISO88591;\n }\n if (canBeShiftJIS) {\n return StringUtils.SHIFT_JIS;\n }\n if (canBeUTF8) {\n return StringUtils.UTF8;\n }\n // Otherwise, we take a wild guess with platform encoding\n return StringUtils.PLATFORM_DEFAULT_ENCODING;\n };\n /**\n *\n * @see https://stackoverflow.com/a/13439711/4367683\n *\n * @param append The new string to append.\n * @param args Argumets values to be formated.\n */\n StringUtils.format = function (append) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var i = -1;\n function callback(exp, p0, p1, p2, p3, p4) {\n if (exp === '%%')\n return '%';\n if (args[++i] === undefined)\n return undefined;\n exp = p2 ? parseInt(p2.substr(1)) : undefined;\n var base = p3 ? parseInt(p3.substr(1)) : undefined;\n var val;\n switch (p4) {\n case 's':\n val = args[i];\n break;\n case 'c':\n val = args[i][0];\n break;\n case 'f':\n val = parseFloat(args[i]).toFixed(exp);\n break;\n case 'p':\n val = parseFloat(args[i]).toPrecision(exp);\n break;\n case 'e':\n val = parseFloat(args[i]).toExponential(exp);\n break;\n case 'x':\n val = parseInt(args[i]).toString(base ? base : 16);\n break;\n case 'd':\n val = parseFloat(parseInt(args[i], base ? base : 10).toPrecision(exp)).toFixed(0);\n break;\n }\n val = typeof val === 'object' ? JSON.stringify(val) : (+val).toString(base);\n var size = parseInt(p1); /* padding size */\n var ch = p1 && (p1[0] + '') === '0' ? '0' : ' '; /* isnull? */\n while (val.length < size)\n val = p0 !== undefined ? val + ch : ch + val; /* isminus? */\n return val;\n }\n var regex = /%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g;\n return append.replace(regex, callback);\n };\n /**\n *\n */\n StringUtils.getBytes = function (str, encoding) {\n return StringEncoding.encode(str, encoding);\n };\n /**\n * Returns the charcode at the specified index or at index zero.\n */\n StringUtils.getCharCode = function (str, index) {\n if (index === void 0) { index = 0; }\n return str.charCodeAt(index);\n };\n /**\n * Returns char for given charcode\n */\n StringUtils.getCharAt = function (charCode) {\n return String.fromCharCode(charCode);\n };\n StringUtils.SHIFT_JIS = CharacterSetECI.SJIS.getName(); // \"SJIS\"\n StringUtils.GB2312 = 'GB2312';\n StringUtils.ISO88591 = CharacterSetECI.ISO8859_1.getName(); // \"ISO8859_1\"\n StringUtils.EUC_JP = 'EUC_JP';\n StringUtils.UTF8 = CharacterSetECI.UTF8.getName(); // \"UTF8\"\n StringUtils.PLATFORM_DEFAULT_ENCODING = StringUtils.UTF8; // \"UTF8\"//Charset.defaultCharset().name()\n StringUtils.ASSUME_SHIFT_JIS = false;\n return StringUtils;\n}());\nexport default StringUtils;\n","import StringUtils from '../common/StringUtils';\nvar StringBuilder = /** @class */ (function () {\n function StringBuilder(value) {\n if (value === void 0) { value = ''; }\n this.value = value;\n }\n StringBuilder.prototype.enableDecoding = function (encoding) {\n this.encoding = encoding;\n return this;\n };\n StringBuilder.prototype.append = function (s) {\n if (typeof s === 'string') {\n this.value += s.toString();\n }\n else if (this.encoding) {\n // use passed format (fromCharCode will return UTF8 encoding)\n this.value += StringUtils.castAsNonUtf8Char(s, this.encoding);\n }\n else {\n // correctly converts from UTF-8, but not other encodings\n this.value += String.fromCharCode(s);\n }\n return this;\n };\n StringBuilder.prototype.appendChars = function (str, offset, len) {\n for (var i = offset; offset < offset + len; i++) {\n this.append(str[i]);\n }\n return this;\n };\n StringBuilder.prototype.length = function () {\n return this.value.length;\n };\n StringBuilder.prototype.charAt = function (n) {\n return this.value.charAt(n);\n };\n StringBuilder.prototype.deleteCharAt = function (n) {\n this.value = this.value.substr(0, n) + this.value.substring(n + 1);\n };\n StringBuilder.prototype.setCharAt = function (n, c) {\n this.value = this.value.substr(0, n) + c + this.value.substr(n + 1);\n };\n StringBuilder.prototype.substring = function (start, end) {\n return this.value.substring(start, end);\n };\n /**\n * @note helper method for RSS Expanded\n */\n StringBuilder.prototype.setLengthToZero = function () {\n this.value = '';\n };\n StringBuilder.prototype.toString = function () {\n return this.value;\n };\n StringBuilder.prototype.insert = function (n, c) {\n this.value = this.value.substring(0, n) + c + this.value.substring(n);\n };\n return StringBuilder;\n}());\nexport default StringBuilder;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.common {*/\n/*import java.util.Arrays;*/\nimport BitArray from './BitArray';\nimport System from '../util/System';\nimport Arrays from '../util/Arrays';\nimport StringBuilder from '../util/StringBuilder';\nimport IllegalArgumentException from '../IllegalArgumentException';\n/**\n *

Represents a 2D matrix of bits. In function arguments below, and throughout the common\n * module, x is the column position, and y is the row position. The ordering is always x, y.\n * The origin is at the top-left.

\n *\n *

Internally the bits are represented in a 1-D array of 32-bit ints. However, each row begins\n * with a new int. This is done intentionally so that we can copy out a row into a BitArray very\n * efficiently.

\n *\n *

The ordering of bits is row-major. Within each int, the least significant bits are used first,\n * meaning they represent lower x values. This is compatible with BitArray's implementation.

\n *\n * @author Sean Owen\n * @author dswitkin@google.com (Daniel Switkin)\n */\nvar BitMatrix /*implements Cloneable*/ = /** @class */ (function () {\n /**\n * Creates an empty square {@link BitMatrix}.\n *\n * @param dimension height and width\n */\n // public constructor(dimension: number /*int*/) {\n // this(dimension, dimension)\n // }\n /**\n * Creates an empty {@link BitMatrix}.\n *\n * @param width bit matrix width\n * @param height bit matrix height\n */\n // public constructor(width: number /*int*/, height: number /*int*/) {\n // if (width < 1 || height < 1) {\n // throw new IllegalArgumentException(\"Both dimensions must be greater than 0\")\n // }\n // this.width = width\n // this.height = height\n // this.rowSize = (width + 31) / 32\n // bits = new int[rowSize * height];\n // }\n function BitMatrix(width /*int*/, height /*int*/, rowSize /*int*/, bits) {\n this.width = width;\n this.height = height;\n this.rowSize = rowSize;\n this.bits = bits;\n if (undefined === height || null === height) {\n height = width;\n }\n this.height = height;\n if (width < 1 || height < 1) {\n throw new IllegalArgumentException('Both dimensions must be greater than 0');\n }\n if (undefined === rowSize || null === rowSize) {\n rowSize = Math.floor((width + 31) / 32);\n }\n this.rowSize = rowSize;\n if (undefined === bits || null === bits) {\n this.bits = new Int32Array(this.rowSize * this.height);\n }\n }\n /**\n * Interprets a 2D array of booleans as a {@link BitMatrix}, where \"true\" means an \"on\" bit.\n *\n * @function parse\n * @param image bits of the image, as a row-major 2D array. Elements are arrays representing rows\n * @return {@link BitMatrix} representation of image\n */\n BitMatrix.parseFromBooleanArray = function (image) {\n var height = image.length;\n var width = image[0].length;\n var bits = new BitMatrix(width, height);\n for (var i = 0; i < height; i++) {\n var imageI = image[i];\n for (var j = 0; j < width; j++) {\n if (imageI[j]) {\n bits.set(j, i);\n }\n }\n }\n return bits;\n };\n /**\n *\n * @function parse\n * @param stringRepresentation\n * @param setString\n * @param unsetString\n */\n BitMatrix.parseFromString = function (stringRepresentation, setString, unsetString) {\n if (stringRepresentation === null) {\n throw new IllegalArgumentException('stringRepresentation cannot be null');\n }\n var bits = new Array(stringRepresentation.length);\n var bitsPos = 0;\n var rowStartPos = 0;\n var rowLength = -1;\n var nRows = 0;\n var pos = 0;\n while (pos < stringRepresentation.length) {\n if (stringRepresentation.charAt(pos) === '\\n' ||\n stringRepresentation.charAt(pos) === '\\r') {\n if (bitsPos > rowStartPos) {\n if (rowLength === -1) {\n rowLength = bitsPos - rowStartPos;\n }\n else if (bitsPos - rowStartPos !== rowLength) {\n throw new IllegalArgumentException('row lengths do not match');\n }\n rowStartPos = bitsPos;\n nRows++;\n }\n pos++;\n }\n else if (stringRepresentation.substring(pos, pos + setString.length) === setString) {\n pos += setString.length;\n bits[bitsPos] = true;\n bitsPos++;\n }\n else if (stringRepresentation.substring(pos, pos + unsetString.length) === unsetString) {\n pos += unsetString.length;\n bits[bitsPos] = false;\n bitsPos++;\n }\n else {\n throw new IllegalArgumentException('illegal character encountered: ' + stringRepresentation.substring(pos));\n }\n }\n // no EOL at end?\n if (bitsPos > rowStartPos) {\n if (rowLength === -1) {\n rowLength = bitsPos - rowStartPos;\n }\n else if (bitsPos - rowStartPos !== rowLength) {\n throw new IllegalArgumentException('row lengths do not match');\n }\n nRows++;\n }\n var matrix = new BitMatrix(rowLength, nRows);\n for (var i = 0; i < bitsPos; i++) {\n if (bits[i]) {\n matrix.set(Math.floor(i % rowLength), Math.floor(i / rowLength));\n }\n }\n return matrix;\n };\n /**\n *

Gets the requested bit, where true means black.

\n *\n * @param x The horizontal component (i.e. which column)\n * @param y The vertical component (i.e. which row)\n * @return value of given bit in matrix\n */\n BitMatrix.prototype.get = function (x /*int*/, y /*int*/) {\n var offset = y * this.rowSize + Math.floor(x / 32);\n return ((this.bits[offset] >>> (x & 0x1f)) & 1) !== 0;\n };\n /**\n *

Sets the given bit to true.

\n *\n * @param x The horizontal component (i.e. which column)\n * @param y The vertical component (i.e. which row)\n */\n BitMatrix.prototype.set = function (x /*int*/, y /*int*/) {\n var offset = y * this.rowSize + Math.floor(x / 32);\n this.bits[offset] |= (1 << (x & 0x1f)) & 0xFFFFFFFF;\n };\n BitMatrix.prototype.unset = function (x /*int*/, y /*int*/) {\n var offset = y * this.rowSize + Math.floor(x / 32);\n this.bits[offset] &= ~((1 << (x & 0x1f)) & 0xFFFFFFFF);\n };\n /**\n *

Flips the given bit.

\n *\n * @param x The horizontal component (i.e. which column)\n * @param y The vertical component (i.e. which row)\n */\n BitMatrix.prototype.flip = function (x /*int*/, y /*int*/) {\n var offset = y * this.rowSize + Math.floor(x / 32);\n this.bits[offset] ^= ((1 << (x & 0x1f)) & 0xFFFFFFFF);\n };\n /**\n * Exclusive-or (XOR): Flip the bit in this {@code BitMatrix} if the corresponding\n * mask bit is set.\n *\n * @param mask XOR mask\n */\n BitMatrix.prototype.xor = function (mask) {\n if (this.width !== mask.getWidth() || this.height !== mask.getHeight()\n || this.rowSize !== mask.getRowSize()) {\n throw new IllegalArgumentException('input matrix dimensions do not match');\n }\n var rowArray = new BitArray(Math.floor(this.width / 32) + 1);\n var rowSize = this.rowSize;\n var bits = this.bits;\n for (var y = 0, height = this.height; y < height; y++) {\n var offset = y * rowSize;\n var row = mask.getRow(y, rowArray).getBitArray();\n for (var x = 0; x < rowSize; x++) {\n bits[offset + x] ^= row[x];\n }\n }\n };\n /**\n * Clears all bits (sets to false).\n */\n BitMatrix.prototype.clear = function () {\n var bits = this.bits;\n var max = bits.length;\n for (var i = 0; i < max; i++) {\n bits[i] = 0;\n }\n };\n /**\n *

Sets a square region of the bit matrix to true.

\n *\n * @param left The horizontal position to begin at (inclusive)\n * @param top The vertical position to begin at (inclusive)\n * @param width The width of the region\n * @param height The height of the region\n */\n BitMatrix.prototype.setRegion = function (left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n if (top < 0 || left < 0) {\n throw new IllegalArgumentException('Left and top must be nonnegative');\n }\n if (height < 1 || width < 1) {\n throw new IllegalArgumentException('Height and width must be at least 1');\n }\n var right = left + width;\n var bottom = top + height;\n if (bottom > this.height || right > this.width) {\n throw new IllegalArgumentException('The region must fit inside the matrix');\n }\n var rowSize = this.rowSize;\n var bits = this.bits;\n for (var y = top; y < bottom; y++) {\n var offset = y * rowSize;\n for (var x = left; x < right; x++) {\n bits[offset + Math.floor(x / 32)] |= ((1 << (x & 0x1f)) & 0xFFFFFFFF);\n }\n }\n };\n /**\n * A fast method to retrieve one row of data from the matrix as a BitArray.\n *\n * @param y The row to retrieve\n * @param row An optional caller-allocated BitArray, will be allocated if null or too small\n * @return The resulting BitArray - this reference should always be used even when passing\n * your own row\n */\n BitMatrix.prototype.getRow = function (y /*int*/, row) {\n if (row === null || row === undefined || row.getSize() < this.width) {\n row = new BitArray(this.width);\n }\n else {\n row.clear();\n }\n var rowSize = this.rowSize;\n var bits = this.bits;\n var offset = y * rowSize;\n for (var x = 0; x < rowSize; x++) {\n row.setBulk(x * 32, bits[offset + x]);\n }\n return row;\n };\n /**\n * @param y row to set\n * @param row {@link BitArray} to copy from\n */\n BitMatrix.prototype.setRow = function (y /*int*/, row) {\n System.arraycopy(row.getBitArray(), 0, this.bits, y * this.rowSize, this.rowSize);\n };\n /**\n * Modifies this {@code BitMatrix} to represent the same but rotated 180 degrees\n */\n BitMatrix.prototype.rotate180 = function () {\n var width = this.getWidth();\n var height = this.getHeight();\n var topRow = new BitArray(width);\n var bottomRow = new BitArray(width);\n for (var i = 0, length_1 = Math.floor((height + 1) / 2); i < length_1; i++) {\n topRow = this.getRow(i, topRow);\n bottomRow = this.getRow(height - 1 - i, bottomRow);\n topRow.reverse();\n bottomRow.reverse();\n this.setRow(i, bottomRow);\n this.setRow(height - 1 - i, topRow);\n }\n };\n /**\n * This is useful in detecting the enclosing rectangle of a 'pure' barcode.\n *\n * @return {@code left,top,width,height} enclosing rectangle of all 1 bits, or null if it is all white\n */\n BitMatrix.prototype.getEnclosingRectangle = function () {\n var width = this.width;\n var height = this.height;\n var rowSize = this.rowSize;\n var bits = this.bits;\n var left = width;\n var top = height;\n var right = -1;\n var bottom = -1;\n for (var y = 0; y < height; y++) {\n for (var x32 = 0; x32 < rowSize; x32++) {\n var theBits = bits[y * rowSize + x32];\n if (theBits !== 0) {\n if (y < top) {\n top = y;\n }\n if (y > bottom) {\n bottom = y;\n }\n if (x32 * 32 < left) {\n var bit = 0;\n while (((theBits << (31 - bit)) & 0xFFFFFFFF) === 0) {\n bit++;\n }\n if ((x32 * 32 + bit) < left) {\n left = x32 * 32 + bit;\n }\n }\n if (x32 * 32 + 31 > right) {\n var bit = 31;\n while ((theBits >>> bit) === 0) {\n bit--;\n }\n if ((x32 * 32 + bit) > right) {\n right = x32 * 32 + bit;\n }\n }\n }\n }\n }\n if (right < left || bottom < top) {\n return null;\n }\n return Int32Array.from([left, top, right - left + 1, bottom - top + 1]);\n };\n /**\n * This is useful in detecting a corner of a 'pure' barcode.\n *\n * @return {@code x,y} coordinate of top-left-most 1 bit, or null if it is all white\n */\n BitMatrix.prototype.getTopLeftOnBit = function () {\n var rowSize = this.rowSize;\n var bits = this.bits;\n var bitsOffset = 0;\n while (bitsOffset < bits.length && bits[bitsOffset] === 0) {\n bitsOffset++;\n }\n if (bitsOffset === bits.length) {\n return null;\n }\n var y = bitsOffset / rowSize;\n var x = (bitsOffset % rowSize) * 32;\n var theBits = bits[bitsOffset];\n var bit = 0;\n while (((theBits << (31 - bit)) & 0xFFFFFFFF) === 0) {\n bit++;\n }\n x += bit;\n return Int32Array.from([x, y]);\n };\n BitMatrix.prototype.getBottomRightOnBit = function () {\n var rowSize = this.rowSize;\n var bits = this.bits;\n var bitsOffset = bits.length - 1;\n while (bitsOffset >= 0 && bits[bitsOffset] === 0) {\n bitsOffset--;\n }\n if (bitsOffset < 0) {\n return null;\n }\n var y = Math.floor(bitsOffset / rowSize);\n var x = Math.floor(bitsOffset % rowSize) * 32;\n var theBits = bits[bitsOffset];\n var bit = 31;\n while ((theBits >>> bit) === 0) {\n bit--;\n }\n x += bit;\n return Int32Array.from([x, y]);\n };\n /**\n * @return The width of the matrix\n */\n BitMatrix.prototype.getWidth = function () {\n return this.width;\n };\n /**\n * @return The height of the matrix\n */\n BitMatrix.prototype.getHeight = function () {\n return this.height;\n };\n /**\n * @return The row size of the matrix\n */\n BitMatrix.prototype.getRowSize = function () {\n return this.rowSize;\n };\n /*@Override*/\n BitMatrix.prototype.equals = function (o) {\n if (!(o instanceof BitMatrix)) {\n return false;\n }\n var other = o;\n return this.width === other.width && this.height === other.height && this.rowSize === other.rowSize &&\n Arrays.equals(this.bits, other.bits);\n };\n /*@Override*/\n BitMatrix.prototype.hashCode = function () {\n var hash = this.width;\n hash = 31 * hash + this.width;\n hash = 31 * hash + this.height;\n hash = 31 * hash + this.rowSize;\n hash = 31 * hash + Arrays.hashCode(this.bits);\n return hash;\n };\n /**\n * @return string representation using \"X\" for set and \" \" for unset bits\n */\n /*@Override*/\n // public toString(): string {\n // return toString(\": \"X, \" \")\n // }\n /**\n * @param setString representation of a set bit\n * @param unsetString representation of an unset bit\n * @return string representation of entire matrix utilizing given strings\n */\n // public toString(setString: string = \"X \", unsetString: string = \" \"): string {\n // return this.buildToString(setString, unsetString, \"\\n\")\n // }\n /**\n * @param setString representation of a set bit\n * @param unsetString representation of an unset bit\n * @param lineSeparator newline character in string representation\n * @return string representation of entire matrix utilizing given strings and line separator\n * @deprecated call {@link #toString(String,String)} only, which uses \\n line separator always\n */\n // @Deprecated\n BitMatrix.prototype.toString = function (setString, unsetString, lineSeparator) {\n if (setString === void 0) { setString = 'X '; }\n if (unsetString === void 0) { unsetString = ' '; }\n if (lineSeparator === void 0) { lineSeparator = '\\n'; }\n return this.buildToString(setString, unsetString, lineSeparator);\n };\n BitMatrix.prototype.buildToString = function (setString, unsetString, lineSeparator) {\n var result = new StringBuilder();\n // result.append(lineSeparator);\n for (var y = 0, height = this.height; y < height; y++) {\n for (var x = 0, width = this.width; x < width; x++) {\n result.append(this.get(x, y) ? setString : unsetString);\n }\n result.append(lineSeparator);\n }\n return result.toString();\n };\n /*@Override*/\n BitMatrix.prototype.clone = function () {\n return new BitMatrix(this.width, this.height, this.rowSize, this.bits.slice());\n };\n return BitMatrix;\n}());\nexport default BitMatrix;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar NotFoundException = /** @class */ (function (_super) {\n __extends(NotFoundException, _super);\n function NotFoundException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NotFoundException.getNotFoundInstance = function () {\n return new NotFoundException();\n };\n NotFoundException.kind = 'NotFoundException';\n return NotFoundException;\n}(Exception));\nexport default NotFoundException;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/*namespace com.google.zxing.common {*/\nimport Binarizer from '../Binarizer';\nimport BitArray from './BitArray';\nimport BitMatrix from './BitMatrix';\nimport NotFoundException from '../NotFoundException';\n/**\n * This Binarizer implementation uses the old ZXing global histogram approach. It is suitable\n * for low-end mobile devices which don't have enough CPU or memory to use a local thresholding\n * algorithm. However, because it picks a global black point, it cannot handle difficult shadows\n * and gradients.\n *\n * Faster mobile devices and all desktop applications should probably use HybridBinarizer instead.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n * @author Sean Owen\n */\nvar GlobalHistogramBinarizer = /** @class */ (function (_super) {\n __extends(GlobalHistogramBinarizer, _super);\n function GlobalHistogramBinarizer(source) {\n var _this = _super.call(this, source) || this;\n _this.luminances = GlobalHistogramBinarizer.EMPTY;\n _this.buckets = new Int32Array(GlobalHistogramBinarizer.LUMINANCE_BUCKETS);\n return _this;\n }\n // Applies simple sharpening to the row data to improve performance of the 1D Readers.\n /*@Override*/\n GlobalHistogramBinarizer.prototype.getBlackRow = function (y /*int*/, row) {\n var source = this.getLuminanceSource();\n var width = source.getWidth();\n if (row === undefined || row === null || row.getSize() < width) {\n row = new BitArray(width);\n }\n else {\n row.clear();\n }\n this.initArrays(width);\n var localLuminances = source.getRow(y, this.luminances);\n var localBuckets = this.buckets;\n for (var x = 0; x < width; x++) {\n localBuckets[(localLuminances[x] & 0xff) >> GlobalHistogramBinarizer.LUMINANCE_SHIFT]++;\n }\n var blackPoint = GlobalHistogramBinarizer.estimateBlackPoint(localBuckets);\n if (width < 3) {\n // Special case for very small images\n for (var x = 0; x < width; x++) {\n if ((localLuminances[x] & 0xff) < blackPoint) {\n row.set(x);\n }\n }\n }\n else {\n var left = localLuminances[0] & 0xff;\n var center = localLuminances[1] & 0xff;\n for (var x = 1; x < width - 1; x++) {\n var right = localLuminances[x + 1] & 0xff;\n // A simple -1 4 -1 box filter with a weight of 2.\n if (((center * 4) - left - right) / 2 < blackPoint) {\n row.set(x);\n }\n left = center;\n center = right;\n }\n }\n return row;\n };\n // Does not sharpen the data, as this call is intended to only be used by 2D Readers.\n /*@Override*/\n GlobalHistogramBinarizer.prototype.getBlackMatrix = function () {\n var source = this.getLuminanceSource();\n var width = source.getWidth();\n var height = source.getHeight();\n var matrix = new BitMatrix(width, height);\n // Quickly calculates the histogram by sampling four rows from the image. This proved to be\n // more robust on the blackbox tests than sampling a diagonal as we used to do.\n this.initArrays(width);\n var localBuckets = this.buckets;\n for (var y = 1; y < 5; y++) {\n var row = Math.floor((height * y) / 5);\n var localLuminances_1 = source.getRow(row, this.luminances);\n var right = Math.floor((width * 4) / 5);\n for (var x = Math.floor(width / 5); x < right; x++) {\n var pixel = localLuminances_1[x] & 0xff;\n localBuckets[pixel >> GlobalHistogramBinarizer.LUMINANCE_SHIFT]++;\n }\n }\n var blackPoint = GlobalHistogramBinarizer.estimateBlackPoint(localBuckets);\n // We delay reading the entire image luminance until the black point estimation succeeds.\n // Although we end up reading four rows twice, it is consistent with our motto of\n // \"fail quickly\" which is necessary for continuous scanning.\n var localLuminances = source.getMatrix();\n for (var y = 0; y < height; y++) {\n var offset = y * width;\n for (var x = 0; x < width; x++) {\n var pixel = localLuminances[offset + x] & 0xff;\n if (pixel < blackPoint) {\n matrix.set(x, y);\n }\n }\n }\n return matrix;\n };\n /*@Override*/\n GlobalHistogramBinarizer.prototype.createBinarizer = function (source) {\n return new GlobalHistogramBinarizer(source);\n };\n GlobalHistogramBinarizer.prototype.initArrays = function (luminanceSize /*int*/) {\n if (this.luminances.length < luminanceSize) {\n this.luminances = new Uint8ClampedArray(luminanceSize);\n }\n var buckets = this.buckets;\n for (var x = 0; x < GlobalHistogramBinarizer.LUMINANCE_BUCKETS; x++) {\n buckets[x] = 0;\n }\n };\n GlobalHistogramBinarizer.estimateBlackPoint = function (buckets) {\n // Find the tallest peak in the histogram.\n var numBuckets = buckets.length;\n var maxBucketCount = 0;\n var firstPeak = 0;\n var firstPeakSize = 0;\n for (var x = 0; x < numBuckets; x++) {\n if (buckets[x] > firstPeakSize) {\n firstPeak = x;\n firstPeakSize = buckets[x];\n }\n if (buckets[x] > maxBucketCount) {\n maxBucketCount = buckets[x];\n }\n }\n // Find the second-tallest peak which is somewhat far from the tallest peak.\n var secondPeak = 0;\n var secondPeakScore = 0;\n for (var x = 0; x < numBuckets; x++) {\n var distanceToBiggest = x - firstPeak;\n // Encourage more distant second peaks by multiplying by square of distance.\n var score = buckets[x] * distanceToBiggest * distanceToBiggest;\n if (score > secondPeakScore) {\n secondPeak = x;\n secondPeakScore = score;\n }\n }\n // Make sure firstPeak corresponds to the black peak.\n if (firstPeak > secondPeak) {\n var temp = firstPeak;\n firstPeak = secondPeak;\n secondPeak = temp;\n }\n // If there is too little contrast in the image to pick a meaningful black point, throw rather\n // than waste time trying to decode the image, and risk false positives.\n if (secondPeak - firstPeak <= numBuckets / 16) {\n throw new NotFoundException();\n }\n // Find a valley between them that is low and closer to the white peak.\n var bestValley = secondPeak - 1;\n var bestValleyScore = -1;\n for (var x = secondPeak - 1; x > firstPeak; x--) {\n var fromFirst = x - firstPeak;\n var score = fromFirst * fromFirst * (secondPeak - x) * (maxBucketCount - buckets[x]);\n if (score > bestValleyScore) {\n bestValley = x;\n bestValleyScore = score;\n }\n }\n return bestValley << GlobalHistogramBinarizer.LUMINANCE_SHIFT;\n };\n GlobalHistogramBinarizer.LUMINANCE_BITS = 5;\n GlobalHistogramBinarizer.LUMINANCE_SHIFT = 8 - GlobalHistogramBinarizer.LUMINANCE_BITS;\n GlobalHistogramBinarizer.LUMINANCE_BUCKETS = 1 << GlobalHistogramBinarizer.LUMINANCE_BITS;\n GlobalHistogramBinarizer.EMPTY = Uint8ClampedArray.from([0]);\n return GlobalHistogramBinarizer;\n}(Binarizer));\nexport default GlobalHistogramBinarizer;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport GlobalHistogramBinarizer from './GlobalHistogramBinarizer';\nimport BitMatrix from './BitMatrix';\n/**\n * This class implements a local thresholding algorithm, which while slower than the\n * GlobalHistogramBinarizer, is fairly efficient for what it does. It is designed for\n * high frequency images of barcodes with black data on white backgrounds. For this application,\n * it does a much better job than a global blackpoint with severe shadows and gradients.\n * However it tends to produce artifacts on lower frequency images and is therefore not\n * a good general purpose binarizer for uses outside ZXing.\n *\n * This class extends GlobalHistogramBinarizer, using the older histogram approach for 1D readers,\n * and the newer local approach for 2D readers. 1D decoding using a per-row histogram is already\n * inherently local, and only fails for horizontal gradients. We can revisit that problem later,\n * but for now it was not a win to use local blocks for 1D.\n *\n * This Binarizer is the default for the unit tests and the recommended class for library users.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n */\nvar HybridBinarizer = /** @class */ (function (_super) {\n __extends(HybridBinarizer, _super);\n function HybridBinarizer(source) {\n var _this = _super.call(this, source) || this;\n _this.matrix = null;\n return _this;\n }\n /**\n * Calculates the final BitMatrix once for all requests. This could be called once from the\n * constructor instead, but there are some advantages to doing it lazily, such as making\n * profiling easier, and not doing heavy lifting when callers don't expect it.\n */\n /*@Override*/\n HybridBinarizer.prototype.getBlackMatrix = function () {\n if (this.matrix !== null) {\n return this.matrix;\n }\n var source = this.getLuminanceSource();\n var width = source.getWidth();\n var height = source.getHeight();\n if (width >= HybridBinarizer.MINIMUM_DIMENSION && height >= HybridBinarizer.MINIMUM_DIMENSION) {\n var luminances = source.getMatrix();\n var subWidth = width >> HybridBinarizer.BLOCK_SIZE_POWER;\n if ((width & HybridBinarizer.BLOCK_SIZE_MASK) !== 0) {\n subWidth++;\n }\n var subHeight = height >> HybridBinarizer.BLOCK_SIZE_POWER;\n if ((height & HybridBinarizer.BLOCK_SIZE_MASK) !== 0) {\n subHeight++;\n }\n var blackPoints = HybridBinarizer.calculateBlackPoints(luminances, subWidth, subHeight, width, height);\n var newMatrix = new BitMatrix(width, height);\n HybridBinarizer.calculateThresholdForBlock(luminances, subWidth, subHeight, width, height, blackPoints, newMatrix);\n this.matrix = newMatrix;\n }\n else {\n // If the image is too small, fall back to the global histogram approach.\n this.matrix = _super.prototype.getBlackMatrix.call(this);\n }\n return this.matrix;\n };\n /*@Override*/\n HybridBinarizer.prototype.createBinarizer = function (source) {\n return new HybridBinarizer(source);\n };\n /**\n * For each block in the image, calculate the average black point using a 5x5 grid\n * of the blocks around it. Also handles the corner cases (fractional blocks are computed based\n * on the last pixels in the row/column which are also used in the previous block).\n */\n HybridBinarizer.calculateThresholdForBlock = function (luminances, subWidth /*int*/, subHeight /*int*/, width /*int*/, height /*int*/, blackPoints, matrix) {\n var maxYOffset = height - HybridBinarizer.BLOCK_SIZE;\n var maxXOffset = width - HybridBinarizer.BLOCK_SIZE;\n for (var y = 0; y < subHeight; y++) {\n var yoffset = y << HybridBinarizer.BLOCK_SIZE_POWER;\n if (yoffset > maxYOffset) {\n yoffset = maxYOffset;\n }\n var top_1 = HybridBinarizer.cap(y, 2, subHeight - 3);\n for (var x = 0; x < subWidth; x++) {\n var xoffset = x << HybridBinarizer.BLOCK_SIZE_POWER;\n if (xoffset > maxXOffset) {\n xoffset = maxXOffset;\n }\n var left = HybridBinarizer.cap(x, 2, subWidth - 3);\n var sum = 0;\n for (var z = -2; z <= 2; z++) {\n var blackRow = blackPoints[top_1 + z];\n sum += blackRow[left - 2] + blackRow[left - 1] + blackRow[left] + blackRow[left + 1] + blackRow[left + 2];\n }\n var average = sum / 25;\n HybridBinarizer.thresholdBlock(luminances, xoffset, yoffset, average, width, matrix);\n }\n }\n };\n HybridBinarizer.cap = function (value /*int*/, min /*int*/, max /*int*/) {\n return value < min ? min : value > max ? max : value;\n };\n /**\n * Applies a single threshold to a block of pixels.\n */\n HybridBinarizer.thresholdBlock = function (luminances, xoffset /*int*/, yoffset /*int*/, threshold /*int*/, stride /*int*/, matrix) {\n for (var y = 0, offset = yoffset * stride + xoffset; y < HybridBinarizer.BLOCK_SIZE; y++, offset += stride) {\n for (var x = 0; x < HybridBinarizer.BLOCK_SIZE; x++) {\n // Comparison needs to be <= so that black == 0 pixels are black even if the threshold is 0.\n if ((luminances[offset + x] & 0xFF) <= threshold) {\n matrix.set(xoffset + x, yoffset + y);\n }\n }\n }\n };\n /**\n * Calculates a single black point for each block of pixels and saves it away.\n * See the following thread for a discussion of this algorithm:\n * http://groups.google.com/group/zxing/browse_thread/thread/d06efa2c35a7ddc0\n */\n HybridBinarizer.calculateBlackPoints = function (luminances, subWidth /*int*/, subHeight /*int*/, width /*int*/, height /*int*/) {\n var maxYOffset = height - HybridBinarizer.BLOCK_SIZE;\n var maxXOffset = width - HybridBinarizer.BLOCK_SIZE;\n // tslint:disable-next-line:whitespace\n var blackPoints = new Array(subHeight); // subWidth\n for (var y = 0; y < subHeight; y++) {\n blackPoints[y] = new Int32Array(subWidth);\n var yoffset = y << HybridBinarizer.BLOCK_SIZE_POWER;\n if (yoffset > maxYOffset) {\n yoffset = maxYOffset;\n }\n for (var x = 0; x < subWidth; x++) {\n var xoffset = x << HybridBinarizer.BLOCK_SIZE_POWER;\n if (xoffset > maxXOffset) {\n xoffset = maxXOffset;\n }\n var sum = 0;\n var min = 0xFF;\n var max = 0;\n for (var yy = 0, offset = yoffset * width + xoffset; yy < HybridBinarizer.BLOCK_SIZE; yy++, offset += width) {\n for (var xx = 0; xx < HybridBinarizer.BLOCK_SIZE; xx++) {\n var pixel = luminances[offset + xx] & 0xFF;\n sum += pixel;\n // still looking for good contrast\n if (pixel < min) {\n min = pixel;\n }\n if (pixel > max) {\n max = pixel;\n }\n }\n // short-circuit min/max tests once dynamic range is met\n if (max - min > HybridBinarizer.MIN_DYNAMIC_RANGE) {\n // finish the rest of the rows quickly\n for (yy++, offset += width; yy < HybridBinarizer.BLOCK_SIZE; yy++, offset += width) {\n for (var xx = 0; xx < HybridBinarizer.BLOCK_SIZE; xx++) {\n sum += luminances[offset + xx] & 0xFF;\n }\n }\n }\n }\n // The default estimate is the average of the values in the block.\n var average = sum >> (HybridBinarizer.BLOCK_SIZE_POWER * 2);\n if (max - min <= HybridBinarizer.MIN_DYNAMIC_RANGE) {\n // If variation within the block is low, assume this is a block with only light or only\n // dark pixels. In that case we do not want to use the average, as it would divide this\n // low contrast area into black and white pixels, essentially creating data out of noise.\n //\n // The default assumption is that the block is light/background. Since no estimate for\n // the level of dark pixels exists locally, use half the min for the block.\n average = min / 2;\n if (y > 0 && x > 0) {\n // Correct the \"white background\" assumption for blocks that have neighbors by comparing\n // the pixels in this block to the previously calculated black points. This is based on\n // the fact that dark barcode symbology is always surrounded by some amount of light\n // background for which reasonable black point estimates were made. The bp estimated at\n // the boundaries is used for the interior.\n // The (min < bp) is arbitrary but works better than other heuristics that were tried.\n var averageNeighborBlackPoint = (blackPoints[y - 1][x] + (2 * blackPoints[y][x - 1]) + blackPoints[y - 1][x - 1]) / 4;\n if (min < averageNeighborBlackPoint) {\n average = averageNeighborBlackPoint;\n }\n }\n }\n blackPoints[y][x] = average;\n }\n }\n return blackPoints;\n };\n // This class uses 5x5 blocks to compute local luminance, where each block is 8x8 pixels.\n // So this is the smallest dimension in each axis we can accept.\n HybridBinarizer.BLOCK_SIZE_POWER = 3;\n HybridBinarizer.BLOCK_SIZE = 1 << HybridBinarizer.BLOCK_SIZE_POWER; // ...0100...00\n HybridBinarizer.BLOCK_SIZE_MASK = HybridBinarizer.BLOCK_SIZE - 1; // ...0011...11\n HybridBinarizer.MINIMUM_DIMENSION = HybridBinarizer.BLOCK_SIZE * 5;\n HybridBinarizer.MIN_DYNAMIC_RANGE = 24;\n return HybridBinarizer;\n}(GlobalHistogramBinarizer));\nexport default HybridBinarizer;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport StringBuilder from './util/StringBuilder';\nimport UnsupportedOperationException from './UnsupportedOperationException';\n/*namespace com.google.zxing {*/\n/**\n * The purpose of this class hierarchy is to abstract different bitmap implementations across\n * platforms into a standard interface for requesting greyscale luminance values. The interface\n * only provides immutable methods; therefore crop and rotation create copies. This is to ensure\n * that one Reader does not modify the original luminance source and leave it in an unknown state\n * for other Readers in the chain.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n */\nvar LuminanceSource = /** @class */ (function () {\n function LuminanceSource(width /*int*/, height /*int*/) {\n this.width = width;\n this.height = height;\n }\n /**\n * @return The width of the bitmap.\n */\n LuminanceSource.prototype.getWidth = function () {\n return this.width;\n };\n /**\n * @return The height of the bitmap.\n */\n LuminanceSource.prototype.getHeight = function () {\n return this.height;\n };\n /**\n * @return Whether this subclass supports cropping.\n */\n LuminanceSource.prototype.isCropSupported = function () {\n return false;\n };\n /**\n * Returns a new object with cropped image data. Implementations may keep a reference to the\n * original data rather than a copy. Only callable if isCropSupported() is true.\n *\n * @param left The left coordinate, which must be in [0,getWidth())\n * @param top The top coordinate, which must be in [0,getHeight())\n * @param width The width of the rectangle to crop.\n * @param height The height of the rectangle to crop.\n * @return A cropped version of this object.\n */\n LuminanceSource.prototype.crop = function (left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n throw new UnsupportedOperationException('This luminance source does not support cropping.');\n };\n /**\n * @return Whether this subclass supports counter-clockwise rotation.\n */\n LuminanceSource.prototype.isRotateSupported = function () {\n return false;\n };\n /**\n * Returns a new object with rotated image data by 90 degrees counterclockwise.\n * Only callable if {@link #isRotateSupported()} is true.\n *\n * @return A rotated version of this object.\n */\n LuminanceSource.prototype.rotateCounterClockwise = function () {\n throw new UnsupportedOperationException('This luminance source does not support rotation by 90 degrees.');\n };\n /**\n * Returns a new object with rotated image data by 45 degrees counterclockwise.\n * Only callable if {@link #isRotateSupported()} is true.\n *\n * @return A rotated version of this object.\n */\n LuminanceSource.prototype.rotateCounterClockwise45 = function () {\n throw new UnsupportedOperationException('This luminance source does not support rotation by 45 degrees.');\n };\n /*@Override*/\n LuminanceSource.prototype.toString = function () {\n var row = new Uint8ClampedArray(this.width);\n var result = new StringBuilder();\n for (var y = 0; y < this.height; y++) {\n var sourceRow = this.getRow(y, row);\n for (var x = 0; x < this.width; x++) {\n var luminance = sourceRow[x] & 0xFF;\n var c = void 0;\n if (luminance < 0x40) {\n c = '#';\n }\n else if (luminance < 0x80) {\n c = '+';\n }\n else if (luminance < 0xC0) {\n c = '.';\n }\n else {\n c = ' ';\n }\n result.append(c);\n }\n result.append('\\n');\n }\n return result.toString();\n };\n return LuminanceSource;\n}());\nexport default LuminanceSource;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport LuminanceSource from './LuminanceSource';\n/*namespace com.google.zxing {*/\n/**\n * A wrapper implementation of {@link LuminanceSource} which inverts the luminances it returns -- black becomes\n * white and vice versa, and each value becomes (255-value).\n *\n * @author Sean Owen\n */\nvar InvertedLuminanceSource = /** @class */ (function (_super) {\n __extends(InvertedLuminanceSource, _super);\n function InvertedLuminanceSource(delegate) {\n var _this = _super.call(this, delegate.getWidth(), delegate.getHeight()) || this;\n _this.delegate = delegate;\n return _this;\n }\n /*@Override*/\n InvertedLuminanceSource.prototype.getRow = function (y /*int*/, row) {\n var sourceRow = this.delegate.getRow(y, row);\n var width = this.getWidth();\n for (var i = 0; i < width; i++) {\n sourceRow[i] = /*(byte)*/ (255 - (sourceRow[i] & 0xFF));\n }\n return sourceRow;\n };\n /*@Override*/\n InvertedLuminanceSource.prototype.getMatrix = function () {\n var matrix = this.delegate.getMatrix();\n var length = this.getWidth() * this.getHeight();\n var invertedMatrix = new Uint8ClampedArray(length);\n for (var i = 0; i < length; i++) {\n invertedMatrix[i] = /*(byte)*/ (255 - (matrix[i] & 0xFF));\n }\n return invertedMatrix;\n };\n /*@Override*/\n InvertedLuminanceSource.prototype.isCropSupported = function () {\n return this.delegate.isCropSupported();\n };\n /*@Override*/\n InvertedLuminanceSource.prototype.crop = function (left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n return new InvertedLuminanceSource(this.delegate.crop(left, top, width, height));\n };\n /*@Override*/\n InvertedLuminanceSource.prototype.isRotateSupported = function () {\n return this.delegate.isRotateSupported();\n };\n /**\n * @return original delegate {@link LuminanceSource} since invert undoes itself\n */\n /*@Override*/\n InvertedLuminanceSource.prototype.invert = function () {\n return this.delegate;\n };\n /*@Override*/\n InvertedLuminanceSource.prototype.rotateCounterClockwise = function () {\n return new InvertedLuminanceSource(this.delegate.rotateCounterClockwise());\n };\n /*@Override*/\n InvertedLuminanceSource.prototype.rotateCounterClockwise45 = function () {\n return new InvertedLuminanceSource(this.delegate.rotateCounterClockwise45());\n };\n return InvertedLuminanceSource;\n}(LuminanceSource));\nexport default InvertedLuminanceSource;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport InvertedLuminanceSource from '../core/InvertedLuminanceSource';\nimport LuminanceSource from '../core/LuminanceSource';\nimport IllegalArgumentException from '../core/IllegalArgumentException';\n/**\n * @deprecated Moving to @zxing/browser\n */\nvar HTMLCanvasElementLuminanceSource = /** @class */ (function (_super) {\n __extends(HTMLCanvasElementLuminanceSource, _super);\n function HTMLCanvasElementLuminanceSource(canvas) {\n var _this = _super.call(this, canvas.width, canvas.height) || this;\n _this.canvas = canvas;\n _this.tempCanvasElement = null;\n _this.buffer = HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData(canvas);\n return _this;\n }\n HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData = function (canvas) {\n var imageData = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);\n return HTMLCanvasElementLuminanceSource.toGrayscaleBuffer(imageData.data, canvas.width, canvas.height);\n };\n HTMLCanvasElementLuminanceSource.toGrayscaleBuffer = function (imageBuffer, width, height) {\n var grayscaleBuffer = new Uint8ClampedArray(width * height);\n HTMLCanvasElementLuminanceSource.FRAME_INDEX = !HTMLCanvasElementLuminanceSource.FRAME_INDEX;\n if (HTMLCanvasElementLuminanceSource.FRAME_INDEX) {\n for (var i = 0, j = 0, length_1 = imageBuffer.length; i < length_1; i += 4, j++) {\n var gray = void 0;\n var alpha = imageBuffer[i + 3];\n // The color of fully-transparent pixels is irrelevant. They are often, technically, fully-transparent\n // black (0 alpha, and then 0 RGB). They are often used, of course as the \"white\" area in a\n // barcode image. Force any such pixel to be white:\n if (alpha === 0) {\n gray = 0xFF;\n }\n else {\n var pixelR = imageBuffer[i];\n var pixelG = imageBuffer[i + 1];\n var pixelB = imageBuffer[i + 2];\n // .299R + 0.587G + 0.114B (YUV/YIQ for PAL and NTSC),\n // (306*R) >> 10 is approximately equal to R*0.299, and so on.\n // 0x200 >> 10 is 0.5, it implements rounding.\n gray = (306 * pixelR +\n 601 * pixelG +\n 117 * pixelB +\n 0x200) >> 10;\n }\n grayscaleBuffer[j] = gray;\n }\n }\n else {\n for (var i = 0, j = 0, length_2 = imageBuffer.length; i < length_2; i += 4, j++) {\n var gray = void 0;\n var alpha = imageBuffer[i + 3];\n // The color of fully-transparent pixels is irrelevant. They are often, technically, fully-transparent\n // black (0 alpha, and then 0 RGB). They are often used, of course as the \"white\" area in a\n // barcode image. Force any such pixel to be white:\n if (alpha === 0) {\n gray = 0xFF;\n }\n else {\n var pixelR = imageBuffer[i];\n var pixelG = imageBuffer[i + 1];\n var pixelB = imageBuffer[i + 2];\n // .299R + 0.587G + 0.114B (YUV/YIQ for PAL and NTSC),\n // (306*R) >> 10 is approximately equal to R*0.299, and so on.\n // 0x200 >> 10 is 0.5, it implements rounding.\n gray = (306 * pixelR +\n 601 * pixelG +\n 117 * pixelB +\n 0x200) >> 10;\n }\n grayscaleBuffer[j] = 0xFF - gray;\n }\n }\n return grayscaleBuffer;\n };\n HTMLCanvasElementLuminanceSource.prototype.getRow = function (y /*int*/, row) {\n if (y < 0 || y >= this.getHeight()) {\n throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n }\n var width = this.getWidth();\n var start = y * width;\n if (row === null) {\n row = this.buffer.slice(start, start + width);\n }\n else {\n if (row.length < width) {\n row = new Uint8ClampedArray(width);\n }\n // The underlying raster of image consists of bytes with the luminance values\n // TODO: can avoid set/slice?\n row.set(this.buffer.slice(start, start + width));\n }\n return row;\n };\n HTMLCanvasElementLuminanceSource.prototype.getMatrix = function () {\n return this.buffer;\n };\n HTMLCanvasElementLuminanceSource.prototype.isCropSupported = function () {\n return true;\n };\n HTMLCanvasElementLuminanceSource.prototype.crop = function (left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n _super.prototype.crop.call(this, left, top, width, height);\n return this;\n };\n /**\n * This is always true, since the image is a gray-scale image.\n *\n * @return true\n */\n HTMLCanvasElementLuminanceSource.prototype.isRotateSupported = function () {\n return true;\n };\n HTMLCanvasElementLuminanceSource.prototype.rotateCounterClockwise = function () {\n this.rotate(-90);\n return this;\n };\n HTMLCanvasElementLuminanceSource.prototype.rotateCounterClockwise45 = function () {\n this.rotate(-45);\n return this;\n };\n HTMLCanvasElementLuminanceSource.prototype.getTempCanvasElement = function () {\n if (null === this.tempCanvasElement) {\n var tempCanvasElement = this.canvas.ownerDocument.createElement('canvas');\n tempCanvasElement.width = this.canvas.width;\n tempCanvasElement.height = this.canvas.height;\n this.tempCanvasElement = tempCanvasElement;\n }\n return this.tempCanvasElement;\n };\n HTMLCanvasElementLuminanceSource.prototype.rotate = function (angle) {\n var tempCanvasElement = this.getTempCanvasElement();\n var tempContext = tempCanvasElement.getContext('2d');\n var angleRadians = angle * HTMLCanvasElementLuminanceSource.DEGREE_TO_RADIANS;\n // Calculate and set new dimensions for temp canvas\n var width = this.canvas.width;\n var height = this.canvas.height;\n var newWidth = Math.ceil(Math.abs(Math.cos(angleRadians)) * width + Math.abs(Math.sin(angleRadians)) * height);\n var newHeight = Math.ceil(Math.abs(Math.sin(angleRadians)) * width + Math.abs(Math.cos(angleRadians)) * height);\n tempCanvasElement.width = newWidth;\n tempCanvasElement.height = newHeight;\n // Draw at center of temp canvas to prevent clipping of image data\n tempContext.translate(newWidth / 2, newHeight / 2);\n tempContext.rotate(angleRadians);\n tempContext.drawImage(this.canvas, width / -2, height / -2);\n this.buffer = HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData(tempCanvasElement);\n return this;\n };\n HTMLCanvasElementLuminanceSource.prototype.invert = function () {\n return new InvertedLuminanceSource(this);\n };\n HTMLCanvasElementLuminanceSource.DEGREE_TO_RADIANS = Math.PI / 180;\n HTMLCanvasElementLuminanceSource.FRAME_INDEX = true;\n return HTMLCanvasElementLuminanceSource;\n}(LuminanceSource));\nexport { HTMLCanvasElementLuminanceSource };\n","/**\n * @deprecated Moving to @zxing/browser\n *\n * Video input device metadata containing the id and label of the device if available.\n */\nvar VideoInputDevice = /** @class */ (function () {\n /**\n * Creates an instance of VideoInputDevice.\n *\n * @param {string} deviceId the video input device id\n * @param {string} label the label of the device if available\n */\n function VideoInputDevice(deviceId, label, groupId) {\n this.deviceId = deviceId;\n this.label = label;\n /** @inheritdoc */\n this.kind = 'videoinput';\n this.groupId = groupId || undefined;\n }\n /** @inheritdoc */\n VideoInputDevice.prototype.toJSON = function () {\n return {\n kind: this.kind,\n groupId: this.groupId,\n deviceId: this.deviceId,\n label: this.label,\n };\n };\n return VideoInputDevice;\n}());\nexport { VideoInputDevice };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport ArgumentException from '../core/ArgumentException';\nimport BinaryBitmap from '../core/BinaryBitmap';\nimport ChecksumException from '../core/ChecksumException';\nimport HybridBinarizer from '../core/common/HybridBinarizer';\nimport FormatException from '../core/FormatException';\nimport NotFoundException from '../core/NotFoundException';\nimport { HTMLCanvasElementLuminanceSource } from './HTMLCanvasElementLuminanceSource';\nimport { VideoInputDevice } from './VideoInputDevice';\n/**\n * @deprecated Moving to @zxing/browser\n *\n * Base class for browser code reader.\n */\nvar BrowserCodeReader = /** @class */ (function () {\n /**\n * Creates an instance of BrowserCodeReader.\n * @param {Reader} reader The reader instance to decode the barcode\n * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent successful decode tries\n *\n * @memberOf BrowserCodeReader\n */\n function BrowserCodeReader(reader, timeBetweenScansMillis, _hints) {\n if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n this.reader = reader;\n this.timeBetweenScansMillis = timeBetweenScansMillis;\n this._hints = _hints;\n /**\n * This will break the loop.\n */\n this._stopContinuousDecode = false;\n /**\n * This will break the loop.\n */\n this._stopAsyncDecode = false;\n /**\n * Delay time between decode attempts made by the scanner.\n */\n this._timeBetweenDecodingAttempts = 0;\n }\n Object.defineProperty(BrowserCodeReader.prototype, \"hasNavigator\", {\n /**\n * If navigator is present.\n */\n get: function () {\n return typeof navigator !== 'undefined';\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserCodeReader.prototype, \"isMediaDevicesSuported\", {\n /**\n * If mediaDevices under navigator is supported.\n */\n get: function () {\n return this.hasNavigator && !!navigator.mediaDevices;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserCodeReader.prototype, \"canEnumerateDevices\", {\n /**\n * If enumerateDevices under navigator is supported.\n */\n get: function () {\n return !!(this.isMediaDevicesSuported && navigator.mediaDevices.enumerateDevices);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserCodeReader.prototype, \"timeBetweenDecodingAttempts\", {\n /** Time between two decoding tries in milli seconds. */\n get: function () {\n return this._timeBetweenDecodingAttempts;\n },\n /**\n * Change the time span the decoder waits between two decoding tries.\n *\n * @param {number} millis Time between two decoding tries in milli seconds.\n */\n set: function (millis) {\n this._timeBetweenDecodingAttempts = millis < 0 ? 0 : millis;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserCodeReader.prototype, \"hints\", {\n /**\n * Sets the hints.\n */\n get: function () {\n return this._hints;\n },\n /**\n * Sets the hints.\n */\n set: function (hints) {\n this._hints = hints || null;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Lists all the available video input devices.\n */\n BrowserCodeReader.prototype.listVideoInputDevices = function () {\n return __awaiter(this, void 0, void 0, function () {\n var devices, videoDevices, devices_1, devices_1_1, device, kind, deviceId, label, groupId, videoDevice;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.hasNavigator) {\n throw new Error(\"Can't enumerate devices, navigator is not present.\");\n }\n if (!this.canEnumerateDevices) {\n throw new Error(\"Can't enumerate devices, method not supported.\");\n }\n return [4 /*yield*/, navigator.mediaDevices.enumerateDevices()];\n case 1:\n devices = _b.sent();\n videoDevices = [];\n try {\n for (devices_1 = __values(devices), devices_1_1 = devices_1.next(); !devices_1_1.done; devices_1_1 = devices_1.next()) {\n device = devices_1_1.value;\n kind = device.kind === 'video' ? 'videoinput' : device.kind;\n if (kind !== 'videoinput') {\n continue;\n }\n deviceId = device.deviceId || device.id;\n label = device.label || \"Video device \" + (videoDevices.length + 1);\n groupId = device.groupId;\n videoDevice = { deviceId: deviceId, label: label, kind: kind, groupId: groupId };\n videoDevices.push(videoDevice);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (devices_1_1 && !devices_1_1.done && (_a = devices_1.return)) _a.call(devices_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/, videoDevices];\n }\n });\n });\n };\n /**\n * Obtain the list of available devices with type 'videoinput'.\n *\n * @returns {Promise} an array of available video input devices\n *\n * @memberOf BrowserCodeReader\n *\n * @deprecated Use `listVideoInputDevices` instead.\n */\n BrowserCodeReader.prototype.getVideoInputDevices = function () {\n return __awaiter(this, void 0, void 0, function () {\n var devices;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.listVideoInputDevices()];\n case 1:\n devices = _a.sent();\n return [2 /*return*/, devices.map(function (d) { return new VideoInputDevice(d.deviceId, d.label); })];\n }\n });\n });\n };\n /**\n * Let's you find a device using it's Id.\n */\n BrowserCodeReader.prototype.findDeviceById = function (deviceId) {\n return __awaiter(this, void 0, void 0, function () {\n var devices;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.listVideoInputDevices()];\n case 1:\n devices = _a.sent();\n if (!devices) {\n return [2 /*return*/, null];\n }\n return [2 /*return*/, devices.find(function (x) { return x.deviceId === deviceId; })];\n }\n });\n });\n };\n /**\n * Decodes the barcode from the device specified by deviceId while showing the video in the specified video element.\n *\n * @param deviceId the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n * @param video the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n * @returns The decoding result.\n *\n * @memberOf BrowserCodeReader\n *\n * @deprecated Use `decodeOnceFromVideoDevice` instead.\n */\n BrowserCodeReader.prototype.decodeFromInputVideoDevice = function (deviceId, videoSource) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.decodeOnceFromVideoDevice(deviceId, videoSource)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * In one attempt, tries to decode the barcode from the device specified by deviceId while showing the video in the specified video element.\n *\n * @param deviceId the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n * @param video the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n * @returns The decoding result.\n *\n * @memberOf BrowserCodeReader\n */\n BrowserCodeReader.prototype.decodeOnceFromVideoDevice = function (deviceId, videoSource) {\n return __awaiter(this, void 0, void 0, function () {\n var videoConstraints, constraints;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.reset();\n if (!deviceId) {\n videoConstraints = { facingMode: 'environment' };\n }\n else {\n videoConstraints = { deviceId: { exact: deviceId } };\n }\n constraints = { video: videoConstraints };\n return [4 /*yield*/, this.decodeOnceFromConstraints(constraints, videoSource)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * In one attempt, tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n *\n * @param constraints the media stream constraints to get s valid media stream to decode from\n * @param video the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n * @returns The decoding result.\n *\n * @memberOf BrowserCodeReader\n */\n BrowserCodeReader.prototype.decodeOnceFromConstraints = function (constraints, videoSource) {\n return __awaiter(this, void 0, void 0, function () {\n var stream;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, navigator.mediaDevices.getUserMedia(constraints)];\n case 1:\n stream = _a.sent();\n return [4 /*yield*/, this.decodeOnceFromStream(stream, videoSource)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * In one attempt, tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n *\n * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n * @param {string|HTMLVideoElement} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n * @returns {Promise} The decoding result.\n *\n * @memberOf BrowserCodeReader\n */\n BrowserCodeReader.prototype.decodeOnceFromStream = function (stream, videoSource) {\n return __awaiter(this, void 0, void 0, function () {\n var video, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.reset();\n return [4 /*yield*/, this.attachStreamToVideo(stream, videoSource)];\n case 1:\n video = _a.sent();\n return [4 /*yield*/, this.decodeOnce(video)];\n case 2:\n result = _a.sent();\n return [2 /*return*/, result];\n }\n });\n });\n };\n /**\n * Continuously decodes the barcode from the device specified by device while showing the video in the specified video element.\n *\n * @param {string|null} [deviceId] the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n * @param {string|HTMLVideoElement|null} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n * @returns {Promise}\n *\n * @memberOf BrowserCodeReader\n *\n * @deprecated Use `decodeFromVideoDevice` instead.\n */\n BrowserCodeReader.prototype.decodeFromInputVideoDeviceContinuously = function (deviceId, videoSource, callbackFn) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.decodeFromVideoDevice(deviceId, videoSource, callbackFn)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * Continuously tries to decode the barcode from the device specified by device while showing the video in the specified video element.\n *\n * @param {string|null} [deviceId] the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n * @param {string|HTMLVideoElement|null} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n * @returns {Promise}\n *\n * @memberOf BrowserCodeReader\n */\n BrowserCodeReader.prototype.decodeFromVideoDevice = function (deviceId, videoSource, callbackFn) {\n return __awaiter(this, void 0, void 0, function () {\n var videoConstraints, constraints;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!deviceId) {\n videoConstraints = { facingMode: 'environment' };\n }\n else {\n videoConstraints = { deviceId: { exact: deviceId } };\n }\n constraints = { video: videoConstraints };\n return [4 /*yield*/, this.decodeFromConstraints(constraints, videoSource, callbackFn)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * Continuously tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n *\n * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n * @param {string|HTMLVideoElement} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n * @returns {Promise} The decoding result.\n *\n * @memberOf BrowserCodeReader\n */\n BrowserCodeReader.prototype.decodeFromConstraints = function (constraints, videoSource, callbackFn) {\n return __awaiter(this, void 0, void 0, function () {\n var stream;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, navigator.mediaDevices.getUserMedia(constraints)];\n case 1:\n stream = _a.sent();\n return [4 /*yield*/, this.decodeFromStream(stream, videoSource, callbackFn)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * In one attempt, tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n *\n * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n * @param {string|HTMLVideoElement} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n * @returns {Promise} The decoding result.\n *\n * @memberOf BrowserCodeReader\n */\n BrowserCodeReader.prototype.decodeFromStream = function (stream, videoSource, callbackFn) {\n return __awaiter(this, void 0, void 0, function () {\n var video;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.reset();\n return [4 /*yield*/, this.attachStreamToVideo(stream, videoSource)];\n case 1:\n video = _a.sent();\n return [4 /*yield*/, this.decodeContinuously(video, callbackFn)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * Breaks the decoding loop.\n */\n BrowserCodeReader.prototype.stopAsyncDecode = function () {\n this._stopAsyncDecode = true;\n };\n /**\n * Breaks the decoding loop.\n */\n BrowserCodeReader.prototype.stopContinuousDecode = function () {\n this._stopContinuousDecode = true;\n };\n /**\n * Sets the new stream and request a new decoding-with-delay.\n *\n * @param stream The stream to be shown in the video element.\n * @param decodeFn A callback for the decode method.\n */\n BrowserCodeReader.prototype.attachStreamToVideo = function (stream, videoSource) {\n return __awaiter(this, void 0, void 0, function () {\n var videoElement;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n videoElement = this.prepareVideoElement(videoSource);\n this.addVideoSource(videoElement, stream);\n this.videoElement = videoElement;\n this.stream = stream;\n return [4 /*yield*/, this.playVideoOnLoadAsync(videoElement)];\n case 1:\n _a.sent();\n return [2 /*return*/, videoElement];\n }\n });\n });\n };\n /**\n *\n * @param videoElement\n */\n BrowserCodeReader.prototype.playVideoOnLoadAsync = function (videoElement) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n return _this.playVideoOnLoad(videoElement, function () { return resolve(); });\n });\n };\n /**\n * Binds listeners and callbacks to the videoElement.\n *\n * @param element\n * @param callbackFn\n */\n BrowserCodeReader.prototype.playVideoOnLoad = function (element, callbackFn) {\n var _this = this;\n this.videoEndedListener = function () { return _this.stopStreams(); };\n this.videoCanPlayListener = function () { return _this.tryPlayVideo(element); };\n element.addEventListener('ended', this.videoEndedListener);\n element.addEventListener('canplay', this.videoCanPlayListener);\n element.addEventListener('playing', callbackFn);\n // if canplay was already fired, we won't know when to play, so just give it a try\n this.tryPlayVideo(element);\n };\n /**\n * Checks if the given video element is currently playing.\n */\n BrowserCodeReader.prototype.isVideoPlaying = function (video) {\n return (video.currentTime > 0 &&\n !video.paused &&\n !video.ended &&\n video.readyState > 2);\n };\n /**\n * Just tries to play the video and logs any errors.\n * The play call is only made is the video is not already playing.\n */\n BrowserCodeReader.prototype.tryPlayVideo = function (videoElement) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (this.isVideoPlaying(videoElement)) {\n console.warn('Trying to play video that is already playing.');\n return [2 /*return*/];\n }\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n return [4 /*yield*/, videoElement.play()];\n case 2:\n _b.sent();\n return [3 /*break*/, 4];\n case 3:\n _a = _b.sent();\n console.warn('It was not possible to play the video.');\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Searches and validates a media element.\n */\n BrowserCodeReader.prototype.getMediaElement = function (mediaElementId, type) {\n var mediaElement = document.getElementById(mediaElementId);\n if (!mediaElement) {\n throw new ArgumentException(\"element with id '\" + mediaElementId + \"' not found\");\n }\n if (mediaElement.nodeName.toLowerCase() !== type.toLowerCase()) {\n throw new ArgumentException(\"element with id '\" + mediaElementId + \"' must be an \" + type + \" element\");\n }\n return mediaElement;\n };\n /**\n * Decodes the barcode from an image.\n *\n * @param {(string|HTMLImageElement)} [source] The image element that can be either an element id or the element itself. Can be undefined in which case the decoding will be done from the imageUrl parameter.\n * @param {string} [url]\n * @returns {Promise} The decoding result.\n *\n * @memberOf BrowserCodeReader\n */\n BrowserCodeReader.prototype.decodeFromImage = function (source, url) {\n if (!source && !url) {\n throw new ArgumentException('either imageElement with a src set or an url must be provided');\n }\n if (url && !source) {\n return this.decodeFromImageUrl(url);\n }\n return this.decodeFromImageElement(source);\n };\n /**\n * Decodes the barcode from a video.\n *\n * @param {(string|HTMLImageElement)} [source] The image element that can be either an element id or the element itself. Can be undefined in which case the decoding will be done from the imageUrl parameter.\n * @param {string} [url]\n * @returns {Promise} The decoding result.\n *\n * @memberOf BrowserCodeReader\n */\n BrowserCodeReader.prototype.decodeFromVideo = function (source, url) {\n if (!source && !url) {\n throw new ArgumentException('Either an element with a src set or an URL must be provided');\n }\n if (url && !source) {\n return this.decodeFromVideoUrl(url);\n }\n return this.decodeFromVideoElement(source);\n };\n /**\n * Decodes continuously the barcode from a video.\n *\n * @param {(string|HTMLImageElement)} [source] The image element that can be either an element id or the element itself. Can be undefined in which case the decoding will be done from the imageUrl parameter.\n * @param {string} [url]\n * @returns {Promise} The decoding result.\n *\n * @memberOf BrowserCodeReader\n *\n * @experimental\n */\n BrowserCodeReader.prototype.decodeFromVideoContinuously = function (source, url, callbackFn) {\n if (undefined === source && undefined === url) {\n throw new ArgumentException('Either an element with a src set or an URL must be provided');\n }\n if (url && !source) {\n return this.decodeFromVideoUrlContinuously(url, callbackFn);\n }\n return this.decodeFromVideoElementContinuously(source, callbackFn);\n };\n /**\n * Decodes something from an image HTML element.\n */\n BrowserCodeReader.prototype.decodeFromImageElement = function (source) {\n if (!source) {\n throw new ArgumentException('An image element must be provided.');\n }\n this.reset();\n var element = this.prepareImageElement(source);\n this.imageElement = element;\n var task;\n if (this.isImageLoaded(element)) {\n task = this.decodeOnce(element, false, true);\n }\n else {\n task = this._decodeOnLoadImage(element);\n }\n return task;\n };\n /**\n * Decodes something from an image HTML element.\n */\n BrowserCodeReader.prototype.decodeFromVideoElement = function (source) {\n var element = this._decodeFromVideoElementSetup(source);\n return this._decodeOnLoadVideo(element);\n };\n /**\n * Decodes something from an image HTML element.\n */\n BrowserCodeReader.prototype.decodeFromVideoElementContinuously = function (source, callbackFn) {\n var element = this._decodeFromVideoElementSetup(source);\n return this._decodeOnLoadVideoContinuously(element, callbackFn);\n };\n /**\n * Sets up the video source so it can be decoded when loaded.\n *\n * @param source The video source element.\n */\n BrowserCodeReader.prototype._decodeFromVideoElementSetup = function (source) {\n if (!source) {\n throw new ArgumentException('A video element must be provided.');\n }\n this.reset();\n var element = this.prepareVideoElement(source);\n // defines the video element before starts decoding\n this.videoElement = element;\n return element;\n };\n /**\n * Decodes an image from a URL.\n */\n BrowserCodeReader.prototype.decodeFromImageUrl = function (url) {\n if (!url) {\n throw new ArgumentException('An URL must be provided.');\n }\n this.reset();\n var element = this.prepareImageElement();\n this.imageElement = element;\n var decodeTask = this._decodeOnLoadImage(element);\n element.src = url;\n return decodeTask;\n };\n /**\n * Decodes an image from a URL.\n */\n BrowserCodeReader.prototype.decodeFromVideoUrl = function (url) {\n if (!url) {\n throw new ArgumentException('An URL must be provided.');\n }\n this.reset();\n // creates a new element\n var element = this.prepareVideoElement();\n var decodeTask = this.decodeFromVideoElement(element);\n element.src = url;\n return decodeTask;\n };\n /**\n * Decodes an image from a URL.\n *\n * @experimental\n */\n BrowserCodeReader.prototype.decodeFromVideoUrlContinuously = function (url, callbackFn) {\n if (!url) {\n throw new ArgumentException('An URL must be provided.');\n }\n this.reset();\n // creates a new element\n var element = this.prepareVideoElement();\n var decodeTask = this.decodeFromVideoElementContinuously(element, callbackFn);\n element.src = url;\n return decodeTask;\n };\n BrowserCodeReader.prototype._decodeOnLoadImage = function (element) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.imageLoadedListener = function () {\n return _this.decodeOnce(element, false, true).then(resolve, reject);\n };\n element.addEventListener('load', _this.imageLoadedListener);\n });\n };\n BrowserCodeReader.prototype._decodeOnLoadVideo = function (videoElement) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: \n // plays the video\n return [4 /*yield*/, this.playVideoOnLoadAsync(videoElement)];\n case 1:\n // plays the video\n _a.sent();\n return [4 /*yield*/, this.decodeOnce(videoElement)];\n case 2: \n // starts decoding after played the video\n return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n BrowserCodeReader.prototype._decodeOnLoadVideoContinuously = function (videoElement, callbackFn) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: \n // plays the video\n return [4 /*yield*/, this.playVideoOnLoadAsync(videoElement)];\n case 1:\n // plays the video\n _a.sent();\n // starts decoding after played the video\n this.decodeContinuously(videoElement, callbackFn);\n return [2 /*return*/];\n }\n });\n });\n };\n BrowserCodeReader.prototype.isImageLoaded = function (img) {\n // During the onload event, IE correctly identifies any images that\n // weren’t downloaded as not complete. Others should too. Gecko-based\n // browsers act like NS4 in that they report this incorrectly.\n if (!img.complete) {\n return false;\n }\n // However, they do have two very useful properties: naturalWidth and\n // naturalHeight. These give the true size of the image. If it failed\n // to load, either of these should be zero.\n if (img.naturalWidth === 0) {\n return false;\n }\n // No other way of checking: assume it’s ok.\n return true;\n };\n BrowserCodeReader.prototype.prepareImageElement = function (imageSource) {\n var imageElement;\n if (typeof imageSource === 'undefined') {\n imageElement = document.createElement('img');\n imageElement.width = 200;\n imageElement.height = 200;\n }\n if (typeof imageSource === 'string') {\n imageElement = this.getMediaElement(imageSource, 'img');\n }\n if (imageSource instanceof HTMLImageElement) {\n imageElement = imageSource;\n }\n return imageElement;\n };\n /**\n * Sets a HTMLVideoElement for scanning or creates a new one.\n *\n * @param videoSource The HTMLVideoElement to be set.\n */\n BrowserCodeReader.prototype.prepareVideoElement = function (videoSource) {\n var videoElement;\n if (!videoSource && typeof document !== 'undefined') {\n videoElement = document.createElement('video');\n videoElement.width = 200;\n videoElement.height = 200;\n }\n if (typeof videoSource === 'string') {\n videoElement = (this.getMediaElement(videoSource, 'video'));\n }\n if (videoSource instanceof HTMLVideoElement) {\n videoElement = videoSource;\n }\n // Needed for iOS 11\n videoElement.setAttribute('autoplay', 'true');\n videoElement.setAttribute('muted', 'true');\n videoElement.setAttribute('playsinline', 'true');\n return videoElement;\n };\n /**\n * Tries to decode from the video input until it finds some value.\n */\n BrowserCodeReader.prototype.decodeOnce = function (element, retryIfNotFound, retryIfChecksumOrFormatError) {\n var _this = this;\n if (retryIfNotFound === void 0) { retryIfNotFound = true; }\n if (retryIfChecksumOrFormatError === void 0) { retryIfChecksumOrFormatError = true; }\n this._stopAsyncDecode = false;\n var loop = function (resolve, reject) {\n if (_this._stopAsyncDecode) {\n reject(new NotFoundException('Video stream has ended before any code could be detected.'));\n _this._stopAsyncDecode = undefined;\n return;\n }\n try {\n var result = _this.decode(element);\n resolve(result);\n }\n catch (e) {\n var ifNotFound = retryIfNotFound && e instanceof NotFoundException;\n var isChecksumOrFormatError = e instanceof ChecksumException || e instanceof FormatException;\n var ifChecksumOrFormat = isChecksumOrFormatError && retryIfChecksumOrFormatError;\n if (ifNotFound || ifChecksumOrFormat) {\n // trying again\n return setTimeout(loop, _this._timeBetweenDecodingAttempts, resolve, reject);\n }\n reject(e);\n }\n };\n return new Promise(function (resolve, reject) { return loop(resolve, reject); });\n };\n /**\n * Continuously decodes from video input.\n */\n BrowserCodeReader.prototype.decodeContinuously = function (element, callbackFn) {\n var _this = this;\n this._stopContinuousDecode = false;\n var loop = function () {\n if (_this._stopContinuousDecode) {\n _this._stopContinuousDecode = undefined;\n return;\n }\n try {\n var result = _this.decode(element);\n callbackFn(result, null);\n setTimeout(loop, _this.timeBetweenScansMillis);\n }\n catch (e) {\n callbackFn(null, e);\n var isChecksumOrFormatError = e instanceof ChecksumException || e instanceof FormatException;\n var isNotFound = e instanceof NotFoundException;\n if (isChecksumOrFormatError || isNotFound) {\n // trying again\n setTimeout(loop, _this._timeBetweenDecodingAttempts);\n }\n }\n };\n loop();\n };\n /**\n * Gets the BinaryBitmap for ya! (and decodes it)\n */\n BrowserCodeReader.prototype.decode = function (element) {\n // get binary bitmap for decode function\n var binaryBitmap = this.createBinaryBitmap(element);\n return this.decodeBitmap(binaryBitmap);\n };\n /**\n * Creates a binaryBitmap based in some image source.\n *\n * @param mediaElement HTML element containing drawable image source.\n */\n BrowserCodeReader.prototype.createBinaryBitmap = function (mediaElement) {\n var ctx = this.getCaptureCanvasContext(mediaElement);\n if (mediaElement instanceof HTMLVideoElement) {\n this.drawFrameOnCanvas(mediaElement);\n }\n else {\n this.drawImageOnCanvas(mediaElement);\n }\n var canvas = this.getCaptureCanvas(mediaElement);\n var luminanceSource = new HTMLCanvasElementLuminanceSource(canvas);\n var hybridBinarizer = new HybridBinarizer(luminanceSource);\n return new BinaryBitmap(hybridBinarizer);\n };\n /**\n *\n */\n BrowserCodeReader.prototype.getCaptureCanvasContext = function (mediaElement) {\n if (!this.captureCanvasContext) {\n var elem = this.getCaptureCanvas(mediaElement);\n var ctx = void 0;\n try {\n ctx = elem.getContext('2d', { willReadFrequently: true });\n }\n catch (e) {\n ctx = elem.getContext('2d');\n }\n this.captureCanvasContext = ctx;\n }\n return this.captureCanvasContext;\n };\n /**\n *\n */\n BrowserCodeReader.prototype.getCaptureCanvas = function (mediaElement) {\n if (!this.captureCanvas) {\n var elem = this.createCaptureCanvas(mediaElement);\n this.captureCanvas = elem;\n }\n return this.captureCanvas;\n };\n /**\n * Overwriting this allows you to manipulate the next frame in anyway you want before decode.\n */\n BrowserCodeReader.prototype.drawFrameOnCanvas = function (srcElement, dimensions, canvasElementContext) {\n if (dimensions === void 0) { dimensions = {\n sx: 0,\n sy: 0,\n sWidth: srcElement.videoWidth,\n sHeight: srcElement.videoHeight,\n dx: 0,\n dy: 0,\n dWidth: srcElement.videoWidth,\n dHeight: srcElement.videoHeight,\n }; }\n if (canvasElementContext === void 0) { canvasElementContext = this.captureCanvasContext; }\n canvasElementContext.drawImage(srcElement, dimensions.sx, dimensions.sy, dimensions.sWidth, dimensions.sHeight, dimensions.dx, dimensions.dy, dimensions.dWidth, dimensions.dHeight);\n };\n /**\n * Ovewriting this allows you to manipulate the snapshot image in anyway you want before decode.\n */\n BrowserCodeReader.prototype.drawImageOnCanvas = function (srcElement, dimensions, canvasElementContext) {\n if (dimensions === void 0) { dimensions = {\n sx: 0,\n sy: 0,\n sWidth: srcElement.naturalWidth,\n sHeight: srcElement.naturalHeight,\n dx: 0,\n dy: 0,\n dWidth: srcElement.naturalWidth,\n dHeight: srcElement.naturalHeight,\n }; }\n if (canvasElementContext === void 0) { canvasElementContext = this.captureCanvasContext; }\n canvasElementContext.drawImage(srcElement, dimensions.sx, dimensions.sy, dimensions.sWidth, dimensions.sHeight, dimensions.dx, dimensions.dy, dimensions.dWidth, dimensions.dHeight);\n };\n /**\n * Call the encapsulated readers decode\n */\n BrowserCodeReader.prototype.decodeBitmap = function (binaryBitmap) {\n return this.reader.decode(binaryBitmap, this._hints);\n };\n /**\n * 🖌 Prepares the canvas for capture and scan frames.\n */\n BrowserCodeReader.prototype.createCaptureCanvas = function (mediaElement) {\n if (typeof document === 'undefined') {\n this._destroyCaptureCanvas();\n return null;\n }\n var canvasElement = document.createElement('canvas');\n var width;\n var height;\n if (typeof mediaElement !== 'undefined') {\n if (mediaElement instanceof HTMLVideoElement) {\n width = mediaElement.videoWidth;\n height = mediaElement.videoHeight;\n }\n else if (mediaElement instanceof HTMLImageElement) {\n width = mediaElement.naturalWidth || mediaElement.width;\n height = mediaElement.naturalHeight || mediaElement.height;\n }\n }\n canvasElement.style.width = width + 'px';\n canvasElement.style.height = height + 'px';\n canvasElement.width = width;\n canvasElement.height = height;\n return canvasElement;\n };\n /**\n * Stops the continuous scan and cleans the stream.\n */\n BrowserCodeReader.prototype.stopStreams = function () {\n if (this.stream) {\n this.stream.getVideoTracks().forEach(function (t) { return t.stop(); });\n this.stream = undefined;\n }\n if (this._stopAsyncDecode === false) {\n this.stopAsyncDecode();\n }\n if (this._stopContinuousDecode === false) {\n this.stopContinuousDecode();\n }\n };\n /**\n * Resets the code reader to the initial state. Cancels any ongoing barcode scanning from video or camera.\n *\n * @memberOf BrowserCodeReader\n */\n BrowserCodeReader.prototype.reset = function () {\n // stops the camera, preview and scan 🔴\n this.stopStreams();\n // clean and forget about HTML elements\n this._destroyVideoElement();\n this._destroyImageElement();\n this._destroyCaptureCanvas();\n };\n BrowserCodeReader.prototype._destroyVideoElement = function () {\n if (!this.videoElement) {\n return;\n }\n // first gives freedon to the element 🕊\n if (typeof this.videoEndedListener !== 'undefined') {\n this.videoElement.removeEventListener('ended', this.videoEndedListener);\n }\n if (typeof this.videoPlayingEventListener !== 'undefined') {\n this.videoElement.removeEventListener('playing', this.videoPlayingEventListener);\n }\n if (typeof this.videoCanPlayListener !== 'undefined') {\n this.videoElement.removeEventListener('loadedmetadata', this.videoCanPlayListener);\n }\n // then forgets about that element 😢\n this.cleanVideoSource(this.videoElement);\n this.videoElement = undefined;\n };\n BrowserCodeReader.prototype._destroyImageElement = function () {\n if (!this.imageElement) {\n return;\n }\n // first gives freedon to the element 🕊\n if (undefined !== this.imageLoadedListener) {\n this.imageElement.removeEventListener('load', this.imageLoadedListener);\n }\n // then forget about that element 😢\n this.imageElement.src = undefined;\n this.imageElement.removeAttribute('src');\n this.imageElement = undefined;\n };\n /**\n * Cleans canvas references 🖌\n */\n BrowserCodeReader.prototype._destroyCaptureCanvas = function () {\n // then forget about that element 😢\n this.captureCanvasContext = undefined;\n this.captureCanvas = undefined;\n };\n /**\n * Defines what the videoElement src will be.\n *\n * @param videoElement\n * @param stream\n */\n BrowserCodeReader.prototype.addVideoSource = function (videoElement, stream) {\n // Older browsers may not have `srcObject`\n try {\n // @note Throws Exception if interrupted by a new loaded request\n videoElement.srcObject = stream;\n }\n catch (err) {\n // @note Avoid using this in new browsers, as it is going away.\n // @ts-ignore\n videoElement.src = URL.createObjectURL(stream);\n }\n };\n /**\n * Unbinds a HTML video src property.\n *\n * @param videoElement\n */\n BrowserCodeReader.prototype.cleanVideoSource = function (videoElement) {\n try {\n videoElement.srcObject = null;\n }\n catch (err) {\n videoElement.src = '';\n }\n this.videoElement.removeAttribute('src');\n };\n return BrowserCodeReader;\n}());\nexport { BrowserCodeReader };\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport System from './util/System';\n/**\n *

Encapsulates the result of decoding a barcode within an image.

\n *\n * @author Sean Owen\n */\nvar Result = /** @class */ (function () {\n // public constructor(private text: string,\n // Uint8Array rawBytes,\n // ResultPoconst resultPoints: Int32Array,\n // BarcodeFormat format) {\n // this(text, rawBytes, resultPoints, format, System.currentTimeMillis())\n // }\n // public constructor(text: string,\n // Uint8Array rawBytes,\n // ResultPoconst resultPoints: Int32Array,\n // BarcodeFormat format,\n // long timestamp) {\n // this(text, rawBytes, rawBytes == null ? 0 : 8 * rawBytes.length,\n // resultPoints, format, timestamp)\n // }\n function Result(text, rawBytes, numBits, resultPoints, format, timestamp) {\n if (numBits === void 0) { numBits = rawBytes == null ? 0 : 8 * rawBytes.length; }\n if (timestamp === void 0) { timestamp = System.currentTimeMillis(); }\n this.text = text;\n this.rawBytes = rawBytes;\n this.numBits = numBits;\n this.resultPoints = resultPoints;\n this.format = format;\n this.timestamp = timestamp;\n this.text = text;\n this.rawBytes = rawBytes;\n if (undefined === numBits || null === numBits) {\n this.numBits = (rawBytes === null || rawBytes === undefined) ? 0 : 8 * rawBytes.length;\n }\n else {\n this.numBits = numBits;\n }\n this.resultPoints = resultPoints;\n this.format = format;\n this.resultMetadata = null;\n if (undefined === timestamp || null === timestamp) {\n this.timestamp = System.currentTimeMillis();\n }\n else {\n this.timestamp = timestamp;\n }\n }\n /**\n * @return raw text encoded by the barcode\n */\n Result.prototype.getText = function () {\n return this.text;\n };\n /**\n * @return raw bytes encoded by the barcode, if applicable, otherwise {@code null}\n */\n Result.prototype.getRawBytes = function () {\n return this.rawBytes;\n };\n /**\n * @return how many bits of {@link #getRawBytes()} are valid; typically 8 times its length\n * @since 3.3.0\n */\n Result.prototype.getNumBits = function () {\n return this.numBits;\n };\n /**\n * @return points related to the barcode in the image. These are typically points\n * identifying finder patterns or the corners of the barcode. The exact meaning is\n * specific to the type of barcode that was decoded.\n */\n Result.prototype.getResultPoints = function () {\n return this.resultPoints;\n };\n /**\n * @return {@link BarcodeFormat} representing the format of the barcode that was decoded\n */\n Result.prototype.getBarcodeFormat = function () {\n return this.format;\n };\n /**\n * @return {@link Map} mapping {@link ResultMetadataType} keys to values. May be\n * {@code null}. This contains optional metadata about what was detected about the barcode,\n * like orientation.\n */\n Result.prototype.getResultMetadata = function () {\n return this.resultMetadata;\n };\n Result.prototype.putMetadata = function (type, value) {\n if (this.resultMetadata === null) {\n this.resultMetadata = new Map();\n }\n this.resultMetadata.set(type, value);\n };\n Result.prototype.putAllMetadata = function (metadata) {\n if (metadata !== null) {\n if (this.resultMetadata === null) {\n this.resultMetadata = metadata;\n }\n else {\n this.resultMetadata = new Map(metadata);\n }\n }\n };\n Result.prototype.addResultPoints = function (newPoints) {\n var oldPoints = this.resultPoints;\n if (oldPoints === null) {\n this.resultPoints = newPoints;\n }\n else if (newPoints !== null && newPoints.length > 0) {\n var allPoints = new Array(oldPoints.length + newPoints.length);\n System.arraycopy(oldPoints, 0, allPoints, 0, oldPoints.length);\n System.arraycopy(newPoints, 0, allPoints, oldPoints.length, newPoints.length);\n this.resultPoints = allPoints;\n }\n };\n Result.prototype.getTimestamp = function () {\n return this.timestamp;\n };\n /*@Override*/\n Result.prototype.toString = function () {\n return this.text;\n };\n return Result;\n}());\nexport default Result;\n","/*\n * Direct port to TypeScript of ZXing by Adrian Toșcă\n */\n/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing {*/\n/**\n * Enumerates barcode formats known to this package. Please keep alphabetized.\n *\n * @author Sean Owen\n */\nvar BarcodeFormat;\n(function (BarcodeFormat) {\n /** Aztec 2D barcode format. */\n BarcodeFormat[BarcodeFormat[\"AZTEC\"] = 0] = \"AZTEC\";\n /** CODABAR 1D format. */\n BarcodeFormat[BarcodeFormat[\"CODABAR\"] = 1] = \"CODABAR\";\n /** Code 39 1D format. */\n BarcodeFormat[BarcodeFormat[\"CODE_39\"] = 2] = \"CODE_39\";\n /** Code 93 1D format. */\n BarcodeFormat[BarcodeFormat[\"CODE_93\"] = 3] = \"CODE_93\";\n /** Code 128 1D format. */\n BarcodeFormat[BarcodeFormat[\"CODE_128\"] = 4] = \"CODE_128\";\n /** Data Matrix 2D barcode format. */\n BarcodeFormat[BarcodeFormat[\"DATA_MATRIX\"] = 5] = \"DATA_MATRIX\";\n /** EAN-8 1D format. */\n BarcodeFormat[BarcodeFormat[\"EAN_8\"] = 6] = \"EAN_8\";\n /** EAN-13 1D format. */\n BarcodeFormat[BarcodeFormat[\"EAN_13\"] = 7] = \"EAN_13\";\n /** ITF (Interleaved Two of Five) 1D format. */\n BarcodeFormat[BarcodeFormat[\"ITF\"] = 8] = \"ITF\";\n /** MaxiCode 2D barcode format. */\n BarcodeFormat[BarcodeFormat[\"MAXICODE\"] = 9] = \"MAXICODE\";\n /** PDF417 format. */\n BarcodeFormat[BarcodeFormat[\"PDF_417\"] = 10] = \"PDF_417\";\n /** QR Code 2D barcode format. */\n BarcodeFormat[BarcodeFormat[\"QR_CODE\"] = 11] = \"QR_CODE\";\n /** RSS 14 */\n BarcodeFormat[BarcodeFormat[\"RSS_14\"] = 12] = \"RSS_14\";\n /** RSS EXPANDED */\n BarcodeFormat[BarcodeFormat[\"RSS_EXPANDED\"] = 13] = \"RSS_EXPANDED\";\n /** UPC-A 1D format. */\n BarcodeFormat[BarcodeFormat[\"UPC_A\"] = 14] = \"UPC_A\";\n /** UPC-E 1D format. */\n BarcodeFormat[BarcodeFormat[\"UPC_E\"] = 15] = \"UPC_E\";\n /** UPC/EAN extension format. Not a stand-alone format. */\n BarcodeFormat[BarcodeFormat[\"UPC_EAN_EXTENSION\"] = 16] = \"UPC_EAN_EXTENSION\";\n})(BarcodeFormat || (BarcodeFormat = {}));\nexport default BarcodeFormat;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing {*/\n/**\n * Represents some type of metadata about the result of the decoding that the decoder\n * wishes to communicate back to the caller.\n *\n * @author Sean Owen\n */\nvar ResultMetadataType;\n(function (ResultMetadataType) {\n /**\n * Unspecified, application-specific metadata. Maps to an unspecified {@link Object}.\n */\n ResultMetadataType[ResultMetadataType[\"OTHER\"] = 0] = \"OTHER\";\n /**\n * Denotes the likely approximate orientation of the barcode in the image. This value\n * is given as degrees rotated clockwise from the normal, upright orientation.\n * For example a 1D barcode which was found by reading top-to-bottom would be\n * said to have orientation \"90\". This key maps to an {@link Integer} whose\n * value is in the range [0,360).\n */\n ResultMetadataType[ResultMetadataType[\"ORIENTATION\"] = 1] = \"ORIENTATION\";\n /**\n *

2D barcode formats typically encode text, but allow for a sort of 'byte mode'\n * which is sometimes used to encode binary data. While {@link Result} makes available\n * the complete raw bytes in the barcode for these formats, it does not offer the bytes\n * from the byte segments alone.

\n *\n *

This maps to a {@link java.util.List} of byte arrays corresponding to the\n * raw bytes in the byte segments in the barcode, in order.

\n */\n ResultMetadataType[ResultMetadataType[\"BYTE_SEGMENTS\"] = 2] = \"BYTE_SEGMENTS\";\n /**\n * Error correction level used, if applicable. The value type depends on the\n * format, but is typically a String.\n */\n ResultMetadataType[ResultMetadataType[\"ERROR_CORRECTION_LEVEL\"] = 3] = \"ERROR_CORRECTION_LEVEL\";\n /**\n * For some periodicals, indicates the issue number as an {@link Integer}.\n */\n ResultMetadataType[ResultMetadataType[\"ISSUE_NUMBER\"] = 4] = \"ISSUE_NUMBER\";\n /**\n * For some products, indicates the suggested retail price in the barcode as a\n * formatted {@link String}.\n */\n ResultMetadataType[ResultMetadataType[\"SUGGESTED_PRICE\"] = 5] = \"SUGGESTED_PRICE\";\n /**\n * For some products, the possible country of manufacture as a {@link String} denoting the\n * ISO country code. Some map to multiple possible countries, like \"US/CA\".\n */\n ResultMetadataType[ResultMetadataType[\"POSSIBLE_COUNTRY\"] = 6] = \"POSSIBLE_COUNTRY\";\n /**\n * For some products, the extension text\n */\n ResultMetadataType[ResultMetadataType[\"UPC_EAN_EXTENSION\"] = 7] = \"UPC_EAN_EXTENSION\";\n /**\n * PDF417-specific metadata\n */\n ResultMetadataType[ResultMetadataType[\"PDF417_EXTRA_METADATA\"] = 8] = \"PDF417_EXTRA_METADATA\";\n /**\n * If the code format supports structured append and the current scanned code is part of one then the\n * sequence number is given with it.\n */\n ResultMetadataType[ResultMetadataType[\"STRUCTURED_APPEND_SEQUENCE\"] = 9] = \"STRUCTURED_APPEND_SEQUENCE\";\n /**\n * If the code format supports structured append and the current scanned code is part of one then the\n * parity is given with it.\n */\n ResultMetadataType[ResultMetadataType[\"STRUCTURED_APPEND_PARITY\"] = 10] = \"STRUCTURED_APPEND_PARITY\";\n})(ResultMetadataType || (ResultMetadataType = {}));\nexport default ResultMetadataType;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.common {*/\n/*import java.util.List;*/\n/**\n *

Encapsulates the result of decoding a matrix of bits. This typically\n * applies to 2D barcode formats. For now it contains the raw bytes obtained,\n * as well as a String interpretation of those bytes, if applicable.

\n *\n * @author Sean Owen\n */\nvar DecoderResult = /** @class */ (function () {\n // public constructor(rawBytes: Uint8Array,\n // text: string,\n // List byteSegments,\n // String ecLevel) {\n // this(rawBytes, text, byteSegments, ecLevel, -1, -1)\n // }\n function DecoderResult(rawBytes, text, byteSegments, ecLevel, structuredAppendSequenceNumber, structuredAppendParity) {\n if (structuredAppendSequenceNumber === void 0) { structuredAppendSequenceNumber = -1; }\n if (structuredAppendParity === void 0) { structuredAppendParity = -1; }\n this.rawBytes = rawBytes;\n this.text = text;\n this.byteSegments = byteSegments;\n this.ecLevel = ecLevel;\n this.structuredAppendSequenceNumber = structuredAppendSequenceNumber;\n this.structuredAppendParity = structuredAppendParity;\n this.numBits = (rawBytes === undefined || rawBytes === null) ? 0 : 8 * rawBytes.length;\n }\n /**\n * @return raw bytes representing the result, or {@code null} if not applicable\n */\n DecoderResult.prototype.getRawBytes = function () {\n return this.rawBytes;\n };\n /**\n * @return how many bits of {@link #getRawBytes()} are valid; typically 8 times its length\n * @since 3.3.0\n */\n DecoderResult.prototype.getNumBits = function () {\n return this.numBits;\n };\n /**\n * @param numBits overrides the number of bits that are valid in {@link #getRawBytes()}\n * @since 3.3.0\n */\n DecoderResult.prototype.setNumBits = function (numBits /*int*/) {\n this.numBits = numBits;\n };\n /**\n * @return text representation of the result\n */\n DecoderResult.prototype.getText = function () {\n return this.text;\n };\n /**\n * @return list of byte segments in the result, or {@code null} if not applicable\n */\n DecoderResult.prototype.getByteSegments = function () {\n return this.byteSegments;\n };\n /**\n * @return name of error correction level used, or {@code null} if not applicable\n */\n DecoderResult.prototype.getECLevel = function () {\n return this.ecLevel;\n };\n /**\n * @return number of errors corrected, or {@code null} if not applicable\n */\n DecoderResult.prototype.getErrorsCorrected = function () {\n return this.errorsCorrected;\n };\n DecoderResult.prototype.setErrorsCorrected = function (errorsCorrected /*Integer*/) {\n this.errorsCorrected = errorsCorrected;\n };\n /**\n * @return number of erasures corrected, or {@code null} if not applicable\n */\n DecoderResult.prototype.getErasures = function () {\n return this.erasures;\n };\n DecoderResult.prototype.setErasures = function (erasures /*Integer*/) {\n this.erasures = erasures;\n };\n /**\n * @return arbitrary additional metadata\n */\n DecoderResult.prototype.getOther = function () {\n return this.other;\n };\n DecoderResult.prototype.setOther = function (other) {\n this.other = other;\n };\n DecoderResult.prototype.hasStructuredAppend = function () {\n return this.structuredAppendParity >= 0 && this.structuredAppendSequenceNumber >= 0;\n };\n DecoderResult.prototype.getStructuredAppendParity = function () {\n return this.structuredAppendParity;\n };\n DecoderResult.prototype.getStructuredAppendSequenceNumber = function () {\n return this.structuredAppendSequenceNumber;\n };\n return DecoderResult;\n}());\nexport default DecoderResult;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/**\n *

This class contains utility methods for performing mathematical operations over\n * the Galois Fields. Operations use a given primitive polynomial in calculations.

\n *\n *

Throughout this package, elements of the GF are represented as an {@code int}\n * for convenience and speed (but at the cost of memory).\n *

\n *\n * @author Sean Owen\n * @author David Olivier\n */\nvar AbstractGenericGF = /** @class */ (function () {\n function AbstractGenericGF() {\n }\n /**\n * @return 2 to the power of a in GF(size)\n */\n AbstractGenericGF.prototype.exp = function (a) {\n return this.expTable[a];\n };\n /**\n * @return base 2 log of a in GF(size)\n */\n AbstractGenericGF.prototype.log = function (a /*int*/) {\n if (a === 0) {\n throw new IllegalArgumentException();\n }\n return this.logTable[a];\n };\n /**\n * Implements both addition and subtraction -- they are the same in GF(size).\n *\n * @return sum/difference of a and b\n */\n AbstractGenericGF.addOrSubtract = function (a /*int*/, b /*int*/) {\n return a ^ b;\n };\n return AbstractGenericGF;\n}());\nexport default AbstractGenericGF;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.common.reedsolomon {*/\nimport AbstractGenericGF from './AbstractGenericGF';\nimport System from '../../util/System';\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/**\n *

Represents a polynomial whose coefficients are elements of a GF.\n * Instances of this class are immutable.

\n *\n *

Much credit is due to William Rucklidge since portions of this code are an indirect\n * port of his C++ Reed-Solomon implementation.

\n *\n * @author Sean Owen\n */\nvar GenericGFPoly = /** @class */ (function () {\n /**\n * @param field the {@link GenericGF} instance representing the field to use\n * to perform computations\n * @param coefficients coefficients as ints representing elements of GF(size), arranged\n * from most significant (highest-power term) coefficient to least significant\n * @throws IllegalArgumentException if argument is null or empty,\n * or if leading coefficient is 0 and this is not a\n * constant polynomial (that is, it is not the monomial \"0\")\n */\n function GenericGFPoly(field, coefficients) {\n if (coefficients.length === 0) {\n throw new IllegalArgumentException();\n }\n this.field = field;\n var coefficientsLength = coefficients.length;\n if (coefficientsLength > 1 && coefficients[0] === 0) {\n // Leading term must be non-zero for anything except the constant polynomial \"0\"\n var firstNonZero = 1;\n while (firstNonZero < coefficientsLength && coefficients[firstNonZero] === 0) {\n firstNonZero++;\n }\n if (firstNonZero === coefficientsLength) {\n this.coefficients = Int32Array.from([0]);\n }\n else {\n this.coefficients = new Int32Array(coefficientsLength - firstNonZero);\n System.arraycopy(coefficients, firstNonZero, this.coefficients, 0, this.coefficients.length);\n }\n }\n else {\n this.coefficients = coefficients;\n }\n }\n GenericGFPoly.prototype.getCoefficients = function () {\n return this.coefficients;\n };\n /**\n * @return degree of this polynomial\n */\n GenericGFPoly.prototype.getDegree = function () {\n return this.coefficients.length - 1;\n };\n /**\n * @return true iff this polynomial is the monomial \"0\"\n */\n GenericGFPoly.prototype.isZero = function () {\n return this.coefficients[0] === 0;\n };\n /**\n * @return coefficient of x^degree term in this polynomial\n */\n GenericGFPoly.prototype.getCoefficient = function (degree /*int*/) {\n return this.coefficients[this.coefficients.length - 1 - degree];\n };\n /**\n * @return evaluation of this polynomial at a given point\n */\n GenericGFPoly.prototype.evaluateAt = function (a /*int*/) {\n if (a === 0) {\n // Just return the x^0 coefficient\n return this.getCoefficient(0);\n }\n var coefficients = this.coefficients;\n var result;\n if (a === 1) {\n // Just the sum of the coefficients\n result = 0;\n for (var i = 0, length_1 = coefficients.length; i !== length_1; i++) {\n var coefficient = coefficients[i];\n result = AbstractGenericGF.addOrSubtract(result, coefficient);\n }\n return result;\n }\n result = coefficients[0];\n var size = coefficients.length;\n var field = this.field;\n for (var i = 1; i < size; i++) {\n result = AbstractGenericGF.addOrSubtract(field.multiply(a, result), coefficients[i]);\n }\n return result;\n };\n GenericGFPoly.prototype.addOrSubtract = function (other) {\n if (!this.field.equals(other.field)) {\n throw new IllegalArgumentException('GenericGFPolys do not have same GenericGF field');\n }\n if (this.isZero()) {\n return other;\n }\n if (other.isZero()) {\n return this;\n }\n var smallerCoefficients = this.coefficients;\n var largerCoefficients = other.coefficients;\n if (smallerCoefficients.length > largerCoefficients.length) {\n var temp = smallerCoefficients;\n smallerCoefficients = largerCoefficients;\n largerCoefficients = temp;\n }\n var sumDiff = new Int32Array(largerCoefficients.length);\n var lengthDiff = largerCoefficients.length - smallerCoefficients.length;\n // Copy high-order terms only found in higher-degree polynomial's coefficients\n System.arraycopy(largerCoefficients, 0, sumDiff, 0, lengthDiff);\n for (var i = lengthDiff; i < largerCoefficients.length; i++) {\n sumDiff[i] = AbstractGenericGF.addOrSubtract(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);\n }\n return new GenericGFPoly(this.field, sumDiff);\n };\n GenericGFPoly.prototype.multiply = function (other) {\n if (!this.field.equals(other.field)) {\n throw new IllegalArgumentException('GenericGFPolys do not have same GenericGF field');\n }\n if (this.isZero() || other.isZero()) {\n return this.field.getZero();\n }\n var aCoefficients = this.coefficients;\n var aLength = aCoefficients.length;\n var bCoefficients = other.coefficients;\n var bLength = bCoefficients.length;\n var product = new Int32Array(aLength + bLength - 1);\n var field = this.field;\n for (var i = 0; i < aLength; i++) {\n var aCoeff = aCoefficients[i];\n for (var j = 0; j < bLength; j++) {\n product[i + j] = AbstractGenericGF.addOrSubtract(product[i + j], field.multiply(aCoeff, bCoefficients[j]));\n }\n }\n return new GenericGFPoly(field, product);\n };\n GenericGFPoly.prototype.multiplyScalar = function (scalar /*int*/) {\n if (scalar === 0) {\n return this.field.getZero();\n }\n if (scalar === 1) {\n return this;\n }\n var size = this.coefficients.length;\n var field = this.field;\n var product = new Int32Array(size);\n var coefficients = this.coefficients;\n for (var i = 0; i < size; i++) {\n product[i] = field.multiply(coefficients[i], scalar);\n }\n return new GenericGFPoly(field, product);\n };\n GenericGFPoly.prototype.multiplyByMonomial = function (degree /*int*/, coefficient /*int*/) {\n if (degree < 0) {\n throw new IllegalArgumentException();\n }\n if (coefficient === 0) {\n return this.field.getZero();\n }\n var coefficients = this.coefficients;\n var size = coefficients.length;\n var product = new Int32Array(size + degree);\n var field = this.field;\n for (var i = 0; i < size; i++) {\n product[i] = field.multiply(coefficients[i], coefficient);\n }\n return new GenericGFPoly(field, product);\n };\n GenericGFPoly.prototype.divide = function (other) {\n if (!this.field.equals(other.field)) {\n throw new IllegalArgumentException('GenericGFPolys do not have same GenericGF field');\n }\n if (other.isZero()) {\n throw new IllegalArgumentException('Divide by 0');\n }\n var field = this.field;\n var quotient = field.getZero();\n var remainder = this;\n var denominatorLeadingTerm = other.getCoefficient(other.getDegree());\n var inverseDenominatorLeadingTerm = field.inverse(denominatorLeadingTerm);\n while (remainder.getDegree() >= other.getDegree() && !remainder.isZero()) {\n var degreeDifference = remainder.getDegree() - other.getDegree();\n var scale = field.multiply(remainder.getCoefficient(remainder.getDegree()), inverseDenominatorLeadingTerm);\n var term = other.multiplyByMonomial(degreeDifference, scale);\n var iterationQuotient = field.buildMonomial(degreeDifference, scale);\n quotient = quotient.addOrSubtract(iterationQuotient);\n remainder = remainder.addOrSubtract(term);\n }\n return [quotient, remainder];\n };\n /*@Override*/\n GenericGFPoly.prototype.toString = function () {\n var result = '';\n for (var degree = this.getDegree(); degree >= 0; degree--) {\n var coefficient = this.getCoefficient(degree);\n if (coefficient !== 0) {\n if (coefficient < 0) {\n result += ' - ';\n coefficient = -coefficient;\n }\n else {\n if (result.length > 0) {\n result += ' + ';\n }\n }\n if (degree === 0 || coefficient !== 1) {\n var alphaPower = this.field.log(coefficient);\n if (alphaPower === 0) {\n result += '1';\n }\n else if (alphaPower === 1) {\n result += 'a';\n }\n else {\n result += 'a^';\n result += alphaPower;\n }\n }\n if (degree !== 0) {\n if (degree === 1) {\n result += 'x';\n }\n else {\n result += 'x^';\n result += degree;\n }\n }\n }\n }\n return result;\n };\n return GenericGFPoly;\n}());\nexport default GenericGFPoly;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar ArithmeticException = /** @class */ (function (_super) {\n __extends(ArithmeticException, _super);\n function ArithmeticException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ArithmeticException.kind = 'ArithmeticException';\n return ArithmeticException;\n}(Exception));\nexport default ArithmeticException;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/*namespace com.google.zxing.common.reedsolomon {*/\nimport GenericGFPoly from './GenericGFPoly';\nimport AbstractGenericGF from './AbstractGenericGF';\nimport Integer from '../../util/Integer';\nimport IllegalArgumentException from '../../IllegalArgumentException';\nimport ArithmeticException from '../../ArithmeticException';\n/**\n *

This class contains utility methods for performing mathematical operations over\n * the Galois Fields. Operations use a given primitive polynomial in calculations.

\n *\n *

Throughout this package, elements of the GF are represented as an {@code int}\n * for convenience and speed (but at the cost of memory).\n *

\n *\n * @author Sean Owen\n * @author David Olivier\n */\nvar GenericGF = /** @class */ (function (_super) {\n __extends(GenericGF, _super);\n /**\n * Create a representation of GF(size) using the given primitive polynomial.\n *\n * @param primitive irreducible polynomial whose coefficients are represented by\n * the bits of an int, where the least-significant bit represents the constant\n * coefficient\n * @param size the size of the field\n * @param b the factor b in the generator polynomial can be 0- or 1-based\n * (g(x) = (x+a^b)(x+a^(b+1))...(x+a^(b+2t-1))).\n * In most cases it should be 1, but for QR code it is 0.\n */\n function GenericGF(primitive /*int*/, size /*int*/, generatorBase /*int*/) {\n var _this = _super.call(this) || this;\n _this.primitive = primitive;\n _this.size = size;\n _this.generatorBase = generatorBase;\n var expTable = new Int32Array(size);\n var x = 1;\n for (var i = 0; i < size; i++) {\n expTable[i] = x;\n x *= 2; // we're assuming the generator alpha is 2\n if (x >= size) {\n x ^= primitive;\n x &= size - 1;\n }\n }\n _this.expTable = expTable;\n var logTable = new Int32Array(size);\n for (var i = 0; i < size - 1; i++) {\n logTable[expTable[i]] = i;\n }\n _this.logTable = logTable;\n // logTable[0] == 0 but this should never be used\n _this.zero = new GenericGFPoly(_this, Int32Array.from([0]));\n _this.one = new GenericGFPoly(_this, Int32Array.from([1]));\n return _this;\n }\n GenericGF.prototype.getZero = function () {\n return this.zero;\n };\n GenericGF.prototype.getOne = function () {\n return this.one;\n };\n /**\n * @return the monomial representing coefficient * x^degree\n */\n GenericGF.prototype.buildMonomial = function (degree /*int*/, coefficient /*int*/) {\n if (degree < 0) {\n throw new IllegalArgumentException();\n }\n if (coefficient === 0) {\n return this.zero;\n }\n var coefficients = new Int32Array(degree + 1);\n coefficients[0] = coefficient;\n return new GenericGFPoly(this, coefficients);\n };\n /**\n * @return multiplicative inverse of a\n */\n GenericGF.prototype.inverse = function (a /*int*/) {\n if (a === 0) {\n throw new ArithmeticException();\n }\n return this.expTable[this.size - this.logTable[a] - 1];\n };\n /**\n * @return product of a and b in GF(size)\n */\n GenericGF.prototype.multiply = function (a /*int*/, b /*int*/) {\n if (a === 0 || b === 0) {\n return 0;\n }\n return this.expTable[(this.logTable[a] + this.logTable[b]) % (this.size - 1)];\n };\n GenericGF.prototype.getSize = function () {\n return this.size;\n };\n GenericGF.prototype.getGeneratorBase = function () {\n return this.generatorBase;\n };\n /*@Override*/\n GenericGF.prototype.toString = function () {\n return ('GF(0x' + Integer.toHexString(this.primitive) + ',' + this.size + ')');\n };\n GenericGF.prototype.equals = function (o) {\n return o === this;\n };\n GenericGF.AZTEC_DATA_12 = new GenericGF(0x1069, 4096, 1); // x^12 + x^6 + x^5 + x^3 + 1\n GenericGF.AZTEC_DATA_10 = new GenericGF(0x409, 1024, 1); // x^10 + x^3 + 1\n GenericGF.AZTEC_DATA_6 = new GenericGF(0x43, 64, 1); // x^6 + x + 1\n GenericGF.AZTEC_PARAM = new GenericGF(0x13, 16, 1); // x^4 + x + 1\n GenericGF.QR_CODE_FIELD_256 = new GenericGF(0x011d, 256, 0); // x^8 + x^4 + x^3 + x^2 + 1\n GenericGF.DATA_MATRIX_FIELD_256 = new GenericGF(0x012d, 256, 1); // x^8 + x^5 + x^3 + x^2 + 1\n GenericGF.AZTEC_DATA_8 = GenericGF.DATA_MATRIX_FIELD_256;\n GenericGF.MAXICODE_FIELD_64 = GenericGF.AZTEC_DATA_6;\n return GenericGF;\n}(AbstractGenericGF));\nexport default GenericGF;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar ReedSolomonException = /** @class */ (function (_super) {\n __extends(ReedSolomonException, _super);\n function ReedSolomonException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ReedSolomonException.kind = 'ReedSolomonException';\n return ReedSolomonException;\n}(Exception));\nexport default ReedSolomonException;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar IllegalStateException = /** @class */ (function (_super) {\n __extends(IllegalStateException, _super);\n function IllegalStateException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IllegalStateException.kind = 'IllegalStateException';\n return IllegalStateException;\n}(Exception));\nexport default IllegalStateException;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.common.reedsolomon {*/\nimport GenericGF from './GenericGF';\nimport GenericGFPoly from './GenericGFPoly';\nimport ReedSolomonException from '../../ReedSolomonException';\nimport IllegalStateException from '../../IllegalStateException';\n/**\n *

Implements Reed-Solomon decoding, as the name implies.

\n *\n *

The algorithm will not be explained here, but the following references were helpful\n * in creating this implementation:

\n *\n * \n *\n *

Much credit is due to William Rucklidge since portions of this code are an indirect\n * port of his C++ Reed-Solomon implementation.

\n *\n * @author Sean Owen\n * @author William Rucklidge\n * @author sanfordsquires\n */\nvar ReedSolomonDecoder = /** @class */ (function () {\n function ReedSolomonDecoder(field) {\n this.field = field;\n }\n /**\n *

Decodes given set of received codewords, which include both data and error-correction\n * codewords. Really, this means it uses Reed-Solomon to detect and correct errors, in-place,\n * in the input.

\n *\n * @param received data and error-correction codewords\n * @param twoS number of error-correction codewords available\n * @throws ReedSolomonException if decoding fails for any reason\n */\n ReedSolomonDecoder.prototype.decode = function (received, twoS /*int*/) {\n var field = this.field;\n var poly = new GenericGFPoly(field, received);\n var syndromeCoefficients = new Int32Array(twoS);\n var noError = true;\n for (var i = 0; i < twoS; i++) {\n var evalResult = poly.evaluateAt(field.exp(i + field.getGeneratorBase()));\n syndromeCoefficients[syndromeCoefficients.length - 1 - i] = evalResult;\n if (evalResult !== 0) {\n noError = false;\n }\n }\n if (noError) {\n return;\n }\n var syndrome = new GenericGFPoly(field, syndromeCoefficients);\n var sigmaOmega = this.runEuclideanAlgorithm(field.buildMonomial(twoS, 1), syndrome, twoS);\n var sigma = sigmaOmega[0];\n var omega = sigmaOmega[1];\n var errorLocations = this.findErrorLocations(sigma);\n var errorMagnitudes = this.findErrorMagnitudes(omega, errorLocations);\n for (var i = 0; i < errorLocations.length; i++) {\n var position = received.length - 1 - field.log(errorLocations[i]);\n if (position < 0) {\n throw new ReedSolomonException('Bad error location');\n }\n received[position] = GenericGF.addOrSubtract(received[position], errorMagnitudes[i]);\n }\n };\n ReedSolomonDecoder.prototype.runEuclideanAlgorithm = function (a, b, R /*int*/) {\n // Assume a's degree is >= b's\n if (a.getDegree() < b.getDegree()) {\n var temp = a;\n a = b;\n b = temp;\n }\n var field = this.field;\n var rLast = a;\n var r = b;\n var tLast = field.getZero();\n var t = field.getOne();\n // Run Euclidean algorithm until r's degree is less than R/2\n while (r.getDegree() >= (R / 2 | 0)) {\n var rLastLast = rLast;\n var tLastLast = tLast;\n rLast = r;\n tLast = t;\n // Divide rLastLast by rLast, with quotient in q and remainder in r\n if (rLast.isZero()) {\n // Oops, Euclidean algorithm already terminated?\n throw new ReedSolomonException('r_{i-1} was zero');\n }\n r = rLastLast;\n var q = field.getZero();\n var denominatorLeadingTerm = rLast.getCoefficient(rLast.getDegree());\n var dltInverse = field.inverse(denominatorLeadingTerm);\n while (r.getDegree() >= rLast.getDegree() && !r.isZero()) {\n var degreeDiff = r.getDegree() - rLast.getDegree();\n var scale = field.multiply(r.getCoefficient(r.getDegree()), dltInverse);\n q = q.addOrSubtract(field.buildMonomial(degreeDiff, scale));\n r = r.addOrSubtract(rLast.multiplyByMonomial(degreeDiff, scale));\n }\n t = q.multiply(tLast).addOrSubtract(tLastLast);\n if (r.getDegree() >= rLast.getDegree()) {\n throw new IllegalStateException('Division algorithm failed to reduce polynomial?');\n }\n }\n var sigmaTildeAtZero = t.getCoefficient(0);\n if (sigmaTildeAtZero === 0) {\n throw new ReedSolomonException('sigmaTilde(0) was zero');\n }\n var inverse = field.inverse(sigmaTildeAtZero);\n var sigma = t.multiplyScalar(inverse);\n var omega = r.multiplyScalar(inverse);\n return [sigma, omega];\n };\n ReedSolomonDecoder.prototype.findErrorLocations = function (errorLocator) {\n // This is a direct application of Chien's search\n var numErrors = errorLocator.getDegree();\n if (numErrors === 1) { // shortcut\n return Int32Array.from([errorLocator.getCoefficient(1)]);\n }\n var result = new Int32Array(numErrors);\n var e = 0;\n var field = this.field;\n for (var i = 1; i < field.getSize() && e < numErrors; i++) {\n if (errorLocator.evaluateAt(i) === 0) {\n result[e] = field.inverse(i);\n e++;\n }\n }\n if (e !== numErrors) {\n throw new ReedSolomonException('Error locator degree does not match number of roots');\n }\n return result;\n };\n ReedSolomonDecoder.prototype.findErrorMagnitudes = function (errorEvaluator, errorLocations) {\n // This is directly applying Forney's Formula\n var s = errorLocations.length;\n var result = new Int32Array(s);\n var field = this.field;\n for (var i = 0; i < s; i++) {\n var xiInverse = field.inverse(errorLocations[i]);\n var denominator = 1;\n for (var j = 0; j < s; j++) {\n if (i !== j) {\n // denominator = field.multiply(denominator,\n // GenericGF.addOrSubtract(1, field.multiply(errorLocations[j], xiInverse)))\n // Above should work but fails on some Apple and Linux JDKs due to a Hotspot bug.\n // Below is a funny-looking workaround from Steven Parkes\n var term = field.multiply(errorLocations[j], xiInverse);\n var termPlus1 = (term & 0x1) === 0 ? term | 1 : term & ~1;\n denominator = field.multiply(denominator, termPlus1);\n }\n }\n result[i] = field.multiply(errorEvaluator.evaluateAt(xiInverse), field.inverse(denominator));\n if (field.getGeneratorBase() !== 0) {\n result[i] = field.multiply(result[i], xiInverse);\n }\n }\n return result;\n };\n return ReedSolomonDecoder;\n}());\nexport default ReedSolomonDecoder;\n","/*\n * Copyright 2010 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport DecoderResult from '../../common/DecoderResult';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport ReedSolomonDecoder from '../../common/reedsolomon/ReedSolomonDecoder';\nimport IllegalStateException from '../../IllegalStateException';\nimport FormatException from '../../FormatException';\nimport StringUtils from '../../common/StringUtils';\nimport Integer from '../../util/Integer';\n// import java.util.Arrays;\nvar Table;\n(function (Table) {\n Table[Table[\"UPPER\"] = 0] = \"UPPER\";\n Table[Table[\"LOWER\"] = 1] = \"LOWER\";\n Table[Table[\"MIXED\"] = 2] = \"MIXED\";\n Table[Table[\"DIGIT\"] = 3] = \"DIGIT\";\n Table[Table[\"PUNCT\"] = 4] = \"PUNCT\";\n Table[Table[\"BINARY\"] = 5] = \"BINARY\";\n})(Table || (Table = {}));\n/**\n *

The main class which implements Aztec Code decoding -- as opposed to locating and extracting\n * the Aztec Code from an image.

\n *\n * @author David Olivier\n */\nvar Decoder = /** @class */ (function () {\n function Decoder() {\n }\n Decoder.prototype.decode = function (detectorResult) {\n this.ddata = detectorResult;\n var matrix = detectorResult.getBits();\n var rawbits = this.extractBits(matrix);\n var correctedBits = this.correctBits(rawbits);\n var rawBytes = Decoder.convertBoolArrayToByteArray(correctedBits);\n var result = Decoder.getEncodedData(correctedBits);\n var decoderResult = new DecoderResult(rawBytes, result, null, null);\n decoderResult.setNumBits(correctedBits.length);\n return decoderResult;\n };\n // This method is used for testing the high-level encoder\n Decoder.highLevelDecode = function (correctedBits) {\n return this.getEncodedData(correctedBits);\n };\n /**\n * Gets the string encoded in the aztec code bits\n *\n * @return the decoded string\n */\n Decoder.getEncodedData = function (correctedBits) {\n var endIndex = correctedBits.length;\n var latchTable = Table.UPPER; // table most recently latched to\n var shiftTable = Table.UPPER; // table to use for the next read\n var result = '';\n var index = 0;\n while (index < endIndex) {\n if (shiftTable === Table.BINARY) {\n if (endIndex - index < 5) {\n break;\n }\n var length_1 = Decoder.readCode(correctedBits, index, 5);\n index += 5;\n if (length_1 === 0) {\n if (endIndex - index < 11) {\n break;\n }\n length_1 = Decoder.readCode(correctedBits, index, 11) + 31;\n index += 11;\n }\n for (var charCount = 0; charCount < length_1; charCount++) {\n if (endIndex - index < 8) {\n index = endIndex; // Force outer loop to exit\n break;\n }\n var code = Decoder.readCode(correctedBits, index, 8);\n result += /*(char)*/ StringUtils.castAsNonUtf8Char(code);\n index += 8;\n }\n // Go back to whatever mode we had been in\n shiftTable = latchTable;\n }\n else {\n var size = shiftTable === Table.DIGIT ? 4 : 5;\n if (endIndex - index < size) {\n break;\n }\n var code = Decoder.readCode(correctedBits, index, size);\n index += size;\n var str = Decoder.getCharacter(shiftTable, code);\n if (str.startsWith('CTRL_')) {\n // Table changes\n // ISO/IEC 24778:2008 prescribes ending a shift sequence in the mode from which it was invoked.\n // That's including when that mode is a shift.\n // Our test case dlusbs.png for issue #642 exercises that.\n latchTable = shiftTable; // Latch the current mode, so as to return to Upper after U/S B/S\n shiftTable = Decoder.getTable(str.charAt(5));\n if (str.charAt(6) === 'L') {\n latchTable = shiftTable;\n }\n }\n else {\n result += str;\n // Go back to whatever mode we had been in\n shiftTable = latchTable;\n }\n }\n }\n return result;\n };\n /**\n * gets the table corresponding to the char passed\n */\n Decoder.getTable = function (t) {\n switch (t) {\n case 'L':\n return Table.LOWER;\n case 'P':\n return Table.PUNCT;\n case 'M':\n return Table.MIXED;\n case 'D':\n return Table.DIGIT;\n case 'B':\n return Table.BINARY;\n case 'U':\n default:\n return Table.UPPER;\n }\n };\n /**\n * Gets the character (or string) corresponding to the passed code in the given table\n *\n * @param table the table used\n * @param code the code of the character\n */\n Decoder.getCharacter = function (table, code) {\n switch (table) {\n case Table.UPPER:\n return Decoder.UPPER_TABLE[code];\n case Table.LOWER:\n return Decoder.LOWER_TABLE[code];\n case Table.MIXED:\n return Decoder.MIXED_TABLE[code];\n case Table.PUNCT:\n return Decoder.PUNCT_TABLE[code];\n case Table.DIGIT:\n return Decoder.DIGIT_TABLE[code];\n default:\n // Should not reach here.\n throw new IllegalStateException('Bad table');\n }\n };\n /**\n *

Performs RS error correction on an array of bits.

\n *\n * @return the corrected array\n * @throws FormatException if the input contains too many errors\n */\n Decoder.prototype.correctBits = function (rawbits) {\n var gf;\n var codewordSize;\n if (this.ddata.getNbLayers() <= 2) {\n codewordSize = 6;\n gf = GenericGF.AZTEC_DATA_6;\n }\n else if (this.ddata.getNbLayers() <= 8) {\n codewordSize = 8;\n gf = GenericGF.AZTEC_DATA_8;\n }\n else if (this.ddata.getNbLayers() <= 22) {\n codewordSize = 10;\n gf = GenericGF.AZTEC_DATA_10;\n }\n else {\n codewordSize = 12;\n gf = GenericGF.AZTEC_DATA_12;\n }\n var numDataCodewords = this.ddata.getNbDatablocks();\n var numCodewords = rawbits.length / codewordSize;\n if (numCodewords < numDataCodewords) {\n throw new FormatException();\n }\n var offset = rawbits.length % codewordSize;\n var dataWords = new Int32Array(numCodewords);\n for (var i = 0; i < numCodewords; i++, offset += codewordSize) {\n dataWords[i] = Decoder.readCode(rawbits, offset, codewordSize);\n }\n try {\n var rsDecoder = new ReedSolomonDecoder(gf);\n rsDecoder.decode(dataWords, numCodewords - numDataCodewords);\n }\n catch (ex) {\n throw new FormatException(ex);\n }\n // Now perform the unstuffing operation.\n // First, count how many bits are going to be thrown out as stuffing\n var mask = (1 << codewordSize) - 1;\n var stuffedBits = 0;\n for (var i = 0; i < numDataCodewords; i++) {\n var dataWord = dataWords[i];\n if (dataWord === 0 || dataWord === mask) {\n throw new FormatException();\n }\n else if (dataWord === 1 || dataWord === mask - 1) {\n stuffedBits++;\n }\n }\n // Now, actually unpack the bits and remove the stuffing\n var correctedBits = new Array(numDataCodewords * codewordSize - stuffedBits);\n var index = 0;\n for (var i = 0; i < numDataCodewords; i++) {\n var dataWord = dataWords[i];\n if (dataWord === 1 || dataWord === mask - 1) {\n // next codewordSize-1 bits are all zeros or all ones\n correctedBits.fill(dataWord > 1, index, index + codewordSize - 1);\n // Arrays.fill(correctedBits, index, index + codewordSize - 1, dataWord > 1);\n index += codewordSize - 1;\n }\n else {\n for (var bit = codewordSize - 1; bit >= 0; --bit) {\n correctedBits[index++] = (dataWord & (1 << bit)) !== 0;\n }\n }\n }\n return correctedBits;\n };\n /**\n * Gets the array of bits from an Aztec Code matrix\n *\n * @return the array of bits\n */\n Decoder.prototype.extractBits = function (matrix) {\n var compact = this.ddata.isCompact();\n var layers = this.ddata.getNbLayers();\n var baseMatrixSize = (compact ? 11 : 14) + layers * 4; // not including alignment lines\n var alignmentMap = new Int32Array(baseMatrixSize);\n var rawbits = new Array(this.totalBitsInLayer(layers, compact));\n if (compact) {\n for (var i = 0; i < alignmentMap.length; i++) {\n alignmentMap[i] = i;\n }\n }\n else {\n var matrixSize = baseMatrixSize + 1 + 2 * Integer.truncDivision((Integer.truncDivision(baseMatrixSize, 2) - 1), 15);\n var origCenter = baseMatrixSize / 2;\n var center = Integer.truncDivision(matrixSize, 2);\n for (var i = 0; i < origCenter; i++) {\n var newOffset = i + Integer.truncDivision(i, 15);\n alignmentMap[origCenter - i - 1] = center - newOffset - 1;\n alignmentMap[origCenter + i] = center + newOffset + 1;\n }\n }\n for (var i = 0, rowOffset = 0; i < layers; i++) {\n var rowSize = (layers - i) * 4 + (compact ? 9 : 12);\n // The top-left most point of this layer is (not including alignment lines)\n var low = i * 2;\n // The bottom-right most point of this layer is (not including alignment lines)\n var high = baseMatrixSize - 1 - low;\n // We pull bits from the two 2 x rowSize columns and two rowSize x 2 rows\n for (var j = 0; j < rowSize; j++) {\n var columnOffset = j * 2;\n for (var k = 0; k < 2; k++) {\n // left column\n rawbits[rowOffset + columnOffset + k] =\n matrix.get(alignmentMap[low + k], alignmentMap[low + j]);\n // bottom row\n rawbits[rowOffset + 2 * rowSize + columnOffset + k] =\n matrix.get(alignmentMap[low + j], alignmentMap[high - k]);\n // right column\n rawbits[rowOffset + 4 * rowSize + columnOffset + k] =\n matrix.get(alignmentMap[high - k], alignmentMap[high - j]);\n // top row\n rawbits[rowOffset + 6 * rowSize + columnOffset + k] =\n matrix.get(alignmentMap[high - j], alignmentMap[low + k]);\n }\n }\n rowOffset += rowSize * 8;\n }\n return rawbits;\n };\n /**\n * Reads a code of given length and at given index in an array of bits\n */\n Decoder.readCode = function (rawbits, startIndex, length) {\n var res = 0;\n for (var i = startIndex; i < startIndex + length; i++) {\n res <<= 1;\n if (rawbits[i]) {\n res |= 0x01;\n }\n }\n return res;\n };\n /**\n * Reads a code of length 8 in an array of bits, padding with zeros\n */\n Decoder.readByte = function (rawbits, startIndex) {\n var n = rawbits.length - startIndex;\n if (n >= 8) {\n return Decoder.readCode(rawbits, startIndex, 8);\n }\n return Decoder.readCode(rawbits, startIndex, n) << (8 - n);\n };\n /**\n * Packs a bit array into bytes, most significant bit first\n */\n Decoder.convertBoolArrayToByteArray = function (boolArr) {\n var byteArr = new Uint8Array((boolArr.length + 7) / 8);\n for (var i = 0; i < byteArr.length; i++) {\n byteArr[i] = Decoder.readByte(boolArr, 8 * i);\n }\n return byteArr;\n };\n Decoder.prototype.totalBitsInLayer = function (layers, compact) {\n return ((compact ? 88 : 112) + 16 * layers) * layers;\n };\n Decoder.UPPER_TABLE = [\n 'CTRL_PS', ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',\n 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'CTRL_LL', 'CTRL_ML', 'CTRL_DL', 'CTRL_BS'\n ];\n Decoder.LOWER_TABLE = [\n 'CTRL_PS', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',\n 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'CTRL_US', 'CTRL_ML', 'CTRL_DL', 'CTRL_BS'\n ];\n Decoder.MIXED_TABLE = [\n // Module parse failed: Octal literal in strict mode (50:29)\n // so number string were scaped\n 'CTRL_PS', ' ', '\\\\1', '\\\\2', '\\\\3', '\\\\4', '\\\\5', '\\\\6', '\\\\7', '\\b', '\\t', '\\n',\n '\\\\13', '\\f', '\\r', '\\\\33', '\\\\34', '\\\\35', '\\\\36', '\\\\37', '@', '\\\\', '^', '_',\n '`', '|', '~', '\\\\177', 'CTRL_LL', 'CTRL_UL', 'CTRL_PL', 'CTRL_BS'\n ];\n Decoder.PUNCT_TABLE = [\n '', '\\r', '\\r\\n', '. ', ', ', ': ', '!', '\"', '#', '$', '%', '&', '\\'', '(', ')',\n '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '[', ']', '{', '}', 'CTRL_UL'\n ];\n Decoder.DIGIT_TABLE = [\n 'CTRL_PS', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', '.', 'CTRL_UL', 'CTRL_US'\n ];\n return Decoder;\n}());\nexport default Decoder;\n","/*\n * Copyright 2012 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.common.detector {*/\n/**\n * General math-related and numeric utility functions.\n */\nvar MathUtils = /** @class */ (function () {\n function MathUtils() {\n }\n /**\n * Ends up being a bit faster than {@link Math#round(float)}. This merely rounds its\n * argument to the nearest int, where x.5 rounds up to x+1. Semantics of this shortcut\n * differ slightly from {@link Math#round(float)} in that half rounds down for negative\n * values. -2.5 rounds to -3, not -2. For purposes here it makes no difference.\n *\n * @param d real value to round\n * @return nearest {@code int}\n */\n MathUtils.round = function (d /*float*/) {\n if (isNaN(d))\n return 0;\n if (d <= Number.MIN_SAFE_INTEGER)\n return Number.MIN_SAFE_INTEGER;\n if (d >= Number.MAX_SAFE_INTEGER)\n return Number.MAX_SAFE_INTEGER;\n return /*(int) */ (d + (d < 0.0 ? -0.5 : 0.5)) | 0;\n };\n // TYPESCRIPTPORT: maybe remove round method and call directly Math.round, it looks like it doesn't make sense for js\n /**\n * @param aX point A x coordinate\n * @param aY point A y coordinate\n * @param bX point B x coordinate\n * @param bY point B y coordinate\n * @return Euclidean distance between points A and B\n */\n MathUtils.distance = function (aX /*float|int*/, aY /*float|int*/, bX /*float|int*/, bY /*float|int*/) {\n var xDiff = aX - bX;\n var yDiff = aY - bY;\n return /*(float) */ Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n };\n /**\n * @param aX point A x coordinate\n * @param aY point A y coordinate\n * @param bX point B x coordinate\n * @param bY point B y coordinate\n * @return Euclidean distance between points A and B\n */\n // public static distance(aX: number /*int*/, aY: number /*int*/, bX: number /*int*/, bY: number /*int*/): float {\n // const xDiff = aX - bX\n // const yDiff = aY - bY\n // return (float) Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n // }\n /**\n * @param array values to sum\n * @return sum of values in array\n */\n MathUtils.sum = function (array) {\n var count = 0;\n for (var i = 0, length_1 = array.length; i !== length_1; i++) {\n var a = array[i];\n count += a;\n }\n return count;\n };\n return MathUtils;\n}());\nexport default MathUtils;\n","/**\n * Ponyfill for Java's Float class.\n */\nvar Float = /** @class */ (function () {\n function Float() {\n }\n /**\n * SincTS has no difference between int and float, there's all numbers,\n * this is used only to polyfill Java code.\n */\n Float.floatToIntBits = function (f) {\n return f;\n };\n /**\n * The float max value in JS is the number max value.\n */\n Float.MAX_VALUE = Number.MAX_SAFE_INTEGER;\n return Float;\n}());\nexport default Float;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing {*/\nimport MathUtils from './common/detector/MathUtils';\nimport Float from './util/Float';\n/**\n *

Encapsulates a point of interest in an image containing a barcode. Typically, this\n * would be the location of a finder pattern or the corner of the barcode, for example.

\n *\n * @author Sean Owen\n */\nvar ResultPoint = /** @class */ (function () {\n function ResultPoint(x, y) {\n this.x = x;\n this.y = y;\n }\n ResultPoint.prototype.getX = function () {\n return this.x;\n };\n ResultPoint.prototype.getY = function () {\n return this.y;\n };\n /*@Override*/\n ResultPoint.prototype.equals = function (other) {\n if (other instanceof ResultPoint) {\n var otherPoint = other;\n return this.x === otherPoint.x && this.y === otherPoint.y;\n }\n return false;\n };\n /*@Override*/\n ResultPoint.prototype.hashCode = function () {\n return 31 * Float.floatToIntBits(this.x) + Float.floatToIntBits(this.y);\n };\n /*@Override*/\n ResultPoint.prototype.toString = function () {\n return '(' + this.x + ',' + this.y + ')';\n };\n /**\n * Orders an array of three ResultPoints in an order [A,B,C] such that AB is less than AC\n * and BC is less than AC, and the angle between BC and BA is less than 180 degrees.\n *\n * @param patterns array of three {@code ResultPoint} to order\n */\n ResultPoint.orderBestPatterns = function (patterns) {\n // Find distances between pattern centers\n var zeroOneDistance = this.distance(patterns[0], patterns[1]);\n var oneTwoDistance = this.distance(patterns[1], patterns[2]);\n var zeroTwoDistance = this.distance(patterns[0], patterns[2]);\n var pointA;\n var pointB;\n var pointC;\n // Assume one closest to other two is B; A and C will just be guesses at first\n if (oneTwoDistance >= zeroOneDistance && oneTwoDistance >= zeroTwoDistance) {\n pointB = patterns[0];\n pointA = patterns[1];\n pointC = patterns[2];\n }\n else if (zeroTwoDistance >= oneTwoDistance && zeroTwoDistance >= zeroOneDistance) {\n pointB = patterns[1];\n pointA = patterns[0];\n pointC = patterns[2];\n }\n else {\n pointB = patterns[2];\n pointA = patterns[0];\n pointC = patterns[1];\n }\n // Use cross product to figure out whether A and C are correct or flipped.\n // This asks whether BC x BA has a positive z component, which is the arrangement\n // we want for A, B, C. If it's negative, then we've got it flipped around and\n // should swap A and C.\n if (this.crossProductZ(pointA, pointB, pointC) < 0.0) {\n var temp = pointA;\n pointA = pointC;\n pointC = temp;\n }\n patterns[0] = pointA;\n patterns[1] = pointB;\n patterns[2] = pointC;\n };\n /**\n * @param pattern1 first pattern\n * @param pattern2 second pattern\n * @return distance between two points\n */\n ResultPoint.distance = function (pattern1, pattern2) {\n return MathUtils.distance(pattern1.x, pattern1.y, pattern2.x, pattern2.y);\n };\n /**\n * Returns the z component of the cross product between vectors BC and BA.\n */\n ResultPoint.crossProductZ = function (pointA, pointB, pointC) {\n var bX = pointB.x;\n var bY = pointB.y;\n return ((pointC.x - bX) * (pointA.y - bY)) - ((pointC.y - bY) * (pointA.x - bX));\n };\n return ResultPoint;\n}());\nexport default ResultPoint;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n *

Encapsulates the result of detecting a barcode in an image. This includes the raw\n * matrix of black/white pixels corresponding to the barcode, and possibly points of interest\n * in the image, like the location of finder patterns or corners of the barcode in the image.

\n *\n * @author Sean Owen\n */\nvar DetectorResult = /** @class */ (function () {\n function DetectorResult(bits, points) {\n this.bits = bits;\n this.points = points;\n }\n DetectorResult.prototype.getBits = function () {\n return this.bits;\n };\n DetectorResult.prototype.getPoints = function () {\n return this.points;\n };\n return DetectorResult;\n}());\nexport default DetectorResult;\n","/*\n * Copyright 2010 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport DetectorResult from '../common/DetectorResult';\n/**\n *

Extends {@link DetectorResult} with more information specific to the Aztec format,\n * like the number of layers and whether it's compact.

\n *\n * @author Sean Owen\n */\nvar AztecDetectorResult = /** @class */ (function (_super) {\n __extends(AztecDetectorResult, _super);\n function AztecDetectorResult(bits, points, compact, nbDatablocks, nbLayers) {\n var _this = _super.call(this, bits, points) || this;\n _this.compact = compact;\n _this.nbDatablocks = nbDatablocks;\n _this.nbLayers = nbLayers;\n return _this;\n }\n AztecDetectorResult.prototype.getNbLayers = function () {\n return this.nbLayers;\n };\n AztecDetectorResult.prototype.getNbDatablocks = function () {\n return this.nbDatablocks;\n };\n AztecDetectorResult.prototype.isCompact = function () {\n return this.compact;\n };\n return AztecDetectorResult;\n}(DetectorResult));\nexport default AztecDetectorResult;\n","/*\n * Copyright 2010 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.common.detector {*/\nimport ResultPoint from '../../ResultPoint';\nimport MathUtils from './MathUtils';\nimport NotFoundException from '../../NotFoundException';\n/**\n *

\n * Detects a candidate barcode-like rectangular region within an image. It\n * starts around the center of the image, increases the size of the candidate\n * region until it finds a white rectangular region. By keeping track of the\n * last black points it encountered, it determines the corners of the barcode.\n *

\n *\n * @author David Olivier\n */\nvar WhiteRectangleDetector = /** @class */ (function () {\n // public constructor(private image: BitMatrix) /*throws NotFoundException*/ {\n // this(image, INIT_SIZE, image.getWidth() / 2, image.getHeight() / 2)\n // }\n /**\n * @param image barcode image to find a rectangle in\n * @param initSize initial size of search area around center\n * @param x x position of search center\n * @param y y position of search center\n * @throws NotFoundException if image is too small to accommodate {@code initSize}\n */\n function WhiteRectangleDetector(image, initSize /*int*/, x /*int*/, y /*int*/) {\n this.image = image;\n this.height = image.getHeight();\n this.width = image.getWidth();\n if (undefined === initSize || null === initSize) {\n initSize = WhiteRectangleDetector.INIT_SIZE;\n }\n if (undefined === x || null === x) {\n x = image.getWidth() / 2 | 0;\n }\n if (undefined === y || null === y) {\n y = image.getHeight() / 2 | 0;\n }\n var halfsize = initSize / 2 | 0;\n this.leftInit = x - halfsize;\n this.rightInit = x + halfsize;\n this.upInit = y - halfsize;\n this.downInit = y + halfsize;\n if (this.upInit < 0 || this.leftInit < 0 || this.downInit >= this.height || this.rightInit >= this.width) {\n throw new NotFoundException();\n }\n }\n /**\n *

\n * Detects a candidate barcode-like rectangular region within an image. It\n * starts around the center of the image, increases the size of the candidate\n * region until it finds a white rectangular region.\n *

\n *\n * @return {@link ResultPoint}[] describing the corners of the rectangular\n * region. The first and last points are opposed on the diagonal, as\n * are the second and third. The first point will be the topmost\n * point and the last, the bottommost. The second point will be\n * leftmost and the third, the rightmost\n * @throws NotFoundException if no Data Matrix Code can be found\n */\n WhiteRectangleDetector.prototype.detect = function () {\n var left = this.leftInit;\n var right = this.rightInit;\n var up = this.upInit;\n var down = this.downInit;\n var sizeExceeded = false;\n var aBlackPointFoundOnBorder = true;\n var atLeastOneBlackPointFoundOnBorder = false;\n var atLeastOneBlackPointFoundOnRight = false;\n var atLeastOneBlackPointFoundOnBottom = false;\n var atLeastOneBlackPointFoundOnLeft = false;\n var atLeastOneBlackPointFoundOnTop = false;\n var width = this.width;\n var height = this.height;\n while (aBlackPointFoundOnBorder) {\n aBlackPointFoundOnBorder = false;\n // .....\n // . |\n // .....\n var rightBorderNotWhite = true;\n while ((rightBorderNotWhite || !atLeastOneBlackPointFoundOnRight) && right < width) {\n rightBorderNotWhite = this.containsBlackPoint(up, down, right, false);\n if (rightBorderNotWhite) {\n right++;\n aBlackPointFoundOnBorder = true;\n atLeastOneBlackPointFoundOnRight = true;\n }\n else if (!atLeastOneBlackPointFoundOnRight) {\n right++;\n }\n }\n if (right >= width) {\n sizeExceeded = true;\n break;\n }\n // .....\n // . .\n // .___.\n var bottomBorderNotWhite = true;\n while ((bottomBorderNotWhite || !atLeastOneBlackPointFoundOnBottom) && down < height) {\n bottomBorderNotWhite = this.containsBlackPoint(left, right, down, true);\n if (bottomBorderNotWhite) {\n down++;\n aBlackPointFoundOnBorder = true;\n atLeastOneBlackPointFoundOnBottom = true;\n }\n else if (!atLeastOneBlackPointFoundOnBottom) {\n down++;\n }\n }\n if (down >= height) {\n sizeExceeded = true;\n break;\n }\n // .....\n // | .\n // .....\n var leftBorderNotWhite = true;\n while ((leftBorderNotWhite || !atLeastOneBlackPointFoundOnLeft) && left >= 0) {\n leftBorderNotWhite = this.containsBlackPoint(up, down, left, false);\n if (leftBorderNotWhite) {\n left--;\n aBlackPointFoundOnBorder = true;\n atLeastOneBlackPointFoundOnLeft = true;\n }\n else if (!atLeastOneBlackPointFoundOnLeft) {\n left--;\n }\n }\n if (left < 0) {\n sizeExceeded = true;\n break;\n }\n // .___.\n // . .\n // .....\n var topBorderNotWhite = true;\n while ((topBorderNotWhite || !atLeastOneBlackPointFoundOnTop) && up >= 0) {\n topBorderNotWhite = this.containsBlackPoint(left, right, up, true);\n if (topBorderNotWhite) {\n up--;\n aBlackPointFoundOnBorder = true;\n atLeastOneBlackPointFoundOnTop = true;\n }\n else if (!atLeastOneBlackPointFoundOnTop) {\n up--;\n }\n }\n if (up < 0) {\n sizeExceeded = true;\n break;\n }\n if (aBlackPointFoundOnBorder) {\n atLeastOneBlackPointFoundOnBorder = true;\n }\n }\n if (!sizeExceeded && atLeastOneBlackPointFoundOnBorder) {\n var maxSize = right - left;\n var z = null;\n for (var i = 1; z === null && i < maxSize; i++) {\n z = this.getBlackPointOnSegment(left, down - i, left + i, down);\n }\n if (z == null) {\n throw new NotFoundException();\n }\n var t = null;\n // go down right\n for (var i = 1; t === null && i < maxSize; i++) {\n t = this.getBlackPointOnSegment(left, up + i, left + i, up);\n }\n if (t == null) {\n throw new NotFoundException();\n }\n var x = null;\n // go down left\n for (var i = 1; x === null && i < maxSize; i++) {\n x = this.getBlackPointOnSegment(right, up + i, right - i, up);\n }\n if (x == null) {\n throw new NotFoundException();\n }\n var y = null;\n // go up left\n for (var i = 1; y === null && i < maxSize; i++) {\n y = this.getBlackPointOnSegment(right, down - i, right - i, down);\n }\n if (y == null) {\n throw new NotFoundException();\n }\n return this.centerEdges(y, z, x, t);\n }\n else {\n throw new NotFoundException();\n }\n };\n WhiteRectangleDetector.prototype.getBlackPointOnSegment = function (aX /*float*/, aY /*float*/, bX /*float*/, bY /*float*/) {\n var dist = MathUtils.round(MathUtils.distance(aX, aY, bX, bY));\n var xStep = (bX - aX) / dist;\n var yStep = (bY - aY) / dist;\n var image = this.image;\n for (var i = 0; i < dist; i++) {\n var x = MathUtils.round(aX + i * xStep);\n var y = MathUtils.round(aY + i * yStep);\n if (image.get(x, y)) {\n return new ResultPoint(x, y);\n }\n }\n return null;\n };\n /**\n * recenters the points of a constant distance towards the center\n *\n * @param y bottom most point\n * @param z left most point\n * @param x right most point\n * @param t top most point\n * @return {@link ResultPoint}[] describing the corners of the rectangular\n * region. The first and last points are opposed on the diagonal, as\n * are the second and third. The first point will be the topmost\n * point and the last, the bottommost. The second point will be\n * leftmost and the third, the rightmost\n */\n WhiteRectangleDetector.prototype.centerEdges = function (y, z, x, t) {\n //\n // t t\n // z x\n // x OR z\n // y y\n //\n var yi = y.getX();\n var yj = y.getY();\n var zi = z.getX();\n var zj = z.getY();\n var xi = x.getX();\n var xj = x.getY();\n var ti = t.getX();\n var tj = t.getY();\n var CORR = WhiteRectangleDetector.CORR;\n if (yi < this.width / 2.0) {\n return [\n new ResultPoint(ti - CORR, tj + CORR),\n new ResultPoint(zi + CORR, zj + CORR),\n new ResultPoint(xi - CORR, xj - CORR),\n new ResultPoint(yi + CORR, yj - CORR)\n ];\n }\n else {\n return [\n new ResultPoint(ti + CORR, tj + CORR),\n new ResultPoint(zi + CORR, zj - CORR),\n new ResultPoint(xi - CORR, xj + CORR),\n new ResultPoint(yi - CORR, yj - CORR)\n ];\n }\n };\n /**\n * Determines whether a segment contains a black point\n *\n * @param a min value of the scanned coordinate\n * @param b max value of the scanned coordinate\n * @param fixed value of fixed coordinate\n * @param horizontal set to true if scan must be horizontal, false if vertical\n * @return true if a black point has been found, else false.\n */\n WhiteRectangleDetector.prototype.containsBlackPoint = function (a /*int*/, b /*int*/, fixed /*int*/, horizontal) {\n var image = this.image;\n if (horizontal) {\n for (var x = a; x <= b; x++) {\n if (image.get(x, fixed)) {\n return true;\n }\n }\n }\n else {\n for (var y = a; y <= b; y++) {\n if (image.get(fixed, y)) {\n return true;\n }\n }\n }\n return false;\n };\n WhiteRectangleDetector.INIT_SIZE = 10;\n WhiteRectangleDetector.CORR = 1;\n return WhiteRectangleDetector;\n}());\nexport default WhiteRectangleDetector;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport NotFoundException from '../NotFoundException';\n/**\n * Implementations of this class can, given locations of finder patterns for a QR code in an\n * image, sample the right points in the image to reconstruct the QR code, accounting for\n * perspective distortion. It is abstracted since it is relatively expensive and should be allowed\n * to take advantage of platform-specific optimized implementations, like Sun's Java Advanced\n * Imaging library, but which may not be available in other environments such as J2ME, and vice\n * versa.\n *\n * The implementation used can be controlled by calling {@link #setGridSampler(GridSampler)}\n * with an instance of a class which implements this interface.\n *\n * @author Sean Owen\n */\nvar GridSampler = /** @class */ (function () {\n function GridSampler() {\n }\n /**\n *

Checks a set of points that have been transformed to sample points on an image against\n * the image's dimensions to see if the point are even within the image.

\n *\n *

This method will actually \"nudge\" the endpoints back onto the image if they are found to be\n * barely (less than 1 pixel) off the image. This accounts for imperfect detection of finder\n * patterns in an image where the QR Code runs all the way to the image border.

\n *\n *

For efficiency, the method will check points from either end of the line until one is found\n * to be within the image. Because the set of points are assumed to be linear, this is valid.

\n *\n * @param image image into which the points should map\n * @param points actual points in x1,y1,...,xn,yn form\n * @throws NotFoundException if an endpoint is lies outside the image boundaries\n */\n GridSampler.checkAndNudgePoints = function (image, points) {\n var width = image.getWidth();\n var height = image.getHeight();\n // Check and nudge points from start until we see some that are OK:\n var nudged = true;\n for (var offset = 0; offset < points.length && nudged; offset += 2) {\n var x = Math.floor(points[offset]);\n var y = Math.floor(points[offset + 1]);\n if (x < -1 || x > width || y < -1 || y > height) {\n throw new NotFoundException();\n }\n nudged = false;\n if (x === -1) {\n points[offset] = 0.0;\n nudged = true;\n }\n else if (x === width) {\n points[offset] = width - 1;\n nudged = true;\n }\n if (y === -1) {\n points[offset + 1] = 0.0;\n nudged = true;\n }\n else if (y === height) {\n points[offset + 1] = height - 1;\n nudged = true;\n }\n }\n // Check and nudge points from end:\n nudged = true;\n for (var offset = points.length - 2; offset >= 0 && nudged; offset -= 2) {\n var x = Math.floor(points[offset]);\n var y = Math.floor(points[offset + 1]);\n if (x < -1 || x > width || y < -1 || y > height) {\n throw new NotFoundException();\n }\n nudged = false;\n if (x === -1) {\n points[offset] = 0.0;\n nudged = true;\n }\n else if (x === width) {\n points[offset] = width - 1;\n nudged = true;\n }\n if (y === -1) {\n points[offset + 1] = 0.0;\n nudged = true;\n }\n else if (y === height) {\n points[offset + 1] = height - 1;\n nudged = true;\n }\n }\n };\n return GridSampler;\n}());\nexport default GridSampler;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.common {*/\n/**\n *

This class implements a perspective transform in two dimensions. Given four source and four\n * destination points, it will compute the transformation implied between them. The code is based\n * directly upon section 3.4.2 of George Wolberg's \"Digital Image Warping\"; see pages 54-56.

\n *\n * @author Sean Owen\n */\nvar PerspectiveTransform = /** @class */ (function () {\n function PerspectiveTransform(a11 /*float*/, a21 /*float*/, a31 /*float*/, a12 /*float*/, a22 /*float*/, a32 /*float*/, a13 /*float*/, a23 /*float*/, a33 /*float*/) {\n this.a11 = a11;\n this.a21 = a21;\n this.a31 = a31;\n this.a12 = a12;\n this.a22 = a22;\n this.a32 = a32;\n this.a13 = a13;\n this.a23 = a23;\n this.a33 = a33;\n }\n PerspectiveTransform.quadrilateralToQuadrilateral = function (x0 /*float*/, y0 /*float*/, x1 /*float*/, y1 /*float*/, x2 /*float*/, y2 /*float*/, x3 /*float*/, y3 /*float*/, x0p /*float*/, y0p /*float*/, x1p /*float*/, y1p /*float*/, x2p /*float*/, y2p /*float*/, x3p /*float*/, y3p /*float*/) {\n var qToS = PerspectiveTransform.quadrilateralToSquare(x0, y0, x1, y1, x2, y2, x3, y3);\n var sToQ = PerspectiveTransform.squareToQuadrilateral(x0p, y0p, x1p, y1p, x2p, y2p, x3p, y3p);\n return sToQ.times(qToS);\n };\n PerspectiveTransform.prototype.transformPoints = function (points) {\n var max = points.length;\n var a11 = this.a11;\n var a12 = this.a12;\n var a13 = this.a13;\n var a21 = this.a21;\n var a22 = this.a22;\n var a23 = this.a23;\n var a31 = this.a31;\n var a32 = this.a32;\n var a33 = this.a33;\n for (var i = 0; i < max; i += 2) {\n var x = points[i];\n var y = points[i + 1];\n var denominator = a13 * x + a23 * y + a33;\n points[i] = (a11 * x + a21 * y + a31) / denominator;\n points[i + 1] = (a12 * x + a22 * y + a32) / denominator;\n }\n };\n PerspectiveTransform.prototype.transformPointsWithValues = function (xValues, yValues) {\n var a11 = this.a11;\n var a12 = this.a12;\n var a13 = this.a13;\n var a21 = this.a21;\n var a22 = this.a22;\n var a23 = this.a23;\n var a31 = this.a31;\n var a32 = this.a32;\n var a33 = this.a33;\n var n = xValues.length;\n for (var i = 0; i < n; i++) {\n var x = xValues[i];\n var y = yValues[i];\n var denominator = a13 * x + a23 * y + a33;\n xValues[i] = (a11 * x + a21 * y + a31) / denominator;\n yValues[i] = (a12 * x + a22 * y + a32) / denominator;\n }\n };\n PerspectiveTransform.squareToQuadrilateral = function (x0 /*float*/, y0 /*float*/, x1 /*float*/, y1 /*float*/, x2 /*float*/, y2 /*float*/, x3 /*float*/, y3 /*float*/) {\n var dx3 = x0 - x1 + x2 - x3;\n var dy3 = y0 - y1 + y2 - y3;\n if (dx3 === 0.0 && dy3 === 0.0) {\n // Affine\n return new PerspectiveTransform(x1 - x0, x2 - x1, x0, y1 - y0, y2 - y1, y0, 0.0, 0.0, 1.0);\n }\n else {\n var dx1 = x1 - x2;\n var dx2 = x3 - x2;\n var dy1 = y1 - y2;\n var dy2 = y3 - y2;\n var denominator = dx1 * dy2 - dx2 * dy1;\n var a13 = (dx3 * dy2 - dx2 * dy3) / denominator;\n var a23 = (dx1 * dy3 - dx3 * dy1) / denominator;\n return new PerspectiveTransform(x1 - x0 + a13 * x1, x3 - x0 + a23 * x3, x0, y1 - y0 + a13 * y1, y3 - y0 + a23 * y3, y0, a13, a23, 1.0);\n }\n };\n PerspectiveTransform.quadrilateralToSquare = function (x0 /*float*/, y0 /*float*/, x1 /*float*/, y1 /*float*/, x2 /*float*/, y2 /*float*/, x3 /*float*/, y3 /*float*/) {\n // Here, the adjoint serves as the inverse:\n return PerspectiveTransform.squareToQuadrilateral(x0, y0, x1, y1, x2, y2, x3, y3).buildAdjoint();\n };\n PerspectiveTransform.prototype.buildAdjoint = function () {\n // Adjoint is the transpose of the cofactor matrix:\n return new PerspectiveTransform(this.a22 * this.a33 - this.a23 * this.a32, this.a23 * this.a31 - this.a21 * this.a33, this.a21 * this.a32 - this.a22 * this.a31, this.a13 * this.a32 - this.a12 * this.a33, this.a11 * this.a33 - this.a13 * this.a31, this.a12 * this.a31 - this.a11 * this.a32, this.a12 * this.a23 - this.a13 * this.a22, this.a13 * this.a21 - this.a11 * this.a23, this.a11 * this.a22 - this.a12 * this.a21);\n };\n PerspectiveTransform.prototype.times = function (other) {\n return new PerspectiveTransform(this.a11 * other.a11 + this.a21 * other.a12 + this.a31 * other.a13, this.a11 * other.a21 + this.a21 * other.a22 + this.a31 * other.a23, this.a11 * other.a31 + this.a21 * other.a32 + this.a31 * other.a33, this.a12 * other.a11 + this.a22 * other.a12 + this.a32 * other.a13, this.a12 * other.a21 + this.a22 * other.a22 + this.a32 * other.a23, this.a12 * other.a31 + this.a22 * other.a32 + this.a32 * other.a33, this.a13 * other.a11 + this.a23 * other.a12 + this.a33 * other.a13, this.a13 * other.a21 + this.a23 * other.a22 + this.a33 * other.a23, this.a13 * other.a31 + this.a23 * other.a32 + this.a33 * other.a33);\n };\n return PerspectiveTransform;\n}());\nexport default PerspectiveTransform;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/*namespace com.google.zxing.common {*/\nimport GridSampler from './GridSampler';\nimport BitMatrix from './BitMatrix';\nimport PerspectiveTransform from './PerspectiveTransform';\nimport NotFoundException from '../NotFoundException';\n/**\n * @author Sean Owen\n */\nvar DefaultGridSampler = /** @class */ (function (_super) {\n __extends(DefaultGridSampler, _super);\n function DefaultGridSampler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /*@Override*/\n DefaultGridSampler.prototype.sampleGrid = function (image, dimensionX /*int*/, dimensionY /*int*/, p1ToX /*float*/, p1ToY /*float*/, p2ToX /*float*/, p2ToY /*float*/, p3ToX /*float*/, p3ToY /*float*/, p4ToX /*float*/, p4ToY /*float*/, p1FromX /*float*/, p1FromY /*float*/, p2FromX /*float*/, p2FromY /*float*/, p3FromX /*float*/, p3FromY /*float*/, p4FromX /*float*/, p4FromY /*float*/) {\n var transform = PerspectiveTransform.quadrilateralToQuadrilateral(p1ToX, p1ToY, p2ToX, p2ToY, p3ToX, p3ToY, p4ToX, p4ToY, p1FromX, p1FromY, p2FromX, p2FromY, p3FromX, p3FromY, p4FromX, p4FromY);\n return this.sampleGridWithTransform(image, dimensionX, dimensionY, transform);\n };\n /*@Override*/\n DefaultGridSampler.prototype.sampleGridWithTransform = function (image, dimensionX /*int*/, dimensionY /*int*/, transform) {\n if (dimensionX <= 0 || dimensionY <= 0) {\n throw new NotFoundException();\n }\n var bits = new BitMatrix(dimensionX, dimensionY);\n var points = new Float32Array(2 * dimensionX);\n for (var y = 0; y < dimensionY; y++) {\n var max = points.length;\n var iValue = y + 0.5;\n for (var x = 0; x < max; x += 2) {\n points[x] = (x / 2) + 0.5;\n points[x + 1] = iValue;\n }\n transform.transformPoints(points);\n // Quick check to see if points transformed to something inside the image\n // sufficient to check the endpoints\n GridSampler.checkAndNudgePoints(image, points);\n try {\n for (var x = 0; x < max; x += 2) {\n if (image.get(Math.floor(points[x]), Math.floor(points[x + 1]))) {\n // Black(-ish) pixel\n bits.set(x / 2, y);\n }\n }\n }\n catch (aioobe /*: ArrayIndexOutOfBoundsException*/) {\n // This feels wrong, but, sometimes if the finder patterns are misidentified, the resulting\n // transform gets \"twisted\" such that it maps a straight line of points to a set of points\n // whose endpoints are in bounds, but others are not. There is probably some mathematical\n // way to detect this about the transformation that I don't know yet.\n // This results in an ugly runtime exception despite our clever checks above -- can't have\n // that. We could check each point's coordinates but that feels duplicative. We settle for\n // catching and wrapping ArrayIndexOutOfBoundsException.\n throw new NotFoundException();\n }\n }\n return bits;\n };\n return DefaultGridSampler;\n}(GridSampler));\nexport default DefaultGridSampler;\n","import DefaultGridSampler from './DefaultGridSampler';\nvar GridSamplerInstance = /** @class */ (function () {\n function GridSamplerInstance() {\n }\n /**\n * Sets the implementation of GridSampler used by the library. One global\n * instance is stored, which may sound problematic. But, the implementation provided\n * ought to be appropriate for the entire platform, and all uses of this library\n * in the whole lifetime of the JVM. For instance, an Android activity can swap in\n * an implementation that takes advantage of native platform libraries.\n *\n * @param newGridSampler The platform-specific object to install.\n */\n GridSamplerInstance.setGridSampler = function (newGridSampler) {\n GridSamplerInstance.gridSampler = newGridSampler;\n };\n /**\n * @return the current implementation of GridSampler\n */\n GridSamplerInstance.getInstance = function () {\n return GridSamplerInstance.gridSampler;\n };\n GridSamplerInstance.gridSampler = new DefaultGridSampler();\n return GridSamplerInstance;\n}());\nexport default GridSamplerInstance;\n","/*\n * Copyright 2010 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ResultPoint from '../../ResultPoint';\nimport AztecDetectorResult from '../AztecDetectorResult';\nimport MathUtils from '../../common/detector/MathUtils';\nimport WhiteRectangleDetector from '../../common/detector/WhiteRectangleDetector';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport ReedSolomonDecoder from '../../common/reedsolomon/ReedSolomonDecoder';\nimport NotFoundException from '../../NotFoundException';\nimport GridSamplerInstance from '../../common/GridSamplerInstance';\nimport Integer from '../../util/Integer';\nvar Point = /** @class */ (function () {\n function Point(x, y) {\n this.x = x;\n this.y = y;\n }\n Point.prototype.toResultPoint = function () {\n return new ResultPoint(this.getX(), this.getY());\n };\n Point.prototype.getX = function () {\n return this.x;\n };\n Point.prototype.getY = function () {\n return this.y;\n };\n return Point;\n}());\nexport { Point };\n/**\n * Encapsulates logic that can detect an Aztec Code in an image, even if the Aztec Code\n * is rotated or skewed, or partially obscured.\n *\n * @author David Olivier\n * @author Frank Yellin\n */\nvar Detector = /** @class */ (function () {\n function Detector(image) {\n this.EXPECTED_CORNER_BITS = new Int32Array([\n 0xee0,\n 0x1dc,\n 0x83b,\n 0x707,\n ]);\n this.image = image;\n }\n Detector.prototype.detect = function () {\n return this.detectMirror(false);\n };\n /**\n * Detects an Aztec Code in an image.\n *\n * @param isMirror if true, image is a mirror-image of original\n * @return {@link AztecDetectorResult} encapsulating results of detecting an Aztec Code\n * @throws NotFoundException if no Aztec Code can be found\n */\n Detector.prototype.detectMirror = function (isMirror) {\n // 1. Get the center of the aztec matrix\n var pCenter = this.getMatrixCenter();\n // 2. Get the center points of the four diagonal points just outside the bull's eye\n // [topRight, bottomRight, bottomLeft, topLeft]\n var bullsEyeCorners = this.getBullsEyeCorners(pCenter);\n if (isMirror) {\n var temp = bullsEyeCorners[0];\n bullsEyeCorners[0] = bullsEyeCorners[2];\n bullsEyeCorners[2] = temp;\n }\n // 3. Get the size of the matrix and other parameters from the bull's eye\n this.extractParameters(bullsEyeCorners);\n // 4. Sample the grid\n var bits = this.sampleGrid(this.image, bullsEyeCorners[this.shift % 4], bullsEyeCorners[(this.shift + 1) % 4], bullsEyeCorners[(this.shift + 2) % 4], bullsEyeCorners[(this.shift + 3) % 4]);\n // 5. Get the corners of the matrix.\n var corners = this.getMatrixCornerPoints(bullsEyeCorners);\n return new AztecDetectorResult(bits, corners, this.compact, this.nbDataBlocks, this.nbLayers);\n };\n /**\n * Extracts the number of data layers and data blocks from the layer around the bull's eye.\n *\n * @param bullsEyeCorners the array of bull's eye corners\n * @throws NotFoundException in case of too many errors or invalid parameters\n */\n Detector.prototype.extractParameters = function (bullsEyeCorners) {\n if (!this.isValidPoint(bullsEyeCorners[0]) || !this.isValidPoint(bullsEyeCorners[1]) ||\n !this.isValidPoint(bullsEyeCorners[2]) || !this.isValidPoint(bullsEyeCorners[3])) {\n throw new NotFoundException();\n }\n var length = 2 * this.nbCenterLayers;\n // Get the bits around the bull's eye\n var sides = new Int32Array([\n this.sampleLine(bullsEyeCorners[0], bullsEyeCorners[1], length),\n this.sampleLine(bullsEyeCorners[1], bullsEyeCorners[2], length),\n this.sampleLine(bullsEyeCorners[2], bullsEyeCorners[3], length),\n this.sampleLine(bullsEyeCorners[3], bullsEyeCorners[0], length) // Top\n ]);\n // bullsEyeCorners[shift] is the corner of the bulls'eye that has three\n // orientation marks.\n // sides[shift] is the row/column that goes from the corner with three\n // orientation marks to the corner with two.\n this.shift = this.getRotation(sides, length);\n // Flatten the parameter bits into a single 28- or 40-bit long\n var parameterData = 0;\n for (var i = 0; i < 4; i++) {\n var side = sides[(this.shift + i) % 4];\n if (this.compact) {\n // Each side of the form ..XXXXXXX. where Xs are parameter data\n parameterData <<= 7;\n parameterData += (side >> 1) & 0x7F;\n }\n else {\n // Each side of the form ..XXXXX.XXXXX. where Xs are parameter data\n parameterData <<= 10;\n parameterData += ((side >> 2) & (0x1f << 5)) + ((side >> 1) & 0x1F);\n }\n }\n // Corrects parameter data using RS. Returns just the data portion\n // without the error correction.\n var correctedData = this.getCorrectedParameterData(parameterData, this.compact);\n if (this.compact) {\n // 8 bits: 2 bits layers and 6 bits data blocks\n this.nbLayers = (correctedData >> 6) + 1;\n this.nbDataBlocks = (correctedData & 0x3F) + 1;\n }\n else {\n // 16 bits: 5 bits layers and 11 bits data blocks\n this.nbLayers = (correctedData >> 11) + 1;\n this.nbDataBlocks = (correctedData & 0x7FF) + 1;\n }\n };\n Detector.prototype.getRotation = function (sides, length) {\n // In a normal pattern, we expect to See\n // ** .* D A\n // * *\n //\n // . *\n // .. .. C B\n //\n // Grab the 3 bits from each of the sides the form the locator pattern and concatenate\n // into a 12-bit integer. Start with the bit at A\n var cornerBits = 0;\n sides.forEach(function (side, idx, arr) {\n // XX......X where X's are orientation marks\n var t = ((side >> (length - 2)) << 1) + (side & 1);\n cornerBits = (cornerBits << 3) + t;\n });\n // for (var side in sides) {\n // // XX......X where X's are orientation marks\n // var t = ((side >> (length - 2)) << 1) + (side & 1);\n // cornerBits = (cornerBits << 3) + t;\n // }\n // Mov the bottom bit to the top, so that the three bits of the locator pattern at A are\n // together. cornerBits is now:\n // 3 orientation bits at A || 3 orientation bits at B || ... || 3 orientation bits at D\n cornerBits = ((cornerBits & 1) << 11) + (cornerBits >> 1);\n // The result shift indicates which element of BullsEyeCorners[] goes into the top-left\n // corner. Since the four rotation values have a Hamming distance of 8, we\n // can easily tolerate two errors.\n for (var shift = 0; shift < 4; shift++) {\n if (Integer.bitCount(cornerBits ^ this.EXPECTED_CORNER_BITS[shift]) <= 2) {\n return shift;\n }\n }\n throw new NotFoundException();\n };\n /**\n * Corrects the parameter bits using Reed-Solomon algorithm.\n *\n * @param parameterData parameter bits\n * @param compact true if this is a compact Aztec code\n * @throws NotFoundException if the array contains too many errors\n */\n Detector.prototype.getCorrectedParameterData = function (parameterData, compact) {\n var numCodewords;\n var numDataCodewords;\n if (compact) {\n numCodewords = 7;\n numDataCodewords = 2;\n }\n else {\n numCodewords = 10;\n numDataCodewords = 4;\n }\n var numECCodewords = numCodewords - numDataCodewords;\n var parameterWords = new Int32Array(numCodewords);\n for (var i = numCodewords - 1; i >= 0; --i) {\n parameterWords[i] = parameterData & 0xF;\n parameterData >>= 4;\n }\n try {\n var rsDecoder = new ReedSolomonDecoder(GenericGF.AZTEC_PARAM);\n rsDecoder.decode(parameterWords, numECCodewords);\n }\n catch (ignored) {\n throw new NotFoundException();\n }\n // Toss the error correction. Just return the data as an integer\n var result = 0;\n for (var i = 0; i < numDataCodewords; i++) {\n result = (result << 4) + parameterWords[i];\n }\n return result;\n };\n /**\n * Finds the corners of a bull-eye centered on the passed point.\n * This returns the centers of the diagonal points just outside the bull's eye\n * Returns [topRight, bottomRight, bottomLeft, topLeft]\n *\n * @param pCenter Center point\n * @return The corners of the bull-eye\n * @throws NotFoundException If no valid bull-eye can be found\n */\n Detector.prototype.getBullsEyeCorners = function (pCenter) {\n var pina = pCenter;\n var pinb = pCenter;\n var pinc = pCenter;\n var pind = pCenter;\n var color = true;\n for (this.nbCenterLayers = 1; this.nbCenterLayers < 9; this.nbCenterLayers++) {\n var pouta = this.getFirstDifferent(pina, color, 1, -1);\n var poutb = this.getFirstDifferent(pinb, color, 1, 1);\n var poutc = this.getFirstDifferent(pinc, color, -1, 1);\n var poutd = this.getFirstDifferent(pind, color, -1, -1);\n // d a\n //\n // c b\n if (this.nbCenterLayers > 2) {\n var q = (this.distancePoint(poutd, pouta) * this.nbCenterLayers) / (this.distancePoint(pind, pina) * (this.nbCenterLayers + 2));\n if (q < 0.75 || q > 1.25 || !this.isWhiteOrBlackRectangle(pouta, poutb, poutc, poutd)) {\n break;\n }\n }\n pina = pouta;\n pinb = poutb;\n pinc = poutc;\n pind = poutd;\n color = !color;\n }\n if (this.nbCenterLayers !== 5 && this.nbCenterLayers !== 7) {\n throw new NotFoundException();\n }\n this.compact = this.nbCenterLayers === 5;\n // Expand the square by .5 pixel in each direction so that we're on the border\n // between the white square and the black square\n var pinax = new ResultPoint(pina.getX() + 0.5, pina.getY() - 0.5);\n var pinbx = new ResultPoint(pinb.getX() + 0.5, pinb.getY() + 0.5);\n var pincx = new ResultPoint(pinc.getX() - 0.5, pinc.getY() + 0.5);\n var pindx = new ResultPoint(pind.getX() - 0.5, pind.getY() - 0.5);\n // Expand the square so that its corners are the centers of the points\n // just outside the bull's eye.\n return this.expandSquare([pinax, pinbx, pincx, pindx], 2 * this.nbCenterLayers - 3, 2 * this.nbCenterLayers);\n };\n /**\n * Finds a candidate center point of an Aztec code from an image\n *\n * @return the center point\n */\n Detector.prototype.getMatrixCenter = function () {\n var pointA;\n var pointB;\n var pointC;\n var pointD;\n // Get a white rectangle that can be the border of the matrix in center bull's eye or\n try {\n var cornerPoints = new WhiteRectangleDetector(this.image).detect();\n pointA = cornerPoints[0];\n pointB = cornerPoints[1];\n pointC = cornerPoints[2];\n pointD = cornerPoints[3];\n }\n catch (e) {\n // This exception can be in case the initial rectangle is white\n // In that case, surely in the bull's eye, we try to expand the rectangle.\n var cx_1 = this.image.getWidth() / 2;\n var cy_1 = this.image.getHeight() / 2;\n pointA = this.getFirstDifferent(new Point(cx_1 + 7, cy_1 - 7), false, 1, -1).toResultPoint();\n pointB = this.getFirstDifferent(new Point(cx_1 + 7, cy_1 + 7), false, 1, 1).toResultPoint();\n pointC = this.getFirstDifferent(new Point(cx_1 - 7, cy_1 + 7), false, -1, 1).toResultPoint();\n pointD = this.getFirstDifferent(new Point(cx_1 - 7, cy_1 - 7), false, -1, -1).toResultPoint();\n }\n // Compute the center of the rectangle\n var cx = MathUtils.round((pointA.getX() + pointD.getX() + pointB.getX() + pointC.getX()) / 4.0);\n var cy = MathUtils.round((pointA.getY() + pointD.getY() + pointB.getY() + pointC.getY()) / 4.0);\n // Redetermine the white rectangle starting from previously computed center.\n // This will ensure that we end up with a white rectangle in center bull's eye\n // in order to compute a more accurate center.\n try {\n var cornerPoints = new WhiteRectangleDetector(this.image, 15, cx, cy).detect();\n pointA = cornerPoints[0];\n pointB = cornerPoints[1];\n pointC = cornerPoints[2];\n pointD = cornerPoints[3];\n }\n catch (e) {\n // This exception can be in case the initial rectangle is white\n // In that case we try to expand the rectangle.\n pointA = this.getFirstDifferent(new Point(cx + 7, cy - 7), false, 1, -1).toResultPoint();\n pointB = this.getFirstDifferent(new Point(cx + 7, cy + 7), false, 1, 1).toResultPoint();\n pointC = this.getFirstDifferent(new Point(cx - 7, cy + 7), false, -1, 1).toResultPoint();\n pointD = this.getFirstDifferent(new Point(cx - 7, cy - 7), false, -1, -1).toResultPoint();\n }\n // Recompute the center of the rectangle\n cx = MathUtils.round((pointA.getX() + pointD.getX() + pointB.getX() + pointC.getX()) / 4.0);\n cy = MathUtils.round((pointA.getY() + pointD.getY() + pointB.getY() + pointC.getY()) / 4.0);\n return new Point(cx, cy);\n };\n /**\n * Gets the Aztec code corners from the bull's eye corners and the parameters.\n *\n * @param bullsEyeCorners the array of bull's eye corners\n * @return the array of aztec code corners\n */\n Detector.prototype.getMatrixCornerPoints = function (bullsEyeCorners) {\n return this.expandSquare(bullsEyeCorners, 2 * this.nbCenterLayers, this.getDimension());\n };\n /**\n * Creates a BitMatrix by sampling the provided image.\n * topLeft, topRight, bottomRight, and bottomLeft are the centers of the squares on the\n * diagonal just outside the bull's eye.\n */\n Detector.prototype.sampleGrid = function (image, topLeft, topRight, bottomRight, bottomLeft) {\n var sampler = GridSamplerInstance.getInstance();\n var dimension = this.getDimension();\n var low = dimension / 2 - this.nbCenterLayers;\n var high = dimension / 2 + this.nbCenterLayers;\n return sampler.sampleGrid(image, dimension, dimension, low, low, // topleft\n high, low, // topright\n high, high, // bottomright\n low, high, // bottomleft\n topLeft.getX(), topLeft.getY(), topRight.getX(), topRight.getY(), bottomRight.getX(), bottomRight.getY(), bottomLeft.getX(), bottomLeft.getY());\n };\n /**\n * Samples a line.\n *\n * @param p1 start point (inclusive)\n * @param p2 end point (exclusive)\n * @param size number of bits\n * @return the array of bits as an int (first bit is high-order bit of result)\n */\n Detector.prototype.sampleLine = function (p1, p2, size) {\n var result = 0;\n var d = this.distanceResultPoint(p1, p2);\n var moduleSize = d / size;\n var px = p1.getX();\n var py = p1.getY();\n var dx = moduleSize * (p2.getX() - p1.getX()) / d;\n var dy = moduleSize * (p2.getY() - p1.getY()) / d;\n for (var i = 0; i < size; i++) {\n if (this.image.get(MathUtils.round(px + i * dx), MathUtils.round(py + i * dy))) {\n result |= 1 << (size - i - 1);\n }\n }\n return result;\n };\n /**\n * @return true if the border of the rectangle passed in parameter is compound of white points only\n * or black points only\n */\n Detector.prototype.isWhiteOrBlackRectangle = function (p1, p2, p3, p4) {\n var corr = 3;\n p1 = new Point(p1.getX() - corr, p1.getY() + corr);\n p2 = new Point(p2.getX() - corr, p2.getY() - corr);\n p3 = new Point(p3.getX() + corr, p3.getY() - corr);\n p4 = new Point(p4.getX() + corr, p4.getY() + corr);\n var cInit = this.getColor(p4, p1);\n if (cInit === 0) {\n return false;\n }\n var c = this.getColor(p1, p2);\n if (c !== cInit) {\n return false;\n }\n c = this.getColor(p2, p3);\n if (c !== cInit) {\n return false;\n }\n c = this.getColor(p3, p4);\n return c === cInit;\n };\n /**\n * Gets the color of a segment\n *\n * @return 1 if segment more than 90% black, -1 if segment is more than 90% white, 0 else\n */\n Detector.prototype.getColor = function (p1, p2) {\n var d = this.distancePoint(p1, p2);\n var dx = (p2.getX() - p1.getX()) / d;\n var dy = (p2.getY() - p1.getY()) / d;\n var error = 0;\n var px = p1.getX();\n var py = p1.getY();\n var colorModel = this.image.get(p1.getX(), p1.getY());\n var iMax = Math.ceil(d);\n for (var i = 0; i < iMax; i++) {\n px += dx;\n py += dy;\n if (this.image.get(MathUtils.round(px), MathUtils.round(py)) !== colorModel) {\n error++;\n }\n }\n var errRatio = error / d;\n if (errRatio > 0.1 && errRatio < 0.9) {\n return 0;\n }\n return (errRatio <= 0.1) === colorModel ? 1 : -1;\n };\n /**\n * Gets the coordinate of the first point with a different color in the given direction\n */\n Detector.prototype.getFirstDifferent = function (init, color, dx, dy) {\n var x = init.getX() + dx;\n var y = init.getY() + dy;\n while (this.isValid(x, y) && this.image.get(x, y) === color) {\n x += dx;\n y += dy;\n }\n x -= dx;\n y -= dy;\n while (this.isValid(x, y) && this.image.get(x, y) === color) {\n x += dx;\n }\n x -= dx;\n while (this.isValid(x, y) && this.image.get(x, y) === color) {\n y += dy;\n }\n y -= dy;\n return new Point(x, y);\n };\n /**\n * Expand the square represented by the corner points by pushing out equally in all directions\n *\n * @param cornerPoints the corners of the square, which has the bull's eye at its center\n * @param oldSide the original length of the side of the square in the target bit matrix\n * @param newSide the new length of the size of the square in the target bit matrix\n * @return the corners of the expanded square\n */\n Detector.prototype.expandSquare = function (cornerPoints, oldSide, newSide) {\n var ratio = newSide / (2.0 * oldSide);\n var dx = cornerPoints[0].getX() - cornerPoints[2].getX();\n var dy = cornerPoints[0].getY() - cornerPoints[2].getY();\n var centerx = (cornerPoints[0].getX() + cornerPoints[2].getX()) / 2.0;\n var centery = (cornerPoints[0].getY() + cornerPoints[2].getY()) / 2.0;\n var result0 = new ResultPoint(centerx + ratio * dx, centery + ratio * dy);\n var result2 = new ResultPoint(centerx - ratio * dx, centery - ratio * dy);\n dx = cornerPoints[1].getX() - cornerPoints[3].getX();\n dy = cornerPoints[1].getY() - cornerPoints[3].getY();\n centerx = (cornerPoints[1].getX() + cornerPoints[3].getX()) / 2.0;\n centery = (cornerPoints[1].getY() + cornerPoints[3].getY()) / 2.0;\n var result1 = new ResultPoint(centerx + ratio * dx, centery + ratio * dy);\n var result3 = new ResultPoint(centerx - ratio * dx, centery - ratio * dy);\n var results = [result0, result1, result2, result3];\n return results;\n };\n Detector.prototype.isValid = function (x, y) {\n return x >= 0 && x < this.image.getWidth() && y > 0 && y < this.image.getHeight();\n };\n Detector.prototype.isValidPoint = function (point) {\n var x = MathUtils.round(point.getX());\n var y = MathUtils.round(point.getY());\n return this.isValid(x, y);\n };\n Detector.prototype.distancePoint = function (a, b) {\n return MathUtils.distance(a.getX(), a.getY(), b.getX(), b.getY());\n };\n Detector.prototype.distanceResultPoint = function (a, b) {\n return MathUtils.distance(a.getX(), a.getY(), b.getX(), b.getY());\n };\n Detector.prototype.getDimension = function () {\n if (this.compact) {\n return 4 * this.nbLayers + 11;\n }\n if (this.nbLayers <= 4) {\n return 4 * this.nbLayers + 15;\n }\n return 4 * this.nbLayers + 2 * (Integer.truncDivision((this.nbLayers - 4), 8) + 1) + 15;\n };\n return Detector;\n}());\nexport default Detector;\n","/*\n * Copyright 2010 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Result from '../Result';\nimport BarcodeFormat from '../BarcodeFormat';\nimport DecodeHintType from '../DecodeHintType';\nimport ResultMetadataType from '../ResultMetadataType';\nimport System from '../util/System';\nimport Decoder from './decoder/Decoder';\nimport Detector from './detector/Detector';\n// import java.util.List;\n// import java.util.Map;\n/**\n * This implementation can detect and decode Aztec codes in an image.\n *\n * @author David Olivier\n */\nvar AztecReader = /** @class */ (function () {\n function AztecReader() {\n }\n /**\n * Locates and decodes a Data Matrix code in an image.\n *\n * @return a String representing the content encoded by the Data Matrix code\n * @throws NotFoundException if a Data Matrix code cannot be found\n * @throws FormatException if a Data Matrix code cannot be decoded\n */\n AztecReader.prototype.decode = function (image, hints) {\n if (hints === void 0) { hints = null; }\n var exception = null;\n var detector = new Detector(image.getBlackMatrix());\n var points = null;\n var decoderResult = null;\n try {\n var detectorResult = detector.detectMirror(false);\n points = detectorResult.getPoints();\n this.reportFoundResultPoints(hints, points);\n decoderResult = new Decoder().decode(detectorResult);\n }\n catch (e) {\n exception = e;\n }\n if (decoderResult == null) {\n try {\n var detectorResult = detector.detectMirror(true);\n points = detectorResult.getPoints();\n this.reportFoundResultPoints(hints, points);\n decoderResult = new Decoder().decode(detectorResult);\n }\n catch (e) {\n if (exception != null) {\n throw exception;\n }\n throw e;\n }\n }\n var result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), decoderResult.getNumBits(), points, BarcodeFormat.AZTEC, System.currentTimeMillis());\n var byteSegments = decoderResult.getByteSegments();\n if (byteSegments != null) {\n result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, byteSegments);\n }\n var ecLevel = decoderResult.getECLevel();\n if (ecLevel != null) {\n result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, ecLevel);\n }\n return result;\n };\n AztecReader.prototype.reportFoundResultPoints = function (hints, points) {\n if (hints != null) {\n var rpcb_1 = hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);\n if (rpcb_1 != null) {\n points.forEach(function (point, idx, arr) {\n rpcb_1.foundPossibleResultPoint(point);\n });\n }\n }\n };\n // @Override\n AztecReader.prototype.reset = function () {\n // do nothing\n };\n return AztecReader;\n}());\nexport default AztecReader;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport AztecReader from '../core/aztec/AztecReader';\n/**\n * Aztec Code reader to use from browser.\n *\n * @class BrowserAztecCodeReader\n * @extends {BrowserCodeReader}\n */\nvar BrowserAztecCodeReader = /** @class */ (function (_super) {\n __extends(BrowserAztecCodeReader, _super);\n /**\n * Creates an instance of BrowserAztecCodeReader.\n * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n *\n * @memberOf BrowserAztecCodeReader\n */\n function BrowserAztecCodeReader(timeBetweenScansMillis) {\n if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n return _super.call(this, new AztecReader(), timeBetweenScansMillis) || this;\n }\n return BrowserAztecCodeReader;\n}(BrowserCodeReader));\nexport { BrowserAztecCodeReader };\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BitArray from '../common/BitArray';\nimport DecodeHintType from '../DecodeHintType';\nimport ResultMetadataType from '../ResultMetadataType';\nimport ResultPoint from '../ResultPoint';\nimport NotFoundException from '../NotFoundException';\n/**\n * Encapsulates functionality and implementation that is common to all families\n * of one-dimensional barcodes.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n * @author Sean Owen\n */\nvar OneDReader = /** @class */ (function () {\n function OneDReader() {\n }\n /*\n @Override\n public Result decode(BinaryBitmap image) throws NotFoundException, FormatException {\n return decode(image, null);\n }\n */\n // Note that we don't try rotation without the try harder flag, even if rotation was supported.\n // @Override\n OneDReader.prototype.decode = function (image, hints) {\n try {\n return this.doDecode(image, hints);\n }\n catch (nfe) {\n var tryHarder = hints && (hints.get(DecodeHintType.TRY_HARDER) === true);\n if (tryHarder && image.isRotateSupported()) {\n var rotatedImage = image.rotateCounterClockwise();\n var result = this.doDecode(rotatedImage, hints);\n // Record that we found it rotated 90 degrees CCW / 270 degrees CW\n var metadata = result.getResultMetadata();\n var orientation_1 = 270;\n if (metadata !== null && (metadata.get(ResultMetadataType.ORIENTATION) === true)) {\n // But if we found it reversed in doDecode(), add in that result here:\n orientation_1 = (orientation_1 + metadata.get(ResultMetadataType.ORIENTATION) % 360);\n }\n result.putMetadata(ResultMetadataType.ORIENTATION, orientation_1);\n // Update result points\n var points = result.getResultPoints();\n if (points !== null) {\n var height = rotatedImage.getHeight();\n for (var i = 0; i < points.length; i++) {\n points[i] = new ResultPoint(height - points[i].getY() - 1, points[i].getX());\n }\n }\n return result;\n }\n else {\n throw new NotFoundException();\n }\n }\n };\n // @Override\n OneDReader.prototype.reset = function () {\n // do nothing\n };\n /**\n * We're going to examine rows from the middle outward, searching alternately above and below the\n * middle, and farther out each time. rowStep is the number of rows between each successive\n * attempt above and below the middle. So we'd scan row middle, then middle - rowStep, then\n * middle + rowStep, then middle - (2 * rowStep), etc.\n * rowStep is bigger as the image is taller, but is always at least 1. We've somewhat arbitrarily\n * decided that moving up and down by about 1/16 of the image is pretty good; we try more of the\n * image if \"trying harder\".\n *\n * @param image The image to decode\n * @param hints Any hints that were requested\n * @return The contents of the decoded barcode\n * @throws NotFoundException Any spontaneous errors which occur\n */\n OneDReader.prototype.doDecode = function (image, hints) {\n var width = image.getWidth();\n var height = image.getHeight();\n var row = new BitArray(width);\n var tryHarder = hints && (hints.get(DecodeHintType.TRY_HARDER) === true);\n var rowStep = Math.max(1, height >> (tryHarder ? 8 : 5));\n var maxLines;\n if (tryHarder) {\n maxLines = height; // Look at the whole image, not just the center\n }\n else {\n maxLines = 15; // 15 rows spaced 1/32 apart is roughly the middle half of the image\n }\n var middle = Math.trunc(height / 2);\n for (var x = 0; x < maxLines; x++) {\n // Scanning from the middle out. Determine which row we're looking at next:\n var rowStepsAboveOrBelow = Math.trunc((x + 1) / 2);\n var isAbove = (x & 0x01) === 0; // i.e. is x even?\n var rowNumber = middle + rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow);\n if (rowNumber < 0 || rowNumber >= height) {\n // Oops, if we run off the top or bottom, stop\n break;\n }\n // Estimate black point for this row and load it:\n try {\n row = image.getBlackRow(rowNumber, row);\n }\n catch (ignored) {\n continue;\n }\n var _loop_1 = function (attempt) {\n if (attempt === 1) { // trying again?\n row.reverse(); // reverse the row and continue\n // This means we will only ever draw result points *once* in the life of this method\n // since we want to avoid drawing the wrong points after flipping the row, and,\n // don't want to clutter with noise from every single row scan -- just the scans\n // that start on the center line.\n if (hints && (hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK) === true)) {\n var newHints_1 = new Map();\n hints.forEach(function (hint, key) { return newHints_1.set(key, hint); });\n newHints_1.delete(DecodeHintType.NEED_RESULT_POINT_CALLBACK);\n hints = newHints_1;\n }\n }\n try {\n // Look for a barcode\n var result = this_1.decodeRow(rowNumber, row, hints);\n // We found our barcode\n if (attempt === 1) {\n // But it was upside down, so note that\n result.putMetadata(ResultMetadataType.ORIENTATION, 180);\n // And remember to flip the result points horizontally.\n var points = result.getResultPoints();\n if (points !== null) {\n points[0] = new ResultPoint(width - points[0].getX() - 1, points[0].getY());\n points[1] = new ResultPoint(width - points[1].getX() - 1, points[1].getY());\n }\n }\n return { value: result };\n }\n catch (re) {\n // continue -- just couldn't decode this row\n }\n };\n var this_1 = this;\n // While we have the image data in a BitArray, it's fairly cheap to reverse it in place to\n // handle decoding upside down barcodes.\n for (var attempt = 0; attempt < 2; attempt++) {\n var state_1 = _loop_1(attempt);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n }\n throw new NotFoundException();\n };\n /**\n * Records the size of successive runs of white and black pixels in a row, starting at a given point.\n * The values are recorded in the given array, and the number of runs recorded is equal to the size\n * of the array. If the row starts on a white pixel at the given start point, then the first count\n * recorded is the run of white pixels starting from that point; likewise it is the count of a run\n * of black pixels if the row begin on a black pixels at that point.\n *\n * @param row row to count from\n * @param start offset into row to start at\n * @param counters array into which to record counts\n * @throws NotFoundException if counters cannot be filled entirely from row before running out\n * of pixels\n */\n OneDReader.recordPattern = function (row, start, counters) {\n var numCounters = counters.length;\n for (var index = 0; index < numCounters; index++)\n counters[index] = 0;\n var end = row.getSize();\n if (start >= end) {\n throw new NotFoundException();\n }\n var isWhite = !row.get(start);\n var counterPosition = 0;\n var i = start;\n while (i < end) {\n if (row.get(i) !== isWhite) {\n counters[counterPosition]++;\n }\n else {\n if (++counterPosition === numCounters) {\n break;\n }\n else {\n counters[counterPosition] = 1;\n isWhite = !isWhite;\n }\n }\n i++;\n }\n // If we read fully the last section of pixels and filled up our counters -- or filled\n // the last counter but ran off the side of the image, OK. Otherwise, a problem.\n if (!(counterPosition === numCounters || (counterPosition === numCounters - 1 && i === end))) {\n throw new NotFoundException();\n }\n };\n OneDReader.recordPatternInReverse = function (row, start, counters) {\n // This could be more efficient I guess\n var numTransitionsLeft = counters.length;\n var last = row.get(start);\n while (start > 0 && numTransitionsLeft >= 0) {\n if (row.get(--start) !== last) {\n numTransitionsLeft--;\n last = !last;\n }\n }\n if (numTransitionsLeft >= 0) {\n throw new NotFoundException();\n }\n OneDReader.recordPattern(row, start + 1, counters);\n };\n /**\n * Determines how closely a set of observed counts of runs of black/white values matches a given\n * target pattern. This is reported as the ratio of the total variance from the expected pattern\n * proportions across all pattern elements, to the length of the pattern.\n *\n * @param counters observed counters\n * @param pattern expected pattern\n * @param maxIndividualVariance The most any counter can differ before we give up\n * @return ratio of total variance between counters and pattern compared to total pattern size\n */\n OneDReader.patternMatchVariance = function (counters, pattern, maxIndividualVariance) {\n var numCounters = counters.length;\n var total = 0;\n var patternLength = 0;\n for (var i = 0; i < numCounters; i++) {\n total += counters[i];\n patternLength += pattern[i];\n }\n if (total < patternLength) {\n // If we don't even have one pixel per unit of bar width, assume this is too small\n // to reliably match, so fail:\n return Number.POSITIVE_INFINITY;\n }\n var unitBarWidth = total / patternLength;\n maxIndividualVariance *= unitBarWidth;\n var totalVariance = 0.0;\n for (var x = 0; x < numCounters; x++) {\n var counter = counters[x];\n var scaledPattern = pattern[x] * unitBarWidth;\n var variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;\n if (variance > maxIndividualVariance) {\n return Number.POSITIVE_INFINITY;\n }\n totalVariance += variance;\n }\n return totalVariance / total;\n };\n return OneDReader;\n}());\nexport default OneDReader;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport ChecksumException from '../ChecksumException';\nimport DecodeHintType from '../DecodeHintType';\nimport FormatException from '../FormatException';\nimport NotFoundException from '../NotFoundException';\n// import Reader from '../Reader';\nimport Result from '../Result';\n// import ResultMetadataType from '../ResultMetadataType';\nimport ResultPoint from '../ResultPoint';\nimport OneDReader from './OneDReader';\n/**\n *

Decodes Code 128 barcodes.

\n *\n * @author Sean Owen\n */\nvar Code128Reader = /** @class */ (function (_super) {\n __extends(Code128Reader, _super);\n function Code128Reader() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Code128Reader.findStartPattern = function (row) {\n var width = row.getSize();\n var rowOffset = row.getNextSet(0);\n var counterPosition = 0;\n var counters = Int32Array.from([0, 0, 0, 0, 0, 0]);\n var patternStart = rowOffset;\n var isWhite = false;\n var patternLength = 6;\n for (var i = rowOffset; i < width; i++) {\n if (row.get(i) !== isWhite) {\n counters[counterPosition]++;\n }\n else {\n if (counterPosition === (patternLength - 1)) {\n var bestVariance = Code128Reader.MAX_AVG_VARIANCE;\n var bestMatch = -1;\n for (var startCode = Code128Reader.CODE_START_A; startCode <= Code128Reader.CODE_START_C; startCode++) {\n var variance = OneDReader.patternMatchVariance(counters, Code128Reader.CODE_PATTERNS[startCode], Code128Reader.MAX_INDIVIDUAL_VARIANCE);\n if (variance < bestVariance) {\n bestVariance = variance;\n bestMatch = startCode;\n }\n }\n // Look for whitespace before start pattern, >= 50% of width of start pattern\n if (bestMatch >= 0 &&\n row.isRange(Math.max(0, patternStart - (i - patternStart) / 2), patternStart, false)) {\n return Int32Array.from([patternStart, i, bestMatch]);\n }\n patternStart += counters[0] + counters[1];\n counters = counters.slice(2, counters.length);\n counters[counterPosition - 1] = 0;\n counters[counterPosition] = 0;\n counterPosition--;\n }\n else {\n counterPosition++;\n }\n counters[counterPosition] = 1;\n isWhite = !isWhite;\n }\n }\n throw new NotFoundException();\n };\n Code128Reader.decodeCode = function (row, counters, rowOffset) {\n OneDReader.recordPattern(row, rowOffset, counters);\n var bestVariance = Code128Reader.MAX_AVG_VARIANCE; // worst variance we'll accept\n var bestMatch = -1;\n for (var d = 0; d < Code128Reader.CODE_PATTERNS.length; d++) {\n var pattern = Code128Reader.CODE_PATTERNS[d];\n var variance = this.patternMatchVariance(counters, pattern, Code128Reader.MAX_INDIVIDUAL_VARIANCE);\n if (variance < bestVariance) {\n bestVariance = variance;\n bestMatch = d;\n }\n }\n // TODO We're overlooking the fact that the STOP pattern has 7 values, not 6.\n if (bestMatch >= 0) {\n return bestMatch;\n }\n else {\n throw new NotFoundException();\n }\n };\n Code128Reader.prototype.decodeRow = function (rowNumber, row, hints) {\n var convertFNC1 = hints && (hints.get(DecodeHintType.ASSUME_GS1) === true);\n var startPatternInfo = Code128Reader.findStartPattern(row);\n var startCode = startPatternInfo[2];\n var currentRawCodesIndex = 0;\n var rawCodes = new Uint8Array(20);\n rawCodes[currentRawCodesIndex++] = startCode;\n var codeSet;\n switch (startCode) {\n case Code128Reader.CODE_START_A:\n codeSet = Code128Reader.CODE_CODE_A;\n break;\n case Code128Reader.CODE_START_B:\n codeSet = Code128Reader.CODE_CODE_B;\n break;\n case Code128Reader.CODE_START_C:\n codeSet = Code128Reader.CODE_CODE_C;\n break;\n default:\n throw new FormatException();\n }\n var done = false;\n var isNextShifted = false;\n var result = '';\n var lastStart = startPatternInfo[0];\n var nextStart = startPatternInfo[1];\n var counters = Int32Array.from([0, 0, 0, 0, 0, 0]);\n var lastCode = 0;\n var code = 0;\n var checksumTotal = startCode;\n var multiplier = 0;\n var lastCharacterWasPrintable = true;\n var upperMode = false;\n var shiftUpperMode = false;\n while (!done) {\n var unshift = isNextShifted;\n isNextShifted = false;\n // Save off last code\n lastCode = code;\n // Decode another code from image\n code = Code128Reader.decodeCode(row, counters, nextStart);\n rawCodes[currentRawCodesIndex++] = code;\n // Remember whether the last code was printable or not (excluding CODE_STOP)\n if (code !== Code128Reader.CODE_STOP) {\n lastCharacterWasPrintable = true;\n }\n // Add to checksum computation (if not CODE_STOP of course)\n if (code !== Code128Reader.CODE_STOP) {\n multiplier++;\n checksumTotal += multiplier * code;\n }\n // Advance to where the next code will to start\n lastStart = nextStart;\n nextStart += counters.reduce(function (previous, current) { return previous + current; }, 0);\n // Take care of illegal start codes\n switch (code) {\n case Code128Reader.CODE_START_A:\n case Code128Reader.CODE_START_B:\n case Code128Reader.CODE_START_C:\n throw new FormatException();\n }\n switch (codeSet) {\n case Code128Reader.CODE_CODE_A:\n if (code < 64) {\n if (shiftUpperMode === upperMode) {\n result += String.fromCharCode((' '.charCodeAt(0) + code));\n }\n else {\n result += String.fromCharCode((' '.charCodeAt(0) + code + 128));\n }\n shiftUpperMode = false;\n }\n else if (code < 96) {\n if (shiftUpperMode === upperMode) {\n result += String.fromCharCode((code - 64));\n }\n else {\n result += String.fromCharCode((code + 64));\n }\n shiftUpperMode = false;\n }\n else {\n // Don't let CODE_STOP, which always appears, affect whether whether we think the last\n // code was printable or not.\n if (code !== Code128Reader.CODE_STOP) {\n lastCharacterWasPrintable = false;\n }\n switch (code) {\n case Code128Reader.CODE_FNC_1:\n if (convertFNC1) {\n if (result.length === 0) {\n // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code\n // is FNC1 then this is GS1-128. We add the symbology identifier.\n result += ']C1';\n }\n else {\n // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS)\n result += String.fromCharCode(29);\n }\n }\n break;\n case Code128Reader.CODE_FNC_2:\n case Code128Reader.CODE_FNC_3:\n // do nothing?\n break;\n case Code128Reader.CODE_FNC_4_A:\n if (!upperMode && shiftUpperMode) {\n upperMode = true;\n shiftUpperMode = false;\n }\n else if (upperMode && shiftUpperMode) {\n upperMode = false;\n shiftUpperMode = false;\n }\n else {\n shiftUpperMode = true;\n }\n break;\n case Code128Reader.CODE_SHIFT:\n isNextShifted = true;\n codeSet = Code128Reader.CODE_CODE_B;\n break;\n case Code128Reader.CODE_CODE_B:\n codeSet = Code128Reader.CODE_CODE_B;\n break;\n case Code128Reader.CODE_CODE_C:\n codeSet = Code128Reader.CODE_CODE_C;\n break;\n case Code128Reader.CODE_STOP:\n done = true;\n break;\n }\n }\n break;\n case Code128Reader.CODE_CODE_B:\n if (code < 96) {\n if (shiftUpperMode === upperMode) {\n result += String.fromCharCode((' '.charCodeAt(0) + code));\n }\n else {\n result += String.fromCharCode((' '.charCodeAt(0) + code + 128));\n }\n shiftUpperMode = false;\n }\n else {\n if (code !== Code128Reader.CODE_STOP) {\n lastCharacterWasPrintable = false;\n }\n switch (code) {\n case Code128Reader.CODE_FNC_1:\n if (convertFNC1) {\n if (result.length === 0) {\n // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code\n // is FNC1 then this is GS1-128. We add the symbology identifier.\n result += ']C1';\n }\n else {\n // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS)\n result += String.fromCharCode(29);\n }\n }\n break;\n case Code128Reader.CODE_FNC_2:\n case Code128Reader.CODE_FNC_3:\n // do nothing?\n break;\n case Code128Reader.CODE_FNC_4_B:\n if (!upperMode && shiftUpperMode) {\n upperMode = true;\n shiftUpperMode = false;\n }\n else if (upperMode && shiftUpperMode) {\n upperMode = false;\n shiftUpperMode = false;\n }\n else {\n shiftUpperMode = true;\n }\n break;\n case Code128Reader.CODE_SHIFT:\n isNextShifted = true;\n codeSet = Code128Reader.CODE_CODE_A;\n break;\n case Code128Reader.CODE_CODE_A:\n codeSet = Code128Reader.CODE_CODE_A;\n break;\n case Code128Reader.CODE_CODE_C:\n codeSet = Code128Reader.CODE_CODE_C;\n break;\n case Code128Reader.CODE_STOP:\n done = true;\n break;\n }\n }\n break;\n case Code128Reader.CODE_CODE_C:\n if (code < 100) {\n if (code < 10) {\n result += '0';\n }\n result += code;\n }\n else {\n if (code !== Code128Reader.CODE_STOP) {\n lastCharacterWasPrintable = false;\n }\n switch (code) {\n case Code128Reader.CODE_FNC_1:\n if (convertFNC1) {\n if (result.length === 0) {\n // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code\n // is FNC1 then this is GS1-128. We add the symbology identifier.\n result += ']C1';\n }\n else {\n // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS)\n result += String.fromCharCode(29);\n }\n }\n break;\n case Code128Reader.CODE_CODE_A:\n codeSet = Code128Reader.CODE_CODE_A;\n break;\n case Code128Reader.CODE_CODE_B:\n codeSet = Code128Reader.CODE_CODE_B;\n break;\n case Code128Reader.CODE_STOP:\n done = true;\n break;\n }\n }\n break;\n }\n // Unshift back to another code set if we were shifted\n if (unshift) {\n codeSet = codeSet === Code128Reader.CODE_CODE_A ? Code128Reader.CODE_CODE_B : Code128Reader.CODE_CODE_A;\n }\n }\n var lastPatternSize = nextStart - lastStart;\n // Check for ample whitespace following pattern, but, to do this we first need to remember that\n // we fudged decoding CODE_STOP since it actually has 7 bars, not 6. There is a black bar left\n // to read off. Would be slightly better to properly read. Here we just skip it:\n nextStart = row.getNextUnset(nextStart);\n if (!row.isRange(nextStart, Math.min(row.getSize(), nextStart + (nextStart - lastStart) / 2), false)) {\n throw new NotFoundException();\n }\n // Pull out from sum the value of the penultimate check code\n checksumTotal -= multiplier * lastCode;\n // lastCode is the checksum then:\n if (checksumTotal % 103 !== lastCode) {\n throw new ChecksumException();\n }\n // Need to pull out the check digits from string\n var resultLength = result.length;\n if (resultLength === 0) {\n // false positive\n throw new NotFoundException();\n }\n // Only bother if the result had at least one character, and if the checksum digit happened to\n // be a printable character. If it was just interpreted as a control code, nothing to remove.\n if (resultLength > 0 && lastCharacterWasPrintable) {\n if (codeSet === Code128Reader.CODE_CODE_C) {\n result = result.substring(0, resultLength - 2);\n }\n else {\n result = result.substring(0, resultLength - 1);\n }\n }\n var left = (startPatternInfo[1] + startPatternInfo[0]) / 2.0;\n var right = lastStart + lastPatternSize / 2.0;\n var rawCodesSize = rawCodes.length;\n var rawBytes = new Uint8Array(rawCodesSize);\n for (var i = 0; i < rawCodesSize; i++) {\n rawBytes[i] = rawCodes[i];\n }\n var points = [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)];\n return new Result(result, rawBytes, 0, points, BarcodeFormat.CODE_128, new Date().getTime());\n };\n Code128Reader.CODE_PATTERNS = [\n Int32Array.from([2, 1, 2, 2, 2, 2]),\n Int32Array.from([2, 2, 2, 1, 2, 2]),\n Int32Array.from([2, 2, 2, 2, 2, 1]),\n Int32Array.from([1, 2, 1, 2, 2, 3]),\n Int32Array.from([1, 2, 1, 3, 2, 2]),\n Int32Array.from([1, 3, 1, 2, 2, 2]),\n Int32Array.from([1, 2, 2, 2, 1, 3]),\n Int32Array.from([1, 2, 2, 3, 1, 2]),\n Int32Array.from([1, 3, 2, 2, 1, 2]),\n Int32Array.from([2, 2, 1, 2, 1, 3]),\n Int32Array.from([2, 2, 1, 3, 1, 2]),\n Int32Array.from([2, 3, 1, 2, 1, 2]),\n Int32Array.from([1, 1, 2, 2, 3, 2]),\n Int32Array.from([1, 2, 2, 1, 3, 2]),\n Int32Array.from([1, 2, 2, 2, 3, 1]),\n Int32Array.from([1, 1, 3, 2, 2, 2]),\n Int32Array.from([1, 2, 3, 1, 2, 2]),\n Int32Array.from([1, 2, 3, 2, 2, 1]),\n Int32Array.from([2, 2, 3, 2, 1, 1]),\n Int32Array.from([2, 2, 1, 1, 3, 2]),\n Int32Array.from([2, 2, 1, 2, 3, 1]),\n Int32Array.from([2, 1, 3, 2, 1, 2]),\n Int32Array.from([2, 2, 3, 1, 1, 2]),\n Int32Array.from([3, 1, 2, 1, 3, 1]),\n Int32Array.from([3, 1, 1, 2, 2, 2]),\n Int32Array.from([3, 2, 1, 1, 2, 2]),\n Int32Array.from([3, 2, 1, 2, 2, 1]),\n Int32Array.from([3, 1, 2, 2, 1, 2]),\n Int32Array.from([3, 2, 2, 1, 1, 2]),\n Int32Array.from([3, 2, 2, 2, 1, 1]),\n Int32Array.from([2, 1, 2, 1, 2, 3]),\n Int32Array.from([2, 1, 2, 3, 2, 1]),\n Int32Array.from([2, 3, 2, 1, 2, 1]),\n Int32Array.from([1, 1, 1, 3, 2, 3]),\n Int32Array.from([1, 3, 1, 1, 2, 3]),\n Int32Array.from([1, 3, 1, 3, 2, 1]),\n Int32Array.from([1, 1, 2, 3, 1, 3]),\n Int32Array.from([1, 3, 2, 1, 1, 3]),\n Int32Array.from([1, 3, 2, 3, 1, 1]),\n Int32Array.from([2, 1, 1, 3, 1, 3]),\n Int32Array.from([2, 3, 1, 1, 1, 3]),\n Int32Array.from([2, 3, 1, 3, 1, 1]),\n Int32Array.from([1, 1, 2, 1, 3, 3]),\n Int32Array.from([1, 1, 2, 3, 3, 1]),\n Int32Array.from([1, 3, 2, 1, 3, 1]),\n Int32Array.from([1, 1, 3, 1, 2, 3]),\n Int32Array.from([1, 1, 3, 3, 2, 1]),\n Int32Array.from([1, 3, 3, 1, 2, 1]),\n Int32Array.from([3, 1, 3, 1, 2, 1]),\n Int32Array.from([2, 1, 1, 3, 3, 1]),\n Int32Array.from([2, 3, 1, 1, 3, 1]),\n Int32Array.from([2, 1, 3, 1, 1, 3]),\n Int32Array.from([2, 1, 3, 3, 1, 1]),\n Int32Array.from([2, 1, 3, 1, 3, 1]),\n Int32Array.from([3, 1, 1, 1, 2, 3]),\n Int32Array.from([3, 1, 1, 3, 2, 1]),\n Int32Array.from([3, 3, 1, 1, 2, 1]),\n Int32Array.from([3, 1, 2, 1, 1, 3]),\n Int32Array.from([3, 1, 2, 3, 1, 1]),\n Int32Array.from([3, 3, 2, 1, 1, 1]),\n Int32Array.from([3, 1, 4, 1, 1, 1]),\n Int32Array.from([2, 2, 1, 4, 1, 1]),\n Int32Array.from([4, 3, 1, 1, 1, 1]),\n Int32Array.from([1, 1, 1, 2, 2, 4]),\n Int32Array.from([1, 1, 1, 4, 2, 2]),\n Int32Array.from([1, 2, 1, 1, 2, 4]),\n Int32Array.from([1, 2, 1, 4, 2, 1]),\n Int32Array.from([1, 4, 1, 1, 2, 2]),\n Int32Array.from([1, 4, 1, 2, 2, 1]),\n Int32Array.from([1, 1, 2, 2, 1, 4]),\n Int32Array.from([1, 1, 2, 4, 1, 2]),\n Int32Array.from([1, 2, 2, 1, 1, 4]),\n Int32Array.from([1, 2, 2, 4, 1, 1]),\n Int32Array.from([1, 4, 2, 1, 1, 2]),\n Int32Array.from([1, 4, 2, 2, 1, 1]),\n Int32Array.from([2, 4, 1, 2, 1, 1]),\n Int32Array.from([2, 2, 1, 1, 1, 4]),\n Int32Array.from([4, 1, 3, 1, 1, 1]),\n Int32Array.from([2, 4, 1, 1, 1, 2]),\n Int32Array.from([1, 3, 4, 1, 1, 1]),\n Int32Array.from([1, 1, 1, 2, 4, 2]),\n Int32Array.from([1, 2, 1, 1, 4, 2]),\n Int32Array.from([1, 2, 1, 2, 4, 1]),\n Int32Array.from([1, 1, 4, 2, 1, 2]),\n Int32Array.from([1, 2, 4, 1, 1, 2]),\n Int32Array.from([1, 2, 4, 2, 1, 1]),\n Int32Array.from([4, 1, 1, 2, 1, 2]),\n Int32Array.from([4, 2, 1, 1, 1, 2]),\n Int32Array.from([4, 2, 1, 2, 1, 1]),\n Int32Array.from([2, 1, 2, 1, 4, 1]),\n Int32Array.from([2, 1, 4, 1, 2, 1]),\n Int32Array.from([4, 1, 2, 1, 2, 1]),\n Int32Array.from([1, 1, 1, 1, 4, 3]),\n Int32Array.from([1, 1, 1, 3, 4, 1]),\n Int32Array.from([1, 3, 1, 1, 4, 1]),\n Int32Array.from([1, 1, 4, 1, 1, 3]),\n Int32Array.from([1, 1, 4, 3, 1, 1]),\n Int32Array.from([4, 1, 1, 1, 1, 3]),\n Int32Array.from([4, 1, 1, 3, 1, 1]),\n Int32Array.from([1, 1, 3, 1, 4, 1]),\n Int32Array.from([1, 1, 4, 1, 3, 1]),\n Int32Array.from([3, 1, 1, 1, 4, 1]),\n Int32Array.from([4, 1, 1, 1, 3, 1]),\n Int32Array.from([2, 1, 1, 4, 1, 2]),\n Int32Array.from([2, 1, 1, 2, 1, 4]),\n Int32Array.from([2, 1, 1, 2, 3, 2]),\n Int32Array.from([2, 3, 3, 1, 1, 1, 2]),\n ];\n Code128Reader.MAX_AVG_VARIANCE = 0.25;\n Code128Reader.MAX_INDIVIDUAL_VARIANCE = 0.7;\n Code128Reader.CODE_SHIFT = 98;\n Code128Reader.CODE_CODE_C = 99;\n Code128Reader.CODE_CODE_B = 100;\n Code128Reader.CODE_CODE_A = 101;\n Code128Reader.CODE_FNC_1 = 102;\n Code128Reader.CODE_FNC_2 = 97;\n Code128Reader.CODE_FNC_3 = 96;\n Code128Reader.CODE_FNC_4_A = 101;\n Code128Reader.CODE_FNC_4_B = 100;\n Code128Reader.CODE_START_A = 103;\n Code128Reader.CODE_START_B = 104;\n Code128Reader.CODE_START_C = 105;\n Code128Reader.CODE_STOP = 106;\n return Code128Reader;\n}(OneDReader));\nexport default Code128Reader;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport ChecksumException from '../ChecksumException';\nimport FormatException from '../FormatException';\nimport NotFoundException from '../NotFoundException';\nimport OneDReader from './OneDReader';\nimport Result from '../Result';\nimport ResultPoint from '../ResultPoint';\n/**\n *

Decodes Code 39 barcodes. Supports \"Full ASCII Code 39\" if USE_CODE_39_EXTENDED_MODE is set.

\n *\n * @author Sean Owen\n * @see Code93Reader\n */\nvar Code39Reader = /** @class */ (function (_super) {\n __extends(Code39Reader, _super);\n /**\n * Creates a reader that assumes all encoded data is data, and does not treat the final\n * character as a check digit. It will not decoded \"extended Code 39\" sequences.\n */\n // public Code39Reader() {\n // this(false);\n // }\n /**\n * Creates a reader that can be configured to check the last character as a check digit.\n * It will not decoded \"extended Code 39\" sequences.\n *\n * @param usingCheckDigit if true, treat the last data character as a check digit, not\n * data, and verify that the checksum passes.\n */\n // public Code39Reader(boolean usingCheckDigit) {\n // this(usingCheckDigit, false);\n // }\n /**\n * Creates a reader that can be configured to check the last character as a check digit,\n * or optionally attempt to decode \"extended Code 39\" sequences that are used to encode\n * the full ASCII character set.\n *\n * @param usingCheckDigit if true, treat the last data character as a check digit, not\n * data, and verify that the checksum passes.\n * @param extendedMode if true, will attempt to decode extended Code 39 sequences in the\n * text.\n */\n function Code39Reader(usingCheckDigit, extendedMode) {\n if (usingCheckDigit === void 0) { usingCheckDigit = false; }\n if (extendedMode === void 0) { extendedMode = false; }\n var _this = _super.call(this) || this;\n _this.usingCheckDigit = usingCheckDigit;\n _this.extendedMode = extendedMode;\n _this.decodeRowResult = '';\n _this.counters = new Int32Array(9);\n return _this;\n }\n Code39Reader.prototype.decodeRow = function (rowNumber, row, hints) {\n var e_1, _a, e_2, _b;\n var theCounters = this.counters;\n theCounters.fill(0);\n this.decodeRowResult = '';\n var start = Code39Reader.findAsteriskPattern(row, theCounters);\n // Read off white space\n var nextStart = row.getNextSet(start[1]);\n var end = row.getSize();\n var decodedChar;\n var lastStart;\n do {\n Code39Reader.recordPattern(row, nextStart, theCounters);\n var pattern = Code39Reader.toNarrowWidePattern(theCounters);\n if (pattern < 0) {\n throw new NotFoundException();\n }\n decodedChar = Code39Reader.patternToChar(pattern);\n this.decodeRowResult += decodedChar;\n lastStart = nextStart;\n try {\n for (var theCounters_1 = (e_1 = void 0, __values(theCounters)), theCounters_1_1 = theCounters_1.next(); !theCounters_1_1.done; theCounters_1_1 = theCounters_1.next()) {\n var counter = theCounters_1_1.value;\n nextStart += counter;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (theCounters_1_1 && !theCounters_1_1.done && (_a = theCounters_1.return)) _a.call(theCounters_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // Read off white space\n nextStart = row.getNextSet(nextStart);\n } while (decodedChar !== '*');\n this.decodeRowResult = this.decodeRowResult.substring(0, this.decodeRowResult.length - 1); // remove asterisk\n // Look for whitespace after pattern:\n var lastPatternSize = 0;\n try {\n for (var theCounters_2 = __values(theCounters), theCounters_2_1 = theCounters_2.next(); !theCounters_2_1.done; theCounters_2_1 = theCounters_2.next()) {\n var counter = theCounters_2_1.value;\n lastPatternSize += counter;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (theCounters_2_1 && !theCounters_2_1.done && (_b = theCounters_2.return)) _b.call(theCounters_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n var whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize;\n // If 50% of last pattern size, following last pattern, is not whitespace, fail\n // (but if it's whitespace to the very end of the image, that's OK)\n if (nextStart !== end && (whiteSpaceAfterEnd * 2) < lastPatternSize) {\n throw new NotFoundException();\n }\n if (this.usingCheckDigit) {\n var max = this.decodeRowResult.length - 1;\n var total = 0;\n for (var i = 0; i < max; i++) {\n total += Code39Reader.ALPHABET_STRING.indexOf(this.decodeRowResult.charAt(i));\n }\n if (this.decodeRowResult.charAt(max) !== Code39Reader.ALPHABET_STRING.charAt(total % 43)) {\n throw new ChecksumException();\n }\n this.decodeRowResult = this.decodeRowResult.substring(0, max);\n }\n if (this.decodeRowResult.length === 0) {\n // false positive\n throw new NotFoundException();\n }\n var resultString;\n if (this.extendedMode) {\n resultString = Code39Reader.decodeExtended(this.decodeRowResult);\n }\n else {\n resultString = this.decodeRowResult;\n }\n var left = (start[1] + start[0]) / 2.0;\n var right = lastStart + lastPatternSize / 2.0;\n return new Result(resultString, null, 0, [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)], BarcodeFormat.CODE_39, new Date().getTime());\n };\n Code39Reader.findAsteriskPattern = function (row, counters) {\n var width = row.getSize();\n var rowOffset = row.getNextSet(0);\n var counterPosition = 0;\n var patternStart = rowOffset;\n var isWhite = false;\n var patternLength = counters.length;\n for (var i = rowOffset; i < width; i++) {\n if (row.get(i) !== isWhite) {\n counters[counterPosition]++;\n }\n else {\n if (counterPosition === patternLength - 1) {\n // Look for whitespace before start pattern, >= 50% of width of start pattern\n if (this.toNarrowWidePattern(counters) === Code39Reader.ASTERISK_ENCODING &&\n row.isRange(Math.max(0, patternStart - Math.floor((i - patternStart) / 2)), patternStart, false)) {\n return [patternStart, i];\n }\n patternStart += counters[0] + counters[1];\n counters.copyWithin(0, 2, 2 + counterPosition - 1);\n counters[counterPosition - 1] = 0;\n counters[counterPosition] = 0;\n counterPosition--;\n }\n else {\n counterPosition++;\n }\n counters[counterPosition] = 1;\n isWhite = !isWhite;\n }\n }\n throw new NotFoundException();\n };\n // For efficiency, returns -1 on failure. Not throwing here saved as many as 700 exceptions\n // per image when using some of our blackbox images.\n Code39Reader.toNarrowWidePattern = function (counters) {\n var e_3, _a;\n var numCounters = counters.length;\n var maxNarrowCounter = 0;\n var wideCounters;\n do {\n var minCounter = 0x7fffffff;\n try {\n for (var counters_1 = (e_3 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n var counter = counters_1_1.value;\n if (counter < minCounter && counter > maxNarrowCounter) {\n minCounter = counter;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n maxNarrowCounter = minCounter;\n wideCounters = 0;\n var totalWideCountersWidth = 0;\n var pattern = 0;\n for (var i = 0; i < numCounters; i++) {\n var counter = counters[i];\n if (counter > maxNarrowCounter) {\n pattern |= 1 << (numCounters - 1 - i);\n wideCounters++;\n totalWideCountersWidth += counter;\n }\n }\n if (wideCounters === 3) {\n // Found 3 wide counters, but are they close enough in width?\n // We can perform a cheap, conservative check to see if any individual\n // counter is more than 1.5 times the average:\n for (var i = 0; i < numCounters && wideCounters > 0; i++) {\n var counter = counters[i];\n if (counter > maxNarrowCounter) {\n wideCounters--;\n // totalWideCountersWidth = 3 * average, so this checks if counter >= 3/2 * average\n if ((counter * 2) >= totalWideCountersWidth) {\n return -1;\n }\n }\n }\n return pattern;\n }\n } while (wideCounters > 3);\n return -1;\n };\n Code39Reader.patternToChar = function (pattern) {\n for (var i = 0; i < Code39Reader.CHARACTER_ENCODINGS.length; i++) {\n if (Code39Reader.CHARACTER_ENCODINGS[i] === pattern) {\n return Code39Reader.ALPHABET_STRING.charAt(i);\n }\n }\n if (pattern === Code39Reader.ASTERISK_ENCODING) {\n return '*';\n }\n throw new NotFoundException();\n };\n Code39Reader.decodeExtended = function (encoded) {\n var length = encoded.length;\n var decoded = '';\n for (var i = 0; i < length; i++) {\n var c = encoded.charAt(i);\n if (c === '+' || c === '$' || c === '%' || c === '/') {\n var next = encoded.charAt(i + 1);\n var decodedChar = '\\0';\n switch (c) {\n case '+':\n // +A to +Z map to a to z\n if (next >= 'A' && next <= 'Z') {\n decodedChar = String.fromCharCode(next.charCodeAt(0) + 32);\n }\n else {\n throw new FormatException();\n }\n break;\n case '$':\n // $A to $Z map to control codes SH to SB\n if (next >= 'A' && next <= 'Z') {\n decodedChar = String.fromCharCode(next.charCodeAt(0) - 64);\n }\n else {\n throw new FormatException();\n }\n break;\n case '%':\n // %A to %E map to control codes ESC to US\n if (next >= 'A' && next <= 'E') {\n decodedChar = String.fromCharCode(next.charCodeAt(0) - 38);\n }\n else if (next >= 'F' && next <= 'J') {\n decodedChar = String.fromCharCode(next.charCodeAt(0) - 11);\n }\n else if (next >= 'K' && next <= 'O') {\n decodedChar = String.fromCharCode(next.charCodeAt(0) + 16);\n }\n else if (next >= 'P' && next <= 'T') {\n decodedChar = String.fromCharCode(next.charCodeAt(0) + 43);\n }\n else if (next === 'U') {\n decodedChar = '\\0';\n }\n else if (next === 'V') {\n decodedChar = '@';\n }\n else if (next === 'W') {\n decodedChar = '`';\n }\n else if (next === 'X' || next === 'Y' || next === 'Z') {\n decodedChar = '\\x7f';\n }\n else {\n throw new FormatException();\n }\n break;\n case '/':\n // /A to /O map to ! to , and /Z maps to :\n if (next >= 'A' && next <= 'O') {\n decodedChar = String.fromCharCode(next.charCodeAt(0) - 32);\n }\n else if (next === 'Z') {\n decodedChar = ':';\n }\n else {\n throw new FormatException();\n }\n break;\n }\n decoded += decodedChar;\n // bump up i again since we read two characters\n i++;\n }\n else {\n decoded += c;\n }\n }\n return decoded;\n };\n Code39Reader.ALPHABET_STRING = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%';\n /**\n * These represent the encodings of characters, as patterns of wide and narrow bars.\n * The 9 least-significant bits of each int correspond to the pattern of wide and narrow,\n * with 1s representing \"wide\" and 0s representing narrow.\n */\n Code39Reader.CHARACTER_ENCODINGS = [\n 0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064,\n 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C,\n 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016,\n 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x0A8,\n 0x0A2, 0x08A, 0x02A // /-%\n ];\n Code39Reader.ASTERISK_ENCODING = 0x094;\n return Code39Reader;\n}(OneDReader));\nexport default Code39Reader;\n","/*\n * Copyright 2010 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport ChecksumException from '../ChecksumException';\nimport FormatException from '../FormatException';\nimport NotFoundException from '../NotFoundException';\nimport OneDReader from './OneDReader';\nimport Result from '../Result';\n//import com.google.zxing.ResultMetadataType;\nimport ResultPoint from '../ResultPoint';\n/**\n *

Decodes Code 93 barcodes.

\n *\n * @author Sean Owen\n * @see Code39Reader\n */\nvar Code93Reader = /** @class */ (function (_super) {\n __extends(Code93Reader, _super);\n //public Code93Reader() {\n // decodeRowResult = new StringBuilder(20);\n // counters = new int[6];\n //}\n function Code93Reader() {\n var _this = _super.call(this) || this;\n _this.decodeRowResult = '';\n _this.counters = new Int32Array(6);\n return _this;\n }\n Code93Reader.prototype.decodeRow = function (rowNumber, row, hints) {\n var e_1, _a, e_2, _b;\n var start = this.findAsteriskPattern(row);\n // Read off white space\n var nextStart = row.getNextSet(start[1]);\n var end = row.getSize();\n var theCounters = this.counters;\n theCounters.fill(0);\n this.decodeRowResult = '';\n var decodedChar;\n var lastStart;\n do {\n Code93Reader.recordPattern(row, nextStart, theCounters);\n var pattern = this.toPattern(theCounters);\n if (pattern < 0) {\n throw new NotFoundException();\n }\n decodedChar = this.patternToChar(pattern);\n this.decodeRowResult += decodedChar;\n lastStart = nextStart;\n try {\n for (var theCounters_1 = (e_1 = void 0, __values(theCounters)), theCounters_1_1 = theCounters_1.next(); !theCounters_1_1.done; theCounters_1_1 = theCounters_1.next()) {\n var counter = theCounters_1_1.value;\n nextStart += counter;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (theCounters_1_1 && !theCounters_1_1.done && (_a = theCounters_1.return)) _a.call(theCounters_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // Read off white space\n nextStart = row.getNextSet(nextStart);\n } while (decodedChar !== '*');\n this.decodeRowResult = this.decodeRowResult.substring(0, this.decodeRowResult.length - 1); // remove asterisk\n var lastPatternSize = 0;\n try {\n for (var theCounters_2 = __values(theCounters), theCounters_2_1 = theCounters_2.next(); !theCounters_2_1.done; theCounters_2_1 = theCounters_2.next()) {\n var counter = theCounters_2_1.value;\n lastPatternSize += counter;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (theCounters_2_1 && !theCounters_2_1.done && (_b = theCounters_2.return)) _b.call(theCounters_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n // Should be at least one more black module\n if (nextStart === end || !row.get(nextStart)) {\n throw new NotFoundException();\n }\n if (this.decodeRowResult.length < 2) {\n // false positive -- need at least 2 checksum digits\n throw new NotFoundException();\n }\n this.checkChecksums(this.decodeRowResult);\n // Remove checksum digits\n this.decodeRowResult = this.decodeRowResult.substring(0, this.decodeRowResult.length - 2);\n var resultString = this.decodeExtended(this.decodeRowResult);\n var left = (start[1] + start[0]) / 2.0;\n var right = lastStart + lastPatternSize / 2.0;\n return new Result(resultString, null, 0, [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)], BarcodeFormat.CODE_93, new Date().getTime());\n };\n Code93Reader.prototype.findAsteriskPattern = function (row) {\n var width = row.getSize();\n var rowOffset = row.getNextSet(0);\n this.counters.fill(0);\n var theCounters = this.counters;\n var patternStart = rowOffset;\n var isWhite = false;\n var patternLength = theCounters.length;\n var counterPosition = 0;\n for (var i = rowOffset; i < width; i++) {\n if (row.get(i) !== isWhite) {\n theCounters[counterPosition]++;\n }\n else {\n if (counterPosition === patternLength - 1) {\n if (this.toPattern(theCounters) === Code93Reader.ASTERISK_ENCODING) {\n return new Int32Array([patternStart, i]);\n }\n patternStart += theCounters[0] + theCounters[1];\n theCounters.copyWithin(0, 2, 2 + counterPosition - 1);\n theCounters[counterPosition - 1] = 0;\n theCounters[counterPosition] = 0;\n counterPosition--;\n }\n else {\n counterPosition++;\n }\n theCounters[counterPosition] = 1;\n isWhite = !isWhite;\n }\n }\n throw new NotFoundException;\n };\n Code93Reader.prototype.toPattern = function (counters) {\n var e_3, _a;\n var sum = 0;\n try {\n for (var counters_1 = __values(counters), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n var counter = counters_1_1.value;\n sum += counter;\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n var pattern = 0;\n var max = counters.length;\n for (var i = 0; i < max; i++) {\n var scaled = Math.round(counters[i] * 9.0 / sum);\n if (scaled < 1 || scaled > 4) {\n return -1;\n }\n if ((i & 0x01) === 0) {\n for (var j = 0; j < scaled; j++) {\n pattern = (pattern << 1) | 0x01;\n }\n }\n else {\n pattern <<= scaled;\n }\n }\n return pattern;\n };\n Code93Reader.prototype.patternToChar = function (pattern) {\n for (var i = 0; i < Code93Reader.CHARACTER_ENCODINGS.length; i++) {\n if (Code93Reader.CHARACTER_ENCODINGS[i] === pattern) {\n return Code93Reader.ALPHABET_STRING.charAt(i);\n }\n }\n throw new NotFoundException();\n };\n Code93Reader.prototype.decodeExtended = function (encoded) {\n var length = encoded.length;\n var decoded = '';\n for (var i = 0; i < length; i++) {\n var c = encoded.charAt(i);\n if (c >= 'a' && c <= 'd') {\n if (i >= length - 1) {\n throw new FormatException();\n }\n var next = encoded.charAt(i + 1);\n var decodedChar = '\\0';\n switch (c) {\n case 'd':\n // +A to +Z map to a to z\n if (next >= 'A' && next <= 'Z') {\n decodedChar = String.fromCharCode(next.charCodeAt(0) + 32);\n }\n else {\n throw new FormatException();\n }\n break;\n case 'a':\n // $A to $Z map to control codes SH to SB\n if (next >= 'A' && next <= 'Z') {\n decodedChar = String.fromCharCode(next.charCodeAt(0) - 64);\n }\n else {\n throw new FormatException();\n }\n break;\n case 'b':\n if (next >= 'A' && next <= 'E') {\n // %A to %E map to control codes ESC to USep\n decodedChar = String.fromCharCode(next.charCodeAt(0) - 38);\n }\n else if (next >= 'F' && next <= 'J') {\n // %F to %J map to ; < = > ?\n decodedChar = String.fromCharCode(next.charCodeAt(0) - 11);\n }\n else if (next >= 'K' && next <= 'O') {\n // %K to %O map to [ \\ ] ^ _\n decodedChar = String.fromCharCode(next.charCodeAt(0) + 16);\n }\n else if (next >= 'P' && next <= 'T') {\n // %P to %T map to { | } ~ DEL\n decodedChar = String.fromCharCode(next.charCodeAt(0) + 43);\n }\n else if (next === 'U') {\n // %U map to NUL\n decodedChar = '\\0';\n }\n else if (next === 'V') {\n // %V map to @\n decodedChar = '@';\n }\n else if (next === 'W') {\n // %W map to `\n decodedChar = '`';\n }\n else if (next >= 'X' && next <= 'Z') {\n // %X to %Z all map to DEL (127)\n decodedChar = String.fromCharCode(127);\n }\n else {\n throw new FormatException();\n }\n break;\n case 'c':\n // /A to /O map to ! to , and /Z maps to :\n if (next >= 'A' && next <= 'O') {\n decodedChar = String.fromCharCode(next.charCodeAt(0) - 32);\n }\n else if (next === 'Z') {\n decodedChar = ':';\n }\n else {\n throw new FormatException();\n }\n break;\n }\n decoded += decodedChar;\n // bump up i again since we read two characters\n i++;\n }\n else {\n decoded += c;\n }\n }\n return decoded;\n };\n Code93Reader.prototype.checkChecksums = function (result) {\n var length = result.length;\n this.checkOneChecksum(result, length - 2, 20);\n this.checkOneChecksum(result, length - 1, 15);\n };\n Code93Reader.prototype.checkOneChecksum = function (result, checkPosition, weightMax) {\n var weight = 1;\n var total = 0;\n for (var i = checkPosition - 1; i >= 0; i--) {\n total += weight * Code93Reader.ALPHABET_STRING.indexOf(result.charAt(i));\n if (++weight > weightMax) {\n weight = 1;\n }\n }\n if (result.charAt(checkPosition) !== Code93Reader.ALPHABET_STRING[total % 47]) {\n throw new ChecksumException;\n }\n };\n // Note that 'abcd' are dummy characters in place of control characters.\n Code93Reader.ALPHABET_STRING = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd*\";\n /**\n * These represent the encodings of characters, as patterns of wide and narrow bars.\n * The 9 least-significant bits of each int correspond to the pattern of wide and narrow.\n */\n Code93Reader.CHARACTER_ENCODINGS = [\n 0x114, 0x148, 0x144, 0x142, 0x128, 0x124, 0x122, 0x150, 0x112, 0x10A,\n 0x1A8, 0x1A4, 0x1A2, 0x194, 0x192, 0x18A, 0x168, 0x164, 0x162, 0x134,\n 0x11A, 0x158, 0x14C, 0x146, 0x12C, 0x116, 0x1B4, 0x1B2, 0x1AC, 0x1A6,\n 0x196, 0x19A, 0x16C, 0x166, 0x136, 0x13A,\n 0x12E, 0x1D4, 0x1D2, 0x1CA, 0x16E, 0x176, 0x1AE,\n 0x126, 0x1DA, 0x1D6, 0x132, 0x15E,\n ];\n Code93Reader.ASTERISK_ENCODING = Code93Reader.CHARACTER_ENCODINGS[47];\n return Code93Reader;\n}(OneDReader));\nexport default Code93Reader;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport DecodeHintType from '../DecodeHintType';\nimport FormatException from '../FormatException';\nimport NotFoundException from '../NotFoundException';\nimport Result from '../Result';\nimport ResultPoint from '../ResultPoint';\nimport StringBuilder from '../util/StringBuilder';\nimport System from '../util/System';\nimport OneDReader from './OneDReader';\n/**\n *

Decodes ITF barcodes.

\n *\n * @author Tjieco\n */\nvar ITFReader = /** @class */ (function (_super) {\n __extends(ITFReader, _super);\n function ITFReader() {\n // private static W = 3; // Pixel width of a 3x wide line\n // private static w = 2; // Pixel width of a 2x wide line\n // private static N = 1; // Pixed width of a narrow line\n var _this = _super !== null && _super.apply(this, arguments) || this;\n // Stores the actual narrow line width of the image being decoded.\n _this.narrowLineWidth = -1;\n return _this;\n }\n // See ITFWriter.PATTERNS\n /*\n \n /!**\n * Patterns of Wide / Narrow lines to indicate each digit\n *!/\n */\n ITFReader.prototype.decodeRow = function (rowNumber, row, hints) {\n var e_1, _a;\n // Find out where the Middle section (payload) starts & ends\n var startRange = this.decodeStart(row);\n var endRange = this.decodeEnd(row);\n var result = new StringBuilder();\n ITFReader.decodeMiddle(row, startRange[1], endRange[0], result);\n var resultString = result.toString();\n var allowedLengths = null;\n if (hints != null) {\n allowedLengths = hints.get(DecodeHintType.ALLOWED_LENGTHS);\n }\n if (allowedLengths == null) {\n allowedLengths = ITFReader.DEFAULT_ALLOWED_LENGTHS;\n }\n // To avoid false positives with 2D barcodes (and other patterns), make\n // an assumption that the decoded string must be a 'standard' length if it's short\n var length = resultString.length;\n var lengthOK = false;\n var maxAllowedLength = 0;\n try {\n for (var allowedLengths_1 = __values(allowedLengths), allowedLengths_1_1 = allowedLengths_1.next(); !allowedLengths_1_1.done; allowedLengths_1_1 = allowedLengths_1.next()) {\n var value = allowedLengths_1_1.value;\n if (length === value) {\n lengthOK = true;\n break;\n }\n if (value > maxAllowedLength) {\n maxAllowedLength = value;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (allowedLengths_1_1 && !allowedLengths_1_1.done && (_a = allowedLengths_1.return)) _a.call(allowedLengths_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (!lengthOK && length > maxAllowedLength) {\n lengthOK = true;\n }\n if (!lengthOK) {\n throw new FormatException();\n }\n var points = [new ResultPoint(startRange[1], rowNumber), new ResultPoint(endRange[0], rowNumber)];\n var resultReturn = new Result(resultString, null, // no natural byte representation for these barcodes\n 0, points, BarcodeFormat.ITF, new Date().getTime());\n return resultReturn;\n };\n /*\n /!**\n * @param row row of black/white values to search\n * @param payloadStart offset of start pattern\n * @param resultString {@link StringBuilder} to append decoded chars to\n * @throws NotFoundException if decoding could not complete successfully\n *!/*/\n ITFReader.decodeMiddle = function (row, payloadStart, payloadEnd, resultString) {\n // Digits are interleaved in pairs - 5 black lines for one digit, and the\n // 5\n // interleaved white lines for the second digit.\n // Therefore, need to scan 10 lines and then\n // split these into two arrays\n var counterDigitPair = new Int32Array(10); // 10\n var counterBlack = new Int32Array(5); // 5\n var counterWhite = new Int32Array(5); // 5\n counterDigitPair.fill(0);\n counterBlack.fill(0);\n counterWhite.fill(0);\n while (payloadStart < payloadEnd) {\n // Get 10 runs of black/white.\n OneDReader.recordPattern(row, payloadStart, counterDigitPair);\n // Split them into each array\n for (var k = 0; k < 5; k++) {\n var twoK = 2 * k;\n counterBlack[k] = counterDigitPair[twoK];\n counterWhite[k] = counterDigitPair[twoK + 1];\n }\n var bestMatch = ITFReader.decodeDigit(counterBlack);\n resultString.append(bestMatch.toString());\n bestMatch = this.decodeDigit(counterWhite);\n resultString.append(bestMatch.toString());\n counterDigitPair.forEach(function (counterDigit) {\n payloadStart += counterDigit;\n });\n }\n };\n /*/!**\n * Identify where the start of the middle / payload section starts.\n *\n * @param row row of black/white values to search\n * @return Array, containing index of start of 'start block' and end of\n * 'start block'\n *!/*/\n ITFReader.prototype.decodeStart = function (row) {\n var endStart = ITFReader.skipWhiteSpace(row);\n var startPattern = ITFReader.findGuardPattern(row, endStart, ITFReader.START_PATTERN);\n // Determine the width of a narrow line in pixels. We can do this by\n // getting the width of the start pattern and dividing by 4 because its\n // made up of 4 narrow lines.\n this.narrowLineWidth = (startPattern[1] - startPattern[0]) / 4;\n this.validateQuietZone(row, startPattern[0]);\n return startPattern;\n };\n /*/!**\n * The start & end patterns must be pre/post fixed by a quiet zone. This\n * zone must be at least 10 times the width of a narrow line. Scan back until\n * we either get to the start of the barcode or match the necessary number of\n * quiet zone pixels.\n *\n * Note: Its assumed the row is reversed when using this method to find\n * quiet zone after the end pattern.\n *\n * ref: http://www.barcode-1.net/i25code.html\n *\n * @param row bit array representing the scanned barcode.\n * @param startPattern index into row of the start or end pattern.\n * @throws NotFoundException if the quiet zone cannot be found\n *!/*/\n ITFReader.prototype.validateQuietZone = function (row, startPattern) {\n var quietCount = this.narrowLineWidth * 10; // expect to find this many pixels of quiet zone\n // if there are not so many pixel at all let's try as many as possible\n quietCount = quietCount < startPattern ? quietCount : startPattern;\n for (var i = startPattern - 1; quietCount > 0 && i >= 0; i--) {\n if (row.get(i)) {\n break;\n }\n quietCount--;\n }\n if (quietCount !== 0) {\n // Unable to find the necessary number of quiet zone pixels.\n throw new NotFoundException();\n }\n };\n /*\n /!**\n * Skip all whitespace until we get to the first black line.\n *\n * @param row row of black/white values to search\n * @return index of the first black line.\n * @throws NotFoundException Throws exception if no black lines are found in the row\n *!/*/\n ITFReader.skipWhiteSpace = function (row) {\n var width = row.getSize();\n var endStart = row.getNextSet(0);\n if (endStart === width) {\n throw new NotFoundException();\n }\n return endStart;\n };\n /*/!**\n * Identify where the end of the middle / payload section ends.\n *\n * @param row row of black/white values to search\n * @return Array, containing index of start of 'end block' and end of 'end\n * block'\n *!/*/\n ITFReader.prototype.decodeEnd = function (row) {\n // For convenience, reverse the row and then\n // search from 'the start' for the end block\n row.reverse();\n try {\n var endStart = ITFReader.skipWhiteSpace(row);\n var endPattern = void 0;\n try {\n endPattern = ITFReader.findGuardPattern(row, endStart, ITFReader.END_PATTERN_REVERSED[0]);\n }\n catch (error) {\n if (error instanceof NotFoundException) {\n endPattern = ITFReader.findGuardPattern(row, endStart, ITFReader.END_PATTERN_REVERSED[1]);\n }\n }\n // The start & end patterns must be pre/post fixed by a quiet zone. This\n // zone must be at least 10 times the width of a narrow line.\n // ref: http://www.barcode-1.net/i25code.html\n this.validateQuietZone(row, endPattern[0]);\n // Now recalculate the indices of where the 'endblock' starts & stops to\n // accommodate\n // the reversed nature of the search\n var temp = endPattern[0];\n endPattern[0] = row.getSize() - endPattern[1];\n endPattern[1] = row.getSize() - temp;\n return endPattern;\n }\n finally {\n // Put the row back the right way.\n row.reverse();\n }\n };\n /*\n /!**\n * @param row row of black/white values to search\n * @param rowOffset position to start search\n * @param pattern pattern of counts of number of black and white pixels that are\n * being searched for as a pattern\n * @return start/end horizontal offset of guard pattern, as an array of two\n * ints\n * @throws NotFoundException if pattern is not found\n *!/*/\n ITFReader.findGuardPattern = function (row, rowOffset, pattern) {\n var patternLength = pattern.length;\n var counters = new Int32Array(patternLength);\n var width = row.getSize();\n var isWhite = false;\n var counterPosition = 0;\n var patternStart = rowOffset;\n counters.fill(0);\n for (var x = rowOffset; x < width; x++) {\n if (row.get(x) !== isWhite) {\n counters[counterPosition]++;\n }\n else {\n if (counterPosition === patternLength - 1) {\n if (OneDReader.patternMatchVariance(counters, pattern, ITFReader.MAX_INDIVIDUAL_VARIANCE) < ITFReader.MAX_AVG_VARIANCE) {\n return [patternStart, x];\n }\n patternStart += counters[0] + counters[1];\n System.arraycopy(counters, 2, counters, 0, counterPosition - 1);\n counters[counterPosition - 1] = 0;\n counters[counterPosition] = 0;\n counterPosition--;\n }\n else {\n counterPosition++;\n }\n counters[counterPosition] = 1;\n isWhite = !isWhite;\n }\n }\n throw new NotFoundException();\n };\n /*/!**\n * Attempts to decode a sequence of ITF black/white lines into single\n * digit.\n *\n * @param counters the counts of runs of observed black/white/black/... values\n * @return The decoded digit\n * @throws NotFoundException if digit cannot be decoded\n *!/*/\n ITFReader.decodeDigit = function (counters) {\n var bestVariance = ITFReader.MAX_AVG_VARIANCE; // worst variance we'll accept\n var bestMatch = -1;\n var max = ITFReader.PATTERNS.length;\n for (var i = 0; i < max; i++) {\n var pattern = ITFReader.PATTERNS[i];\n var variance = OneDReader.patternMatchVariance(counters, pattern, ITFReader.MAX_INDIVIDUAL_VARIANCE);\n if (variance < bestVariance) {\n bestVariance = variance;\n bestMatch = i;\n }\n else if (variance === bestVariance) {\n // if we find a second 'best match' with the same variance, we can not reliably report to have a suitable match\n bestMatch = -1;\n }\n }\n if (bestMatch >= 0) {\n return bestMatch % 10;\n }\n else {\n throw new NotFoundException();\n }\n };\n ITFReader.PATTERNS = [\n Int32Array.from([1, 1, 2, 2, 1]),\n Int32Array.from([2, 1, 1, 1, 2]),\n Int32Array.from([1, 2, 1, 1, 2]),\n Int32Array.from([2, 2, 1, 1, 1]),\n Int32Array.from([1, 1, 2, 1, 2]),\n Int32Array.from([2, 1, 2, 1, 1]),\n Int32Array.from([1, 2, 2, 1, 1]),\n Int32Array.from([1, 1, 1, 2, 2]),\n Int32Array.from([2, 1, 1, 2, 1]),\n Int32Array.from([1, 2, 1, 2, 1]),\n Int32Array.from([1, 1, 3, 3, 1]),\n Int32Array.from([3, 1, 1, 1, 3]),\n Int32Array.from([1, 3, 1, 1, 3]),\n Int32Array.from([3, 3, 1, 1, 1]),\n Int32Array.from([1, 1, 3, 1, 3]),\n Int32Array.from([3, 1, 3, 1, 1]),\n Int32Array.from([1, 3, 3, 1, 1]),\n Int32Array.from([1, 1, 1, 3, 3]),\n Int32Array.from([3, 1, 1, 3, 1]),\n Int32Array.from([1, 3, 1, 3, 1]) // 9\n ];\n ITFReader.MAX_AVG_VARIANCE = 0.38;\n ITFReader.MAX_INDIVIDUAL_VARIANCE = 0.5;\n /* /!** Valid ITF lengths. Anything longer than the largest value is also allowed. *!/*/\n ITFReader.DEFAULT_ALLOWED_LENGTHS = [6, 8, 10, 12, 14];\n /*/!**\n * Start/end guard pattern.\n *\n * Note: The end pattern is reversed because the row is reversed before\n * searching for the END_PATTERN\n *!/*/\n ITFReader.START_PATTERN = Int32Array.from([1, 1, 1, 1]);\n ITFReader.END_PATTERN_REVERSED = [\n Int32Array.from([1, 1, 2]),\n Int32Array.from([1, 1, 3]) // 3x\n ];\n return ITFReader;\n}(OneDReader));\nexport default ITFReader;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport OneDReader from './OneDReader';\nimport NotFoundException from '../NotFoundException';\nimport FormatException from '../FormatException';\n/**\n *

Encapsulates functionality and implementation that is common to UPC and EAN families\n * of one-dimensional barcodes.

\n *\n * @author dswitkin@google.com (Daniel Switkin)\n * @author Sean Owen\n * @author alasdair@google.com (Alasdair Mackintosh)\n */\nvar AbstractUPCEANReader = /** @class */ (function (_super) {\n __extends(AbstractUPCEANReader, _super);\n function AbstractUPCEANReader() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.decodeRowStringBuffer = '';\n return _this;\n }\n // private final UPCEANExtensionSupport extensionReader;\n // private final EANManufacturerOrgSupport eanManSupport;\n /*\n protected UPCEANReader() {\n decodeRowStringBuffer = new StringBuilder(20);\n extensionReader = new UPCEANExtensionSupport();\n eanManSupport = new EANManufacturerOrgSupport();\n }\n */\n AbstractUPCEANReader.findStartGuardPattern = function (row) {\n var foundStart = false;\n var startRange;\n var nextStart = 0;\n var counters = Int32Array.from([0, 0, 0]);\n while (!foundStart) {\n counters = Int32Array.from([0, 0, 0]);\n startRange = AbstractUPCEANReader.findGuardPattern(row, nextStart, false, this.START_END_PATTERN, counters);\n var start = startRange[0];\n nextStart = startRange[1];\n var quietStart = start - (nextStart - start);\n if (quietStart >= 0) {\n foundStart = row.isRange(quietStart, start, false);\n }\n }\n return startRange;\n };\n AbstractUPCEANReader.checkChecksum = function (s) {\n return AbstractUPCEANReader.checkStandardUPCEANChecksum(s);\n };\n AbstractUPCEANReader.checkStandardUPCEANChecksum = function (s) {\n var length = s.length;\n if (length === 0)\n return false;\n var check = parseInt(s.charAt(length - 1), 10);\n return AbstractUPCEANReader.getStandardUPCEANChecksum(s.substring(0, length - 1)) === check;\n };\n AbstractUPCEANReader.getStandardUPCEANChecksum = function (s) {\n var length = s.length;\n var sum = 0;\n for (var i = length - 1; i >= 0; i -= 2) {\n var digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n if (digit < 0 || digit > 9) {\n throw new FormatException();\n }\n sum += digit;\n }\n sum *= 3;\n for (var i = length - 2; i >= 0; i -= 2) {\n var digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n if (digit < 0 || digit > 9) {\n throw new FormatException();\n }\n sum += digit;\n }\n return (1000 - sum) % 10;\n };\n AbstractUPCEANReader.decodeEnd = function (row, endStart) {\n return AbstractUPCEANReader.findGuardPattern(row, endStart, false, AbstractUPCEANReader.START_END_PATTERN, new Int32Array(AbstractUPCEANReader.START_END_PATTERN.length).fill(0));\n };\n /**\n * @throws NotFoundException\n */\n AbstractUPCEANReader.findGuardPatternWithoutCounters = function (row, rowOffset, whiteFirst, pattern) {\n return this.findGuardPattern(row, rowOffset, whiteFirst, pattern, new Int32Array(pattern.length));\n };\n /**\n * @param row row of black/white values to search\n * @param rowOffset position to start search\n * @param whiteFirst if true, indicates that the pattern specifies white/black/white/...\n * pixel counts, otherwise, it is interpreted as black/white/black/...\n * @param pattern pattern of counts of number of black and white pixels that are being\n * searched for as a pattern\n * @param counters array of counters, as long as pattern, to re-use\n * @return start/end horizontal offset of guard pattern, as an array of two ints\n * @throws NotFoundException if pattern is not found\n */\n AbstractUPCEANReader.findGuardPattern = function (row, rowOffset, whiteFirst, pattern, counters) {\n var width = row.getSize();\n rowOffset = whiteFirst ? row.getNextUnset(rowOffset) : row.getNextSet(rowOffset);\n var counterPosition = 0;\n var patternStart = rowOffset;\n var patternLength = pattern.length;\n var isWhite = whiteFirst;\n for (var x = rowOffset; x < width; x++) {\n if (row.get(x) !== isWhite) {\n counters[counterPosition]++;\n }\n else {\n if (counterPosition === patternLength - 1) {\n if (OneDReader.patternMatchVariance(counters, pattern, AbstractUPCEANReader.MAX_INDIVIDUAL_VARIANCE) < AbstractUPCEANReader.MAX_AVG_VARIANCE) {\n return Int32Array.from([patternStart, x]);\n }\n patternStart += counters[0] + counters[1];\n var slice = counters.slice(2, counters.length);\n for (var i = 0; i < counterPosition - 1; i++) {\n counters[i] = slice[i];\n }\n counters[counterPosition - 1] = 0;\n counters[counterPosition] = 0;\n counterPosition--;\n }\n else {\n counterPosition++;\n }\n counters[counterPosition] = 1;\n isWhite = !isWhite;\n }\n }\n throw new NotFoundException();\n };\n AbstractUPCEANReader.decodeDigit = function (row, counters, rowOffset, patterns) {\n this.recordPattern(row, rowOffset, counters);\n var bestVariance = this.MAX_AVG_VARIANCE;\n var bestMatch = -1;\n var max = patterns.length;\n for (var i = 0; i < max; i++) {\n var pattern = patterns[i];\n var variance = OneDReader.patternMatchVariance(counters, pattern, AbstractUPCEANReader.MAX_INDIVIDUAL_VARIANCE);\n if (variance < bestVariance) {\n bestVariance = variance;\n bestMatch = i;\n }\n }\n if (bestMatch >= 0) {\n return bestMatch;\n }\n else {\n throw new NotFoundException();\n }\n };\n // These two values are critical for determining how permissive the decoding will be.\n // We've arrived at these values through a lot of trial and error. Setting them any higher\n // lets false positives creep in quickly.\n AbstractUPCEANReader.MAX_AVG_VARIANCE = 0.48;\n AbstractUPCEANReader.MAX_INDIVIDUAL_VARIANCE = 0.7;\n /**\n * Start/end guard pattern.\n */\n AbstractUPCEANReader.START_END_PATTERN = Int32Array.from([1, 1, 1]);\n /**\n * Pattern marking the middle of a UPC/EAN pattern, separating the two halves.\n */\n AbstractUPCEANReader.MIDDLE_PATTERN = Int32Array.from([1, 1, 1, 1, 1]);\n /**\n * end guard pattern.\n */\n AbstractUPCEANReader.END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]);\n /**\n * \"Odd\", or \"L\" patterns used to encode UPC/EAN digits.\n */\n AbstractUPCEANReader.L_PATTERNS = [\n Int32Array.from([3, 2, 1, 1]),\n Int32Array.from([2, 2, 2, 1]),\n Int32Array.from([2, 1, 2, 2]),\n Int32Array.from([1, 4, 1, 1]),\n Int32Array.from([1, 1, 3, 2]),\n Int32Array.from([1, 2, 3, 1]),\n Int32Array.from([1, 1, 1, 4]),\n Int32Array.from([1, 3, 1, 2]),\n Int32Array.from([1, 2, 1, 3]),\n Int32Array.from([3, 1, 1, 2]),\n ];\n return AbstractUPCEANReader;\n}(OneDReader));\nexport default AbstractUPCEANReader;\n","/*\n * Copyright (C) 2010 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../BarcodeFormat';\n// import UPCEANReader from './UPCEANReader';\nimport AbstractUPCEANReader from './AbstractUPCEANReader';\nimport Result from '../Result';\nimport ResultPoint from '../ResultPoint';\nimport ResultMetadataType from '../ResultMetadataType';\nimport NotFoundException from '../NotFoundException';\n/**\n * @see UPCEANExtension2Support\n */\nvar UPCEANExtension5Support = /** @class */ (function () {\n function UPCEANExtension5Support() {\n this.CHECK_DIGIT_ENCODINGS = [0x18, 0x14, 0x12, 0x11, 0x0C, 0x06, 0x03, 0x0A, 0x09, 0x05];\n this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n this.decodeRowStringBuffer = '';\n }\n UPCEANExtension5Support.prototype.decodeRow = function (rowNumber, row, extensionStartRange) {\n var result = this.decodeRowStringBuffer;\n var end = this.decodeMiddle(row, extensionStartRange, result);\n var resultString = result.toString();\n var extensionData = UPCEANExtension5Support.parseExtensionString(resultString);\n var resultPoints = [\n new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0, rowNumber),\n new ResultPoint(end, rowNumber)\n ];\n var extensionResult = new Result(resultString, null, 0, resultPoints, BarcodeFormat.UPC_EAN_EXTENSION, new Date().getTime());\n if (extensionData != null) {\n extensionResult.putAllMetadata(extensionData);\n }\n return extensionResult;\n };\n UPCEANExtension5Support.prototype.decodeMiddle = function (row, startRange, resultString) {\n var e_1, _a;\n var counters = this.decodeMiddleCounters;\n counters[0] = 0;\n counters[1] = 0;\n counters[2] = 0;\n counters[3] = 0;\n var end = row.getSize();\n var rowOffset = startRange[1];\n var lgPatternFound = 0;\n for (var x = 0; x < 5 && rowOffset < end; x++) {\n var bestMatch = AbstractUPCEANReader.decodeDigit(row, counters, rowOffset, AbstractUPCEANReader.L_AND_G_PATTERNS);\n resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n try {\n for (var counters_1 = (e_1 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n var counter = counters_1_1.value;\n rowOffset += counter;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (bestMatch >= 10) {\n lgPatternFound |= 1 << (4 - x);\n }\n if (x !== 4) {\n // Read off separator if not last\n rowOffset = row.getNextSet(rowOffset);\n rowOffset = row.getNextUnset(rowOffset);\n }\n }\n if (resultString.length !== 5) {\n throw new NotFoundException();\n }\n var checkDigit = this.determineCheckDigit(lgPatternFound);\n if (UPCEANExtension5Support.extensionChecksum(resultString.toString()) !== checkDigit) {\n throw new NotFoundException();\n }\n return rowOffset;\n };\n UPCEANExtension5Support.extensionChecksum = function (s) {\n var length = s.length;\n var sum = 0;\n for (var i = length - 2; i >= 0; i -= 2) {\n sum += s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n }\n sum *= 3;\n for (var i = length - 1; i >= 0; i -= 2) {\n sum += s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n }\n sum *= 3;\n return sum % 10;\n };\n UPCEANExtension5Support.prototype.determineCheckDigit = function (lgPatternFound) {\n for (var d = 0; d < 10; d++) {\n if (lgPatternFound === this.CHECK_DIGIT_ENCODINGS[d]) {\n return d;\n }\n }\n throw new NotFoundException();\n };\n UPCEANExtension5Support.parseExtensionString = function (raw) {\n if (raw.length !== 5) {\n return null;\n }\n var value = UPCEANExtension5Support.parseExtension5String(raw);\n if (value == null) {\n return null;\n }\n return new Map([[ResultMetadataType.SUGGESTED_PRICE, value]]);\n };\n UPCEANExtension5Support.parseExtension5String = function (raw) {\n var currency;\n switch (raw.charAt(0)) {\n case '0':\n currency = '£';\n break;\n case '5':\n currency = '$';\n break;\n case '9':\n // Reference: http://www.jollytech.com\n switch (raw) {\n case '90000':\n // No suggested retail price\n return null;\n case '99991':\n // Complementary\n return '0.00';\n case '99990':\n return 'Used';\n }\n // Otherwise... unknown currency?\n currency = '';\n break;\n default:\n currency = '';\n break;\n }\n var rawAmount = parseInt(raw.substring(1));\n var unitsString = (rawAmount / 100).toString();\n var hundredths = rawAmount % 100;\n var hundredthsString = hundredths < 10 ? '0' + hundredths : hundredths.toString(); // fixme\n return currency + unitsString + '.' + hundredthsString;\n };\n return UPCEANExtension5Support;\n}());\nexport default UPCEANExtension5Support;\n","/*\n * Copyright (C) 2012 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../BarcodeFormat';\nimport AbstractUPCEANReader from './AbstractUPCEANReader';\nimport Result from '../Result';\nimport ResultPoint from '../ResultPoint';\nimport ResultMetadataType from '../ResultMetadataType';\nimport NotFoundException from '../NotFoundException';\n/**\n * @see UPCEANExtension5Support\n */\nvar UPCEANExtension2Support = /** @class */ (function () {\n function UPCEANExtension2Support() {\n this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n this.decodeRowStringBuffer = '';\n }\n UPCEANExtension2Support.prototype.decodeRow = function (rowNumber, row, extensionStartRange) {\n var result = this.decodeRowStringBuffer;\n var end = this.decodeMiddle(row, extensionStartRange, result);\n var resultString = result.toString();\n var extensionData = UPCEANExtension2Support.parseExtensionString(resultString);\n var resultPoints = [\n new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0, rowNumber),\n new ResultPoint(end, rowNumber)\n ];\n var extensionResult = new Result(resultString, null, 0, resultPoints, BarcodeFormat.UPC_EAN_EXTENSION, new Date().getTime());\n if (extensionData != null) {\n extensionResult.putAllMetadata(extensionData);\n }\n return extensionResult;\n };\n UPCEANExtension2Support.prototype.decodeMiddle = function (row, startRange, resultString) {\n var e_1, _a;\n var counters = this.decodeMiddleCounters;\n counters[0] = 0;\n counters[1] = 0;\n counters[2] = 0;\n counters[3] = 0;\n var end = row.getSize();\n var rowOffset = startRange[1];\n var checkParity = 0;\n for (var x = 0; x < 2 && rowOffset < end; x++) {\n var bestMatch = AbstractUPCEANReader.decodeDigit(row, counters, rowOffset, AbstractUPCEANReader.L_AND_G_PATTERNS);\n resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n try {\n for (var counters_1 = (e_1 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n var counter = counters_1_1.value;\n rowOffset += counter;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (bestMatch >= 10) {\n checkParity |= 1 << (1 - x);\n }\n if (x !== 1) {\n // Read off separator if not last\n rowOffset = row.getNextSet(rowOffset);\n rowOffset = row.getNextUnset(rowOffset);\n }\n }\n if (resultString.length !== 2) {\n throw new NotFoundException();\n }\n if (parseInt(resultString.toString()) % 4 !== checkParity) {\n throw new NotFoundException();\n }\n return rowOffset;\n };\n UPCEANExtension2Support.parseExtensionString = function (raw) {\n if (raw.length !== 2) {\n return null;\n }\n return new Map([[ResultMetadataType.ISSUE_NUMBER, parseInt(raw)]]);\n };\n return UPCEANExtension2Support;\n}());\nexport default UPCEANExtension2Support;\n","/*\n * Copyright (C) 2010 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport AbstractUPCEANReader from './AbstractUPCEANReader';\nimport UPCEANExtension5Support from './UPCEANExtension5Support';\nimport UPCEANExtension2Support from './UPCEANExtension2Support';\nvar UPCEANExtensionSupport = /** @class */ (function () {\n function UPCEANExtensionSupport() {\n }\n UPCEANExtensionSupport.decodeRow = function (rowNumber, row, rowOffset) {\n var extensionStartRange = AbstractUPCEANReader.findGuardPattern(row, rowOffset, false, this.EXTENSION_START_PATTERN, new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0));\n try {\n // return null;\n var fiveSupport = new UPCEANExtension5Support();\n return fiveSupport.decodeRow(rowNumber, row, extensionStartRange);\n }\n catch (err) {\n // return null;\n var twoSupport = new UPCEANExtension2Support();\n return twoSupport.decodeRow(rowNumber, row, extensionStartRange);\n }\n };\n UPCEANExtensionSupport.EXTENSION_START_PATTERN = Int32Array.from([1, 1, 2]);\n return UPCEANExtensionSupport;\n}());\nexport default UPCEANExtensionSupport;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport BarcodeFormat from '../BarcodeFormat';\nimport DecodeHintType from '../DecodeHintType';\nimport Result from '../Result';\nimport ResultMetadataType from '../ResultMetadataType';\nimport ResultPoint from '../ResultPoint';\nimport UPCEANExtensionSupport from './UPCEANExtensionSupport';\nimport AbstractUPCEANReader from './AbstractUPCEANReader';\nimport NotFoundException from '../NotFoundException';\nimport FormatException from '../FormatException';\nimport ChecksumException from '../ChecksumException';\n/**\n *

Encapsulates functionality and implementation that is common to UPC and EAN families\n * of one-dimensional barcodes.

\n *\n * @author dswitkin@google.com (Daniel Switkin)\n * @author Sean Owen\n * @author alasdair@google.com (Alasdair Mackintosh)\n */\nvar UPCEANReader = /** @class */ (function (_super) {\n __extends(UPCEANReader, _super);\n function UPCEANReader() {\n var _this = _super.call(this) || this;\n _this.decodeRowStringBuffer = '';\n UPCEANReader.L_AND_G_PATTERNS = UPCEANReader.L_PATTERNS.map(function (arr) { return Int32Array.from(arr); });\n for (var i = 10; i < 20; i++) {\n var widths = UPCEANReader.L_PATTERNS[i - 10];\n var reversedWidths = new Int32Array(widths.length);\n for (var j = 0; j < widths.length; j++) {\n reversedWidths[j] = widths[widths.length - j - 1];\n }\n UPCEANReader.L_AND_G_PATTERNS[i] = reversedWidths;\n }\n return _this;\n }\n UPCEANReader.prototype.decodeRow = function (rowNumber, row, hints) {\n var startGuardRange = UPCEANReader.findStartGuardPattern(row);\n var resultPointCallback = hints == null ? null : hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);\n if (resultPointCallback != null) {\n var resultPoint_1 = new ResultPoint((startGuardRange[0] + startGuardRange[1]) / 2.0, rowNumber);\n resultPointCallback.foundPossibleResultPoint(resultPoint_1);\n }\n var budello = this.decodeMiddle(row, startGuardRange, this.decodeRowStringBuffer);\n var endStart = budello.rowOffset;\n var result = budello.resultString;\n if (resultPointCallback != null) {\n var resultPoint_2 = new ResultPoint(endStart, rowNumber);\n resultPointCallback.foundPossibleResultPoint(resultPoint_2);\n }\n var endRange = UPCEANReader.decodeEnd(row, endStart);\n if (resultPointCallback != null) {\n var resultPoint_3 = new ResultPoint((endRange[0] + endRange[1]) / 2.0, rowNumber);\n resultPointCallback.foundPossibleResultPoint(resultPoint_3);\n }\n // Make sure there is a quiet zone at least as big as the end pattern after the barcode. The\n // spec might want more whitespace, but in practice this is the maximum we can count on.\n var end = endRange[1];\n var quietEnd = end + (end - endRange[0]);\n if (quietEnd >= row.getSize() || !row.isRange(end, quietEnd, false)) {\n throw new NotFoundException();\n }\n var resultString = result.toString();\n // UPC/EAN should never be less than 8 chars anyway\n if (resultString.length < 8) {\n throw new FormatException();\n }\n if (!UPCEANReader.checkChecksum(resultString)) {\n throw new ChecksumException();\n }\n var left = (startGuardRange[1] + startGuardRange[0]) / 2.0;\n var right = (endRange[1] + endRange[0]) / 2.0;\n var format = this.getBarcodeFormat();\n var resultPoint = [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)];\n var decodeResult = new Result(resultString, null, 0, resultPoint, format, new Date().getTime());\n var extensionLength = 0;\n try {\n var extensionResult = UPCEANExtensionSupport.decodeRow(rowNumber, row, endRange[1]);\n decodeResult.putMetadata(ResultMetadataType.UPC_EAN_EXTENSION, extensionResult.getText());\n decodeResult.putAllMetadata(extensionResult.getResultMetadata());\n decodeResult.addResultPoints(extensionResult.getResultPoints());\n extensionLength = extensionResult.getText().length;\n }\n catch (err) {\n }\n var allowedExtensions = hints == null ? null : hints.get(DecodeHintType.ALLOWED_EAN_EXTENSIONS);\n if (allowedExtensions != null) {\n var valid = false;\n for (var length_1 in allowedExtensions) {\n if (extensionLength.toString() === length_1) { // check me\n valid = true;\n break;\n }\n }\n if (!valid) {\n throw new NotFoundException();\n }\n }\n if (format === BarcodeFormat.EAN_13 || format === BarcodeFormat.UPC_A) {\n // let countryID = eanManSupport.lookupContryIdentifier(resultString); todo\n // if (countryID != null) {\n // decodeResult.putMetadata(ResultMetadataType.POSSIBLE_COUNTRY, countryID);\n // }\n }\n return decodeResult;\n };\n UPCEANReader.checkChecksum = function (s) {\n return UPCEANReader.checkStandardUPCEANChecksum(s);\n };\n UPCEANReader.checkStandardUPCEANChecksum = function (s) {\n var length = s.length;\n if (length === 0)\n return false;\n var check = parseInt(s.charAt(length - 1), 10);\n return UPCEANReader.getStandardUPCEANChecksum(s.substring(0, length - 1)) === check;\n };\n UPCEANReader.getStandardUPCEANChecksum = function (s) {\n var length = s.length;\n var sum = 0;\n for (var i = length - 1; i >= 0; i -= 2) {\n var digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n if (digit < 0 || digit > 9) {\n throw new FormatException();\n }\n sum += digit;\n }\n sum *= 3;\n for (var i = length - 2; i >= 0; i -= 2) {\n var digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n if (digit < 0 || digit > 9) {\n throw new FormatException();\n }\n sum += digit;\n }\n return (1000 - sum) % 10;\n };\n UPCEANReader.decodeEnd = function (row, endStart) {\n return UPCEANReader.findGuardPattern(row, endStart, false, UPCEANReader.START_END_PATTERN, new Int32Array(UPCEANReader.START_END_PATTERN.length).fill(0));\n };\n return UPCEANReader;\n}(AbstractUPCEANReader));\nexport default UPCEANReader;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../BarcodeFormat';\nimport UPCEANReader from './UPCEANReader';\nimport NotFoundException from '../NotFoundException';\n/**\n *

Implements decoding of the EAN-13 format.

\n *\n * @author dswitkin@google.com (Daniel Switkin)\n * @author Sean Owen\n * @author alasdair@google.com (Alasdair Mackintosh)\n */\nvar EAN13Reader = /** @class */ (function (_super) {\n __extends(EAN13Reader, _super);\n function EAN13Reader() {\n var _this = _super.call(this) || this;\n _this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n return _this;\n }\n EAN13Reader.prototype.decodeMiddle = function (row, startRange, resultString) {\n var e_1, _a, e_2, _b;\n var counters = this.decodeMiddleCounters;\n counters[0] = 0;\n counters[1] = 0;\n counters[2] = 0;\n counters[3] = 0;\n var end = row.getSize();\n var rowOffset = startRange[1];\n var lgPatternFound = 0;\n for (var x = 0; x < 6 && rowOffset < end; x++) {\n var bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_AND_G_PATTERNS);\n resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n try {\n for (var counters_1 = (e_1 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n var counter = counters_1_1.value;\n rowOffset += counter;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (bestMatch >= 10) {\n lgPatternFound |= 1 << (5 - x);\n }\n }\n resultString = EAN13Reader.determineFirstDigit(resultString, lgPatternFound);\n var middleRange = UPCEANReader.findGuardPattern(row, rowOffset, true, UPCEANReader.MIDDLE_PATTERN, new Int32Array(UPCEANReader.MIDDLE_PATTERN.length).fill(0));\n rowOffset = middleRange[1];\n for (var x = 0; x < 6 && rowOffset < end; x++) {\n var bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n try {\n for (var counters_2 = (e_2 = void 0, __values(counters)), counters_2_1 = counters_2.next(); !counters_2_1.done; counters_2_1 = counters_2.next()) {\n var counter = counters_2_1.value;\n rowOffset += counter;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (counters_2_1 && !counters_2_1.done && (_b = counters_2.return)) _b.call(counters_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n return { rowOffset: rowOffset, resultString: resultString };\n };\n EAN13Reader.prototype.getBarcodeFormat = function () {\n return BarcodeFormat.EAN_13;\n };\n EAN13Reader.determineFirstDigit = function (resultString, lgPatternFound) {\n for (var d = 0; d < 10; d++) {\n if (lgPatternFound === this.FIRST_DIGIT_ENCODINGS[d]) {\n resultString = String.fromCharCode(('0'.charCodeAt(0) + d)) + resultString;\n return resultString;\n }\n }\n throw new NotFoundException();\n };\n EAN13Reader.FIRST_DIGIT_ENCODINGS = [0x00, 0x0B, 0x0D, 0xE, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A];\n return EAN13Reader;\n}(UPCEANReader));\nexport default EAN13Reader;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../BarcodeFormat';\nimport UPCEANReader from './UPCEANReader';\n/**\n *

Implements decoding of the EAN-8 format.

\n *\n * @author Sean Owen\n */\nvar EAN8Reader = /** @class */ (function (_super) {\n __extends(EAN8Reader, _super);\n function EAN8Reader() {\n var _this = _super.call(this) || this;\n _this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n return _this;\n }\n EAN8Reader.prototype.decodeMiddle = function (row, startRange, resultString) {\n var e_1, _a, e_2, _b;\n var counters = this.decodeMiddleCounters;\n counters[0] = 0;\n counters[1] = 0;\n counters[2] = 0;\n counters[3] = 0;\n var end = row.getSize();\n var rowOffset = startRange[1];\n for (var x = 0; x < 4 && rowOffset < end; x++) {\n var bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n try {\n for (var counters_1 = (e_1 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n var counter = counters_1_1.value;\n rowOffset += counter;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n var middleRange = UPCEANReader.findGuardPattern(row, rowOffset, true, UPCEANReader.MIDDLE_PATTERN, new Int32Array(UPCEANReader.MIDDLE_PATTERN.length).fill(0));\n rowOffset = middleRange[1];\n for (var x = 0; x < 4 && rowOffset < end; x++) {\n var bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n try {\n for (var counters_2 = (e_2 = void 0, __values(counters)), counters_2_1 = counters_2.next(); !counters_2_1.done; counters_2_1 = counters_2.next()) {\n var counter = counters_2_1.value;\n rowOffset += counter;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (counters_2_1 && !counters_2_1.done && (_b = counters_2.return)) _b.call(counters_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n return { rowOffset: rowOffset, resultString: resultString };\n };\n EAN8Reader.prototype.getBarcodeFormat = function () {\n return BarcodeFormat.EAN_8;\n };\n return EAN8Reader;\n}(UPCEANReader));\nexport default EAN8Reader;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport Result from '../Result';\nimport NotFoundException from '../NotFoundException';\nimport EAN13Reader from './EAN13Reader';\nimport UPCEANReader from './UPCEANReader';\n/**\n * Encapsulates functionality and implementation that is common to all families\n * of one-dimensional barcodes.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n * @author Sean Owen\n * @author sam2332 (Sam Rudloff)\n *\n * @source https://github.com/zxing/zxing/blob/3c96923276dd5785d58eb970b6ba3f80d36a9505/core/src/main/java/com/google/zxing/oned/UPCAReader.java\n *\n * @experimental\n */\nvar UPCAReader = /** @class */ (function (_super) {\n __extends(UPCAReader, _super);\n function UPCAReader() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.ean13Reader = new EAN13Reader();\n return _this;\n }\n // @Override\n UPCAReader.prototype.getBarcodeFormat = function () {\n return BarcodeFormat.UPC_A;\n };\n // Note that we don't try rotation without the try harder flag, even if rotation was supported.\n // @Override\n UPCAReader.prototype.decode = function (image, hints) {\n return this.maybeReturnResult(this.ean13Reader.decode(image));\n };\n // @Override\n UPCAReader.prototype.decodeRow = function (rowNumber, row, hints) {\n return this.maybeReturnResult(this.ean13Reader.decodeRow(rowNumber, row, hints));\n };\n // @Override\n UPCAReader.prototype.decodeMiddle = function (row, startRange, resultString) {\n return this.ean13Reader.decodeMiddle(row, startRange, resultString);\n };\n UPCAReader.prototype.maybeReturnResult = function (result) {\n var text = result.getText();\n if (text.charAt(0) === '0') {\n var upcaResult = new Result(text.substring(1), null, null, result.getResultPoints(), BarcodeFormat.UPC_A);\n if (result.getResultMetadata() != null) {\n upcaResult.putAllMetadata(result.getResultMetadata());\n }\n return upcaResult;\n }\n else {\n throw new NotFoundException();\n }\n };\n UPCAReader.prototype.reset = function () {\n this.ean13Reader.reset();\n };\n return UPCAReader;\n}(UPCEANReader));\nexport default UPCAReader;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport UPCEANReader from './UPCEANReader';\nimport StringBuilder from '../util/StringBuilder';\nimport NotFoundException from '../NotFoundException';\nimport BarcodeFormat from '../BarcodeFormat';\n// package com.google.zxing.oned;\n// import com.google.zxing.BarcodeFormat;\n// import com.google.zxing.FormatException;\n// import com.google.zxing.NotFoundException;\n// import com.google.zxing.common.BitArray;\n/**\n *

Implements decoding of the UPC-E format.

\n *

This is a great reference for\n * UPC-E information.

\n *\n * @author Sean Owen\n *\n * @source https://github.com/zxing/zxing/blob/3c96923276dd5785d58eb970b6ba3f80d36a9505/core/src/main/java/com/google/zxing/oned/UPCEReader.java\n *\n * @experimental\n */\nvar UPCEReader = /** @class */ (function (_super) {\n __extends(UPCEReader, _super);\n function UPCEReader() {\n var _this = _super.call(this) || this;\n _this.decodeMiddleCounters = new Int32Array(4);\n return _this;\n }\n /**\n * @throws NotFoundException\n */\n // @Override\n UPCEReader.prototype.decodeMiddle = function (row, startRange, result) {\n var e_1, _a;\n var counters = this.decodeMiddleCounters.map(function (x) { return x; });\n counters[0] = 0;\n counters[1] = 0;\n counters[2] = 0;\n counters[3] = 0;\n var end = row.getSize();\n var rowOffset = startRange[1];\n var lgPatternFound = 0;\n for (var x = 0; x < 6 && rowOffset < end; x++) {\n var bestMatch = UPCEReader.decodeDigit(row, counters, rowOffset, UPCEReader.L_AND_G_PATTERNS);\n result += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n try {\n for (var counters_1 = (e_1 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n var counter = counters_1_1.value;\n rowOffset += counter;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (bestMatch >= 10) {\n lgPatternFound |= 1 << (5 - x);\n }\n }\n UPCEReader.determineNumSysAndCheckDigit(new StringBuilder(result), lgPatternFound);\n return rowOffset;\n };\n /**\n * @throws NotFoundException\n */\n // @Override\n UPCEReader.prototype.decodeEnd = function (row, endStart) {\n return UPCEReader.findGuardPatternWithoutCounters(row, endStart, true, UPCEReader.MIDDLE_END_PATTERN);\n };\n /**\n * @throws FormatException\n */\n // @Override\n UPCEReader.prototype.checkChecksum = function (s) {\n return UPCEANReader.checkChecksum(UPCEReader.convertUPCEtoUPCA(s));\n };\n /**\n * @throws NotFoundException\n */\n UPCEReader.determineNumSysAndCheckDigit = function (resultString, lgPatternFound) {\n for (var numSys = 0; numSys <= 1; numSys++) {\n for (var d = 0; d < 10; d++) {\n if (lgPatternFound === this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[numSys][d]) {\n resultString.insert(0, /*(char)*/ ('0' + numSys));\n resultString.append(/*(char)*/ ('0' + d));\n return;\n }\n }\n }\n throw NotFoundException.getNotFoundInstance();\n };\n // @Override\n UPCEReader.prototype.getBarcodeFormat = function () {\n return BarcodeFormat.UPC_E;\n };\n /**\n * Expands a UPC-E value back into its full, equivalent UPC-A code value.\n *\n * @param upce UPC-E code as string of digits\n * @return equivalent UPC-A code as string of digits\n */\n UPCEReader.convertUPCEtoUPCA = function (upce) {\n // the following line is equivalent to upce.getChars(1, 7, upceChars, 0);\n var upceChars = upce.slice(1, 7).split('').map(function (x) { return x.charCodeAt(0); });\n var result = new StringBuilder( /*12*/);\n result.append(upce.charAt(0));\n var lastChar = upceChars[5];\n switch (lastChar) {\n case 0:\n case 1:\n case 2:\n result.appendChars(upceChars, 0, 2);\n result.append(lastChar);\n result.append('0000');\n result.appendChars(upceChars, 2, 3);\n break;\n case 3:\n result.appendChars(upceChars, 0, 3);\n result.append('00000');\n result.appendChars(upceChars, 3, 2);\n break;\n case 4:\n result.appendChars(upceChars, 0, 4);\n result.append('00000');\n result.append(upceChars[4]);\n break;\n default:\n result.appendChars(upceChars, 0, 5);\n result.append('0000');\n result.append(lastChar);\n break;\n }\n // Only append check digit in conversion if supplied\n if (upce.length >= 8) {\n result.append(upce.charAt(7));\n }\n return result.toString();\n };\n /**\n * The pattern that marks the middle, and end, of a UPC-E pattern.\n * There is no \"second half\" to a UPC-E barcode.\n */\n UPCEReader.MIDDLE_END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]);\n // For an UPC-E barcode, the final digit is represented by the parities used\n // to encode the middle six digits, according to the table below.\n //\n // Parity of next 6 digits\n // Digit 0 1 2 3 4 5\n // 0 Even Even Even Odd Odd Odd\n // 1 Even Even Odd Even Odd Odd\n // 2 Even Even Odd Odd Even Odd\n // 3 Even Even Odd Odd Odd Even\n // 4 Even Odd Even Even Odd Odd\n // 5 Even Odd Odd Even Even Odd\n // 6 Even Odd Odd Odd Even Even\n // 7 Even Odd Even Odd Even Odd\n // 8 Even Odd Even Odd Odd Even\n // 9 Even Odd Odd Even Odd Even\n //\n // The encoding is represented by the following array, which is a bit pattern\n // using Odd = 0 and Even = 1. For example, 5 is represented by:\n //\n // Odd Even Even Odd Odd Even\n // in binary:\n // 0 1 1 0 0 1 == 0x19\n //\n /**\n * See {@link #L_AND_G_PATTERNS}; these values similarly represent patterns of\n * even-odd parity encodings of digits that imply both the number system (0 or 1)\n * used, and the check digit.\n */\n UPCEReader.NUMSYS_AND_CHECK_DIGIT_PATTERNS = [\n Int32Array.from([0x38, 0x34, 0x32, 0x31, 0x2C, 0x26, 0x23, 0x2A, 0x29, 0x25]),\n Int32Array.from([0x07, 0x0B, 0x0D, 0x0E, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1]),\n ];\n return UPCEReader;\n}(UPCEANReader));\nexport default UPCEReader;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../BarcodeFormat';\nimport DecodeHintType from '../DecodeHintType';\nimport Result from '../Result';\nimport OneDReader from './OneDReader';\nimport EAN13Reader from './EAN13Reader';\nimport EAN8Reader from './EAN8Reader';\nimport UPCAReader from './UPCAReader';\nimport NotFoundException from '../NotFoundException';\nimport UPCEReader from './UPCEReader';\n/**\n *

A reader that can read all available UPC/EAN formats. If a caller wants to try to\n * read all such formats, it is most efficient to use this implementation rather than invoke\n * individual readers.

\n *\n * @author Sean Owen\n */\nvar MultiFormatUPCEANReader = /** @class */ (function (_super) {\n __extends(MultiFormatUPCEANReader, _super);\n function MultiFormatUPCEANReader(hints) {\n var _this = _super.call(this) || this;\n var possibleFormats = hints == null ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS);\n var readers = [];\n if (possibleFormats != null) {\n if (possibleFormats.indexOf(BarcodeFormat.EAN_13) > -1) {\n readers.push(new EAN13Reader());\n }\n if (possibleFormats.indexOf(BarcodeFormat.UPC_A) > -1) {\n readers.push(new UPCAReader());\n }\n if (possibleFormats.indexOf(BarcodeFormat.EAN_8) > -1) {\n readers.push(new EAN8Reader());\n }\n if (possibleFormats.indexOf(BarcodeFormat.UPC_E) > -1) {\n readers.push(new UPCEReader());\n }\n }\n if (readers.length === 0) {\n readers.push(new EAN13Reader());\n readers.push(new UPCAReader());\n readers.push(new EAN8Reader());\n readers.push(new UPCEReader());\n }\n _this.readers = readers;\n return _this;\n }\n MultiFormatUPCEANReader.prototype.decodeRow = function (rowNumber, row, hints) {\n var e_1, _a;\n try {\n for (var _b = __values(this.readers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var reader = _c.value;\n try {\n // const result: Result = reader.decodeRow(rowNumber, row, startGuardPattern, hints);\n var result = reader.decodeRow(rowNumber, row, hints);\n // Special case: a 12-digit code encoded in UPC-A is identical to a \"0\"\n // followed by those 12 digits encoded as EAN-13. Each will recognize such a code,\n // UPC-A as a 12-digit string and EAN-13 as a 13-digit string starting with \"0\".\n // Individually these are correct and their readers will both read such a code\n // and correctly call it EAN-13, or UPC-A, respectively.\n //\n // In this case, if we've been looking for both types, we'd like to call it\n // a UPC-A code. But for efficiency we only run the EAN-13 decoder to also read\n // UPC-A. So we special case it here, and convert an EAN-13 result to a UPC-A\n // result if appropriate.\n //\n // But, don't return UPC-A if UPC-A was not a requested format!\n var ean13MayBeUPCA = result.getBarcodeFormat() === BarcodeFormat.EAN_13 &&\n result.getText().charAt(0) === '0';\n // @SuppressWarnings(\"unchecked\")\n var possibleFormats = hints == null ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS);\n var canReturnUPCA = possibleFormats == null || possibleFormats.includes(BarcodeFormat.UPC_A);\n if (ean13MayBeUPCA && canReturnUPCA) {\n var rawBytes = result.getRawBytes();\n // Transfer the metadata across\n var resultUPCA = new Result(result.getText().substring(1), rawBytes, (rawBytes ? rawBytes.length : null), result.getResultPoints(), BarcodeFormat.UPC_A);\n resultUPCA.putAllMetadata(result.getResultMetadata());\n return resultUPCA;\n }\n return result;\n }\n catch (err) {\n // continue;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n throw new NotFoundException();\n };\n MultiFormatUPCEANReader.prototype.reset = function () {\n var e_2, _a;\n try {\n for (var _b = __values(this.readers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var reader = _c.value;\n reader.reset();\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n };\n return MultiFormatUPCEANReader;\n}(OneDReader));\nexport default MultiFormatUPCEANReader;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport NotFoundException from '../NotFoundException';\nimport OneDReader from './OneDReader';\nimport Result from '../Result';\nimport ResultPoint from '../ResultPoint';\n/**\n *

Decodes CodaBar barcodes.

\n *\n * @author Evan @dodobelieve\n * @see CodaBarReader\n */\nvar CodaBarReader = /** @class */ (function (_super) {\n __extends(CodaBarReader, _super);\n function CodaBarReader() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.CODA_BAR_CHAR_SET = {\n nnnnnww: '0',\n nnnnwwn: '1',\n nnnwnnw: '2',\n wwnnnnn: '3',\n nnwnnwn: '4',\n wnnnnwn: '5',\n nwnnnnw: '6',\n nwnnwnn: '7',\n nwwnnnn: '8',\n wnnwnnn: '9',\n nnnwwnn: '-',\n nnwwnnn: '$',\n wnnnwnw: ':',\n wnwnnnw: '/',\n wnwnwnn: '.',\n nnwwwww: '+',\n nnwwnwn: 'A',\n nwnwnnw: 'B',\n nnnwnww: 'C',\n nnnwwwn: 'D'\n };\n return _this;\n }\n CodaBarReader.prototype.decodeRow = function (rowNumber, row, hints) {\n var validRowData = this.getValidRowData(row);\n if (!validRowData)\n throw new NotFoundException();\n var retStr = this.codaBarDecodeRow(validRowData.row);\n if (!retStr)\n throw new NotFoundException();\n return new Result(retStr, null, 0, [new ResultPoint(validRowData.left, rowNumber), new ResultPoint(validRowData.right, rowNumber)], BarcodeFormat.CODABAR, new Date().getTime());\n };\n /**\n * converts bit array to valid data array(lengths of black bits and white bits)\n * @param row bit array to convert\n */\n CodaBarReader.prototype.getValidRowData = function (row) {\n var booleanArr = row.toArray();\n var startIndex = booleanArr.indexOf(true);\n if (startIndex === -1)\n return null;\n var lastIndex = booleanArr.lastIndexOf(true);\n if (lastIndex <= startIndex)\n return null;\n booleanArr = booleanArr.slice(startIndex, lastIndex + 1);\n var result = [];\n var lastBit = booleanArr[0];\n var bitLength = 1;\n for (var i = 1; i < booleanArr.length; i++) {\n if (booleanArr[i] === lastBit) {\n bitLength++;\n }\n else {\n lastBit = booleanArr[i];\n result.push(bitLength);\n bitLength = 1;\n }\n }\n result.push(bitLength);\n // CodaBar code data valid\n if (result.length < 23 && (result.length + 1) % 8 !== 0)\n return null;\n return { row: result, left: startIndex, right: lastIndex };\n };\n /**\n * decode codabar code\n * @param row row to cecode\n */\n CodaBarReader.prototype.codaBarDecodeRow = function (row) {\n var code = [];\n var barThreshold = Math.ceil(row.reduce(function (pre, item) { return (pre + item) / 2; }, 0));\n // Read one encoded character at a time.\n while (row.length > 0) {\n var seg = row.splice(0, 8).splice(0, 7);\n var key = seg.map(function (len) { return (len < barThreshold ? 'n' : 'w'); }).join('');\n if (this.CODA_BAR_CHAR_SET[key] === undefined)\n return null;\n code.push(this.CODA_BAR_CHAR_SET[key]);\n }\n var strCode = code.join('');\n if (this.validCodaBarString(strCode))\n return strCode;\n return null;\n };\n /**\n * check if the string is a CodaBar string\n * @param src string to determine\n */\n CodaBarReader.prototype.validCodaBarString = function (src) {\n var reg = /^[A-D].{1,}[A-D]$/;\n return reg.test(src);\n };\n return CodaBarReader;\n}(OneDReader));\nexport default CodaBarReader;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport MathUtils from '../../common/detector/MathUtils';\nimport NotFoundException from '../../NotFoundException';\nimport OneDReader from '../OneDReader';\n// import Integer from '../../util/Integer';\n// import Float from '../../util/Float';\nvar AbstractRSSReader = /** @class */ (function (_super) {\n __extends(AbstractRSSReader, _super);\n function AbstractRSSReader() {\n var _this = _super.call(this) || this;\n _this.decodeFinderCounters = new Int32Array(4);\n _this.dataCharacterCounters = new Int32Array(8);\n _this.oddRoundingErrors = new Array(4);\n _this.evenRoundingErrors = new Array(4);\n _this.oddCounts = new Array(_this.dataCharacterCounters.length / 2);\n _this.evenCounts = new Array(_this.dataCharacterCounters.length / 2);\n return _this;\n }\n AbstractRSSReader.prototype.getDecodeFinderCounters = function () {\n return this.decodeFinderCounters;\n };\n AbstractRSSReader.prototype.getDataCharacterCounters = function () {\n return this.dataCharacterCounters;\n };\n AbstractRSSReader.prototype.getOddRoundingErrors = function () {\n return this.oddRoundingErrors;\n };\n AbstractRSSReader.prototype.getEvenRoundingErrors = function () {\n return this.evenRoundingErrors;\n };\n AbstractRSSReader.prototype.getOddCounts = function () {\n return this.oddCounts;\n };\n AbstractRSSReader.prototype.getEvenCounts = function () {\n return this.evenCounts;\n };\n AbstractRSSReader.prototype.parseFinderValue = function (counters, finderPatterns) {\n for (var value = 0; value < finderPatterns.length; value++) {\n if (OneDReader.patternMatchVariance(counters, finderPatterns[value], AbstractRSSReader.MAX_INDIVIDUAL_VARIANCE) < AbstractRSSReader.MAX_AVG_VARIANCE) {\n return value;\n }\n }\n throw new NotFoundException();\n };\n /**\n * @param array values to sum\n * @return sum of values\n * @deprecated call {@link MathUtils#sum(int[])}\n */\n AbstractRSSReader.count = function (array) {\n return MathUtils.sum(new Int32Array(array));\n };\n AbstractRSSReader.increment = function (array, errors) {\n var index = 0;\n var biggestError = errors[0];\n for (var i = 1; i < array.length; i++) {\n if (errors[i] > biggestError) {\n biggestError = errors[i];\n index = i;\n }\n }\n array[index]++;\n };\n AbstractRSSReader.decrement = function (array, errors) {\n var index = 0;\n var biggestError = errors[0];\n for (var i = 1; i < array.length; i++) {\n if (errors[i] < biggestError) {\n biggestError = errors[i];\n index = i;\n }\n }\n array[index]--;\n };\n AbstractRSSReader.isFinderPattern = function (counters) {\n var e_1, _a;\n var firstTwoSum = counters[0] + counters[1];\n var sum = firstTwoSum + counters[2] + counters[3];\n var ratio = firstTwoSum / sum;\n if (ratio >= AbstractRSSReader.MIN_FINDER_PATTERN_RATIO && ratio <= AbstractRSSReader.MAX_FINDER_PATTERN_RATIO) {\n // passes ratio test in spec, but see if the counts are unreasonable\n var minCounter = Number.MAX_SAFE_INTEGER;\n var maxCounter = Number.MIN_SAFE_INTEGER;\n try {\n for (var counters_1 = __values(counters), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n var counter = counters_1_1.value;\n if (counter > maxCounter) {\n maxCounter = counter;\n }\n if (counter < minCounter) {\n minCounter = counter;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return maxCounter < 10 * minCounter;\n }\n return false;\n };\n AbstractRSSReader.MAX_AVG_VARIANCE = 0.2;\n AbstractRSSReader.MAX_INDIVIDUAL_VARIANCE = 0.45;\n AbstractRSSReader.MIN_FINDER_PATTERN_RATIO = 9.5 / 12.0;\n AbstractRSSReader.MAX_FINDER_PATTERN_RATIO = 12.5 / 14.0;\n return AbstractRSSReader;\n}(OneDReader));\nexport default AbstractRSSReader;\n","var DataCharacter = /** @class */ (function () {\n function DataCharacter(value, checksumPortion) {\n this.value = value;\n this.checksumPortion = checksumPortion;\n }\n DataCharacter.prototype.getValue = function () {\n return this.value;\n };\n DataCharacter.prototype.getChecksumPortion = function () {\n return this.checksumPortion;\n };\n DataCharacter.prototype.toString = function () {\n return this.value + '(' + this.checksumPortion + ')';\n };\n DataCharacter.prototype.equals = function (o) {\n if (!(o instanceof DataCharacter)) {\n return false;\n }\n var that = o;\n return this.value === that.value && this.checksumPortion === that.checksumPortion;\n };\n DataCharacter.prototype.hashCode = function () {\n return this.value ^ this.checksumPortion;\n };\n return DataCharacter;\n}());\nexport default DataCharacter;\n","import ResultPoint from '../../ResultPoint';\nvar FinderPattern = /** @class */ (function () {\n function FinderPattern(value, startEnd, start, end, rowNumber) {\n this.value = value;\n this.startEnd = startEnd;\n this.value = value;\n this.startEnd = startEnd;\n this.resultPoints = new Array();\n this.resultPoints.push(new ResultPoint(start, rowNumber));\n this.resultPoints.push(new ResultPoint(end, rowNumber));\n }\n FinderPattern.prototype.getValue = function () {\n return this.value;\n };\n FinderPattern.prototype.getStartEnd = function () {\n return this.startEnd;\n };\n FinderPattern.prototype.getResultPoints = function () {\n return this.resultPoints;\n };\n FinderPattern.prototype.equals = function (o) {\n if (!(o instanceof FinderPattern)) {\n return false;\n }\n var that = o;\n return this.value === that.value;\n };\n FinderPattern.prototype.hashCode = function () {\n return this.value;\n };\n return FinderPattern;\n}());\nexport default FinderPattern;\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/**\n * RSS util functions.\n */\nvar RSSUtils = /** @class */ (function () {\n function RSSUtils() {\n }\n RSSUtils.getRSSvalue = function (widths, maxWidth, noNarrow) {\n var e_1, _a;\n var n = 0;\n try {\n for (var widths_1 = __values(widths), widths_1_1 = widths_1.next(); !widths_1_1.done; widths_1_1 = widths_1.next()) {\n var width = widths_1_1.value;\n n += width;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (widths_1_1 && !widths_1_1.done && (_a = widths_1.return)) _a.call(widths_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n var val = 0;\n var narrowMask = 0;\n var elements = widths.length;\n for (var bar = 0; bar < elements - 1; bar++) {\n var elmWidth = void 0;\n for (elmWidth = 1, narrowMask |= 1 << bar; elmWidth < widths[bar]; elmWidth++, narrowMask &= ~(1 << bar)) {\n var subVal = RSSUtils.combins(n - elmWidth - 1, elements - bar - 2);\n if (noNarrow && (narrowMask === 0) && (n - elmWidth - (elements - bar - 1) >= elements - bar - 1)) {\n subVal -= RSSUtils.combins(n - elmWidth - (elements - bar), elements - bar - 2);\n }\n if (elements - bar - 1 > 1) {\n var lessVal = 0;\n for (var mxwElement = n - elmWidth - (elements - bar - 2); mxwElement > maxWidth; mxwElement--) {\n lessVal += RSSUtils.combins(n - elmWidth - mxwElement - 1, elements - bar - 3);\n }\n subVal -= lessVal * (elements - 1 - bar);\n }\n else if (n - elmWidth > maxWidth) {\n subVal--;\n }\n val += subVal;\n }\n n -= elmWidth;\n }\n return val;\n };\n RSSUtils.combins = function (n, r) {\n var maxDenom;\n var minDenom;\n if (n - r > r) {\n minDenom = r;\n maxDenom = n - r;\n }\n else {\n minDenom = n - r;\n maxDenom = r;\n }\n var val = 1;\n var j = 1;\n for (var i = n; i > maxDenom; i--) {\n val *= i;\n if (j <= minDenom) {\n val /= j;\n j++;\n }\n }\n while ((j <= minDenom)) {\n val /= j;\n j++;\n }\n return val;\n };\n return RSSUtils;\n}());\nexport default RSSUtils;\n","import BitArray from '../../../common/BitArray';\nvar BitArrayBuilder = /** @class */ (function () {\n function BitArrayBuilder() {\n }\n BitArrayBuilder.buildBitArray = function (pairs) {\n var charNumber = pairs.length * 2 - 1;\n if (pairs[pairs.length - 1].getRightChar() == null) {\n charNumber -= 1;\n }\n var size = 12 * charNumber;\n var binary = new BitArray(size);\n var accPos = 0;\n var firstPair = pairs[0];\n var firstValue = firstPair.getRightChar().getValue();\n for (var i = 11; i >= 0; --i) {\n if ((firstValue & (1 << i)) !== 0) {\n binary.set(accPos);\n }\n accPos++;\n }\n for (var i = 1; i < pairs.length; ++i) {\n var currentPair = pairs[i];\n var leftValue = currentPair.getLeftChar().getValue();\n for (var j = 11; j >= 0; --j) {\n if ((leftValue & (1 << j)) !== 0) {\n binary.set(accPos);\n }\n accPos++;\n }\n if (currentPair.getRightChar() !== null) {\n var rightValue = currentPair.getRightChar().getValue();\n for (var j = 11; j >= 0; --j) {\n if ((rightValue & (1 << j)) !== 0) {\n binary.set(accPos);\n }\n accPos++;\n }\n }\n }\n return binary;\n };\n return BitArrayBuilder;\n}());\nexport default BitArrayBuilder;\n","var BlockParsedResult = /** @class */ (function () {\n function BlockParsedResult(finished, decodedInformation) {\n if (decodedInformation) {\n this.decodedInformation = null;\n }\n else {\n this.finished = finished;\n this.decodedInformation = decodedInformation;\n }\n }\n BlockParsedResult.prototype.getDecodedInformation = function () {\n return this.decodedInformation;\n };\n BlockParsedResult.prototype.isFinished = function () {\n return this.finished;\n };\n return BlockParsedResult;\n}());\nexport default BlockParsedResult;\n","var DecodedObject = /** @class */ (function () {\n function DecodedObject(newPosition) {\n this.newPosition = newPosition;\n }\n DecodedObject.prototype.getNewPosition = function () {\n return this.newPosition;\n };\n return DecodedObject;\n}());\nexport default DecodedObject;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport DecodedObject from './DecodedObject';\nvar DecodedChar = /** @class */ (function (_super) {\n __extends(DecodedChar, _super);\n function DecodedChar(newPosition, value) {\n var _this = _super.call(this, newPosition) || this;\n _this.value = value;\n return _this;\n }\n DecodedChar.prototype.getValue = function () {\n return this.value;\n };\n DecodedChar.prototype.isFNC1 = function () {\n return this.value === DecodedChar.FNC1;\n };\n DecodedChar.FNC1 = '$';\n return DecodedChar;\n}(DecodedObject));\nexport default DecodedChar;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport DecodedObject from './DecodedObject';\nvar DecodedInformation = /** @class */ (function (_super) {\n __extends(DecodedInformation, _super);\n function DecodedInformation(newPosition, newString, remainingValue) {\n var _this = _super.call(this, newPosition) || this;\n if (remainingValue) {\n _this.remaining = true;\n _this.remainingValue = _this.remainingValue;\n }\n else {\n _this.remaining = false;\n _this.remainingValue = 0;\n }\n _this.newString = newString;\n return _this;\n }\n DecodedInformation.prototype.getNewString = function () {\n return this.newString;\n };\n DecodedInformation.prototype.isRemaining = function () {\n return this.remaining;\n };\n DecodedInformation.prototype.getRemainingValue = function () {\n return this.remainingValue;\n };\n return DecodedInformation;\n}(DecodedObject));\nexport default DecodedInformation;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport FormatException from '../../../../FormatException';\nimport DecodedObject from './DecodedObject';\nvar DecodedNumeric = /** @class */ (function (_super) {\n __extends(DecodedNumeric, _super);\n function DecodedNumeric(newPosition, firstDigit, secondDigit) {\n var _this = _super.call(this, newPosition) || this;\n if (firstDigit < 0 || firstDigit > 10 || secondDigit < 0 || secondDigit > 10) {\n throw new FormatException();\n }\n _this.firstDigit = firstDigit;\n _this.secondDigit = secondDigit;\n return _this;\n }\n DecodedNumeric.prototype.getFirstDigit = function () {\n return this.firstDigit;\n };\n DecodedNumeric.prototype.getSecondDigit = function () {\n return this.secondDigit;\n };\n DecodedNumeric.prototype.getValue = function () {\n return this.firstDigit * 10 + this.secondDigit;\n };\n DecodedNumeric.prototype.isFirstDigitFNC1 = function () {\n return this.firstDigit === DecodedNumeric.FNC1;\n };\n DecodedNumeric.prototype.isSecondDigitFNC1 = function () {\n return this.secondDigit === DecodedNumeric.FNC1;\n };\n DecodedNumeric.prototype.isAnyFNC1 = function () {\n return this.firstDigit === DecodedNumeric.FNC1 || this.secondDigit === DecodedNumeric.FNC1;\n };\n DecodedNumeric.FNC1 = 10;\n return DecodedNumeric;\n}(DecodedObject));\nexport default DecodedNumeric;\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport NotFoundException from '../../../../NotFoundException';\nvar FieldParser = /** @class */ (function () {\n function FieldParser() {\n }\n FieldParser.parseFieldsInGeneralPurpose = function (rawInformation) {\n var e_1, _a, e_2, _b, e_3, _c, e_4, _d;\n if (!rawInformation) {\n return null;\n }\n // Processing 2-digit AIs\n if (rawInformation.length < 2) {\n throw new NotFoundException();\n }\n var firstTwoDigits = rawInformation.substring(0, 2);\n try {\n for (var _e = __values(FieldParser.TWO_DIGIT_DATA_LENGTH), _f = _e.next(); !_f.done; _f = _e.next()) {\n var dataLength = _f.value;\n if (dataLength[0] === firstTwoDigits) {\n if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n return FieldParser.processVariableAI(2, dataLength[2], rawInformation);\n }\n return FieldParser.processFixedAI(2, dataLength[1], rawInformation);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (rawInformation.length < 3) {\n throw new NotFoundException();\n }\n var firstThreeDigits = rawInformation.substring(0, 3);\n try {\n for (var _g = __values(FieldParser.THREE_DIGIT_DATA_LENGTH), _h = _g.next(); !_h.done; _h = _g.next()) {\n var dataLength = _h.value;\n if (dataLength[0] === firstThreeDigits) {\n if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n return FieldParser.processVariableAI(3, dataLength[2], rawInformation);\n }\n return FieldParser.processFixedAI(3, dataLength[1], rawInformation);\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n }\n finally { if (e_2) throw e_2.error; }\n }\n try {\n for (var _j = __values(FieldParser.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH), _k = _j.next(); !_k.done; _k = _j.next()) {\n var dataLength = _k.value;\n if (dataLength[0] === firstThreeDigits) {\n if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n return FieldParser.processVariableAI(4, dataLength[2], rawInformation);\n }\n return FieldParser.processFixedAI(4, dataLength[1], rawInformation);\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_k && !_k.done && (_c = _j.return)) _c.call(_j);\n }\n finally { if (e_3) throw e_3.error; }\n }\n if (rawInformation.length < 4) {\n throw new NotFoundException();\n }\n var firstFourDigits = rawInformation.substring(0, 4);\n try {\n for (var _l = __values(FieldParser.FOUR_DIGIT_DATA_LENGTH), _m = _l.next(); !_m.done; _m = _l.next()) {\n var dataLength = _m.value;\n if (dataLength[0] === firstFourDigits) {\n if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n return FieldParser.processVariableAI(4, dataLength[2], rawInformation);\n }\n return FieldParser.processFixedAI(4, dataLength[1], rawInformation);\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_m && !_m.done && (_d = _l.return)) _d.call(_l);\n }\n finally { if (e_4) throw e_4.error; }\n }\n throw new NotFoundException();\n };\n FieldParser.processFixedAI = function (aiSize, fieldSize, rawInformation) {\n if (rawInformation.length < aiSize) {\n throw new NotFoundException();\n }\n var ai = rawInformation.substring(0, aiSize);\n if (rawInformation.length < aiSize + fieldSize) {\n throw new NotFoundException();\n }\n var field = rawInformation.substring(aiSize, aiSize + fieldSize);\n var remaining = rawInformation.substring(aiSize + fieldSize);\n var result = '(' + ai + ')' + field;\n var parsedAI = FieldParser.parseFieldsInGeneralPurpose(remaining);\n return parsedAI == null ? result : result + parsedAI;\n };\n FieldParser.processVariableAI = function (aiSize, variableFieldSize, rawInformation) {\n var ai = rawInformation.substring(0, aiSize);\n var maxSize;\n if (rawInformation.length < aiSize + variableFieldSize) {\n maxSize = rawInformation.length;\n }\n else {\n maxSize = aiSize + variableFieldSize;\n }\n var field = rawInformation.substring(aiSize, maxSize);\n var remaining = rawInformation.substring(maxSize);\n var result = '(' + ai + ')' + field;\n var parsedAI = FieldParser.parseFieldsInGeneralPurpose(remaining);\n return parsedAI == null ? result : result + parsedAI;\n };\n FieldParser.VARIABLE_LENGTH = [];\n FieldParser.TWO_DIGIT_DATA_LENGTH = [\n ['00', 18],\n ['01', 14],\n ['02', 14],\n ['10', FieldParser.VARIABLE_LENGTH, 20],\n ['11', 6],\n ['12', 6],\n ['13', 6],\n ['15', 6],\n ['17', 6],\n ['20', 2],\n ['21', FieldParser.VARIABLE_LENGTH, 20],\n ['22', FieldParser.VARIABLE_LENGTH, 29],\n ['30', FieldParser.VARIABLE_LENGTH, 8],\n ['37', FieldParser.VARIABLE_LENGTH, 8],\n // internal company codes\n ['90', FieldParser.VARIABLE_LENGTH, 30],\n ['91', FieldParser.VARIABLE_LENGTH, 30],\n ['92', FieldParser.VARIABLE_LENGTH, 30],\n ['93', FieldParser.VARIABLE_LENGTH, 30],\n ['94', FieldParser.VARIABLE_LENGTH, 30],\n ['95', FieldParser.VARIABLE_LENGTH, 30],\n ['96', FieldParser.VARIABLE_LENGTH, 30],\n ['97', FieldParser.VARIABLE_LENGTH, 3],\n ['98', FieldParser.VARIABLE_LENGTH, 30],\n ['99', FieldParser.VARIABLE_LENGTH, 30],\n ];\n FieldParser.THREE_DIGIT_DATA_LENGTH = [\n // Same format as above\n ['240', FieldParser.VARIABLE_LENGTH, 30],\n ['241', FieldParser.VARIABLE_LENGTH, 30],\n ['242', FieldParser.VARIABLE_LENGTH, 6],\n ['250', FieldParser.VARIABLE_LENGTH, 30],\n ['251', FieldParser.VARIABLE_LENGTH, 30],\n ['253', FieldParser.VARIABLE_LENGTH, 17],\n ['254', FieldParser.VARIABLE_LENGTH, 20],\n ['400', FieldParser.VARIABLE_LENGTH, 30],\n ['401', FieldParser.VARIABLE_LENGTH, 30],\n ['402', 17],\n ['403', FieldParser.VARIABLE_LENGTH, 30],\n ['410', 13],\n ['411', 13],\n ['412', 13],\n ['413', 13],\n ['414', 13],\n ['420', FieldParser.VARIABLE_LENGTH, 20],\n ['421', FieldParser.VARIABLE_LENGTH, 15],\n ['422', 3],\n ['423', FieldParser.VARIABLE_LENGTH, 15],\n ['424', 3],\n ['425', 3],\n ['426', 3],\n ];\n FieldParser.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH = [\n // Same format as above\n ['310', 6],\n ['311', 6],\n ['312', 6],\n ['313', 6],\n ['314', 6],\n ['315', 6],\n ['316', 6],\n ['320', 6],\n ['321', 6],\n ['322', 6],\n ['323', 6],\n ['324', 6],\n ['325', 6],\n ['326', 6],\n ['327', 6],\n ['328', 6],\n ['329', 6],\n ['330', 6],\n ['331', 6],\n ['332', 6],\n ['333', 6],\n ['334', 6],\n ['335', 6],\n ['336', 6],\n ['340', 6],\n ['341', 6],\n ['342', 6],\n ['343', 6],\n ['344', 6],\n ['345', 6],\n ['346', 6],\n ['347', 6],\n ['348', 6],\n ['349', 6],\n ['350', 6],\n ['351', 6],\n ['352', 6],\n ['353', 6],\n ['354', 6],\n ['355', 6],\n ['356', 6],\n ['357', 6],\n ['360', 6],\n ['361', 6],\n ['362', 6],\n ['363', 6],\n ['364', 6],\n ['365', 6],\n ['366', 6],\n ['367', 6],\n ['368', 6],\n ['369', 6],\n ['390', FieldParser.VARIABLE_LENGTH, 15],\n ['391', FieldParser.VARIABLE_LENGTH, 18],\n ['392', FieldParser.VARIABLE_LENGTH, 15],\n ['393', FieldParser.VARIABLE_LENGTH, 18],\n ['703', FieldParser.VARIABLE_LENGTH, 30],\n ];\n FieldParser.FOUR_DIGIT_DATA_LENGTH = [\n // Same format as above\n ['7001', 13],\n ['7002', FieldParser.VARIABLE_LENGTH, 30],\n ['7003', 10],\n ['8001', 14],\n ['8002', FieldParser.VARIABLE_LENGTH, 20],\n ['8003', FieldParser.VARIABLE_LENGTH, 30],\n ['8004', FieldParser.VARIABLE_LENGTH, 30],\n ['8005', 6],\n ['8006', 18],\n ['8007', FieldParser.VARIABLE_LENGTH, 30],\n ['8008', FieldParser.VARIABLE_LENGTH, 12],\n ['8018', 18],\n ['8020', FieldParser.VARIABLE_LENGTH, 25],\n ['8100', 6],\n ['8101', 10],\n ['8102', 2],\n ['8110', FieldParser.VARIABLE_LENGTH, 70],\n ['8200', FieldParser.VARIABLE_LENGTH, 70],\n ];\n return FieldParser;\n}());\nexport default FieldParser;\n","import FormatException from '../../../../FormatException';\nimport IllegalStateException from '../../../../IllegalStateException';\nimport StringBuilder from '../../../../util/StringBuilder';\nimport BlockParsedResult from './BlockParsedResult';\nimport DecodedChar from './DecodedChar';\nimport DecodedInformation from './DecodedInformation';\nimport DecodedNumeric from './DecodedNumeric';\nimport FieldParser from './FieldParser';\nvar GeneralAppIdDecoder = /** @class */ (function () {\n function GeneralAppIdDecoder(information) {\n this.buffer = new StringBuilder();\n this.information = information;\n }\n GeneralAppIdDecoder.prototype.decodeAllCodes = function (buff, initialPosition) {\n var currentPosition = initialPosition;\n var remaining = null;\n do {\n var info = this.decodeGeneralPurposeField(currentPosition, remaining);\n var parsedFields = FieldParser.parseFieldsInGeneralPurpose(info.getNewString());\n if (parsedFields != null) {\n buff.append(parsedFields);\n }\n if (info.isRemaining()) {\n remaining = '' + info.getRemainingValue();\n }\n else {\n remaining = null;\n }\n if (currentPosition === info.getNewPosition()) { // No step forward!\n break;\n }\n currentPosition = info.getNewPosition();\n } while (true);\n return buff.toString();\n };\n GeneralAppIdDecoder.prototype.isStillNumeric = function (pos) {\n // It's numeric if it still has 7 positions\n // and one of the first 4 bits is \"1\".\n if (pos + 7 > this.information.getSize()) {\n return pos + 4 <= this.information.getSize();\n }\n for (var i = pos; i < pos + 3; ++i) {\n if (this.information.get(i)) {\n return true;\n }\n }\n return this.information.get(pos + 3);\n };\n GeneralAppIdDecoder.prototype.decodeNumeric = function (pos) {\n if (pos + 7 > this.information.getSize()) {\n var numeric_1 = this.extractNumericValueFromBitArray(pos, 4);\n if (numeric_1 === 0) {\n return new DecodedNumeric(this.information.getSize(), DecodedNumeric.FNC1, DecodedNumeric.FNC1);\n }\n return new DecodedNumeric(this.information.getSize(), numeric_1 - 1, DecodedNumeric.FNC1);\n }\n var numeric = this.extractNumericValueFromBitArray(pos, 7);\n var digit1 = (numeric - 8) / 11;\n var digit2 = (numeric - 8) % 11;\n return new DecodedNumeric(pos + 7, digit1, digit2);\n };\n GeneralAppIdDecoder.prototype.extractNumericValueFromBitArray = function (pos, bits) {\n return GeneralAppIdDecoder.extractNumericValueFromBitArray(this.information, pos, bits);\n };\n GeneralAppIdDecoder.extractNumericValueFromBitArray = function (information, pos, bits) {\n var value = 0;\n for (var i = 0; i < bits; ++i) {\n if (information.get(pos + i)) {\n value |= 1 << (bits - i - 1);\n }\n }\n return value;\n };\n GeneralAppIdDecoder.prototype.decodeGeneralPurposeField = function (pos, remaining) {\n // this.buffer.setLength(0);\n this.buffer.setLengthToZero();\n if (remaining != null) {\n this.buffer.append(remaining);\n }\n this.current.setPosition(pos);\n var lastDecoded = this.parseBlocks();\n if (lastDecoded != null && lastDecoded.isRemaining()) {\n return new DecodedInformation(this.current.getPosition(), this.buffer.toString(), lastDecoded.getRemainingValue());\n }\n return new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n };\n GeneralAppIdDecoder.prototype.parseBlocks = function () {\n var isFinished;\n var result;\n do {\n var initialPosition = this.current.getPosition();\n if (this.current.isAlpha()) {\n result = this.parseAlphaBlock();\n isFinished = result.isFinished();\n }\n else if (this.current.isIsoIec646()) {\n result = this.parseIsoIec646Block();\n isFinished = result.isFinished();\n }\n else { // it must be numeric\n result = this.parseNumericBlock();\n isFinished = result.isFinished();\n }\n var positionChanged = initialPosition !== this.current.getPosition();\n if (!positionChanged && !isFinished) {\n break;\n }\n } while (!isFinished);\n return result.getDecodedInformation();\n };\n GeneralAppIdDecoder.prototype.parseNumericBlock = function () {\n while (this.isStillNumeric(this.current.getPosition())) {\n var numeric = this.decodeNumeric(this.current.getPosition());\n this.current.setPosition(numeric.getNewPosition());\n if (numeric.isFirstDigitFNC1()) {\n var information = void 0;\n if (numeric.isSecondDigitFNC1()) {\n information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n }\n else {\n information = new DecodedInformation(this.current.getPosition(), this.buffer.toString(), numeric.getSecondDigit());\n }\n return new BlockParsedResult(true, information);\n }\n this.buffer.append(numeric.getFirstDigit());\n if (numeric.isSecondDigitFNC1()) {\n var information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n return new BlockParsedResult(true, information);\n }\n this.buffer.append(numeric.getSecondDigit());\n }\n if (this.isNumericToAlphaNumericLatch(this.current.getPosition())) {\n this.current.setAlpha();\n this.current.incrementPosition(4);\n }\n return new BlockParsedResult(false);\n };\n GeneralAppIdDecoder.prototype.parseIsoIec646Block = function () {\n while (this.isStillIsoIec646(this.current.getPosition())) {\n var iso = this.decodeIsoIec646(this.current.getPosition());\n this.current.setPosition(iso.getNewPosition());\n if (iso.isFNC1()) {\n var information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n return new BlockParsedResult(true, information);\n }\n this.buffer.append(iso.getValue());\n }\n if (this.isAlphaOr646ToNumericLatch(this.current.getPosition())) {\n this.current.incrementPosition(3);\n this.current.setNumeric();\n }\n else if (this.isAlphaTo646ToAlphaLatch(this.current.getPosition())) {\n if (this.current.getPosition() + 5 < this.information.getSize()) {\n this.current.incrementPosition(5);\n }\n else {\n this.current.setPosition(this.information.getSize());\n }\n this.current.setAlpha();\n }\n return new BlockParsedResult(false);\n };\n GeneralAppIdDecoder.prototype.parseAlphaBlock = function () {\n while (this.isStillAlpha(this.current.getPosition())) {\n var alpha = this.decodeAlphanumeric(this.current.getPosition());\n this.current.setPosition(alpha.getNewPosition());\n if (alpha.isFNC1()) {\n var information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n return new BlockParsedResult(true, information); // end of the char block\n }\n this.buffer.append(alpha.getValue());\n }\n if (this.isAlphaOr646ToNumericLatch(this.current.getPosition())) {\n this.current.incrementPosition(3);\n this.current.setNumeric();\n }\n else if (this.isAlphaTo646ToAlphaLatch(this.current.getPosition())) {\n if (this.current.getPosition() + 5 < this.information.getSize()) {\n this.current.incrementPosition(5);\n }\n else {\n this.current.setPosition(this.information.getSize());\n }\n this.current.setIsoIec646();\n }\n return new BlockParsedResult(false);\n };\n GeneralAppIdDecoder.prototype.isStillIsoIec646 = function (pos) {\n if (pos + 5 > this.information.getSize()) {\n return false;\n }\n var fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n if (fiveBitValue >= 5 && fiveBitValue < 16) {\n return true;\n }\n if (pos + 7 > this.information.getSize()) {\n return false;\n }\n var sevenBitValue = this.extractNumericValueFromBitArray(pos, 7);\n if (sevenBitValue >= 64 && sevenBitValue < 116) {\n return true;\n }\n if (pos + 8 > this.information.getSize()) {\n return false;\n }\n var eightBitValue = this.extractNumericValueFromBitArray(pos, 8);\n return eightBitValue >= 232 && eightBitValue < 253;\n };\n GeneralAppIdDecoder.prototype.decodeIsoIec646 = function (pos) {\n var fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n if (fiveBitValue === 15) {\n return new DecodedChar(pos + 5, DecodedChar.FNC1);\n }\n if (fiveBitValue >= 5 && fiveBitValue < 15) {\n return new DecodedChar(pos + 5, ('0' + (fiveBitValue - 5)));\n }\n var sevenBitValue = this.extractNumericValueFromBitArray(pos, 7);\n if (sevenBitValue >= 64 && sevenBitValue < 90) {\n return new DecodedChar(pos + 7, ('' + (sevenBitValue + 1)));\n }\n if (sevenBitValue >= 90 && sevenBitValue < 116) {\n return new DecodedChar(pos + 7, ('' + (sevenBitValue + 7)));\n }\n var eightBitValue = this.extractNumericValueFromBitArray(pos, 8);\n var c;\n switch (eightBitValue) {\n case 232:\n c = '!';\n break;\n case 233:\n c = '\"';\n break;\n case 234:\n c = '%';\n break;\n case 235:\n c = '&';\n break;\n case 236:\n c = '\\'';\n break;\n case 237:\n c = '(';\n break;\n case 238:\n c = ')';\n break;\n case 239:\n c = '*';\n break;\n case 240:\n c = '+';\n break;\n case 241:\n c = ',';\n break;\n case 242:\n c = '-';\n break;\n case 243:\n c = '.';\n break;\n case 244:\n c = '/';\n break;\n case 245:\n c = ':';\n break;\n case 246:\n c = ';';\n break;\n case 247:\n c = '<';\n break;\n case 248:\n c = '=';\n break;\n case 249:\n c = '>';\n break;\n case 250:\n c = '?';\n break;\n case 251:\n c = '_';\n break;\n case 252:\n c = ' ';\n break;\n default:\n throw new FormatException();\n }\n return new DecodedChar(pos + 8, c);\n };\n GeneralAppIdDecoder.prototype.isStillAlpha = function (pos) {\n if (pos + 5 > this.information.getSize()) {\n return false;\n }\n // We now check if it's a valid 5-bit value (0..9 and FNC1)\n var fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n if (fiveBitValue >= 5 && fiveBitValue < 16) {\n return true;\n }\n if (pos + 6 > this.information.getSize()) {\n return false;\n }\n var sixBitValue = this.extractNumericValueFromBitArray(pos, 6);\n return sixBitValue >= 16 && sixBitValue < 63; // 63 not included\n };\n GeneralAppIdDecoder.prototype.decodeAlphanumeric = function (pos) {\n var fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n if (fiveBitValue === 15) {\n return new DecodedChar(pos + 5, DecodedChar.FNC1);\n }\n if (fiveBitValue >= 5 && fiveBitValue < 15) {\n return new DecodedChar(pos + 5, ('0' + (fiveBitValue - 5)));\n }\n var sixBitValue = this.extractNumericValueFromBitArray(pos, 6);\n if (sixBitValue >= 32 && sixBitValue < 58) {\n return new DecodedChar(pos + 6, ('' + (sixBitValue + 33)));\n }\n var c;\n switch (sixBitValue) {\n case 58:\n c = '*';\n break;\n case 59:\n c = ',';\n break;\n case 60:\n c = '-';\n break;\n case 61:\n c = '.';\n break;\n case 62:\n c = '/';\n break;\n default:\n throw new IllegalStateException('Decoding invalid alphanumeric value: ' + sixBitValue);\n }\n return new DecodedChar(pos + 6, c);\n };\n GeneralAppIdDecoder.prototype.isAlphaTo646ToAlphaLatch = function (pos) {\n if (pos + 1 > this.information.getSize()) {\n return false;\n }\n for (var i = 0; i < 5 && i + pos < this.information.getSize(); ++i) {\n if (i === 2) {\n if (!this.information.get(pos + 2)) {\n return false;\n }\n }\n else if (this.information.get(pos + i)) {\n return false;\n }\n }\n return true;\n };\n GeneralAppIdDecoder.prototype.isAlphaOr646ToNumericLatch = function (pos) {\n // Next is alphanumeric if there are 3 positions and they are all zeros\n if (pos + 3 > this.information.getSize()) {\n return false;\n }\n for (var i = pos; i < pos + 3; ++i) {\n if (this.information.get(i)) {\n return false;\n }\n }\n return true;\n };\n GeneralAppIdDecoder.prototype.isNumericToAlphaNumericLatch = function (pos) {\n // Next is alphanumeric if there are 4 positions and they are all zeros, or\n // if there is a subset of this just before the end of the symbol\n if (pos + 1 > this.information.getSize()) {\n return false;\n }\n for (var i = 0; i < 4 && i + pos < this.information.getSize(); ++i) {\n if (this.information.get(pos + i)) {\n return false;\n }\n }\n return true;\n };\n return GeneralAppIdDecoder;\n}());\nexport default GeneralAppIdDecoder;\n","import GeneralAppIdDecoder from './GeneralAppIdDecoder';\nvar AbstractExpandedDecoder = /** @class */ (function () {\n function AbstractExpandedDecoder(information) {\n this.information = information;\n this.generalDecoder = new GeneralAppIdDecoder(information);\n }\n AbstractExpandedDecoder.prototype.getInformation = function () {\n return this.information;\n };\n AbstractExpandedDecoder.prototype.getGeneralDecoder = function () {\n return this.generalDecoder;\n };\n return AbstractExpandedDecoder;\n}());\nexport default AbstractExpandedDecoder;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport AbstractExpandedDecoder from './AbstractExpandedDecoder';\nvar AI01decoder = /** @class */ (function (_super) {\n __extends(AI01decoder, _super);\n function AI01decoder(information) {\n return _super.call(this, information) || this;\n }\n AI01decoder.prototype.encodeCompressedGtin = function (buf, currentPos) {\n buf.append('(01)');\n var initialPosition = buf.length();\n buf.append('9');\n this.encodeCompressedGtinWithoutAI(buf, currentPos, initialPosition);\n };\n AI01decoder.prototype.encodeCompressedGtinWithoutAI = function (buf, currentPos, initialBufferPosition) {\n for (var i = 0; i < 4; ++i) {\n var currentBlock = this.getGeneralDecoder().extractNumericValueFromBitArray(currentPos + 10 * i, 10);\n if (currentBlock / 100 === 0) {\n buf.append('0');\n }\n if (currentBlock / 10 === 0) {\n buf.append('0');\n }\n buf.append(currentBlock);\n }\n AI01decoder.appendCheckDigit(buf, initialBufferPosition);\n };\n AI01decoder.appendCheckDigit = function (buf, currentPos) {\n var checkDigit = 0;\n for (var i = 0; i < 13; i++) {\n // let digit = buf.charAt(i + currentPos) - '0';\n // To be checked\n var digit = buf.charAt(i + currentPos).charCodeAt(0) - '0'.charCodeAt(0);\n checkDigit += (i & 0x01) === 0 ? 3 * digit : digit;\n }\n checkDigit = 10 - (checkDigit % 10);\n if (checkDigit === 10) {\n checkDigit = 0;\n }\n buf.append(checkDigit);\n };\n AI01decoder.GTIN_SIZE = 40;\n return AI01decoder;\n}(AbstractExpandedDecoder));\nexport default AI01decoder;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport AI01decoder from './AI01decoder';\nimport StringBuilder from '../../../../util/StringBuilder';\nvar AI01AndOtherAIs = /** @class */ (function (_super) {\n __extends(AI01AndOtherAIs, _super);\n // the second one is the encodation method, and the other two are for the variable length\n function AI01AndOtherAIs(information) {\n return _super.call(this, information) || this;\n }\n AI01AndOtherAIs.prototype.parseInformation = function () {\n var buff = new StringBuilder();\n buff.append('(01)');\n var initialGtinPosition = buff.length();\n var firstGtinDigit = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01AndOtherAIs.HEADER_SIZE, 4);\n buff.append(firstGtinDigit);\n this.encodeCompressedGtinWithoutAI(buff, AI01AndOtherAIs.HEADER_SIZE + 4, initialGtinPosition);\n return this.getGeneralDecoder().decodeAllCodes(buff, AI01AndOtherAIs.HEADER_SIZE + 44);\n };\n AI01AndOtherAIs.HEADER_SIZE = 1 + 1 + 2; // first bit encodes the linkage flag,\n return AI01AndOtherAIs;\n}(AI01decoder));\nexport default AI01AndOtherAIs;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport StringBuilder from '../../../../util/StringBuilder';\nimport AbstractExpandedDecoder from './AbstractExpandedDecoder';\nvar AnyAIDecoder = /** @class */ (function (_super) {\n __extends(AnyAIDecoder, _super);\n function AnyAIDecoder(information) {\n return _super.call(this, information) || this;\n }\n AnyAIDecoder.prototype.parseInformation = function () {\n var buf = new StringBuilder();\n return this.getGeneralDecoder().decodeAllCodes(buf, AnyAIDecoder.HEADER_SIZE);\n };\n AnyAIDecoder.HEADER_SIZE = 2 + 1 + 2;\n return AnyAIDecoder;\n}(AbstractExpandedDecoder));\nexport default AnyAIDecoder;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport AI01decoder from './AI01decoder';\nvar AI01weightDecoder = /** @class */ (function (_super) {\n __extends(AI01weightDecoder, _super);\n function AI01weightDecoder(information) {\n return _super.call(this, information) || this;\n }\n AI01weightDecoder.prototype.encodeCompressedWeight = function (buf, currentPos, weightSize) {\n var originalWeightNumeric = this.getGeneralDecoder().extractNumericValueFromBitArray(currentPos, weightSize);\n this.addWeightCode(buf, originalWeightNumeric);\n var weightNumeric = this.checkWeight(originalWeightNumeric);\n var currentDivisor = 100000;\n for (var i = 0; i < 5; ++i) {\n if (weightNumeric / currentDivisor === 0) {\n buf.append('0');\n }\n currentDivisor /= 10;\n }\n buf.append(weightNumeric);\n };\n return AI01weightDecoder;\n}(AI01decoder));\nexport default AI01weightDecoder;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport AI01weightDecoder from './AI01weightDecoder';\nimport StringBuilder from '../../../../util/StringBuilder';\nimport NotFoundException from '../../../../NotFoundException';\nvar AI013x0xDecoder = /** @class */ (function (_super) {\n __extends(AI013x0xDecoder, _super);\n function AI013x0xDecoder(information) {\n return _super.call(this, information) || this;\n }\n AI013x0xDecoder.prototype.parseInformation = function () {\n if (this.getInformation().getSize() !==\n AI013x0xDecoder.HEADER_SIZE +\n AI01weightDecoder.GTIN_SIZE +\n AI013x0xDecoder.WEIGHT_SIZE) {\n throw new NotFoundException();\n }\n var buf = new StringBuilder();\n this.encodeCompressedGtin(buf, AI013x0xDecoder.HEADER_SIZE);\n this.encodeCompressedWeight(buf, AI013x0xDecoder.HEADER_SIZE + AI01weightDecoder.GTIN_SIZE, AI013x0xDecoder.WEIGHT_SIZE);\n return buf.toString();\n };\n AI013x0xDecoder.HEADER_SIZE = 4 + 1;\n AI013x0xDecoder.WEIGHT_SIZE = 15;\n return AI013x0xDecoder;\n}(AI01weightDecoder));\nexport default AI013x0xDecoder;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport AI013x0xDecoder from './AI013x0xDecoder';\nvar AI013103decoder = /** @class */ (function (_super) {\n __extends(AI013103decoder, _super);\n function AI013103decoder(information) {\n return _super.call(this, information) || this;\n }\n AI013103decoder.prototype.addWeightCode = function (buf, weight) {\n buf.append('(3103)');\n };\n AI013103decoder.prototype.checkWeight = function (weight) {\n return weight;\n };\n return AI013103decoder;\n}(AI013x0xDecoder));\nexport default AI013103decoder;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport AI013x0xDecoder from './AI013x0xDecoder';\nvar AI01320xDecoder = /** @class */ (function (_super) {\n __extends(AI01320xDecoder, _super);\n function AI01320xDecoder(information) {\n return _super.call(this, information) || this;\n }\n AI01320xDecoder.prototype.addWeightCode = function (buf, weight) {\n if (weight < 10000) {\n buf.append('(3202)');\n }\n else {\n buf.append('(3203)');\n }\n };\n AI01320xDecoder.prototype.checkWeight = function (weight) {\n if (weight < 10000) {\n return weight;\n }\n return weight - 10000;\n };\n return AI01320xDecoder;\n}(AI013x0xDecoder));\nexport default AI01320xDecoder;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport AI01decoder from './AI01decoder';\nimport NotFoundException from '../../../../NotFoundException';\nimport StringBuilder from '../../../../util/StringBuilder';\nvar AI01392xDecoder = /** @class */ (function (_super) {\n __extends(AI01392xDecoder, _super);\n function AI01392xDecoder(information) {\n return _super.call(this, information) || this;\n }\n AI01392xDecoder.prototype.parseInformation = function () {\n if (this.getInformation().getSize() < AI01392xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE) {\n throw new NotFoundException();\n }\n var buf = new StringBuilder();\n this.encodeCompressedGtin(buf, AI01392xDecoder.HEADER_SIZE);\n var lastAIdigit = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01392xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE, AI01392xDecoder.LAST_DIGIT_SIZE);\n buf.append('(392');\n buf.append(lastAIdigit);\n buf.append(')');\n var decodedInformation = this.getGeneralDecoder().decodeGeneralPurposeField(AI01392xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE + AI01392xDecoder.LAST_DIGIT_SIZE, null);\n buf.append(decodedInformation.getNewString());\n return buf.toString();\n };\n AI01392xDecoder.HEADER_SIZE = 5 + 1 + 2;\n AI01392xDecoder.LAST_DIGIT_SIZE = 2;\n return AI01392xDecoder;\n}(AI01decoder));\nexport default AI01392xDecoder;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport AI01decoder from './AI01decoder';\nimport NotFoundException from '../../../../NotFoundException';\nimport StringBuilder from '../../../../util/StringBuilder';\nvar AI01393xDecoder = /** @class */ (function (_super) {\n __extends(AI01393xDecoder, _super);\n function AI01393xDecoder(information) {\n return _super.call(this, information) || this;\n }\n AI01393xDecoder.prototype.parseInformation = function () {\n if (this.getInformation().getSize() <\n AI01393xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE) {\n throw new NotFoundException();\n }\n var buf = new StringBuilder();\n this.encodeCompressedGtin(buf, AI01393xDecoder.HEADER_SIZE);\n var lastAIdigit = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01393xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE, AI01393xDecoder.LAST_DIGIT_SIZE);\n buf.append('(393');\n buf.append(lastAIdigit);\n buf.append(')');\n var firstThreeDigits = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01393xDecoder.HEADER_SIZE +\n AI01decoder.GTIN_SIZE +\n AI01393xDecoder.LAST_DIGIT_SIZE, AI01393xDecoder.FIRST_THREE_DIGITS_SIZE);\n if (firstThreeDigits / 100 === 0) {\n buf.append('0');\n }\n if (firstThreeDigits / 10 === 0) {\n buf.append('0');\n }\n buf.append(firstThreeDigits);\n var generalInformation = this.getGeneralDecoder().decodeGeneralPurposeField(AI01393xDecoder.HEADER_SIZE +\n AI01decoder.GTIN_SIZE +\n AI01393xDecoder.LAST_DIGIT_SIZE +\n AI01393xDecoder.FIRST_THREE_DIGITS_SIZE, null);\n buf.append(generalInformation.getNewString());\n return buf.toString();\n };\n AI01393xDecoder.HEADER_SIZE = 5 + 1 + 2;\n AI01393xDecoder.LAST_DIGIT_SIZE = 2;\n AI01393xDecoder.FIRST_THREE_DIGITS_SIZE = 10;\n return AI01393xDecoder;\n}(AI01decoder));\nexport default AI01393xDecoder;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport AI01weightDecoder from './AI01weightDecoder';\nimport NotFoundException from '../../../../NotFoundException';\nimport StringBuilder from '../../../../util/StringBuilder';\nvar AI013x0x1xDecoder = /** @class */ (function (_super) {\n __extends(AI013x0x1xDecoder, _super);\n function AI013x0x1xDecoder(information, firstAIdigits, dateCode) {\n var _this = _super.call(this, information) || this;\n _this.dateCode = dateCode;\n _this.firstAIdigits = firstAIdigits;\n return _this;\n }\n AI013x0x1xDecoder.prototype.parseInformation = function () {\n if (this.getInformation().getSize() !==\n AI013x0x1xDecoder.HEADER_SIZE +\n AI013x0x1xDecoder.GTIN_SIZE +\n AI013x0x1xDecoder.WEIGHT_SIZE +\n AI013x0x1xDecoder.DATE_SIZE) {\n throw new NotFoundException();\n }\n var buf = new StringBuilder();\n this.encodeCompressedGtin(buf, AI013x0x1xDecoder.HEADER_SIZE);\n this.encodeCompressedWeight(buf, AI013x0x1xDecoder.HEADER_SIZE + AI013x0x1xDecoder.GTIN_SIZE, AI013x0x1xDecoder.WEIGHT_SIZE);\n this.encodeCompressedDate(buf, AI013x0x1xDecoder.HEADER_SIZE +\n AI013x0x1xDecoder.GTIN_SIZE +\n AI013x0x1xDecoder.WEIGHT_SIZE);\n return buf.toString();\n };\n AI013x0x1xDecoder.prototype.encodeCompressedDate = function (buf, currentPos) {\n var numericDate = this.getGeneralDecoder().extractNumericValueFromBitArray(currentPos, AI013x0x1xDecoder.DATE_SIZE);\n if (numericDate === 38400) {\n return;\n }\n buf.append('(');\n buf.append(this.dateCode);\n buf.append(')');\n var day = numericDate % 32;\n numericDate /= 32;\n var month = (numericDate % 12) + 1;\n numericDate /= 12;\n var year = numericDate;\n if (year / 10 === 0) {\n buf.append('0');\n }\n buf.append(year);\n if (month / 10 === 0) {\n buf.append('0');\n }\n buf.append(month);\n if (day / 10 === 0) {\n buf.append('0');\n }\n buf.append(day);\n };\n AI013x0x1xDecoder.prototype.addWeightCode = function (buf, weight) {\n buf.append('(');\n buf.append(this.firstAIdigits);\n buf.append(weight / 100000);\n buf.append(')');\n };\n AI013x0x1xDecoder.prototype.checkWeight = function (weight) {\n return weight % 100000;\n };\n AI013x0x1xDecoder.HEADER_SIZE = 7 + 1;\n AI013x0x1xDecoder.WEIGHT_SIZE = 20;\n AI013x0x1xDecoder.DATE_SIZE = 16;\n return AI013x0x1xDecoder;\n}(AI01weightDecoder));\nexport default AI013x0x1xDecoder;\n","var ExpandedPair = /** @class */ (function () {\n function ExpandedPair(leftChar, rightChar, finderPatter, mayBeLast) {\n this.leftchar = leftChar;\n this.rightchar = rightChar;\n this.finderpattern = finderPatter;\n this.maybeLast = mayBeLast;\n }\n ExpandedPair.prototype.mayBeLast = function () {\n return this.maybeLast;\n };\n ExpandedPair.prototype.getLeftChar = function () {\n return this.leftchar;\n };\n ExpandedPair.prototype.getRightChar = function () {\n return this.rightchar;\n };\n ExpandedPair.prototype.getFinderPattern = function () {\n return this.finderpattern;\n };\n ExpandedPair.prototype.mustBeLast = function () {\n return this.rightchar == null;\n };\n ExpandedPair.prototype.toString = function () {\n return '[ ' + this.leftchar + ', ' + this.rightchar + ' : ' + (this.finderpattern == null ? 'null' : this.finderpattern.getValue()) + ' ]';\n };\n ExpandedPair.equals = function (o1, o2) {\n if (!(o1 instanceof ExpandedPair)) {\n return false;\n }\n return ExpandedPair.equalsOrNull(o1.leftchar, o2.leftchar) &&\n ExpandedPair.equalsOrNull(o1.rightchar, o2.rightchar) &&\n ExpandedPair.equalsOrNull(o1.finderpattern, o2.finderpattern);\n };\n ExpandedPair.equalsOrNull = function (o1, o2) {\n return o1 === null ? o2 === null : ExpandedPair.equals(o1, o2);\n };\n ExpandedPair.prototype.hashCode = function () {\n // return ExpandedPair.hashNotNull(leftChar) ^ hashNotNull(rightChar) ^ hashNotNull(finderPattern);\n var value = this.leftchar.getValue() ^ this.rightchar.getValue() ^ this.finderpattern.getValue();\n return value;\n };\n return ExpandedPair;\n}());\nexport default ExpandedPair;\n","var ExpandedRow = /** @class */ (function () {\n function ExpandedRow(pairs, rowNumber, wasReversed) {\n this.pairs = pairs;\n this.rowNumber = rowNumber;\n this.wasReversed = wasReversed;\n }\n ExpandedRow.prototype.getPairs = function () {\n return this.pairs;\n };\n ExpandedRow.prototype.getRowNumber = function () {\n return this.rowNumber;\n };\n ExpandedRow.prototype.isReversed = function () {\n return this.wasReversed;\n };\n // check implementation\n ExpandedRow.prototype.isEquivalent = function (otherPairs) {\n return this.checkEqualitity(this, otherPairs);\n };\n // @Override\n ExpandedRow.prototype.toString = function () {\n return '{ ' + this.pairs + ' }';\n };\n /**\n * Two rows are equal if they contain the same pairs in the same order.\n */\n // @Override\n // check implementation\n ExpandedRow.prototype.equals = function (o1, o2) {\n if (!(o1 instanceof ExpandedRow)) {\n return false;\n }\n return this.checkEqualitity(o1, o2) && o1.wasReversed === o2.wasReversed;\n };\n ExpandedRow.prototype.checkEqualitity = function (pair1, pair2) {\n if (!pair1 || !pair2)\n return;\n var result;\n pair1.forEach(function (e1, i) {\n pair2.forEach(function (e2) {\n if (e1.getLeftChar().getValue() === e2.getLeftChar().getValue() && e1.getRightChar().getValue() === e2.getRightChar().getValue() && e1.getFinderPatter().getValue() === e2.getFinderPatter().getValue()) {\n result = true;\n }\n });\n });\n return result;\n };\n return ExpandedRow;\n}());\nexport default ExpandedRow;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../../../BarcodeFormat';\nimport MathUtils from '../../../common/detector/MathUtils';\n// import FormatException from '../../../FormatException';\nimport NotFoundException from '../../../NotFoundException';\nimport Result from '../../../Result';\nimport System from '../../../util/System';\nimport AbstractRSSReader from '../../rss/AbstractRSSReader';\nimport DataCharacter from '../../rss/DataCharacter';\nimport FinderPattern from '../../rss/FinderPattern';\nimport RSSUtils from '../../rss/RSSUtils';\nimport BitArrayBuilder from './BitArrayBuilder';\nimport { createDecoder } from './decoders/AbstractExpandedDecoderComplement';\nimport ExpandedPair from './ExpandedPair';\nimport ExpandedRow from './ExpandedRow';\n// import java.util.ArrayList;\n// import java.util.Iterator;\n// import java.util.List;\n// import java.util.Map;\n// import java.util.Collections;\n/** @experimental */\nvar RSSExpandedReader = /** @class */ (function (_super) {\n __extends(RSSExpandedReader, _super);\n function RSSExpandedReader() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.pairs = new Array(RSSExpandedReader.MAX_PAIRS);\n _this.rows = new Array();\n _this.startEnd = [2];\n return _this;\n }\n RSSExpandedReader.prototype.decodeRow = function (rowNumber, row, hints) {\n // Rows can start with even pattern in case in prev rows there where odd number of patters.\n // So lets try twice\n // this.pairs.clear();\n this.pairs.length = 0;\n this.startFromEven = false;\n try {\n return RSSExpandedReader.constructResult(this.decodeRow2pairs(rowNumber, row));\n }\n catch (e) {\n // OK\n // console.log(e);\n }\n this.pairs.length = 0;\n this.startFromEven = true;\n return RSSExpandedReader.constructResult(this.decodeRow2pairs(rowNumber, row));\n };\n RSSExpandedReader.prototype.reset = function () {\n this.pairs.length = 0;\n this.rows.length = 0;\n };\n // Not private for testing\n RSSExpandedReader.prototype.decodeRow2pairs = function (rowNumber, row) {\n var done = false;\n while (!done) {\n try {\n this.pairs.push(this.retrieveNextPair(row, this.pairs, rowNumber));\n }\n catch (error) {\n if (error instanceof NotFoundException) {\n if (!this.pairs.length) {\n throw new NotFoundException();\n }\n // exit this loop when retrieveNextPair() fails and throws\n done = true;\n }\n }\n }\n // TODO: verify sequence of finder patterns as in checkPairSequence()\n if (this.checkChecksum()) {\n return this.pairs;\n }\n var tryStackedDecode;\n if (this.rows.length) {\n tryStackedDecode = true;\n }\n else {\n tryStackedDecode = false;\n }\n // let tryStackedDecode = !this.rows.isEmpty();\n this.storeRow(rowNumber, false); // TODO: deal with reversed rows\n if (tryStackedDecode) {\n // When the image is 180-rotated, then rows are sorted in wrong direction.\n // Try twice with both the directions.\n var ps = this.checkRowsBoolean(false);\n if (ps != null) {\n return ps;\n }\n ps = this.checkRowsBoolean(true);\n if (ps != null) {\n return ps;\n }\n }\n throw new NotFoundException();\n };\n // Need to Verify\n RSSExpandedReader.prototype.checkRowsBoolean = function (reverse) {\n // Limit number of rows we are checking\n // We use recursive algorithm with pure complexity and don't want it to take forever\n // Stacked barcode can have up to 11 rows, so 25 seems reasonable enough\n if (this.rows.length > 25) {\n this.rows.length = 0; // We will never have a chance to get result, so clear it\n return null;\n }\n this.pairs.length = 0;\n if (reverse) {\n this.rows = this.rows.reverse();\n // Collections.reverse(this.rows);\n }\n var ps = null;\n try {\n ps = this.checkRows(new Array(), 0);\n }\n catch (e) {\n // OK\n console.log(e);\n }\n if (reverse) {\n this.rows = this.rows.reverse();\n // Collections.reverse(this.rows);\n }\n return ps;\n };\n // Try to construct a valid rows sequence\n // Recursion is used to implement backtracking\n RSSExpandedReader.prototype.checkRows = function (collectedRows, currentRow) {\n var e_1, _a;\n for (var i = currentRow; i < this.rows.length; i++) {\n var row = this.rows[i];\n this.pairs.length = 0;\n try {\n for (var collectedRows_1 = (e_1 = void 0, __values(collectedRows)), collectedRows_1_1 = collectedRows_1.next(); !collectedRows_1_1.done; collectedRows_1_1 = collectedRows_1.next()) {\n var collectedRow = collectedRows_1_1.value;\n this.pairs.push(collectedRow.getPairs());\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (collectedRows_1_1 && !collectedRows_1_1.done && (_a = collectedRows_1.return)) _a.call(collectedRows_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this.pairs.push(row.getPairs());\n if (!RSSExpandedReader.isValidSequence(this.pairs)) {\n continue;\n }\n if (this.checkChecksum()) {\n return this.pairs;\n }\n var rs = new Array(collectedRows);\n rs.push(row);\n try {\n // Recursion: try to add more rows\n return this.checkRows(rs, i + 1);\n }\n catch (e) {\n // We failed, try the next candidate\n console.log(e);\n }\n }\n throw new NotFoundException();\n };\n // Whether the pairs form a valid find pattern sequence,\n // either complete or a prefix\n RSSExpandedReader.isValidSequence = function (pairs) {\n var e_2, _a;\n try {\n for (var _b = __values(RSSExpandedReader.FINDER_PATTERN_SEQUENCES), _c = _b.next(); !_c.done; _c = _b.next()) {\n var sequence = _c.value;\n if (pairs.length > sequence.length) {\n continue;\n }\n var stop_1 = true;\n for (var j = 0; j < pairs.length; j++) {\n if (pairs[j].getFinderPattern().getValue() !== sequence[j]) {\n stop_1 = false;\n break;\n }\n }\n if (stop_1) {\n return true;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return false;\n };\n RSSExpandedReader.prototype.storeRow = function (rowNumber, wasReversed) {\n // Discard if duplicate above or below; otherwise insert in order by row number.\n var insertPos = 0;\n var prevIsSame = false;\n var nextIsSame = false;\n while (insertPos < this.rows.length) {\n var erow = this.rows[insertPos];\n if (erow.getRowNumber() > rowNumber) {\n nextIsSame = erow.isEquivalent(this.pairs);\n break;\n }\n prevIsSame = erow.isEquivalent(this.pairs);\n insertPos++;\n }\n if (nextIsSame || prevIsSame) {\n return;\n }\n // When the row was partially decoded (e.g. 2 pairs found instead of 3),\n // it will prevent us from detecting the barcode.\n // Try to merge partial rows\n // Check whether the row is part of an allready detected row\n if (RSSExpandedReader.isPartialRow(this.pairs, this.rows)) {\n return;\n }\n this.rows.push(insertPos, new ExpandedRow(this.pairs, rowNumber, wasReversed));\n this.removePartialRows(this.pairs, this.rows);\n };\n // Remove all the rows that contains only specified pairs\n RSSExpandedReader.prototype.removePartialRows = function (pairs, rows) {\n var e_3, _a, e_4, _b, e_5, _c;\n try {\n // for (Iterator iterator = rows.iterator(); iterator.hasNext();) {\n // ExpandedRow r = iterator.next();\n // if (r.getPairs().size() == pairs.size()) {\n // continue;\n // }\n // boolean allFound = true;\n // for (ExpandedPair p : r.getPairs()) {\n // boolean found = false;\n // for (ExpandedPair pp : pairs) {\n // if (p.equals(pp)) {\n // found = true;\n // break;\n // }\n // }\n // if (!found) {\n // allFound = false;\n // break;\n // }\n // }\n // if (allFound) {\n // // 'pairs' contains all the pairs from the row 'r'\n // iterator.remove();\n // }\n // }\n for (var rows_1 = __values(rows), rows_1_1 = rows_1.next(); !rows_1_1.done; rows_1_1 = rows_1.next()) {\n var row = rows_1_1.value;\n if (row.getPairs().length === pairs.length) {\n continue;\n }\n var allFound = true;\n try {\n for (var _d = (e_4 = void 0, __values(row.getPairs())), _e = _d.next(); !_e.done; _e = _d.next()) {\n var p = _e.value;\n var found = false;\n try {\n for (var pairs_1 = (e_5 = void 0, __values(pairs)), pairs_1_1 = pairs_1.next(); !pairs_1_1.done; pairs_1_1 = pairs_1.next()) {\n var pp = pairs_1_1.value;\n if (ExpandedPair.equals(p, pp)) {\n found = true;\n break;\n }\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (pairs_1_1 && !pairs_1_1.done && (_c = pairs_1.return)) _c.call(pairs_1);\n }\n finally { if (e_5) throw e_5.error; }\n }\n if (!found) {\n allFound = false;\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_b = _d.return)) _b.call(_d);\n }\n finally { if (e_4) throw e_4.error; }\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (rows_1_1 && !rows_1_1.done && (_a = rows_1.return)) _a.call(rows_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n };\n // Returns true when one of the rows already contains all the pairs\n RSSExpandedReader.isPartialRow = function (pairs, rows) {\n var e_6, _a, e_7, _b, e_8, _c;\n try {\n for (var rows_2 = __values(rows), rows_2_1 = rows_2.next(); !rows_2_1.done; rows_2_1 = rows_2.next()) {\n var r = rows_2_1.value;\n var allFound = true;\n try {\n for (var pairs_2 = (e_7 = void 0, __values(pairs)), pairs_2_1 = pairs_2.next(); !pairs_2_1.done; pairs_2_1 = pairs_2.next()) {\n var p = pairs_2_1.value;\n var found = false;\n try {\n for (var _d = (e_8 = void 0, __values(r.getPairs())), _e = _d.next(); !_e.done; _e = _d.next()) {\n var pp = _e.value;\n if (p.equals(pp)) {\n found = true;\n break;\n }\n }\n }\n catch (e_8_1) { e_8 = { error: e_8_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_c = _d.return)) _c.call(_d);\n }\n finally { if (e_8) throw e_8.error; }\n }\n if (!found) {\n allFound = false;\n break;\n }\n }\n }\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\n finally {\n try {\n if (pairs_2_1 && !pairs_2_1.done && (_b = pairs_2.return)) _b.call(pairs_2);\n }\n finally { if (e_7) throw e_7.error; }\n }\n if (allFound) {\n // the row 'r' contain all the pairs from 'pairs'\n return true;\n }\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (rows_2_1 && !rows_2_1.done && (_a = rows_2.return)) _a.call(rows_2);\n }\n finally { if (e_6) throw e_6.error; }\n }\n return false;\n };\n // Only used for unit testing\n RSSExpandedReader.prototype.getRows = function () {\n return this.rows;\n };\n // Not private for unit testing\n RSSExpandedReader.constructResult = function (pairs) {\n var binary = BitArrayBuilder.buildBitArray(pairs);\n var decoder = createDecoder(binary);\n var resultingString = decoder.parseInformation();\n var firstPoints = pairs[0].getFinderPattern().getResultPoints();\n var lastPoints = pairs[pairs.length - 1]\n .getFinderPattern()\n .getResultPoints();\n var points = [firstPoints[0], firstPoints[1], lastPoints[0], lastPoints[1]];\n return new Result(resultingString, null, null, points, BarcodeFormat.RSS_EXPANDED, null);\n };\n RSSExpandedReader.prototype.checkChecksum = function () {\n var firstPair = this.pairs.get(0);\n var checkCharacter = firstPair.getLeftChar();\n var firstCharacter = firstPair.getRightChar();\n if (firstCharacter === null) {\n return false;\n }\n var checksum = firstCharacter.getChecksumPortion();\n var s = 2;\n for (var i = 1; i < this.pairs.size(); ++i) {\n var currentPair = this.pairs.get(i);\n checksum += currentPair.getLeftChar().getChecksumPortion();\n s++;\n var currentRightChar = currentPair.getRightChar();\n if (currentRightChar != null) {\n checksum += currentRightChar.getChecksumPortion();\n s++;\n }\n }\n checksum %= 211;\n var checkCharacterValue = 211 * (s - 4) + checksum;\n return checkCharacterValue === checkCharacter.getValue();\n };\n RSSExpandedReader.getNextSecondBar = function (row, initialPos) {\n var currentPos;\n if (row.get(initialPos)) {\n currentPos = row.getNextUnset(initialPos);\n currentPos = row.getNextSet(currentPos);\n }\n else {\n currentPos = row.getNextSet(initialPos);\n currentPos = row.getNextUnset(currentPos);\n }\n return currentPos;\n };\n // not private for testing\n RSSExpandedReader.prototype.retrieveNextPair = function (row, previousPairs, rowNumber) {\n var isOddPattern = previousPairs.length % 2 === 0;\n if (this.startFromEven) {\n isOddPattern = !isOddPattern;\n }\n var pattern;\n var keepFinding = true;\n var forcedOffset = -1;\n do {\n this.findNextPair(row, previousPairs, forcedOffset);\n pattern = this.parseFoundFinderPattern(row, rowNumber, isOddPattern);\n if (pattern === null) {\n forcedOffset = RSSExpandedReader.getNextSecondBar(row, this.startEnd[0]);\n }\n else {\n keepFinding = false;\n }\n } while (keepFinding);\n // When stacked symbol is split over multiple rows, there's no way to guess if this pair can be last or not.\n // boolean mayBeLast = checkPairSequence(previousPairs, pattern);\n var leftChar = this.decodeDataCharacter(row, pattern, isOddPattern, true);\n if (!this.isEmptyPair(previousPairs) &&\n previousPairs[previousPairs.length - 1].mustBeLast()) {\n throw new NotFoundException();\n }\n var rightChar;\n try {\n rightChar = this.decodeDataCharacter(row, pattern, isOddPattern, false);\n }\n catch (e) {\n rightChar = null;\n console.log(e);\n }\n return new ExpandedPair(leftChar, rightChar, pattern, true);\n };\n RSSExpandedReader.prototype.isEmptyPair = function (pairs) {\n if (pairs.length === 0) {\n return true;\n }\n return false;\n };\n RSSExpandedReader.prototype.findNextPair = function (row, previousPairs, forcedOffset) {\n var counters = this.getDecodeFinderCounters();\n counters[0] = 0;\n counters[1] = 0;\n counters[2] = 0;\n counters[3] = 0;\n var width = row.getSize();\n var rowOffset;\n if (forcedOffset >= 0) {\n rowOffset = forcedOffset;\n }\n else if (this.isEmptyPair(previousPairs)) {\n rowOffset = 0;\n }\n else {\n var lastPair = previousPairs[previousPairs.length - 1];\n rowOffset = lastPair.getFinderPattern().getStartEnd()[1];\n }\n var searchingEvenPair = previousPairs.length % 2 !== 0;\n if (this.startFromEven) {\n searchingEvenPair = !searchingEvenPair;\n }\n var isWhite = false;\n while (rowOffset < width) {\n isWhite = !row.get(rowOffset);\n if (!isWhite) {\n break;\n }\n rowOffset++;\n }\n var counterPosition = 0;\n var patternStart = rowOffset;\n for (var x = rowOffset; x < width; x++) {\n if (row.get(x) !== isWhite) {\n counters[counterPosition]++;\n }\n else {\n if (counterPosition === 3) {\n if (searchingEvenPair) {\n RSSExpandedReader.reverseCounters(counters);\n }\n if (RSSExpandedReader.isFinderPattern(counters)) {\n this.startEnd[0] = patternStart;\n this.startEnd[1] = x;\n return;\n }\n if (searchingEvenPair) {\n RSSExpandedReader.reverseCounters(counters);\n }\n patternStart += counters[0] + counters[1];\n counters[0] = counters[2];\n counters[1] = counters[3];\n counters[2] = 0;\n counters[3] = 0;\n counterPosition--;\n }\n else {\n counterPosition++;\n }\n counters[counterPosition] = 1;\n isWhite = !isWhite;\n }\n }\n throw new NotFoundException();\n };\n RSSExpandedReader.reverseCounters = function (counters) {\n var length = counters.length;\n for (var i = 0; i < length / 2; ++i) {\n var tmp = counters[i];\n counters[i] = counters[length - i - 1];\n counters[length - i - 1] = tmp;\n }\n };\n RSSExpandedReader.prototype.parseFoundFinderPattern = function (row, rowNumber, oddPattern) {\n // Actually we found elements 2-5.\n var firstCounter;\n var start;\n var end;\n if (oddPattern) {\n // If pattern number is odd, we need to locate element 1 *before* the current block.\n var firstElementStart = this.startEnd[0] - 1;\n // Locate element 1\n while (firstElementStart >= 0 && !row.get(firstElementStart)) {\n firstElementStart--;\n }\n firstElementStart++;\n firstCounter = this.startEnd[0] - firstElementStart;\n start = firstElementStart;\n end = this.startEnd[1];\n }\n else {\n // If pattern number is even, the pattern is reversed, so we need to locate element 1 *after* the current block.\n start = this.startEnd[0];\n end = row.getNextUnset(this.startEnd[1] + 1);\n firstCounter = end - this.startEnd[1];\n }\n // Make 'counters' hold 1-4\n var counters = this.getDecodeFinderCounters();\n System.arraycopy(counters, 0, counters, 1, counters.length - 1);\n counters[0] = firstCounter;\n var value;\n try {\n value = this.parseFinderValue(counters, RSSExpandedReader.FINDER_PATTERNS);\n }\n catch (e) {\n return null;\n }\n // return new FinderPattern(value, new int[] { start, end }, start, end, rowNumber});\n return new FinderPattern(value, [start, end], start, end, rowNumber);\n };\n RSSExpandedReader.prototype.decodeDataCharacter = function (row, pattern, isOddPattern, leftChar) {\n var counters = this.getDataCharacterCounters();\n for (var x = 0; x < counters.length; x++) {\n counters[x] = 0;\n }\n if (leftChar) {\n RSSExpandedReader.recordPatternInReverse(row, pattern.getStartEnd()[0], counters);\n }\n else {\n RSSExpandedReader.recordPattern(row, pattern.getStartEnd()[1], counters);\n // reverse it\n for (var i = 0, j = counters.length - 1; i < j; i++, j--) {\n var temp = counters[i];\n counters[i] = counters[j];\n counters[j] = temp;\n }\n } // counters[] has the pixels of the module\n var numModules = 17; // left and right data characters have all the same length\n var elementWidth = MathUtils.sum(new Int32Array(counters)) / numModules;\n // Sanity check: element width for pattern and the character should match\n var expectedElementWidth = (pattern.getStartEnd()[1] - pattern.getStartEnd()[0]) / 15.0;\n if (Math.abs(elementWidth - expectedElementWidth) / expectedElementWidth >\n 0.3) {\n throw new NotFoundException();\n }\n var oddCounts = this.getOddCounts();\n var evenCounts = this.getEvenCounts();\n var oddRoundingErrors = this.getOddRoundingErrors();\n var evenRoundingErrors = this.getEvenRoundingErrors();\n for (var i = 0; i < counters.length; i++) {\n var value_1 = (1.0 * counters[i]) / elementWidth;\n var count = value_1 + 0.5; // Round\n if (count < 1) {\n if (value_1 < 0.3) {\n throw new NotFoundException();\n }\n count = 1;\n }\n else if (count > 8) {\n if (value_1 > 8.7) {\n throw new NotFoundException();\n }\n count = 8;\n }\n var offset = i / 2;\n if ((i & 0x01) === 0) {\n oddCounts[offset] = count;\n oddRoundingErrors[offset] = value_1 - count;\n }\n else {\n evenCounts[offset] = count;\n evenRoundingErrors[offset] = value_1 - count;\n }\n }\n this.adjustOddEvenCounts(numModules);\n var weightRowNumber = 4 * pattern.getValue() + (isOddPattern ? 0 : 2) + (leftChar ? 0 : 1) - 1;\n var oddSum = 0;\n var oddChecksumPortion = 0;\n for (var i = oddCounts.length - 1; i >= 0; i--) {\n if (RSSExpandedReader.isNotA1left(pattern, isOddPattern, leftChar)) {\n var weight = RSSExpandedReader.WEIGHTS[weightRowNumber][2 * i];\n oddChecksumPortion += oddCounts[i] * weight;\n }\n oddSum += oddCounts[i];\n }\n var evenChecksumPortion = 0;\n // int evenSum = 0;\n for (var i = evenCounts.length - 1; i >= 0; i--) {\n if (RSSExpandedReader.isNotA1left(pattern, isOddPattern, leftChar)) {\n var weight = RSSExpandedReader.WEIGHTS[weightRowNumber][2 * i + 1];\n evenChecksumPortion += evenCounts[i] * weight;\n }\n // evenSum += evenCounts[i];\n }\n var checksumPortion = oddChecksumPortion + evenChecksumPortion;\n if ((oddSum & 0x01) !== 0 || oddSum > 13 || oddSum < 4) {\n throw new NotFoundException();\n }\n var group = (13 - oddSum) / 2;\n var oddWidest = RSSExpandedReader.SYMBOL_WIDEST[group];\n var evenWidest = 9 - oddWidest;\n var vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, true);\n var vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, false);\n var tEven = RSSExpandedReader.EVEN_TOTAL_SUBSET[group];\n var gSum = RSSExpandedReader.GSUM[group];\n var value = vOdd * tEven + vEven + gSum;\n return new DataCharacter(value, checksumPortion);\n };\n RSSExpandedReader.isNotA1left = function (pattern, isOddPattern, leftChar) {\n // A1: pattern.getValue is 0 (A), and it's an oddPattern, and it is a left char\n return !(pattern.getValue() === 0 && isOddPattern && leftChar);\n };\n RSSExpandedReader.prototype.adjustOddEvenCounts = function (numModules) {\n var oddSum = MathUtils.sum(new Int32Array(this.getOddCounts()));\n var evenSum = MathUtils.sum(new Int32Array(this.getEvenCounts()));\n var incrementOdd = false;\n var decrementOdd = false;\n if (oddSum > 13) {\n decrementOdd = true;\n }\n else if (oddSum < 4) {\n incrementOdd = true;\n }\n var incrementEven = false;\n var decrementEven = false;\n if (evenSum > 13) {\n decrementEven = true;\n }\n else if (evenSum < 4) {\n incrementEven = true;\n }\n var mismatch = oddSum + evenSum - numModules;\n var oddParityBad = (oddSum & 0x01) === 1;\n var evenParityBad = (evenSum & 0x01) === 0;\n if (mismatch === 1) {\n if (oddParityBad) {\n if (evenParityBad) {\n throw new NotFoundException();\n }\n decrementOdd = true;\n }\n else {\n if (!evenParityBad) {\n throw new NotFoundException();\n }\n decrementEven = true;\n }\n }\n else if (mismatch === -1) {\n if (oddParityBad) {\n if (evenParityBad) {\n throw new NotFoundException();\n }\n incrementOdd = true;\n }\n else {\n if (!evenParityBad) {\n throw new NotFoundException();\n }\n incrementEven = true;\n }\n }\n else if (mismatch === 0) {\n if (oddParityBad) {\n if (!evenParityBad) {\n throw new NotFoundException();\n }\n // Both bad\n if (oddSum < evenSum) {\n incrementOdd = true;\n decrementEven = true;\n }\n else {\n decrementOdd = true;\n incrementEven = true;\n }\n }\n else {\n if (evenParityBad) {\n throw new NotFoundException();\n }\n // Nothing to do!\n }\n }\n else {\n throw new NotFoundException();\n }\n if (incrementOdd) {\n if (decrementOdd) {\n throw new NotFoundException();\n }\n RSSExpandedReader.increment(this.getOddCounts(), this.getOddRoundingErrors());\n }\n if (decrementOdd) {\n RSSExpandedReader.decrement(this.getOddCounts(), this.getOddRoundingErrors());\n }\n if (incrementEven) {\n if (decrementEven) {\n throw new NotFoundException();\n }\n RSSExpandedReader.increment(this.getEvenCounts(), this.getOddRoundingErrors());\n }\n if (decrementEven) {\n RSSExpandedReader.decrement(this.getEvenCounts(), this.getEvenRoundingErrors());\n }\n };\n RSSExpandedReader.SYMBOL_WIDEST = [7, 5, 4, 3, 1];\n RSSExpandedReader.EVEN_TOTAL_SUBSET = [4, 20, 52, 104, 204];\n RSSExpandedReader.GSUM = [0, 348, 1388, 2948, 3988];\n RSSExpandedReader.FINDER_PATTERNS = [\n Int32Array.from([1, 8, 4, 1]),\n Int32Array.from([3, 6, 4, 1]),\n Int32Array.from([3, 4, 6, 1]),\n Int32Array.from([3, 2, 8, 1]),\n Int32Array.from([2, 6, 5, 1]),\n Int32Array.from([2, 2, 9, 1]),\n ];\n RSSExpandedReader.WEIGHTS = [\n [1, 3, 9, 27, 81, 32, 96, 77],\n [20, 60, 180, 118, 143, 7, 21, 63],\n [189, 145, 13, 39, 117, 140, 209, 205],\n [193, 157, 49, 147, 19, 57, 171, 91],\n [62, 186, 136, 197, 169, 85, 44, 132],\n [185, 133, 188, 142, 4, 12, 36, 108],\n [113, 128, 173, 97, 80, 29, 87, 50],\n [150, 28, 84, 41, 123, 158, 52, 156],\n [46, 138, 203, 187, 139, 206, 196, 166],\n [76, 17, 51, 153, 37, 111, 122, 155],\n [43, 129, 176, 106, 107, 110, 119, 146],\n [16, 48, 144, 10, 30, 90, 59, 177],\n [109, 116, 137, 200, 178, 112, 125, 164],\n [70, 210, 208, 202, 184, 130, 179, 115],\n [134, 191, 151, 31, 93, 68, 204, 190],\n [148, 22, 66, 198, 172, 94, 71, 2],\n [6, 18, 54, 162, 64, 192, 154, 40],\n [120, 149, 25, 75, 14, 42, 126, 167],\n [79, 26, 78, 23, 69, 207, 199, 175],\n [103, 98, 83, 38, 114, 131, 182, 124],\n [161, 61, 183, 127, 170, 88, 53, 159],\n [55, 165, 73, 8, 24, 72, 5, 15],\n [45, 135, 194, 160, 58, 174, 100, 89],\n ];\n RSSExpandedReader.FINDER_PAT_A = 0;\n RSSExpandedReader.FINDER_PAT_B = 1;\n RSSExpandedReader.FINDER_PAT_C = 2;\n RSSExpandedReader.FINDER_PAT_D = 3;\n RSSExpandedReader.FINDER_PAT_E = 4;\n RSSExpandedReader.FINDER_PAT_F = 5;\n RSSExpandedReader.FINDER_PATTERN_SEQUENCES = [\n [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_A],\n [\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_B,\n ],\n [\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_C,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_D,\n ],\n [\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_E,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_D,\n RSSExpandedReader.FINDER_PAT_C,\n ],\n [\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_E,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_D,\n RSSExpandedReader.FINDER_PAT_D,\n RSSExpandedReader.FINDER_PAT_F,\n ],\n [\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_E,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_D,\n RSSExpandedReader.FINDER_PAT_E,\n RSSExpandedReader.FINDER_PAT_F,\n RSSExpandedReader.FINDER_PAT_F,\n ],\n [\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_C,\n RSSExpandedReader.FINDER_PAT_C,\n RSSExpandedReader.FINDER_PAT_D,\n RSSExpandedReader.FINDER_PAT_D,\n ],\n [\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_C,\n RSSExpandedReader.FINDER_PAT_C,\n RSSExpandedReader.FINDER_PAT_D,\n RSSExpandedReader.FINDER_PAT_E,\n RSSExpandedReader.FINDER_PAT_E,\n ],\n [\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_C,\n RSSExpandedReader.FINDER_PAT_C,\n RSSExpandedReader.FINDER_PAT_D,\n RSSExpandedReader.FINDER_PAT_E,\n RSSExpandedReader.FINDER_PAT_F,\n RSSExpandedReader.FINDER_PAT_F,\n ],\n [\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_A,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_B,\n RSSExpandedReader.FINDER_PAT_C,\n RSSExpandedReader.FINDER_PAT_D,\n RSSExpandedReader.FINDER_PAT_D,\n RSSExpandedReader.FINDER_PAT_E,\n RSSExpandedReader.FINDER_PAT_E,\n RSSExpandedReader.FINDER_PAT_F,\n RSSExpandedReader.FINDER_PAT_F,\n ],\n ];\n RSSExpandedReader.MAX_PAIRS = 11;\n return RSSExpandedReader;\n}(AbstractRSSReader));\nexport default RSSExpandedReader;\n","import IllegalStateException from '../../../../IllegalStateException';\nimport GeneralAppIdDecoder from './GeneralAppIdDecoder';\nimport AI01AndOtherAIs from './AI01AndOtherAIs';\nimport AnyAIDecoder from './AnyAIDecoder';\nimport AI013103decoder from './AI013103decoder';\nimport AI01320xDecoder from './AI01320xDecoder';\nimport AI01392xDecoder from './AI01392xDecoder';\nimport AI01393xDecoder from './AI01393xDecoder';\nimport AI013x0x1xDecoder from './AI013x0x1xDecoder';\nexport function createDecoder(information) {\n try {\n if (information.get(1)) {\n return new AI01AndOtherAIs(information);\n }\n if (!information.get(2)) {\n return new AnyAIDecoder(information);\n }\n var fourBitEncodationMethod = GeneralAppIdDecoder.extractNumericValueFromBitArray(information, 1, 4);\n switch (fourBitEncodationMethod) {\n case 4: return new AI013103decoder(information);\n case 5: return new AI01320xDecoder(information);\n }\n var fiveBitEncodationMethod = GeneralAppIdDecoder.extractNumericValueFromBitArray(information, 1, 5);\n switch (fiveBitEncodationMethod) {\n case 12: return new AI01392xDecoder(information);\n case 13: return new AI01393xDecoder(information);\n }\n var sevenBitEncodationMethod = GeneralAppIdDecoder.extractNumericValueFromBitArray(information, 1, 7);\n switch (sevenBitEncodationMethod) {\n case 56: return new AI013x0x1xDecoder(information, '310', '11');\n case 57: return new AI013x0x1xDecoder(information, '320', '11');\n case 58: return new AI013x0x1xDecoder(information, '310', '13');\n case 59: return new AI013x0x1xDecoder(information, '320', '13');\n case 60: return new AI013x0x1xDecoder(information, '310', '15');\n case 61: return new AI013x0x1xDecoder(information, '320', '15');\n case 62: return new AI013x0x1xDecoder(information, '310', '17');\n case 63: return new AI013x0x1xDecoder(information, '320', '17');\n }\n }\n catch (e) {\n console.log(e);\n throw new IllegalStateException('unknown decoder: ' + information);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport DataCharacter from './DataCharacter';\nvar Pair = /** @class */ (function (_super) {\n __extends(Pair, _super);\n function Pair(value, checksumPortion, finderPattern) {\n var _this = _super.call(this, value, checksumPortion) || this;\n _this.count = 0;\n _this.finderPattern = finderPattern;\n return _this;\n }\n Pair.prototype.getFinderPattern = function () {\n return this.finderPattern;\n };\n Pair.prototype.getCount = function () {\n return this.count;\n };\n Pair.prototype.incrementCount = function () {\n this.count++;\n };\n return Pair;\n}(DataCharacter));\nexport default Pair;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport AbstractRSSReader from './AbstractRSSReader';\nimport Pair from './Pair';\nimport Result from '../../Result';\nimport DecodeHintType from '../../DecodeHintType';\nimport NotFoundException from '../../NotFoundException';\nimport StringBuilder from '../../util/StringBuilder';\nimport BarcodeFormat from '../../BarcodeFormat';\nimport ResultPoint from '../../ResultPoint';\nimport FinderPattern from './FinderPattern';\nimport DataCharacter from './DataCharacter';\nimport MathUtils from '../../common/detector/MathUtils';\nimport RSSUtils from './RSSUtils';\nimport System from '../../util/System';\nimport OneDReader from '../OneDReader';\nvar RSS14Reader = /** @class */ (function (_super) {\n __extends(RSS14Reader, _super);\n function RSS14Reader() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.possibleLeftPairs = [];\n _this.possibleRightPairs = [];\n return _this;\n }\n RSS14Reader.prototype.decodeRow = function (rowNumber, row, hints) {\n var e_1, _a, e_2, _b;\n var leftPair = this.decodePair(row, false, rowNumber, hints);\n RSS14Reader.addOrTally(this.possibleLeftPairs, leftPair);\n row.reverse();\n var rightPair = this.decodePair(row, true, rowNumber, hints);\n RSS14Reader.addOrTally(this.possibleRightPairs, rightPair);\n row.reverse();\n try {\n for (var _c = __values(this.possibleLeftPairs), _d = _c.next(); !_d.done; _d = _c.next()) {\n var left = _d.value;\n if (left.getCount() > 1) {\n try {\n for (var _e = (e_2 = void 0, __values(this.possibleRightPairs)), _f = _e.next(); !_f.done; _f = _e.next()) {\n var right = _f.value;\n if (right.getCount() > 1 && RSS14Reader.checkChecksum(left, right)) {\n return RSS14Reader.constructResult(left, right);\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n throw new NotFoundException();\n };\n RSS14Reader.addOrTally = function (possiblePairs, pair) {\n var e_3, _a;\n if (pair == null) {\n return;\n }\n var found = false;\n try {\n for (var possiblePairs_1 = __values(possiblePairs), possiblePairs_1_1 = possiblePairs_1.next(); !possiblePairs_1_1.done; possiblePairs_1_1 = possiblePairs_1.next()) {\n var other = possiblePairs_1_1.value;\n if (other.getValue() === pair.getValue()) {\n other.incrementCount();\n found = true;\n break;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (possiblePairs_1_1 && !possiblePairs_1_1.done && (_a = possiblePairs_1.return)) _a.call(possiblePairs_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n if (!found) {\n possiblePairs.push(pair);\n }\n };\n RSS14Reader.prototype.reset = function () {\n this.possibleLeftPairs.length = 0;\n this.possibleRightPairs.length = 0;\n };\n RSS14Reader.constructResult = function (leftPair, rightPair) {\n var symbolValue = 4537077 * leftPair.getValue() + rightPair.getValue();\n var text = new String(symbolValue).toString();\n var buffer = new StringBuilder();\n for (var i = 13 - text.length; i > 0; i--) {\n buffer.append('0');\n }\n buffer.append(text);\n var checkDigit = 0;\n for (var i = 0; i < 13; i++) {\n var digit = buffer.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n checkDigit += ((i & 0x01) === 0) ? 3 * digit : digit;\n }\n checkDigit = 10 - (checkDigit % 10);\n if (checkDigit === 10) {\n checkDigit = 0;\n }\n buffer.append(checkDigit.toString());\n var leftPoints = leftPair.getFinderPattern().getResultPoints();\n var rightPoints = rightPair.getFinderPattern().getResultPoints();\n return new Result(buffer.toString(), null, 0, [leftPoints[0], leftPoints[1], rightPoints[0], rightPoints[1]], BarcodeFormat.RSS_14, new Date().getTime());\n };\n RSS14Reader.checkChecksum = function (leftPair, rightPair) {\n var checkValue = (leftPair.getChecksumPortion() + 16 * rightPair.getChecksumPortion()) % 79;\n var targetCheckValue = 9 * leftPair.getFinderPattern().getValue() + rightPair.getFinderPattern().getValue();\n if (targetCheckValue > 72) {\n targetCheckValue--;\n }\n if (targetCheckValue > 8) {\n targetCheckValue--;\n }\n return checkValue === targetCheckValue;\n };\n RSS14Reader.prototype.decodePair = function (row, right, rowNumber, hints) {\n try {\n var startEnd = this.findFinderPattern(row, right);\n var pattern = this.parseFoundFinderPattern(row, rowNumber, right, startEnd);\n var resultPointCallback = hints == null ? null : hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);\n if (resultPointCallback != null) {\n var center = (startEnd[0] + startEnd[1]) / 2.0;\n if (right) {\n // row is actually reversed\n center = row.getSize() - 1 - center;\n }\n resultPointCallback.foundPossibleResultPoint(new ResultPoint(center, rowNumber));\n }\n var outside = this.decodeDataCharacter(row, pattern, true);\n var inside = this.decodeDataCharacter(row, pattern, false);\n return new Pair(1597 * outside.getValue() + inside.getValue(), outside.getChecksumPortion() + 4 * inside.getChecksumPortion(), pattern);\n }\n catch (err) {\n return null;\n }\n };\n RSS14Reader.prototype.decodeDataCharacter = function (row, pattern, outsideChar) {\n var counters = this.getDataCharacterCounters();\n for (var x = 0; x < counters.length; x++) {\n counters[x] = 0;\n }\n if (outsideChar) {\n OneDReader.recordPatternInReverse(row, pattern.getStartEnd()[0], counters);\n }\n else {\n OneDReader.recordPattern(row, pattern.getStartEnd()[1] + 1, counters);\n // reverse it\n for (var i = 0, j = counters.length - 1; i < j; i++, j--) {\n var temp = counters[i];\n counters[i] = counters[j];\n counters[j] = temp;\n }\n }\n var numModules = outsideChar ? 16 : 15;\n var elementWidth = MathUtils.sum(new Int32Array(counters)) / numModules;\n var oddCounts = this.getOddCounts();\n var evenCounts = this.getEvenCounts();\n var oddRoundingErrors = this.getOddRoundingErrors();\n var evenRoundingErrors = this.getEvenRoundingErrors();\n for (var i = 0; i < counters.length; i++) {\n var value = counters[i] / elementWidth;\n var count = Math.floor(value + 0.5);\n if (count < 1) {\n count = 1;\n }\n else if (count > 8) {\n count = 8;\n }\n var offset = Math.floor(i / 2);\n if ((i & 0x01) === 0) {\n oddCounts[offset] = count;\n oddRoundingErrors[offset] = value - count;\n }\n else {\n evenCounts[offset] = count;\n evenRoundingErrors[offset] = value - count;\n }\n }\n this.adjustOddEvenCounts(outsideChar, numModules);\n var oddSum = 0;\n var oddChecksumPortion = 0;\n for (var i = oddCounts.length - 1; i >= 0; i--) {\n oddChecksumPortion *= 9;\n oddChecksumPortion += oddCounts[i];\n oddSum += oddCounts[i];\n }\n var evenChecksumPortion = 0;\n var evenSum = 0;\n for (var i = evenCounts.length - 1; i >= 0; i--) {\n evenChecksumPortion *= 9;\n evenChecksumPortion += evenCounts[i];\n evenSum += evenCounts[i];\n }\n var checksumPortion = oddChecksumPortion + 3 * evenChecksumPortion;\n if (outsideChar) {\n if ((oddSum & 0x01) !== 0 || oddSum > 12 || oddSum < 4) {\n throw new NotFoundException();\n }\n var group = (12 - oddSum) / 2;\n var oddWidest = RSS14Reader.OUTSIDE_ODD_WIDEST[group];\n var evenWidest = 9 - oddWidest;\n var vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, false);\n var vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, true);\n var tEven = RSS14Reader.OUTSIDE_EVEN_TOTAL_SUBSET[group];\n var gSum = RSS14Reader.OUTSIDE_GSUM[group];\n return new DataCharacter(vOdd * tEven + vEven + gSum, checksumPortion);\n }\n else {\n if ((evenSum & 0x01) !== 0 || evenSum > 10 || evenSum < 4) {\n throw new NotFoundException();\n }\n var group = (10 - evenSum) / 2;\n var oddWidest = RSS14Reader.INSIDE_ODD_WIDEST[group];\n var evenWidest = 9 - oddWidest;\n var vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, true);\n var vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, false);\n var tOdd = RSS14Reader.INSIDE_ODD_TOTAL_SUBSET[group];\n var gSum = RSS14Reader.INSIDE_GSUM[group];\n return new DataCharacter(vEven * tOdd + vOdd + gSum, checksumPortion);\n }\n };\n RSS14Reader.prototype.findFinderPattern = function (row, rightFinderPattern) {\n var counters = this.getDecodeFinderCounters();\n counters[0] = 0;\n counters[1] = 0;\n counters[2] = 0;\n counters[3] = 0;\n var width = row.getSize();\n var isWhite = false;\n var rowOffset = 0;\n while (rowOffset < width) {\n isWhite = !row.get(rowOffset);\n if (rightFinderPattern === isWhite) {\n // Will encounter white first when searching for right finder pattern\n break;\n }\n rowOffset++;\n }\n var counterPosition = 0;\n var patternStart = rowOffset;\n for (var x = rowOffset; x < width; x++) {\n if (row.get(x) !== isWhite) {\n counters[counterPosition]++;\n }\n else {\n if (counterPosition === 3) {\n if (AbstractRSSReader.isFinderPattern(counters)) {\n return [patternStart, x];\n }\n patternStart += counters[0] + counters[1];\n counters[0] = counters[2];\n counters[1] = counters[3];\n counters[2] = 0;\n counters[3] = 0;\n counterPosition--;\n }\n else {\n counterPosition++;\n }\n counters[counterPosition] = 1;\n isWhite = !isWhite;\n }\n }\n throw new NotFoundException();\n };\n RSS14Reader.prototype.parseFoundFinderPattern = function (row, rowNumber, right, startEnd) {\n // Actually we found elements 2-5\n var firstIsBlack = row.get(startEnd[0]);\n var firstElementStart = startEnd[0] - 1;\n // Locate element 1\n while (firstElementStart >= 0 && firstIsBlack !== row.get(firstElementStart)) {\n firstElementStart--;\n }\n firstElementStart++;\n var firstCounter = startEnd[0] - firstElementStart;\n // Make 'counters' hold 1-4\n var counters = this.getDecodeFinderCounters();\n var copy = new Int32Array(counters.length);\n System.arraycopy(counters, 0, copy, 1, counters.length - 1);\n copy[0] = firstCounter;\n var value = this.parseFinderValue(copy, RSS14Reader.FINDER_PATTERNS);\n var start = firstElementStart;\n var end = startEnd[1];\n if (right) {\n // row is actually reversed\n start = row.getSize() - 1 - start;\n end = row.getSize() - 1 - end;\n }\n return new FinderPattern(value, [firstElementStart, startEnd[1]], start, end, rowNumber);\n };\n RSS14Reader.prototype.adjustOddEvenCounts = function (outsideChar, numModules) {\n var oddSum = MathUtils.sum(new Int32Array(this.getOddCounts()));\n var evenSum = MathUtils.sum(new Int32Array(this.getEvenCounts()));\n var incrementOdd = false;\n var decrementOdd = false;\n var incrementEven = false;\n var decrementEven = false;\n if (outsideChar) {\n if (oddSum > 12) {\n decrementOdd = true;\n }\n else if (oddSum < 4) {\n incrementOdd = true;\n }\n if (evenSum > 12) {\n decrementEven = true;\n }\n else if (evenSum < 4) {\n incrementEven = true;\n }\n }\n else {\n if (oddSum > 11) {\n decrementOdd = true;\n }\n else if (oddSum < 5) {\n incrementOdd = true;\n }\n if (evenSum > 10) {\n decrementEven = true;\n }\n else if (evenSum < 4) {\n incrementEven = true;\n }\n }\n var mismatch = oddSum + evenSum - numModules;\n var oddParityBad = (oddSum & 0x01) === (outsideChar ? 1 : 0);\n var evenParityBad = (evenSum & 0x01) === 1;\n if (mismatch === 1) {\n if (oddParityBad) {\n if (evenParityBad) {\n throw new NotFoundException();\n }\n decrementOdd = true;\n }\n else {\n if (!evenParityBad) {\n throw new NotFoundException();\n }\n decrementEven = true;\n }\n }\n else if (mismatch === -1) {\n if (oddParityBad) {\n if (evenParityBad) {\n throw new NotFoundException();\n }\n incrementOdd = true;\n }\n else {\n if (!evenParityBad) {\n throw new NotFoundException();\n }\n incrementEven = true;\n }\n }\n else if (mismatch === 0) {\n if (oddParityBad) {\n if (!evenParityBad) {\n throw new NotFoundException();\n }\n // Both bad\n if (oddSum < evenSum) {\n incrementOdd = true;\n decrementEven = true;\n }\n else {\n decrementOdd = true;\n incrementEven = true;\n }\n }\n else {\n if (evenParityBad) {\n throw new NotFoundException();\n }\n // Nothing to do!\n }\n }\n else {\n throw new NotFoundException();\n }\n if (incrementOdd) {\n if (decrementOdd) {\n throw new NotFoundException();\n }\n AbstractRSSReader.increment(this.getOddCounts(), this.getOddRoundingErrors());\n }\n if (decrementOdd) {\n AbstractRSSReader.decrement(this.getOddCounts(), this.getOddRoundingErrors());\n }\n if (incrementEven) {\n if (decrementEven) {\n throw new NotFoundException();\n }\n AbstractRSSReader.increment(this.getEvenCounts(), this.getOddRoundingErrors());\n }\n if (decrementEven) {\n AbstractRSSReader.decrement(this.getEvenCounts(), this.getEvenRoundingErrors());\n }\n };\n RSS14Reader.OUTSIDE_EVEN_TOTAL_SUBSET = [1, 10, 34, 70, 126];\n RSS14Reader.INSIDE_ODD_TOTAL_SUBSET = [4, 20, 48, 81];\n RSS14Reader.OUTSIDE_GSUM = [0, 161, 961, 2015, 2715];\n RSS14Reader.INSIDE_GSUM = [0, 336, 1036, 1516];\n RSS14Reader.OUTSIDE_ODD_WIDEST = [8, 6, 4, 3, 1];\n RSS14Reader.INSIDE_ODD_WIDEST = [2, 4, 6, 8];\n RSS14Reader.FINDER_PATTERNS = [\n Int32Array.from([3, 8, 2, 1]),\n Int32Array.from([3, 5, 5, 1]),\n Int32Array.from([3, 3, 7, 1]),\n Int32Array.from([3, 1, 9, 1]),\n Int32Array.from([2, 7, 4, 1]),\n Int32Array.from([2, 5, 6, 1]),\n Int32Array.from([2, 3, 8, 1]),\n Int32Array.from([1, 5, 7, 1]),\n Int32Array.from([1, 3, 9, 1]),\n ];\n return RSS14Reader;\n}(AbstractRSSReader));\nexport default RSS14Reader;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport DecodeHintType from '../DecodeHintType';\nimport NotFoundException from '../NotFoundException';\nimport Code128Reader from './Code128Reader';\nimport Code39Reader from './Code39Reader';\nimport Code93Reader from './Code93Reader';\nimport ITFReader from './ITFReader';\nimport MultiFormatUPCEANReader from './MultiFormatUPCEANReader';\nimport OneDReader from './OneDReader';\nimport CodaBarReader from './CodaBarReader';\nimport RSSExpandedReader from './rss/expanded/RSSExpandedReader';\nimport RSS14Reader from './rss/RSS14Reader';\n/**\n * @author Daniel Switkin \n * @author Sean Owen\n */\nvar MultiFormatOneDReader = /** @class */ (function (_super) {\n __extends(MultiFormatOneDReader, _super);\n function MultiFormatOneDReader(hints) {\n var _this = _super.call(this) || this;\n _this.readers = [];\n var possibleFormats = !hints ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS);\n var useCode39CheckDigit = hints && hints.get(DecodeHintType.ASSUME_CODE_39_CHECK_DIGIT) !== undefined;\n var useCode39ExtendedMode = hints && hints.get(DecodeHintType.ENABLE_CODE_39_EXTENDED_MODE) !== undefined;\n if (possibleFormats) {\n if (possibleFormats.includes(BarcodeFormat.EAN_13) ||\n possibleFormats.includes(BarcodeFormat.UPC_A) ||\n possibleFormats.includes(BarcodeFormat.EAN_8) ||\n possibleFormats.includes(BarcodeFormat.UPC_E)) {\n _this.readers.push(new MultiFormatUPCEANReader(hints));\n }\n if (possibleFormats.includes(BarcodeFormat.CODE_39)) {\n _this.readers.push(new Code39Reader(useCode39CheckDigit, useCode39ExtendedMode));\n }\n if (possibleFormats.includes(BarcodeFormat.CODE_93)) {\n _this.readers.push(new Code93Reader());\n }\n if (possibleFormats.includes(BarcodeFormat.CODE_128)) {\n _this.readers.push(new Code128Reader());\n }\n if (possibleFormats.includes(BarcodeFormat.ITF)) {\n _this.readers.push(new ITFReader());\n }\n if (possibleFormats.includes(BarcodeFormat.CODABAR)) {\n _this.readers.push(new CodaBarReader());\n }\n if (possibleFormats.includes(BarcodeFormat.RSS_14)) {\n _this.readers.push(new RSS14Reader());\n }\n if (possibleFormats.includes(BarcodeFormat.RSS_EXPANDED)) {\n console.warn('RSS Expanded reader IS NOT ready for production yet! use at your own risk.');\n _this.readers.push(new RSSExpandedReader());\n }\n }\n if (_this.readers.length === 0) {\n _this.readers.push(new MultiFormatUPCEANReader(hints));\n _this.readers.push(new Code39Reader());\n // this.readers.push(new CodaBarReader());\n _this.readers.push(new Code93Reader());\n _this.readers.push(new MultiFormatUPCEANReader(hints));\n _this.readers.push(new Code128Reader());\n _this.readers.push(new ITFReader());\n _this.readers.push(new RSS14Reader());\n // this.readers.push(new RSSExpandedReader());\n }\n return _this;\n }\n // @Override\n MultiFormatOneDReader.prototype.decodeRow = function (rowNumber, row, hints) {\n for (var i = 0; i < this.readers.length; i++) {\n try {\n return this.readers[i].decodeRow(rowNumber, row, hints);\n }\n catch (re) {\n // continue\n }\n }\n throw new NotFoundException();\n };\n // @Override\n MultiFormatOneDReader.prototype.reset = function () {\n this.readers.forEach(function (reader) { return reader.reset(); });\n };\n return MultiFormatOneDReader;\n}(OneDReader));\nexport default MultiFormatOneDReader;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport MultiFormatOneDReader from '../core/oned/MultiFormatOneDReader';\n/**\n * @deprecated Moving to @zxing/browser\n *\n * Barcode reader reader to use from browser.\n */\nvar BrowserBarcodeReader = /** @class */ (function (_super) {\n __extends(BrowserBarcodeReader, _super);\n /**\n * Creates an instance of BrowserBarcodeReader.\n * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n * @param {Map} hints\n */\n function BrowserBarcodeReader(timeBetweenScansMillis, hints) {\n if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n return _super.call(this, new MultiFormatOneDReader(hints), timeBetweenScansMillis, hints) || this;\n }\n return BrowserBarcodeReader;\n}(BrowserCodeReader));\nexport { BrowserBarcodeReader };\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport FormatException from '../../FormatException';\n/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n *

Encapsulates a set of error-correction blocks in one symbol version. Most versions will\n * use blocks of differing sizes within one version, so, this encapsulates the parameters for\n * each set of blocks. It also holds the number of error-correction codewords per block since it\n * will be the same across all blocks within one version.

\n */\nvar ECBlocks = /** @class */ (function () {\n function ECBlocks(ecCodewords, ecBlocks1, ecBlocks2) {\n this.ecCodewords = ecCodewords;\n this.ecBlocks = [ecBlocks1];\n ecBlocks2 && this.ecBlocks.push(ecBlocks2);\n }\n ECBlocks.prototype.getECCodewords = function () {\n return this.ecCodewords;\n };\n ECBlocks.prototype.getECBlocks = function () {\n return this.ecBlocks;\n };\n return ECBlocks;\n}());\nexport { ECBlocks };\n/**\n *

Encapsulates the parameters for one error-correction block in one symbol version.\n * This includes the number of data codewords, and the number of times a block with these\n * parameters is used consecutively in the Data Matrix code version's format.

\n */\nvar ECB = /** @class */ (function () {\n function ECB(count, dataCodewords) {\n this.count = count;\n this.dataCodewords = dataCodewords;\n }\n ECB.prototype.getCount = function () {\n return this.count;\n };\n ECB.prototype.getDataCodewords = function () {\n return this.dataCodewords;\n };\n return ECB;\n}());\nexport { ECB };\n/**\n * The Version object encapsulates attributes about a particular\n * size Data Matrix Code.\n *\n * @author bbrown@google.com (Brian Brown)\n */\nvar Version = /** @class */ (function () {\n function Version(versionNumber, symbolSizeRows, symbolSizeColumns, dataRegionSizeRows, dataRegionSizeColumns, ecBlocks) {\n var e_1, _a;\n this.versionNumber = versionNumber;\n this.symbolSizeRows = symbolSizeRows;\n this.symbolSizeColumns = symbolSizeColumns;\n this.dataRegionSizeRows = dataRegionSizeRows;\n this.dataRegionSizeColumns = dataRegionSizeColumns;\n this.ecBlocks = ecBlocks;\n // Calculate the total number of codewords\n var total = 0;\n var ecCodewords = ecBlocks.getECCodewords();\n var ecbArray = ecBlocks.getECBlocks();\n try {\n for (var ecbArray_1 = __values(ecbArray), ecbArray_1_1 = ecbArray_1.next(); !ecbArray_1_1.done; ecbArray_1_1 = ecbArray_1.next()) {\n var ecBlock = ecbArray_1_1.value;\n total += ecBlock.getCount() * (ecBlock.getDataCodewords() + ecCodewords);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (ecbArray_1_1 && !ecbArray_1_1.done && (_a = ecbArray_1.return)) _a.call(ecbArray_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this.totalCodewords = total;\n }\n Version.prototype.getVersionNumber = function () {\n return this.versionNumber;\n };\n Version.prototype.getSymbolSizeRows = function () {\n return this.symbolSizeRows;\n };\n Version.prototype.getSymbolSizeColumns = function () {\n return this.symbolSizeColumns;\n };\n Version.prototype.getDataRegionSizeRows = function () {\n return this.dataRegionSizeRows;\n };\n Version.prototype.getDataRegionSizeColumns = function () {\n return this.dataRegionSizeColumns;\n };\n Version.prototype.getTotalCodewords = function () {\n return this.totalCodewords;\n };\n Version.prototype.getECBlocks = function () {\n return this.ecBlocks;\n };\n /**\n *

Deduces version information from Data Matrix dimensions.

\n *\n * @param numRows Number of rows in modules\n * @param numColumns Number of columns in modules\n * @return Version for a Data Matrix Code of those dimensions\n * @throws FormatException if dimensions do correspond to a valid Data Matrix size\n */\n Version.getVersionForDimensions = function (numRows, numColumns) {\n var e_2, _a;\n if ((numRows & 0x01) !== 0 || (numColumns & 0x01) !== 0) {\n throw new FormatException();\n }\n try {\n for (var _b = __values(Version.VERSIONS), _c = _b.next(); !_c.done; _c = _b.next()) {\n var version = _c.value;\n if (version.symbolSizeRows === numRows && version.symbolSizeColumns === numColumns) {\n return version;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n throw new FormatException();\n };\n // @Override\n Version.prototype.toString = function () {\n return '' + this.versionNumber;\n };\n /**\n * See ISO 16022:2006 5.5.1 Table 7\n */\n Version.buildVersions = function () {\n return [\n new Version(1, 10, 10, 8, 8, new ECBlocks(5, new ECB(1, 3))),\n new Version(2, 12, 12, 10, 10, new ECBlocks(7, new ECB(1, 5))),\n new Version(3, 14, 14, 12, 12, new ECBlocks(10, new ECB(1, 8))),\n new Version(4, 16, 16, 14, 14, new ECBlocks(12, new ECB(1, 12))),\n new Version(5, 18, 18, 16, 16, new ECBlocks(14, new ECB(1, 18))),\n new Version(6, 20, 20, 18, 18, new ECBlocks(18, new ECB(1, 22))),\n new Version(7, 22, 22, 20, 20, new ECBlocks(20, new ECB(1, 30))),\n new Version(8, 24, 24, 22, 22, new ECBlocks(24, new ECB(1, 36))),\n new Version(9, 26, 26, 24, 24, new ECBlocks(28, new ECB(1, 44))),\n new Version(10, 32, 32, 14, 14, new ECBlocks(36, new ECB(1, 62))),\n new Version(11, 36, 36, 16, 16, new ECBlocks(42, new ECB(1, 86))),\n new Version(12, 40, 40, 18, 18, new ECBlocks(48, new ECB(1, 114))),\n new Version(13, 44, 44, 20, 20, new ECBlocks(56, new ECB(1, 144))),\n new Version(14, 48, 48, 22, 22, new ECBlocks(68, new ECB(1, 174))),\n new Version(15, 52, 52, 24, 24, new ECBlocks(42, new ECB(2, 102))),\n new Version(16, 64, 64, 14, 14, new ECBlocks(56, new ECB(2, 140))),\n new Version(17, 72, 72, 16, 16, new ECBlocks(36, new ECB(4, 92))),\n new Version(18, 80, 80, 18, 18, new ECBlocks(48, new ECB(4, 114))),\n new Version(19, 88, 88, 20, 20, new ECBlocks(56, new ECB(4, 144))),\n new Version(20, 96, 96, 22, 22, new ECBlocks(68, new ECB(4, 174))),\n new Version(21, 104, 104, 24, 24, new ECBlocks(56, new ECB(6, 136))),\n new Version(22, 120, 120, 18, 18, new ECBlocks(68, new ECB(6, 175))),\n new Version(23, 132, 132, 20, 20, new ECBlocks(62, new ECB(8, 163))),\n new Version(24, 144, 144, 22, 22, new ECBlocks(62, new ECB(8, 156), new ECB(2, 155))),\n new Version(25, 8, 18, 6, 16, new ECBlocks(7, new ECB(1, 5))),\n new Version(26, 8, 32, 6, 14, new ECBlocks(11, new ECB(1, 10))),\n new Version(27, 12, 26, 10, 24, new ECBlocks(14, new ECB(1, 16))),\n new Version(28, 12, 36, 10, 16, new ECBlocks(18, new ECB(1, 22))),\n new Version(29, 16, 36, 14, 16, new ECBlocks(24, new ECB(1, 32))),\n new Version(30, 16, 48, 14, 22, new ECBlocks(28, new ECB(1, 49)))\n ];\n };\n Version.VERSIONS = Version.buildVersions();\n return Version;\n}());\nexport default Version;\n","import BitMatrix from '../../common/BitMatrix';\nimport Version from './Version';\nimport FormatException from '../../FormatException';\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @author bbrown@google.com (Brian Brown)\n */\nvar BitMatrixParser = /** @class */ (function () {\n /**\n * @param bitMatrix {@link BitMatrix} to parse\n * @throws FormatException if dimension is < 8 or > 144 or not 0 mod 2\n */\n function BitMatrixParser(bitMatrix) {\n var dimension = bitMatrix.getHeight();\n if (dimension < 8 || dimension > 144 || (dimension & 0x01) !== 0) {\n throw new FormatException();\n }\n this.version = BitMatrixParser.readVersion(bitMatrix);\n this.mappingBitMatrix = this.extractDataRegion(bitMatrix);\n this.readMappingMatrix = new BitMatrix(this.mappingBitMatrix.getWidth(), this.mappingBitMatrix.getHeight());\n }\n BitMatrixParser.prototype.getVersion = function () {\n return this.version;\n };\n /**\n *

Creates the version object based on the dimension of the original bit matrix from\n * the datamatrix code.

\n *\n *

See ISO 16022:2006 Table 7 - ECC 200 symbol attributes

\n *\n * @param bitMatrix Original {@link BitMatrix} including alignment patterns\n * @return {@link Version} encapsulating the Data Matrix Code's \"version\"\n * @throws FormatException if the dimensions of the mapping matrix are not valid\n * Data Matrix dimensions.\n */\n BitMatrixParser.readVersion = function (bitMatrix) {\n var numRows = bitMatrix.getHeight();\n var numColumns = bitMatrix.getWidth();\n return Version.getVersionForDimensions(numRows, numColumns);\n };\n /**\n *

Reads the bits in the {@link BitMatrix} representing the mapping matrix (No alignment patterns)\n * in the correct order in order to reconstitute the codewords bytes contained within the\n * Data Matrix Code.

\n *\n * @return bytes encoded within the Data Matrix Code\n * @throws FormatException if the exact number of bytes expected is not read\n */\n BitMatrixParser.prototype.readCodewords = function () {\n var result = new Int8Array(this.version.getTotalCodewords());\n var resultOffset = 0;\n var row = 4;\n var column = 0;\n var numRows = this.mappingBitMatrix.getHeight();\n var numColumns = this.mappingBitMatrix.getWidth();\n var corner1Read = false;\n var corner2Read = false;\n var corner3Read = false;\n var corner4Read = false;\n // Read all of the codewords\n do {\n // Check the four corner cases\n if ((row === numRows) && (column === 0) && !corner1Read) {\n result[resultOffset++] = this.readCorner1(numRows, numColumns) & 0xff;\n row -= 2;\n column += 2;\n corner1Read = true;\n }\n else if ((row === numRows - 2) && (column === 0) && ((numColumns & 0x03) !== 0) && !corner2Read) {\n result[resultOffset++] = this.readCorner2(numRows, numColumns) & 0xff;\n row -= 2;\n column += 2;\n corner2Read = true;\n }\n else if ((row === numRows + 4) && (column === 2) && ((numColumns & 0x07) === 0) && !corner3Read) {\n result[resultOffset++] = this.readCorner3(numRows, numColumns) & 0xff;\n row -= 2;\n column += 2;\n corner3Read = true;\n }\n else if ((row === numRows - 2) && (column === 0) && ((numColumns & 0x07) === 4) && !corner4Read) {\n result[resultOffset++] = this.readCorner4(numRows, numColumns) & 0xff;\n row -= 2;\n column += 2;\n corner4Read = true;\n }\n else {\n // Sweep upward diagonally to the right\n do {\n if ((row < numRows) && (column >= 0) && !this.readMappingMatrix.get(column, row)) {\n result[resultOffset++] = this.readUtah(row, column, numRows, numColumns) & 0xff;\n }\n row -= 2;\n column += 2;\n } while ((row >= 0) && (column < numColumns));\n row += 1;\n column += 3;\n // Sweep downward diagonally to the left\n do {\n if ((row >= 0) && (column < numColumns) && !this.readMappingMatrix.get(column, row)) {\n result[resultOffset++] = this.readUtah(row, column, numRows, numColumns) & 0xff;\n }\n row += 2;\n column -= 2;\n } while ((row < numRows) && (column >= 0));\n row += 3;\n column += 1;\n }\n } while ((row < numRows) || (column < numColumns));\n if (resultOffset !== this.version.getTotalCodewords()) {\n throw new FormatException();\n }\n return result;\n };\n /**\n *

Reads a bit of the mapping matrix accounting for boundary wrapping.

\n *\n * @param row Row to read in the mapping matrix\n * @param column Column to read in the mapping matrix\n * @param numRows Number of rows in the mapping matrix\n * @param numColumns Number of columns in the mapping matrix\n * @return value of the given bit in the mapping matrix\n */\n BitMatrixParser.prototype.readModule = function (row, column, numRows, numColumns) {\n // Adjust the row and column indices based on boundary wrapping\n if (row < 0) {\n row += numRows;\n column += 4 - ((numRows + 4) & 0x07);\n }\n if (column < 0) {\n column += numColumns;\n row += 4 - ((numColumns + 4) & 0x07);\n }\n this.readMappingMatrix.set(column, row);\n return this.mappingBitMatrix.get(column, row);\n };\n /**\n *

Reads the 8 bits of the standard Utah-shaped pattern.

\n *\n *

See ISO 16022:2006, 5.8.1 Figure 6

\n *\n * @param row Current row in the mapping matrix, anchored at the 8th bit (LSB) of the pattern\n * @param column Current column in the mapping matrix, anchored at the 8th bit (LSB) of the pattern\n * @param numRows Number of rows in the mapping matrix\n * @param numColumns Number of columns in the mapping matrix\n * @return byte from the utah shape\n */\n BitMatrixParser.prototype.readUtah = function (row, column, numRows, numColumns) {\n var currentByte = 0;\n if (this.readModule(row - 2, column - 2, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(row - 2, column - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(row - 1, column - 2, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(row - 1, column - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(row - 1, column, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(row, column - 2, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(row, column - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(row, column, numRows, numColumns)) {\n currentByte |= 1;\n }\n return currentByte;\n };\n /**\n *

Reads the 8 bits of the special corner condition 1.

\n *\n *

See ISO 16022:2006, Figure F.3

\n *\n * @param numRows Number of rows in the mapping matrix\n * @param numColumns Number of columns in the mapping matrix\n * @return byte from the Corner condition 1\n */\n BitMatrixParser.prototype.readCorner1 = function (numRows, numColumns) {\n var currentByte = 0;\n if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(numRows - 1, 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(numRows - 1, 2, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(2, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(3, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n return currentByte;\n };\n /**\n *

Reads the 8 bits of the special corner condition 2.

\n *\n *

See ISO 16022:2006, Figure F.4

\n *\n * @param numRows Number of rows in the mapping matrix\n * @param numColumns Number of columns in the mapping matrix\n * @return byte from the Corner condition 2\n */\n BitMatrixParser.prototype.readCorner2 = function (numRows, numColumns) {\n var currentByte = 0;\n if (this.readModule(numRows - 3, 0, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(numRows - 2, 0, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(0, numColumns - 4, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(0, numColumns - 3, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n return currentByte;\n };\n /**\n *

Reads the 8 bits of the special corner condition 3.

\n *\n *

See ISO 16022:2006, Figure F.5

\n *\n * @param numRows Number of rows in the mapping matrix\n * @param numColumns Number of columns in the mapping matrix\n * @return byte from the Corner condition 3\n */\n BitMatrixParser.prototype.readCorner3 = function (numRows, numColumns) {\n var currentByte = 0;\n if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(numRows - 1, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(0, numColumns - 3, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(1, numColumns - 3, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(1, numColumns - 2, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n return currentByte;\n };\n /**\n *

Reads the 8 bits of the special corner condition 4.

\n *\n *

See ISO 16022:2006, Figure F.6

\n *\n * @param numRows Number of rows in the mapping matrix\n * @param numColumns Number of columns in the mapping matrix\n * @return byte from the Corner condition 4\n */\n BitMatrixParser.prototype.readCorner4 = function (numRows, numColumns) {\n var currentByte = 0;\n if (this.readModule(numRows - 3, 0, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(numRows - 2, 0, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(2, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n currentByte <<= 1;\n if (this.readModule(3, numColumns - 1, numRows, numColumns)) {\n currentByte |= 1;\n }\n return currentByte;\n };\n /**\n *

Extracts the data region from a {@link BitMatrix} that contains\n * alignment patterns.

\n *\n * @param bitMatrix Original {@link BitMatrix} with alignment patterns\n * @return BitMatrix that has the alignment patterns removed\n */\n BitMatrixParser.prototype.extractDataRegion = function (bitMatrix) {\n var symbolSizeRows = this.version.getSymbolSizeRows();\n var symbolSizeColumns = this.version.getSymbolSizeColumns();\n if (bitMatrix.getHeight() !== symbolSizeRows) {\n throw new IllegalArgumentException('Dimension of bitMatrix must match the version size');\n }\n var dataRegionSizeRows = this.version.getDataRegionSizeRows();\n var dataRegionSizeColumns = this.version.getDataRegionSizeColumns();\n var numDataRegionsRow = symbolSizeRows / dataRegionSizeRows | 0;\n var numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns | 0;\n var sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows;\n var sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns;\n var bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionColumn, sizeDataRegionRow);\n for (var dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) {\n var dataRegionRowOffset = dataRegionRow * dataRegionSizeRows;\n for (var dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) {\n var dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns;\n for (var i = 0; i < dataRegionSizeRows; ++i) {\n var readRowOffset = dataRegionRow * (dataRegionSizeRows + 2) + 1 + i;\n var writeRowOffset = dataRegionRowOffset + i;\n for (var j = 0; j < dataRegionSizeColumns; ++j) {\n var readColumnOffset = dataRegionColumn * (dataRegionSizeColumns + 2) + 1 + j;\n if (bitMatrix.get(readColumnOffset, readRowOffset)) {\n var writeColumnOffset = dataRegionColumnOffset + j;\n bitMatrixWithoutAlignment.set(writeColumnOffset, writeRowOffset);\n }\n }\n }\n }\n }\n return bitMatrixWithoutAlignment;\n };\n return BitMatrixParser;\n}());\nexport default BitMatrixParser;\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n *

Encapsulates a block of data within a Data Matrix Code. Data Matrix Codes may split their data into\n * multiple blocks, each of which is a unit of data and error-correction codewords. Each\n * is represented by an instance of this class.

\n *\n * @author bbrown@google.com (Brian Brown)\n */\nvar DataBlock = /** @class */ (function () {\n function DataBlock(numDataCodewords, codewords) {\n this.numDataCodewords = numDataCodewords;\n this.codewords = codewords;\n }\n /**\n *

When Data Matrix Codes use multiple data blocks, they actually interleave the bytes of each of them.\n * That is, the first byte of data block 1 to n is written, then the second bytes, and so on. This\n * method will separate the data into original blocks.

\n *\n * @param rawCodewords bytes as read directly from the Data Matrix Code\n * @param version version of the Data Matrix Code\n * @return DataBlocks containing original bytes, \"de-interleaved\" from representation in the\n * Data Matrix Code\n */\n DataBlock.getDataBlocks = function (rawCodewords, version) {\n var e_1, _a, e_2, _b;\n // Figure out the number and size of data blocks used by this version\n var ecBlocks = version.getECBlocks();\n // First count the total number of data blocks\n var totalBlocks = 0;\n var ecBlockArray = ecBlocks.getECBlocks();\n try {\n for (var ecBlockArray_1 = __values(ecBlockArray), ecBlockArray_1_1 = ecBlockArray_1.next(); !ecBlockArray_1_1.done; ecBlockArray_1_1 = ecBlockArray_1.next()) {\n var ecBlock = ecBlockArray_1_1.value;\n totalBlocks += ecBlock.getCount();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (ecBlockArray_1_1 && !ecBlockArray_1_1.done && (_a = ecBlockArray_1.return)) _a.call(ecBlockArray_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // Now establish DataBlocks of the appropriate size and number of data codewords\n var result = new Array(totalBlocks);\n var numResultBlocks = 0;\n try {\n for (var ecBlockArray_2 = __values(ecBlockArray), ecBlockArray_2_1 = ecBlockArray_2.next(); !ecBlockArray_2_1.done; ecBlockArray_2_1 = ecBlockArray_2.next()) {\n var ecBlock = ecBlockArray_2_1.value;\n for (var i = 0; i < ecBlock.getCount(); i++) {\n var numDataCodewords = ecBlock.getDataCodewords();\n var numBlockCodewords = ecBlocks.getECCodewords() + numDataCodewords;\n result[numResultBlocks++] = new DataBlock(numDataCodewords, new Uint8Array(numBlockCodewords));\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (ecBlockArray_2_1 && !ecBlockArray_2_1.done && (_b = ecBlockArray_2.return)) _b.call(ecBlockArray_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n // All blocks have the same amount of data, except that the last n\n // (where n may be 0) have 1 less byte. Figure out where these start.\n // TODO(bbrown): There is only one case where there is a difference for Data Matrix for size 144\n var longerBlocksTotalCodewords = result[0].codewords.length;\n // int shorterBlocksTotalCodewords = longerBlocksTotalCodewords - 1;\n var longerBlocksNumDataCodewords = longerBlocksTotalCodewords - ecBlocks.getECCodewords();\n var shorterBlocksNumDataCodewords = longerBlocksNumDataCodewords - 1;\n // The last elements of result may be 1 element shorter for 144 matrix\n // first fill out as many elements as all of them have minus 1\n var rawCodewordsOffset = 0;\n for (var i = 0; i < shorterBlocksNumDataCodewords; i++) {\n for (var j = 0; j < numResultBlocks; j++) {\n result[j].codewords[i] = rawCodewords[rawCodewordsOffset++];\n }\n }\n // Fill out the last data block in the longer ones\n var specialVersion = version.getVersionNumber() === 24;\n var numLongerBlocks = specialVersion ? 8 : numResultBlocks;\n for (var j = 0; j < numLongerBlocks; j++) {\n result[j].codewords[longerBlocksNumDataCodewords - 1] = rawCodewords[rawCodewordsOffset++];\n }\n // Now add in error correction blocks\n var max = result[0].codewords.length;\n for (var i = longerBlocksNumDataCodewords; i < max; i++) {\n for (var j = 0; j < numResultBlocks; j++) {\n var jOffset = specialVersion ? (j + 8) % numResultBlocks : j;\n var iOffset = specialVersion && jOffset > 7 ? i - 1 : i;\n result[jOffset].codewords[iOffset] = rawCodewords[rawCodewordsOffset++];\n }\n }\n if (rawCodewordsOffset !== rawCodewords.length) {\n throw new IllegalArgumentException();\n }\n return result;\n };\n DataBlock.prototype.getNumDataCodewords = function () {\n return this.numDataCodewords;\n };\n DataBlock.prototype.getCodewords = function () {\n return this.codewords;\n };\n return DataBlock;\n}());\nexport default DataBlock;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.common {*/\nimport IllegalArgumentException from '../IllegalArgumentException';\n/**\n *

This provides an easy abstraction to read bits at a time from a sequence of bytes, where the\n * number of bits read is not often a multiple of 8.

\n *\n *

This class is thread-safe but not reentrant -- unless the caller modifies the bytes array\n * it passed in, in which case all bets are off.

\n *\n * @author Sean Owen\n */\nvar BitSource = /** @class */ (function () {\n /**\n * @param bytes bytes from which this will read bits. Bits will be read from the first byte first.\n * Bits are read within a byte from most-significant to least-significant bit.\n */\n function BitSource(bytes) {\n this.bytes = bytes;\n this.byteOffset = 0;\n this.bitOffset = 0;\n }\n /**\n * @return index of next bit in current byte which would be read by the next call to {@link #readBits(int)}.\n */\n BitSource.prototype.getBitOffset = function () {\n return this.bitOffset;\n };\n /**\n * @return index of next byte in input byte array which would be read by the next call to {@link #readBits(int)}.\n */\n BitSource.prototype.getByteOffset = function () {\n return this.byteOffset;\n };\n /**\n * @param numBits number of bits to read\n * @return int representing the bits read. The bits will appear as the least-significant\n * bits of the int\n * @throws IllegalArgumentException if numBits isn't in [1,32] or more than is available\n */\n BitSource.prototype.readBits = function (numBits /*int*/) {\n if (numBits < 1 || numBits > 32 || numBits > this.available()) {\n throw new IllegalArgumentException('' + numBits);\n }\n var result = 0;\n var bitOffset = this.bitOffset;\n var byteOffset = this.byteOffset;\n var bytes = this.bytes;\n // First, read remainder from current byte\n if (bitOffset > 0) {\n var bitsLeft = 8 - bitOffset;\n var toRead = numBits < bitsLeft ? numBits : bitsLeft;\n var bitsToNotRead = bitsLeft - toRead;\n var mask = (0xFF >> (8 - toRead)) << bitsToNotRead;\n result = (bytes[byteOffset] & mask) >> bitsToNotRead;\n numBits -= toRead;\n bitOffset += toRead;\n if (bitOffset === 8) {\n bitOffset = 0;\n byteOffset++;\n }\n }\n // Next read whole bytes\n if (numBits > 0) {\n while (numBits >= 8) {\n result = (result << 8) | (bytes[byteOffset] & 0xFF);\n byteOffset++;\n numBits -= 8;\n }\n // Finally read a partial byte\n if (numBits > 0) {\n var bitsToNotRead = 8 - numBits;\n var mask = (0xFF >> bitsToNotRead) << bitsToNotRead;\n result = (result << numBits) | ((bytes[byteOffset] & mask) >> bitsToNotRead);\n bitOffset += numBits;\n }\n }\n this.bitOffset = bitOffset;\n this.byteOffset = byteOffset;\n return result;\n };\n /**\n * @return number of bits that can be read successfully\n */\n BitSource.prototype.available = function () {\n return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset;\n };\n return BitSource;\n}());\nexport default BitSource;\n","import DecoderResult from '../../common/DecoderResult';\nimport BitSource from '../../common/BitSource';\nimport StringBuilder from '../../util/StringBuilder';\nimport StringEncoding from '../../util/StringEncoding';\nimport StringUtils from '../../common/StringUtils';\nimport FormatException from '../../FormatException';\nimport IllegalStateException from '../../IllegalStateException';\n/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Mode;\n(function (Mode) {\n Mode[Mode[\"PAD_ENCODE\"] = 0] = \"PAD_ENCODE\";\n Mode[Mode[\"ASCII_ENCODE\"] = 1] = \"ASCII_ENCODE\";\n Mode[Mode[\"C40_ENCODE\"] = 2] = \"C40_ENCODE\";\n Mode[Mode[\"TEXT_ENCODE\"] = 3] = \"TEXT_ENCODE\";\n Mode[Mode[\"ANSIX12_ENCODE\"] = 4] = \"ANSIX12_ENCODE\";\n Mode[Mode[\"EDIFACT_ENCODE\"] = 5] = \"EDIFACT_ENCODE\";\n Mode[Mode[\"BASE256_ENCODE\"] = 6] = \"BASE256_ENCODE\";\n})(Mode || (Mode = {}));\n/**\n *

Data Matrix Codes can encode text as bits in one of several modes, and can use multiple modes\n * in one Data Matrix Code. This class decodes the bits back into text.

\n *\n *

See ISO 16022:2006, 5.2.1 - 5.2.9.2

\n *\n * @author bbrown@google.com (Brian Brown)\n * @author Sean Owen\n */\nvar DecodedBitStreamParser = /** @class */ (function () {\n function DecodedBitStreamParser() {\n }\n DecodedBitStreamParser.decode = function (bytes) {\n var bits = new BitSource(bytes);\n var result = new StringBuilder();\n var resultTrailer = new StringBuilder();\n var byteSegments = new Array();\n var mode = Mode.ASCII_ENCODE;\n do {\n if (mode === Mode.ASCII_ENCODE) {\n mode = this.decodeAsciiSegment(bits, result, resultTrailer);\n }\n else {\n switch (mode) {\n case Mode.C40_ENCODE:\n this.decodeC40Segment(bits, result);\n break;\n case Mode.TEXT_ENCODE:\n this.decodeTextSegment(bits, result);\n break;\n case Mode.ANSIX12_ENCODE:\n this.decodeAnsiX12Segment(bits, result);\n break;\n case Mode.EDIFACT_ENCODE:\n this.decodeEdifactSegment(bits, result);\n break;\n case Mode.BASE256_ENCODE:\n this.decodeBase256Segment(bits, result, byteSegments);\n break;\n default:\n throw new FormatException();\n }\n mode = Mode.ASCII_ENCODE;\n }\n } while (mode !== Mode.PAD_ENCODE && bits.available() > 0);\n if (resultTrailer.length() > 0) {\n result.append(resultTrailer.toString());\n }\n return new DecoderResult(bytes, result.toString(), byteSegments.length === 0 ? null : byteSegments, null);\n };\n /**\n * See ISO 16022:2006, 5.2.3 and Annex C, Table C.2\n */\n DecodedBitStreamParser.decodeAsciiSegment = function (bits, result, resultTrailer) {\n var upperShift = false;\n do {\n var oneByte = bits.readBits(8);\n if (oneByte === 0) {\n throw new FormatException();\n }\n else if (oneByte <= 128) { // ASCII data (ASCII value + 1)\n if (upperShift) {\n oneByte += 128;\n // upperShift = false;\n }\n result.append(String.fromCharCode(oneByte - 1));\n return Mode.ASCII_ENCODE;\n }\n else if (oneByte === 129) { // Pad\n return Mode.PAD_ENCODE;\n }\n else if (oneByte <= 229) { // 2-digit data 00-99 (Numeric Value + 130)\n var value = oneByte - 130;\n if (value < 10) { // pad with '0' for single digit values\n result.append('0');\n }\n result.append('' + value);\n }\n else {\n switch (oneByte) {\n case 230: // Latch to C40 encodation\n return Mode.C40_ENCODE;\n case 231: // Latch to Base 256 encodation\n return Mode.BASE256_ENCODE;\n case 232: // FNC1\n result.append(String.fromCharCode(29)); // translate as ASCII 29\n break;\n case 233: // Structured Append\n case 234: // Reader Programming\n // Ignore these symbols for now\n // throw ReaderException.getInstance();\n break;\n case 235: // Upper Shift (shift to Extended ASCII)\n upperShift = true;\n break;\n case 236: // 05 Macro\n result.append('[)>\\u001E05\\u001D');\n resultTrailer.insert(0, '\\u001E\\u0004');\n break;\n case 237: // 06 Macro\n result.append('[)>\\u001E06\\u001D');\n resultTrailer.insert(0, '\\u001E\\u0004');\n break;\n case 238: // Latch to ANSI X12 encodation\n return Mode.ANSIX12_ENCODE;\n case 239: // Latch to Text encodation\n return Mode.TEXT_ENCODE;\n case 240: // Latch to EDIFACT encodation\n return Mode.EDIFACT_ENCODE;\n case 241: // ECI Character\n // TODO(bbrown): I think we need to support ECI\n // throw ReaderException.getInstance();\n // Ignore this symbol for now\n break;\n default:\n // Not to be used in ASCII encodation\n // but work around encoders that end with 254, latch back to ASCII\n if (oneByte !== 254 || bits.available() !== 0) {\n throw new FormatException();\n }\n break;\n }\n }\n } while (bits.available() > 0);\n return Mode.ASCII_ENCODE;\n };\n /**\n * See ISO 16022:2006, 5.2.5 and Annex C, Table C.1\n */\n DecodedBitStreamParser.decodeC40Segment = function (bits, result) {\n // Three C40 values are encoded in a 16-bit value as\n // (1600 * C1) + (40 * C2) + C3 + 1\n // TODO(bbrown): The Upper Shift with C40 doesn't work in the 4 value scenario all the time\n var upperShift = false;\n var cValues = [];\n var shift = 0;\n do {\n // If there is only one byte left then it will be encoded as ASCII\n if (bits.available() === 8) {\n return;\n }\n var firstByte = bits.readBits(8);\n if (firstByte === 254) { // Unlatch codeword\n return;\n }\n this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n for (var i = 0; i < 3; i++) {\n var cValue = cValues[i];\n switch (shift) {\n case 0:\n if (cValue < 3) {\n shift = cValue + 1;\n }\n else if (cValue < this.C40_BASIC_SET_CHARS.length) {\n var c40char = this.C40_BASIC_SET_CHARS[cValue];\n if (upperShift) {\n result.append(String.fromCharCode(c40char.charCodeAt(0) + 128));\n upperShift = false;\n }\n else {\n result.append(c40char);\n }\n }\n else {\n throw new FormatException();\n }\n break;\n case 1:\n if (upperShift) {\n result.append(String.fromCharCode(cValue + 128));\n upperShift = false;\n }\n else {\n result.append(String.fromCharCode(cValue));\n }\n shift = 0;\n break;\n case 2:\n if (cValue < this.C40_SHIFT2_SET_CHARS.length) {\n var c40char = this.C40_SHIFT2_SET_CHARS[cValue];\n if (upperShift) {\n result.append(String.fromCharCode(c40char.charCodeAt(0) + 128));\n upperShift = false;\n }\n else {\n result.append(c40char);\n }\n }\n else {\n switch (cValue) {\n case 27: // FNC1\n result.append(String.fromCharCode(29)); // translate as ASCII 29\n break;\n case 30: // Upper Shift\n upperShift = true;\n break;\n default:\n throw new FormatException();\n }\n }\n shift = 0;\n break;\n case 3:\n if (upperShift) {\n result.append(String.fromCharCode(cValue + 224));\n upperShift = false;\n }\n else {\n result.append(String.fromCharCode(cValue + 96));\n }\n shift = 0;\n break;\n default:\n throw new FormatException();\n }\n }\n } while (bits.available() > 0);\n };\n /**\n * See ISO 16022:2006, 5.2.6 and Annex C, Table C.2\n */\n DecodedBitStreamParser.decodeTextSegment = function (bits, result) {\n // Three Text values are encoded in a 16-bit value as\n // (1600 * C1) + (40 * C2) + C3 + 1\n // TODO(bbrown): The Upper Shift with Text doesn't work in the 4 value scenario all the time\n var upperShift = false;\n var cValues = [];\n var shift = 0;\n do {\n // If there is only one byte left then it will be encoded as ASCII\n if (bits.available() === 8) {\n return;\n }\n var firstByte = bits.readBits(8);\n if (firstByte === 254) { // Unlatch codeword\n return;\n }\n this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n for (var i = 0; i < 3; i++) {\n var cValue = cValues[i];\n switch (shift) {\n case 0:\n if (cValue < 3) {\n shift = cValue + 1;\n }\n else if (cValue < this.TEXT_BASIC_SET_CHARS.length) {\n var textChar = this.TEXT_BASIC_SET_CHARS[cValue];\n if (upperShift) {\n result.append(String.fromCharCode(textChar.charCodeAt(0) + 128));\n upperShift = false;\n }\n else {\n result.append(textChar);\n }\n }\n else {\n throw new FormatException();\n }\n break;\n case 1:\n if (upperShift) {\n result.append(String.fromCharCode(cValue + 128));\n upperShift = false;\n }\n else {\n result.append(String.fromCharCode(cValue));\n }\n shift = 0;\n break;\n case 2:\n // Shift 2 for Text is the same encoding as C40\n if (cValue < this.TEXT_SHIFT2_SET_CHARS.length) {\n var textChar = this.TEXT_SHIFT2_SET_CHARS[cValue];\n if (upperShift) {\n result.append(String.fromCharCode(textChar.charCodeAt(0) + 128));\n upperShift = false;\n }\n else {\n result.append(textChar);\n }\n }\n else {\n switch (cValue) {\n case 27: // FNC1\n result.append(String.fromCharCode(29)); // translate as ASCII 29\n break;\n case 30: // Upper Shift\n upperShift = true;\n break;\n default:\n throw new FormatException();\n }\n }\n shift = 0;\n break;\n case 3:\n if (cValue < this.TEXT_SHIFT3_SET_CHARS.length) {\n var textChar = this.TEXT_SHIFT3_SET_CHARS[cValue];\n if (upperShift) {\n result.append(String.fromCharCode(textChar.charCodeAt(0) + 128));\n upperShift = false;\n }\n else {\n result.append(textChar);\n }\n shift = 0;\n }\n else {\n throw new FormatException();\n }\n break;\n default:\n throw new FormatException();\n }\n }\n } while (bits.available() > 0);\n };\n /**\n * See ISO 16022:2006, 5.2.7\n */\n DecodedBitStreamParser.decodeAnsiX12Segment = function (bits, result) {\n // Three ANSI X12 values are encoded in a 16-bit value as\n // (1600 * C1) + (40 * C2) + C3 + 1\n var cValues = [];\n do {\n // If there is only one byte left then it will be encoded as ASCII\n if (bits.available() === 8) {\n return;\n }\n var firstByte = bits.readBits(8);\n if (firstByte === 254) { // Unlatch codeword\n return;\n }\n this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n for (var i = 0; i < 3; i++) {\n var cValue = cValues[i];\n switch (cValue) {\n case 0: // X12 segment terminator \n result.append('\\r');\n break;\n case 1: // X12 segment separator *\n result.append('*');\n break;\n case 2: // X12 sub-element separator >\n result.append('>');\n break;\n case 3: // space\n result.append(' ');\n break;\n default:\n if (cValue < 14) { // 0 - 9\n result.append(String.fromCharCode(cValue + 44));\n }\n else if (cValue < 40) { // A - Z\n result.append(String.fromCharCode(cValue + 51));\n }\n else {\n throw new FormatException();\n }\n break;\n }\n }\n } while (bits.available() > 0);\n };\n DecodedBitStreamParser.parseTwoBytes = function (firstByte, secondByte, result) {\n var fullBitValue = (firstByte << 8) + secondByte - 1;\n var temp = Math.floor(fullBitValue / 1600);\n result[0] = temp;\n fullBitValue -= temp * 1600;\n temp = Math.floor(fullBitValue / 40);\n result[1] = temp;\n result[2] = fullBitValue - temp * 40;\n };\n /**\n * See ISO 16022:2006, 5.2.8 and Annex C Table C.3\n */\n DecodedBitStreamParser.decodeEdifactSegment = function (bits, result) {\n do {\n // If there is only two or less bytes left then it will be encoded as ASCII\n if (bits.available() <= 16) {\n return;\n }\n for (var i = 0; i < 4; i++) {\n var edifactValue = bits.readBits(6);\n // Check for the unlatch character\n if (edifactValue === 0x1F) { // 011111\n // Read rest of byte, which should be 0, and stop\n var bitsLeft = 8 - bits.getBitOffset();\n if (bitsLeft !== 8) {\n bits.readBits(bitsLeft);\n }\n return;\n }\n if ((edifactValue & 0x20) === 0) { // no 1 in the leading (6th) bit\n edifactValue |= 0x40; // Add a leading 01 to the 6 bit binary value\n }\n result.append(String.fromCharCode(edifactValue));\n }\n } while (bits.available() > 0);\n };\n /**\n * See ISO 16022:2006, 5.2.9 and Annex B, B.2\n */\n DecodedBitStreamParser.decodeBase256Segment = function (bits, result, byteSegments) {\n // Figure out how long the Base 256 Segment is.\n var codewordPosition = 1 + bits.getByteOffset(); // position is 1-indexed\n var d1 = this.unrandomize255State(bits.readBits(8), codewordPosition++);\n var count;\n if (d1 === 0) { // Read the remainder of the symbol\n count = bits.available() / 8 | 0;\n }\n else if (d1 < 250) {\n count = d1;\n }\n else {\n count = 250 * (d1 - 249) + this.unrandomize255State(bits.readBits(8), codewordPosition++);\n }\n // We're seeing NegativeArraySizeException errors from users.\n if (count < 0) {\n throw new FormatException();\n }\n var bytes = new Uint8Array(count);\n for (var i = 0; i < count; i++) {\n // Have seen this particular error in the wild, such as at\n // http://www.bcgen.com/demo/IDAutomationStreamingDataMatrix.aspx?MODE=3&D=Fred&PFMT=3&PT=F&X=0.3&O=0&LM=0.2\n if (bits.available() < 8) {\n throw new FormatException();\n }\n bytes[i] = this.unrandomize255State(bits.readBits(8), codewordPosition++);\n }\n byteSegments.push(bytes);\n try {\n result.append(StringEncoding.decode(bytes, StringUtils.ISO88591));\n }\n catch (uee) {\n throw new IllegalStateException('Platform does not support required encoding: ' + uee.message);\n }\n };\n /**\n * See ISO 16022:2006, Annex B, B.2\n */\n DecodedBitStreamParser.unrandomize255State = function (randomizedBase256Codeword, base256CodewordPosition) {\n var pseudoRandomNumber = ((149 * base256CodewordPosition) % 255) + 1;\n var tempVariable = randomizedBase256Codeword - pseudoRandomNumber;\n return tempVariable >= 0 ? tempVariable : tempVariable + 256;\n };\n /**\n * See ISO 16022:2006, Annex C Table C.1\n * The C40 Basic Character Set (*'s used for placeholders for the shift values)\n */\n DecodedBitStreamParser.C40_BASIC_SET_CHARS = [\n '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',\n 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n ];\n DecodedBitStreamParser.C40_SHIFT2_SET_CHARS = [\n '!', '\"', '#', '$', '%', '&', '\\'', '(', ')', '*', '+', ',', '-', '.',\n '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\\\', ']', '^', '_'\n ];\n /**\n * See ISO 16022:2006, Annex C Table C.2\n * The Text Basic Character Set (*'s used for placeholders for the shift values)\n */\n DecodedBitStreamParser.TEXT_BASIC_SET_CHARS = [\n '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',\n 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'\n ];\n // Shift 2 for Text is the same encoding as C40\n DecodedBitStreamParser.TEXT_SHIFT2_SET_CHARS = DecodedBitStreamParser.C40_SHIFT2_SET_CHARS;\n DecodedBitStreamParser.TEXT_SHIFT3_SET_CHARS = [\n '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',\n 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', String.fromCharCode(127)\n ];\n return DecodedBitStreamParser;\n}());\nexport default DecodedBitStreamParser;\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport ChecksumException from '../../ChecksumException';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport ReedSolomonDecoder from '../../common/reedsolomon/ReedSolomonDecoder';\nimport BitMatrixParser from './BitMatrixParser';\nimport DataBlock from './DataBlock';\nimport DecodedBitStreamParser from './DecodedBitStreamParser';\n/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n *

The main class which implements Data Matrix Code decoding -- as opposed to locating and extracting\n * the Data Matrix Code from an image.

\n *\n * @author bbrown@google.com (Brian Brown)\n */\nvar Decoder = /** @class */ (function () {\n function Decoder() {\n this.rsDecoder = new ReedSolomonDecoder(GenericGF.DATA_MATRIX_FIELD_256);\n }\n /**\n *

Decodes a Data Matrix Code represented as a {@link BitMatrix}. A 1 or \"true\" is taken\n * to mean a black module.

\n *\n * @param bits booleans representing white/black Data Matrix Code modules\n * @return text and bytes encoded within the Data Matrix Code\n * @throws FormatException if the Data Matrix Code cannot be decoded\n * @throws ChecksumException if error correction fails\n */\n Decoder.prototype.decode = function (bits) {\n var e_1, _a;\n // Construct a parser and read version, error-correction level\n var parser = new BitMatrixParser(bits);\n var version = parser.getVersion();\n // Read codewords\n var codewords = parser.readCodewords();\n // Separate into data blocks\n var dataBlocks = DataBlock.getDataBlocks(codewords, version);\n // Count total number of data bytes\n var totalBytes = 0;\n try {\n for (var dataBlocks_1 = __values(dataBlocks), dataBlocks_1_1 = dataBlocks_1.next(); !dataBlocks_1_1.done; dataBlocks_1_1 = dataBlocks_1.next()) {\n var db = dataBlocks_1_1.value;\n totalBytes += db.getNumDataCodewords();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (dataBlocks_1_1 && !dataBlocks_1_1.done && (_a = dataBlocks_1.return)) _a.call(dataBlocks_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n var resultBytes = new Uint8Array(totalBytes);\n var dataBlocksCount = dataBlocks.length;\n // Error-correct and copy data blocks together into a stream of bytes\n for (var j = 0; j < dataBlocksCount; j++) {\n var dataBlock = dataBlocks[j];\n var codewordBytes = dataBlock.getCodewords();\n var numDataCodewords = dataBlock.getNumDataCodewords();\n this.correctErrors(codewordBytes, numDataCodewords);\n for (var i = 0; i < numDataCodewords; i++) {\n // De-interlace data blocks.\n resultBytes[i * dataBlocksCount + j] = codewordBytes[i];\n }\n }\n // Decode the contents of that stream of bytes\n return DecodedBitStreamParser.decode(resultBytes);\n };\n /**\n *

Given data and error-correction codewords received, possibly corrupted by errors, attempts to\n * correct the errors in-place using Reed-Solomon error correction.

\n *\n * @param codewordBytes data and error correction codewords\n * @param numDataCodewords number of codewords that are data bytes\n * @throws ChecksumException if error correction fails\n */\n Decoder.prototype.correctErrors = function (codewordBytes, numDataCodewords) {\n // const numCodewords = codewordBytes.length;\n // First read into an array of ints\n var codewordsInts = new Int32Array(codewordBytes);\n // for (let i = 0; i < numCodewords; i++) {\n // codewordsInts[i] = codewordBytes[i] & 0xFF;\n // }\n try {\n this.rsDecoder.decode(codewordsInts, codewordBytes.length - numDataCodewords);\n }\n catch (ignored /* ReedSolomonException */) {\n throw new ChecksumException();\n }\n // Copy back into array of bytes -- only need to worry about the bytes that were data\n // We don't care about errors in the error-correction codewords\n for (var i = 0; i < numDataCodewords; i++) {\n codewordBytes[i] = codewordsInts[i];\n }\n };\n return Decoder;\n}());\nexport default Decoder;\n","import WhiteRectangleDetector from '../../common/detector/WhiteRectangleDetector';\nimport DetectorResult from '../../common/DetectorResult';\nimport GridSamplerInstance from '../../common/GridSamplerInstance';\nimport NotFoundException from '../../NotFoundException';\nimport ResultPoint from '../../ResultPoint';\n/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n *

Encapsulates logic that can detect a Data Matrix Code in an image, even if the Data Matrix Code\n * is rotated or skewed, or partially obscured.

\n *\n * @author Sean Owen\n */\nvar Detector = /** @class */ (function () {\n function Detector(image) {\n this.image = image;\n this.rectangleDetector = new WhiteRectangleDetector(this.image);\n }\n /**\n *

Detects a Data Matrix Code in an image.

\n *\n * @return {@link DetectorResult} encapsulating results of detecting a Data Matrix Code\n * @throws NotFoundException if no Data Matrix Code can be found\n */\n Detector.prototype.detect = function () {\n var cornerPoints = this.rectangleDetector.detect();\n var points = this.detectSolid1(cornerPoints);\n points = this.detectSolid2(points);\n points[3] = this.correctTopRight(points);\n if (!points[3]) {\n throw new NotFoundException();\n }\n points = this.shiftToModuleCenter(points);\n var topLeft = points[0];\n var bottomLeft = points[1];\n var bottomRight = points[2];\n var topRight = points[3];\n var dimensionTop = this.transitionsBetween(topLeft, topRight) + 1;\n var dimensionRight = this.transitionsBetween(bottomRight, topRight) + 1;\n if ((dimensionTop & 0x01) === 1) {\n dimensionTop += 1;\n }\n if ((dimensionRight & 0x01) === 1) {\n dimensionRight += 1;\n }\n if (4 * dimensionTop < 7 * dimensionRight && 4 * dimensionRight < 7 * dimensionTop) {\n // The matrix is square\n dimensionTop = dimensionRight = Math.max(dimensionTop, dimensionRight);\n }\n var bits = Detector.sampleGrid(this.image, topLeft, bottomLeft, bottomRight, topRight, dimensionTop, dimensionRight);\n return new DetectorResult(bits, [topLeft, bottomLeft, bottomRight, topRight]);\n };\n Detector.shiftPoint = function (point, to, div) {\n var x = (to.getX() - point.getX()) / (div + 1);\n var y = (to.getY() - point.getY()) / (div + 1);\n return new ResultPoint(point.getX() + x, point.getY() + y);\n };\n Detector.moveAway = function (point, fromX, fromY) {\n var x = point.getX();\n var y = point.getY();\n if (x < fromX) {\n x -= 1;\n }\n else {\n x += 1;\n }\n if (y < fromY) {\n y -= 1;\n }\n else {\n y += 1;\n }\n return new ResultPoint(x, y);\n };\n /**\n * Detect a solid side which has minimum transition.\n */\n Detector.prototype.detectSolid1 = function (cornerPoints) {\n // 0 2\n // 1 3\n var pointA = cornerPoints[0];\n var pointB = cornerPoints[1];\n var pointC = cornerPoints[3];\n var pointD = cornerPoints[2];\n var trAB = this.transitionsBetween(pointA, pointB);\n var trBC = this.transitionsBetween(pointB, pointC);\n var trCD = this.transitionsBetween(pointC, pointD);\n var trDA = this.transitionsBetween(pointD, pointA);\n // 0..3\n // : :\n // 1--2\n var min = trAB;\n var points = [pointD, pointA, pointB, pointC];\n if (min > trBC) {\n min = trBC;\n points[0] = pointA;\n points[1] = pointB;\n points[2] = pointC;\n points[3] = pointD;\n }\n if (min > trCD) {\n min = trCD;\n points[0] = pointB;\n points[1] = pointC;\n points[2] = pointD;\n points[3] = pointA;\n }\n if (min > trDA) {\n points[0] = pointC;\n points[1] = pointD;\n points[2] = pointA;\n points[3] = pointB;\n }\n return points;\n };\n /**\n * Detect a second solid side next to first solid side.\n */\n Detector.prototype.detectSolid2 = function (points) {\n // A..D\n // : :\n // B--C\n var pointA = points[0];\n var pointB = points[1];\n var pointC = points[2];\n var pointD = points[3];\n // Transition detection on the edge is not stable.\n // To safely detect, shift the points to the module center.\n var tr = this.transitionsBetween(pointA, pointD);\n var pointBs = Detector.shiftPoint(pointB, pointC, (tr + 1) * 4);\n var pointCs = Detector.shiftPoint(pointC, pointB, (tr + 1) * 4);\n var trBA = this.transitionsBetween(pointBs, pointA);\n var trCD = this.transitionsBetween(pointCs, pointD);\n // 0..3\n // | :\n // 1--2\n if (trBA < trCD) {\n // solid sides: A-B-C\n points[0] = pointA;\n points[1] = pointB;\n points[2] = pointC;\n points[3] = pointD;\n }\n else {\n // solid sides: B-C-D\n points[0] = pointB;\n points[1] = pointC;\n points[2] = pointD;\n points[3] = pointA;\n }\n return points;\n };\n /**\n * Calculates the corner position of the white top right module.\n */\n Detector.prototype.correctTopRight = function (points) {\n // A..D\n // | :\n // B--C\n var pointA = points[0];\n var pointB = points[1];\n var pointC = points[2];\n var pointD = points[3];\n // shift points for safe transition detection.\n var trTop = this.transitionsBetween(pointA, pointD);\n var trRight = this.transitionsBetween(pointB, pointD);\n var pointAs = Detector.shiftPoint(pointA, pointB, (trRight + 1) * 4);\n var pointCs = Detector.shiftPoint(pointC, pointB, (trTop + 1) * 4);\n trTop = this.transitionsBetween(pointAs, pointD);\n trRight = this.transitionsBetween(pointCs, pointD);\n var candidate1 = new ResultPoint(pointD.getX() + (pointC.getX() - pointB.getX()) / (trTop + 1), pointD.getY() + (pointC.getY() - pointB.getY()) / (trTop + 1));\n var candidate2 = new ResultPoint(pointD.getX() + (pointA.getX() - pointB.getX()) / (trRight + 1), pointD.getY() + (pointA.getY() - pointB.getY()) / (trRight + 1));\n if (!this.isValid(candidate1)) {\n if (this.isValid(candidate2)) {\n return candidate2;\n }\n return null;\n }\n if (!this.isValid(candidate2)) {\n return candidate1;\n }\n var sumc1 = this.transitionsBetween(pointAs, candidate1) + this.transitionsBetween(pointCs, candidate1);\n var sumc2 = this.transitionsBetween(pointAs, candidate2) + this.transitionsBetween(pointCs, candidate2);\n if (sumc1 > sumc2) {\n return candidate1;\n }\n else {\n return candidate2;\n }\n };\n /**\n * Shift the edge points to the module center.\n */\n Detector.prototype.shiftToModuleCenter = function (points) {\n // A..D\n // | :\n // B--C\n var pointA = points[0];\n var pointB = points[1];\n var pointC = points[2];\n var pointD = points[3];\n // calculate pseudo dimensions\n var dimH = this.transitionsBetween(pointA, pointD) + 1;\n var dimV = this.transitionsBetween(pointC, pointD) + 1;\n // shift points for safe dimension detection\n var pointAs = Detector.shiftPoint(pointA, pointB, dimV * 4);\n var pointCs = Detector.shiftPoint(pointC, pointB, dimH * 4);\n // calculate more precise dimensions\n dimH = this.transitionsBetween(pointAs, pointD) + 1;\n dimV = this.transitionsBetween(pointCs, pointD) + 1;\n if ((dimH & 0x01) === 1) {\n dimH += 1;\n }\n if ((dimV & 0x01) === 1) {\n dimV += 1;\n }\n // WhiteRectangleDetector returns points inside of the rectangle.\n // I want points on the edges.\n var centerX = (pointA.getX() + pointB.getX() + pointC.getX() + pointD.getX()) / 4;\n var centerY = (pointA.getY() + pointB.getY() + pointC.getY() + pointD.getY()) / 4;\n pointA = Detector.moveAway(pointA, centerX, centerY);\n pointB = Detector.moveAway(pointB, centerX, centerY);\n pointC = Detector.moveAway(pointC, centerX, centerY);\n pointD = Detector.moveAway(pointD, centerX, centerY);\n var pointBs;\n var pointDs;\n // shift points to the center of each modules\n pointAs = Detector.shiftPoint(pointA, pointB, dimV * 4);\n pointAs = Detector.shiftPoint(pointAs, pointD, dimH * 4);\n pointBs = Detector.shiftPoint(pointB, pointA, dimV * 4);\n pointBs = Detector.shiftPoint(pointBs, pointC, dimH * 4);\n pointCs = Detector.shiftPoint(pointC, pointD, dimV * 4);\n pointCs = Detector.shiftPoint(pointCs, pointB, dimH * 4);\n pointDs = Detector.shiftPoint(pointD, pointC, dimV * 4);\n pointDs = Detector.shiftPoint(pointDs, pointA, dimH * 4);\n return [pointAs, pointBs, pointCs, pointDs];\n };\n Detector.prototype.isValid = function (p) {\n return p.getX() >= 0 && p.getX() < this.image.getWidth() && p.getY() > 0 && p.getY() < this.image.getHeight();\n };\n Detector.sampleGrid = function (image, topLeft, bottomLeft, bottomRight, topRight, dimensionX, dimensionY) {\n var sampler = GridSamplerInstance.getInstance();\n return sampler.sampleGrid(image, dimensionX, dimensionY, 0.5, 0.5, dimensionX - 0.5, 0.5, dimensionX - 0.5, dimensionY - 0.5, 0.5, dimensionY - 0.5, topLeft.getX(), topLeft.getY(), topRight.getX(), topRight.getY(), bottomRight.getX(), bottomRight.getY(), bottomLeft.getX(), bottomLeft.getY());\n };\n /**\n * Counts the number of black/white transitions between two points, using something like Bresenham's algorithm.\n */\n Detector.prototype.transitionsBetween = function (from, to) {\n // See QR Code Detector, sizeOfBlackWhiteBlackRun()\n var fromX = Math.trunc(from.getX());\n var fromY = Math.trunc(from.getY());\n var toX = Math.trunc(to.getX());\n var toY = Math.trunc(to.getY());\n var steep = Math.abs(toY - fromY) > Math.abs(toX - fromX);\n if (steep) {\n var temp = fromX;\n fromX = fromY;\n fromY = temp;\n temp = toX;\n toX = toY;\n toY = temp;\n }\n var dx = Math.abs(toX - fromX);\n var dy = Math.abs(toY - fromY);\n var error = -dx / 2;\n var ystep = fromY < toY ? 1 : -1;\n var xstep = fromX < toX ? 1 : -1;\n var transitions = 0;\n var inBlack = this.image.get(steep ? fromY : fromX, steep ? fromX : fromY);\n for (var x = fromX, y = fromY; x !== toX; x += xstep) {\n var isBlack = this.image.get(steep ? y : x, steep ? x : y);\n if (isBlack !== inBlack) {\n transitions++;\n inBlack = isBlack;\n }\n error += dy;\n if (error > 0) {\n if (y === toY) {\n break;\n }\n y += ystep;\n error -= dx;\n }\n }\n return transitions;\n };\n return Detector;\n}());\nexport default Detector;\n","import BarcodeFormat from '../BarcodeFormat';\nimport BitMatrix from '../common/BitMatrix';\nimport DecodeHintType from '../DecodeHintType';\nimport NotFoundException from '../NotFoundException';\nimport Result from '../Result';\nimport ResultMetadataType from '../ResultMetadataType';\nimport System from '../util/System';\nimport Decoder from './decoder/Decoder';\nimport Detector from './detector/Detector';\n/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * This implementation can detect and decode Data Matrix codes in an image.\n *\n * @author bbrown@google.com (Brian Brown)\n */\nvar DataMatrixReader = /** @class */ (function () {\n function DataMatrixReader() {\n this.decoder = new Decoder();\n }\n /**\n * Locates and decodes a Data Matrix code in an image.\n *\n * @return a String representing the content encoded by the Data Matrix code\n * @throws NotFoundException if a Data Matrix code cannot be found\n * @throws FormatException if a Data Matrix code cannot be decoded\n * @throws ChecksumException if error correction fails\n */\n // @Override\n // public Result decode(BinaryBitmap image) throws NotFoundException, ChecksumException, FormatException {\n // return decode(image, null);\n // }\n // @Override\n DataMatrixReader.prototype.decode = function (image, hints) {\n if (hints === void 0) { hints = null; }\n var decoderResult;\n var points;\n if (hints != null && hints.has(DecodeHintType.PURE_BARCODE)) {\n var bits = DataMatrixReader.extractPureBits(image.getBlackMatrix());\n decoderResult = this.decoder.decode(bits);\n points = DataMatrixReader.NO_POINTS;\n }\n else {\n var detectorResult = new Detector(image.getBlackMatrix()).detect();\n decoderResult = this.decoder.decode(detectorResult.getBits());\n points = detectorResult.getPoints();\n }\n var rawBytes = decoderResult.getRawBytes();\n var result = new Result(decoderResult.getText(), rawBytes, 8 * rawBytes.length, points, BarcodeFormat.DATA_MATRIX, System.currentTimeMillis());\n var byteSegments = decoderResult.getByteSegments();\n if (byteSegments != null) {\n result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, byteSegments);\n }\n var ecLevel = decoderResult.getECLevel();\n if (ecLevel != null) {\n result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, ecLevel);\n }\n return result;\n };\n // @Override\n DataMatrixReader.prototype.reset = function () {\n // do nothing\n };\n /**\n * This method detects a code in a \"pure\" image -- that is, pure monochrome image\n * which contains only an unrotated, unskewed, image of a code, with some white border\n * around it. This is a specialized method that works exceptionally fast in this special\n * case.\n *\n * @see com.google.zxing.qrcode.QRCodeReader#extractPureBits(BitMatrix)\n */\n DataMatrixReader.extractPureBits = function (image) {\n var leftTopBlack = image.getTopLeftOnBit();\n var rightBottomBlack = image.getBottomRightOnBit();\n if (leftTopBlack == null || rightBottomBlack == null) {\n throw new NotFoundException();\n }\n var moduleSize = this.moduleSize(leftTopBlack, image);\n var top = leftTopBlack[1];\n var bottom = rightBottomBlack[1];\n var left = leftTopBlack[0];\n var right = rightBottomBlack[0];\n var matrixWidth = (right - left + 1) / moduleSize;\n var matrixHeight = (bottom - top + 1) / moduleSize;\n if (matrixWidth <= 0 || matrixHeight <= 0) {\n throw new NotFoundException();\n }\n // Push in the \"border\" by half the module width so that we start\n // sampling in the middle of the module. Just in case the image is a\n // little off, this will help recover.\n var nudge = moduleSize / 2;\n top += nudge;\n left += nudge;\n // Now just read off the bits\n var bits = new BitMatrix(matrixWidth, matrixHeight);\n for (var y = 0; y < matrixHeight; y++) {\n var iOffset = top + y * moduleSize;\n for (var x = 0; x < matrixWidth; x++) {\n if (image.get(left + x * moduleSize, iOffset)) {\n bits.set(x, y);\n }\n }\n }\n return bits;\n };\n DataMatrixReader.moduleSize = function (leftTopBlack, image) {\n var width = image.getWidth();\n var x = leftTopBlack[0];\n var y = leftTopBlack[1];\n while (x < width && image.get(x, y)) {\n x++;\n }\n if (x === width) {\n throw new NotFoundException();\n }\n var moduleSize = x - leftTopBlack[0];\n if (moduleSize === 0) {\n throw new NotFoundException();\n }\n return moduleSize;\n };\n DataMatrixReader.NO_POINTS = [];\n return DataMatrixReader;\n}());\nexport default DataMatrixReader;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport DataMatrixReader from '../core/datamatrix/DataMatrixReader';\n/**\n * @deprecated Moving to @zxing/browser\n *\n * QR Code reader to use from browser.\n */\nvar BrowserDatamatrixCodeReader = /** @class */ (function (_super) {\n __extends(BrowserDatamatrixCodeReader, _super);\n /**\n * Creates an instance of BrowserQRCodeReader.\n * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n */\n function BrowserDatamatrixCodeReader(timeBetweenScansMillis) {\n if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n return _super.call(this, new DataMatrixReader(), timeBetweenScansMillis) || this;\n }\n return BrowserDatamatrixCodeReader;\n}(BrowserCodeReader));\nexport { BrowserDatamatrixCodeReader };\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.qrcode.decoder {*/\nimport ArgumentException from '../../ArgumentException';\nimport IllegalArgumentException from '../../IllegalArgumentException';\nexport var ErrorCorrectionLevelValues;\n(function (ErrorCorrectionLevelValues) {\n ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"L\"] = 0] = \"L\";\n ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"M\"] = 1] = \"M\";\n ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"Q\"] = 2] = \"Q\";\n ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"H\"] = 3] = \"H\";\n})(ErrorCorrectionLevelValues || (ErrorCorrectionLevelValues = {}));\n/**\n *

See ISO 18004:2006, 6.5.1. This enum encapsulates the four error correction levels\n * defined by the QR code standard.

\n *\n * @author Sean Owen\n */\nvar ErrorCorrectionLevel = /** @class */ (function () {\n function ErrorCorrectionLevel(value, stringValue, bits /*int*/) {\n this.value = value;\n this.stringValue = stringValue;\n this.bits = bits;\n ErrorCorrectionLevel.FOR_BITS.set(bits, this);\n ErrorCorrectionLevel.FOR_VALUE.set(value, this);\n }\n ErrorCorrectionLevel.prototype.getValue = function () {\n return this.value;\n };\n ErrorCorrectionLevel.prototype.getBits = function () {\n return this.bits;\n };\n ErrorCorrectionLevel.fromString = function (s) {\n switch (s) {\n case 'L': return ErrorCorrectionLevel.L;\n case 'M': return ErrorCorrectionLevel.M;\n case 'Q': return ErrorCorrectionLevel.Q;\n case 'H': return ErrorCorrectionLevel.H;\n default: throw new ArgumentException(s + 'not available');\n }\n };\n ErrorCorrectionLevel.prototype.toString = function () {\n return this.stringValue;\n };\n ErrorCorrectionLevel.prototype.equals = function (o) {\n if (!(o instanceof ErrorCorrectionLevel)) {\n return false;\n }\n var other = o;\n return this.value === other.value;\n };\n /**\n * @param bits int containing the two bits encoding a QR Code's error correction level\n * @return ErrorCorrectionLevel representing the encoded error correction level\n */\n ErrorCorrectionLevel.forBits = function (bits /*int*/) {\n if (bits < 0 || bits >= ErrorCorrectionLevel.FOR_BITS.size) {\n throw new IllegalArgumentException();\n }\n return ErrorCorrectionLevel.FOR_BITS.get(bits);\n };\n ErrorCorrectionLevel.FOR_BITS = new Map();\n ErrorCorrectionLevel.FOR_VALUE = new Map();\n /** L = ~7% correction */\n ErrorCorrectionLevel.L = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.L, 'L', 0x01);\n /** M = ~15% correction */\n ErrorCorrectionLevel.M = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.M, 'M', 0x00);\n /** Q = ~25% correction */\n ErrorCorrectionLevel.Q = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.Q, 'Q', 0x03);\n /** H = ~30% correction */\n ErrorCorrectionLevel.H = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.H, 'H', 0x02);\n return ErrorCorrectionLevel;\n}());\nexport default ErrorCorrectionLevel;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.decoder {*/\nimport ErrorCorrectionLevel from './ErrorCorrectionLevel';\nimport Integer from '../../util/Integer';\n/**\n *

Encapsulates a QR Code's format information, including the data mask used and\n * error correction level.

\n *\n * @author Sean Owen\n * @see DataMask\n * @see ErrorCorrectionLevel\n */\nvar FormatInformation = /** @class */ (function () {\n function FormatInformation(formatInfo /*int*/) {\n // Bits 3,4\n this.errorCorrectionLevel = ErrorCorrectionLevel.forBits((formatInfo >> 3) & 0x03);\n // Bottom 3 bits\n this.dataMask = /*(byte) */ (formatInfo & 0x07);\n }\n FormatInformation.numBitsDiffering = function (a /*int*/, b /*int*/) {\n return Integer.bitCount(a ^ b);\n };\n /**\n * @param maskedFormatInfo1 format info indicator, with mask still applied\n * @param maskedFormatInfo2 second copy of same info; both are checked at the same time\n * to establish best match\n * @return information about the format it specifies, or {@code null}\n * if doesn't seem to match any known pattern\n */\n FormatInformation.decodeFormatInformation = function (maskedFormatInfo1 /*int*/, maskedFormatInfo2 /*int*/) {\n var formatInfo = FormatInformation.doDecodeFormatInformation(maskedFormatInfo1, maskedFormatInfo2);\n if (formatInfo !== null) {\n return formatInfo;\n }\n // Should return null, but, some QR codes apparently\n // do not mask this info. Try again by actually masking the pattern\n // first\n return FormatInformation.doDecodeFormatInformation(maskedFormatInfo1 ^ FormatInformation.FORMAT_INFO_MASK_QR, maskedFormatInfo2 ^ FormatInformation.FORMAT_INFO_MASK_QR);\n };\n FormatInformation.doDecodeFormatInformation = function (maskedFormatInfo1 /*int*/, maskedFormatInfo2 /*int*/) {\n var e_1, _a;\n // Find the int in FORMAT_INFO_DECODE_LOOKUP with fewest bits differing\n var bestDifference = Number.MAX_SAFE_INTEGER;\n var bestFormatInfo = 0;\n try {\n for (var _b = __values(FormatInformation.FORMAT_INFO_DECODE_LOOKUP), _c = _b.next(); !_c.done; _c = _b.next()) {\n var decodeInfo = _c.value;\n var targetInfo = decodeInfo[0];\n if (targetInfo === maskedFormatInfo1 || targetInfo === maskedFormatInfo2) {\n // Found an exact match\n return new FormatInformation(decodeInfo[1]);\n }\n var bitsDifference = FormatInformation.numBitsDiffering(maskedFormatInfo1, targetInfo);\n if (bitsDifference < bestDifference) {\n bestFormatInfo = decodeInfo[1];\n bestDifference = bitsDifference;\n }\n if (maskedFormatInfo1 !== maskedFormatInfo2) {\n // also try the other option\n bitsDifference = FormatInformation.numBitsDiffering(maskedFormatInfo2, targetInfo);\n if (bitsDifference < bestDifference) {\n bestFormatInfo = decodeInfo[1];\n bestDifference = bitsDifference;\n }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits\n // differing means we found a match\n if (bestDifference <= 3) {\n return new FormatInformation(bestFormatInfo);\n }\n return null;\n };\n FormatInformation.prototype.getErrorCorrectionLevel = function () {\n return this.errorCorrectionLevel;\n };\n FormatInformation.prototype.getDataMask = function () {\n return this.dataMask;\n };\n /*@Override*/\n FormatInformation.prototype.hashCode = function () {\n return (this.errorCorrectionLevel.getBits() << 3) | this.dataMask;\n };\n /*@Override*/\n FormatInformation.prototype.equals = function (o) {\n if (!(o instanceof FormatInformation)) {\n return false;\n }\n var other = o;\n return this.errorCorrectionLevel === other.errorCorrectionLevel &&\n this.dataMask === other.dataMask;\n };\n FormatInformation.FORMAT_INFO_MASK_QR = 0x5412;\n /**\n * See ISO 18004:2006, Annex C, Table C.1\n */\n FormatInformation.FORMAT_INFO_DECODE_LOOKUP = [\n Int32Array.from([0x5412, 0x00]),\n Int32Array.from([0x5125, 0x01]),\n Int32Array.from([0x5E7C, 0x02]),\n Int32Array.from([0x5B4B, 0x03]),\n Int32Array.from([0x45F9, 0x04]),\n Int32Array.from([0x40CE, 0x05]),\n Int32Array.from([0x4F97, 0x06]),\n Int32Array.from([0x4AA0, 0x07]),\n Int32Array.from([0x77C4, 0x08]),\n Int32Array.from([0x72F3, 0x09]),\n Int32Array.from([0x7DAA, 0x0A]),\n Int32Array.from([0x789D, 0x0B]),\n Int32Array.from([0x662F, 0x0C]),\n Int32Array.from([0x6318, 0x0D]),\n Int32Array.from([0x6C41, 0x0E]),\n Int32Array.from([0x6976, 0x0F]),\n Int32Array.from([0x1689, 0x10]),\n Int32Array.from([0x13BE, 0x11]),\n Int32Array.from([0x1CE7, 0x12]),\n Int32Array.from([0x19D0, 0x13]),\n Int32Array.from([0x0762, 0x14]),\n Int32Array.from([0x0255, 0x15]),\n Int32Array.from([0x0D0C, 0x16]),\n Int32Array.from([0x083B, 0x17]),\n Int32Array.from([0x355F, 0x18]),\n Int32Array.from([0x3068, 0x19]),\n Int32Array.from([0x3F31, 0x1A]),\n Int32Array.from([0x3A06, 0x1B]),\n Int32Array.from([0x24B4, 0x1C]),\n Int32Array.from([0x2183, 0x1D]),\n Int32Array.from([0x2EDA, 0x1E]),\n Int32Array.from([0x2BED, 0x1F]),\n ];\n return FormatInformation;\n}());\nexport default FormatInformation;\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/**\n *

Encapsulates a set of error-correction blocks in one symbol version. Most versions will\n * use blocks of differing sizes within one version, so, this encapsulates the parameters for\n * each set of blocks. It also holds the number of error-correction codewords per block since it\n * will be the same across all blocks within one version.

\n */\nvar ECBlocks = /** @class */ (function () {\n function ECBlocks(ecCodewordsPerBlock /*int*/) {\n var ecBlocks = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n ecBlocks[_i - 1] = arguments[_i];\n }\n this.ecCodewordsPerBlock = ecCodewordsPerBlock;\n this.ecBlocks = ecBlocks;\n }\n ECBlocks.prototype.getECCodewordsPerBlock = function () {\n return this.ecCodewordsPerBlock;\n };\n ECBlocks.prototype.getNumBlocks = function () {\n var e_1, _a;\n var total = 0;\n var ecBlocks = this.ecBlocks;\n try {\n for (var ecBlocks_1 = __values(ecBlocks), ecBlocks_1_1 = ecBlocks_1.next(); !ecBlocks_1_1.done; ecBlocks_1_1 = ecBlocks_1.next()) {\n var ecBlock = ecBlocks_1_1.value;\n total += ecBlock.getCount();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (ecBlocks_1_1 && !ecBlocks_1_1.done && (_a = ecBlocks_1.return)) _a.call(ecBlocks_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return total;\n };\n ECBlocks.prototype.getTotalECCodewords = function () {\n return this.ecCodewordsPerBlock * this.getNumBlocks();\n };\n ECBlocks.prototype.getECBlocks = function () {\n return this.ecBlocks;\n };\n return ECBlocks;\n}());\nexport default ECBlocks;\n","/**\n *

Encapsulates the parameters for one error-correction block in one symbol version.\n * This includes the number of data codewords, and the number of times a block with these\n * parameters is used consecutively in the QR code version's format.

\n */\nvar ECB = /** @class */ (function () {\n function ECB(count /*int*/, dataCodewords /*int*/) {\n this.count = count;\n this.dataCodewords = dataCodewords;\n }\n ECB.prototype.getCount = function () {\n return this.count;\n };\n ECB.prototype.getDataCodewords = function () {\n return this.dataCodewords;\n };\n return ECB;\n}());\nexport default ECB;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.decoder {*/\nimport BitMatrix from '../../common/BitMatrix';\nimport FormatInformation from './FormatInformation';\nimport ECBlocks from './ECBlocks';\nimport ECB from './ECB';\nimport FormatException from '../../FormatException';\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/**\n * See ISO 18004:2006 Annex D\n *\n * @author Sean Owen\n */\nvar Version = /** @class */ (function () {\n function Version(versionNumber /*int*/, alignmentPatternCenters) {\n var e_1, _a;\n var ecBlocks = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n ecBlocks[_i - 2] = arguments[_i];\n }\n this.versionNumber = versionNumber;\n this.alignmentPatternCenters = alignmentPatternCenters;\n this.ecBlocks = ecBlocks;\n var total = 0;\n var ecCodewords = ecBlocks[0].getECCodewordsPerBlock();\n var ecbArray = ecBlocks[0].getECBlocks();\n try {\n for (var ecbArray_1 = __values(ecbArray), ecbArray_1_1 = ecbArray_1.next(); !ecbArray_1_1.done; ecbArray_1_1 = ecbArray_1.next()) {\n var ecBlock = ecbArray_1_1.value;\n total += ecBlock.getCount() * (ecBlock.getDataCodewords() + ecCodewords);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (ecbArray_1_1 && !ecbArray_1_1.done && (_a = ecbArray_1.return)) _a.call(ecbArray_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this.totalCodewords = total;\n }\n Version.prototype.getVersionNumber = function () {\n return this.versionNumber;\n };\n Version.prototype.getAlignmentPatternCenters = function () {\n return this.alignmentPatternCenters;\n };\n Version.prototype.getTotalCodewords = function () {\n return this.totalCodewords;\n };\n Version.prototype.getDimensionForVersion = function () {\n return 17 + 4 * this.versionNumber;\n };\n Version.prototype.getECBlocksForLevel = function (ecLevel) {\n return this.ecBlocks[ecLevel.getValue()];\n // TYPESCRIPTPORT: original was using ordinal, and using the order of levels as defined in ErrorCorrectionLevel enum (LMQH)\n // I will use the direct value from ErrorCorrectionLevelValues enum which in typescript goes to a number\n };\n /**\n *

Deduces version information purely from QR Code dimensions.

\n *\n * @param dimension dimension in modules\n * @return Version for a QR Code of that dimension\n * @throws FormatException if dimension is not 1 mod 4\n */\n Version.getProvisionalVersionForDimension = function (dimension /*int*/) {\n if (dimension % 4 !== 1) {\n throw new FormatException();\n }\n try {\n return this.getVersionForNumber((dimension - 17) / 4);\n }\n catch (ignored /*: IllegalArgumentException*/) {\n throw new FormatException();\n }\n };\n Version.getVersionForNumber = function (versionNumber /*int*/) {\n if (versionNumber < 1 || versionNumber > 40) {\n throw new IllegalArgumentException();\n }\n return Version.VERSIONS[versionNumber - 1];\n };\n Version.decodeVersionInformation = function (versionBits /*int*/) {\n var bestDifference = Number.MAX_SAFE_INTEGER;\n var bestVersion = 0;\n for (var i = 0; i < Version.VERSION_DECODE_INFO.length; i++) {\n var targetVersion = Version.VERSION_DECODE_INFO[i];\n // Do the version info bits match exactly? done.\n if (targetVersion === versionBits) {\n return Version.getVersionForNumber(i + 7);\n }\n // Otherwise see if this is the closest to a real version info bit string\n // we have seen so far\n var bitsDifference = FormatInformation.numBitsDiffering(versionBits, targetVersion);\n if (bitsDifference < bestDifference) {\n bestVersion = i + 7;\n bestDifference = bitsDifference;\n }\n }\n // We can tolerate up to 3 bits of error since no two version info codewords will\n // differ in less than 8 bits.\n if (bestDifference <= 3) {\n return Version.getVersionForNumber(bestVersion);\n }\n // If we didn't find a close enough match, fail\n return null;\n };\n /**\n * See ISO 18004:2006 Annex E\n */\n Version.prototype.buildFunctionPattern = function () {\n var dimension = this.getDimensionForVersion();\n var bitMatrix = new BitMatrix(dimension);\n // Top left finder pattern + separator + format\n bitMatrix.setRegion(0, 0, 9, 9);\n // Top right finder pattern + separator + format\n bitMatrix.setRegion(dimension - 8, 0, 8, 9);\n // Bottom left finder pattern + separator + format\n bitMatrix.setRegion(0, dimension - 8, 9, 8);\n // Alignment patterns\n var max = this.alignmentPatternCenters.length;\n for (var x = 0; x < max; x++) {\n var i = this.alignmentPatternCenters[x] - 2;\n for (var y = 0; y < max; y++) {\n if ((x === 0 && (y === 0 || y === max - 1)) || (x === max - 1 && y === 0)) {\n // No alignment patterns near the three finder patterns\n continue;\n }\n bitMatrix.setRegion(this.alignmentPatternCenters[y] - 2, i, 5, 5);\n }\n }\n // Vertical timing pattern\n bitMatrix.setRegion(6, 9, 1, dimension - 17);\n // Horizontal timing pattern\n bitMatrix.setRegion(9, 6, dimension - 17, 1);\n if (this.versionNumber > 6) {\n // Version info, top right\n bitMatrix.setRegion(dimension - 11, 0, 3, 6);\n // Version info, bottom left\n bitMatrix.setRegion(0, dimension - 11, 6, 3);\n }\n return bitMatrix;\n };\n /*@Override*/\n Version.prototype.toString = function () {\n return '' + this.versionNumber;\n };\n /**\n * See ISO 18004:2006 Annex D.\n * Element i represents the raw version bits that specify version i + 7\n */\n Version.VERSION_DECODE_INFO = Int32Array.from([\n 0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6,\n 0x0C762, 0x0D847, 0x0E60D, 0x0F928, 0x10B78,\n 0x1145D, 0x12A17, 0x13532, 0x149A6, 0x15683,\n 0x168C9, 0x177EC, 0x18EC4, 0x191E1, 0x1AFAB,\n 0x1B08E, 0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250,\n 0x209D5, 0x216F0, 0x228BA, 0x2379F, 0x24B0B,\n 0x2542E, 0x26A64, 0x27541, 0x28C69\n ]);\n /**\n * See ISO 18004:2006 6.5.1 Table 9\n */\n Version.VERSIONS = [\n new Version(1, new Int32Array(0), new ECBlocks(7, new ECB(1, 19)), new ECBlocks(10, new ECB(1, 16)), new ECBlocks(13, new ECB(1, 13)), new ECBlocks(17, new ECB(1, 9))),\n new Version(2, Int32Array.from([6, 18]), new ECBlocks(10, new ECB(1, 34)), new ECBlocks(16, new ECB(1, 28)), new ECBlocks(22, new ECB(1, 22)), new ECBlocks(28, new ECB(1, 16))),\n new Version(3, Int32Array.from([6, 22]), new ECBlocks(15, new ECB(1, 55)), new ECBlocks(26, new ECB(1, 44)), new ECBlocks(18, new ECB(2, 17)), new ECBlocks(22, new ECB(2, 13))),\n new Version(4, Int32Array.from([6, 26]), new ECBlocks(20, new ECB(1, 80)), new ECBlocks(18, new ECB(2, 32)), new ECBlocks(26, new ECB(2, 24)), new ECBlocks(16, new ECB(4, 9))),\n new Version(5, Int32Array.from([6, 30]), new ECBlocks(26, new ECB(1, 108)), new ECBlocks(24, new ECB(2, 43)), new ECBlocks(18, new ECB(2, 15), new ECB(2, 16)), new ECBlocks(22, new ECB(2, 11), new ECB(2, 12))),\n new Version(6, Int32Array.from([6, 34]), new ECBlocks(18, new ECB(2, 68)), new ECBlocks(16, new ECB(4, 27)), new ECBlocks(24, new ECB(4, 19)), new ECBlocks(28, new ECB(4, 15))),\n new Version(7, Int32Array.from([6, 22, 38]), new ECBlocks(20, new ECB(2, 78)), new ECBlocks(18, new ECB(4, 31)), new ECBlocks(18, new ECB(2, 14), new ECB(4, 15)), new ECBlocks(26, new ECB(4, 13), new ECB(1, 14))),\n new Version(8, Int32Array.from([6, 24, 42]), new ECBlocks(24, new ECB(2, 97)), new ECBlocks(22, new ECB(2, 38), new ECB(2, 39)), new ECBlocks(22, new ECB(4, 18), new ECB(2, 19)), new ECBlocks(26, new ECB(4, 14), new ECB(2, 15))),\n new Version(9, Int32Array.from([6, 26, 46]), new ECBlocks(30, new ECB(2, 116)), new ECBlocks(22, new ECB(3, 36), new ECB(2, 37)), new ECBlocks(20, new ECB(4, 16), new ECB(4, 17)), new ECBlocks(24, new ECB(4, 12), new ECB(4, 13))),\n new Version(10, Int32Array.from([6, 28, 50]), new ECBlocks(18, new ECB(2, 68), new ECB(2, 69)), new ECBlocks(26, new ECB(4, 43), new ECB(1, 44)), new ECBlocks(24, new ECB(6, 19), new ECB(2, 20)), new ECBlocks(28, new ECB(6, 15), new ECB(2, 16))),\n new Version(11, Int32Array.from([6, 30, 54]), new ECBlocks(20, new ECB(4, 81)), new ECBlocks(30, new ECB(1, 50), new ECB(4, 51)), new ECBlocks(28, new ECB(4, 22), new ECB(4, 23)), new ECBlocks(24, new ECB(3, 12), new ECB(8, 13))),\n new Version(12, Int32Array.from([6, 32, 58]), new ECBlocks(24, new ECB(2, 92), new ECB(2, 93)), new ECBlocks(22, new ECB(6, 36), new ECB(2, 37)), new ECBlocks(26, new ECB(4, 20), new ECB(6, 21)), new ECBlocks(28, new ECB(7, 14), new ECB(4, 15))),\n new Version(13, Int32Array.from([6, 34, 62]), new ECBlocks(26, new ECB(4, 107)), new ECBlocks(22, new ECB(8, 37), new ECB(1, 38)), new ECBlocks(24, new ECB(8, 20), new ECB(4, 21)), new ECBlocks(22, new ECB(12, 11), new ECB(4, 12))),\n new Version(14, Int32Array.from([6, 26, 46, 66]), new ECBlocks(30, new ECB(3, 115), new ECB(1, 116)), new ECBlocks(24, new ECB(4, 40), new ECB(5, 41)), new ECBlocks(20, new ECB(11, 16), new ECB(5, 17)), new ECBlocks(24, new ECB(11, 12), new ECB(5, 13))),\n new Version(15, Int32Array.from([6, 26, 48, 70]), new ECBlocks(22, new ECB(5, 87), new ECB(1, 88)), new ECBlocks(24, new ECB(5, 41), new ECB(5, 42)), new ECBlocks(30, new ECB(5, 24), new ECB(7, 25)), new ECBlocks(24, new ECB(11, 12), new ECB(7, 13))),\n new Version(16, Int32Array.from([6, 26, 50, 74]), new ECBlocks(24, new ECB(5, 98), new ECB(1, 99)), new ECBlocks(28, new ECB(7, 45), new ECB(3, 46)), new ECBlocks(24, new ECB(15, 19), new ECB(2, 20)), new ECBlocks(30, new ECB(3, 15), new ECB(13, 16))),\n new Version(17, Int32Array.from([6, 30, 54, 78]), new ECBlocks(28, new ECB(1, 107), new ECB(5, 108)), new ECBlocks(28, new ECB(10, 46), new ECB(1, 47)), new ECBlocks(28, new ECB(1, 22), new ECB(15, 23)), new ECBlocks(28, new ECB(2, 14), new ECB(17, 15))),\n new Version(18, Int32Array.from([6, 30, 56, 82]), new ECBlocks(30, new ECB(5, 120), new ECB(1, 121)), new ECBlocks(26, new ECB(9, 43), new ECB(4, 44)), new ECBlocks(28, new ECB(17, 22), new ECB(1, 23)), new ECBlocks(28, new ECB(2, 14), new ECB(19, 15))),\n new Version(19, Int32Array.from([6, 30, 58, 86]), new ECBlocks(28, new ECB(3, 113), new ECB(4, 114)), new ECBlocks(26, new ECB(3, 44), new ECB(11, 45)), new ECBlocks(26, new ECB(17, 21), new ECB(4, 22)), new ECBlocks(26, new ECB(9, 13), new ECB(16, 14))),\n new Version(20, Int32Array.from([6, 34, 62, 90]), new ECBlocks(28, new ECB(3, 107), new ECB(5, 108)), new ECBlocks(26, new ECB(3, 41), new ECB(13, 42)), new ECBlocks(30, new ECB(15, 24), new ECB(5, 25)), new ECBlocks(28, new ECB(15, 15), new ECB(10, 16))),\n new Version(21, Int32Array.from([6, 28, 50, 72, 94]), new ECBlocks(28, new ECB(4, 116), new ECB(4, 117)), new ECBlocks(26, new ECB(17, 42)), new ECBlocks(28, new ECB(17, 22), new ECB(6, 23)), new ECBlocks(30, new ECB(19, 16), new ECB(6, 17))),\n new Version(22, Int32Array.from([6, 26, 50, 74, 98]), new ECBlocks(28, new ECB(2, 111), new ECB(7, 112)), new ECBlocks(28, new ECB(17, 46)), new ECBlocks(30, new ECB(7, 24), new ECB(16, 25)), new ECBlocks(24, new ECB(34, 13))),\n new Version(23, Int32Array.from([6, 30, 54, 78, 102]), new ECBlocks(30, new ECB(4, 121), new ECB(5, 122)), new ECBlocks(28, new ECB(4, 47), new ECB(14, 48)), new ECBlocks(30, new ECB(11, 24), new ECB(14, 25)), new ECBlocks(30, new ECB(16, 15), new ECB(14, 16))),\n new Version(24, Int32Array.from([6, 28, 54, 80, 106]), new ECBlocks(30, new ECB(6, 117), new ECB(4, 118)), new ECBlocks(28, new ECB(6, 45), new ECB(14, 46)), new ECBlocks(30, new ECB(11, 24), new ECB(16, 25)), new ECBlocks(30, new ECB(30, 16), new ECB(2, 17))),\n new Version(25, Int32Array.from([6, 32, 58, 84, 110]), new ECBlocks(26, new ECB(8, 106), new ECB(4, 107)), new ECBlocks(28, new ECB(8, 47), new ECB(13, 48)), new ECBlocks(30, new ECB(7, 24), new ECB(22, 25)), new ECBlocks(30, new ECB(22, 15), new ECB(13, 16))),\n new Version(26, Int32Array.from([6, 30, 58, 86, 114]), new ECBlocks(28, new ECB(10, 114), new ECB(2, 115)), new ECBlocks(28, new ECB(19, 46), new ECB(4, 47)), new ECBlocks(28, new ECB(28, 22), new ECB(6, 23)), new ECBlocks(30, new ECB(33, 16), new ECB(4, 17))),\n new Version(27, Int32Array.from([6, 34, 62, 90, 118]), new ECBlocks(30, new ECB(8, 122), new ECB(4, 123)), new ECBlocks(28, new ECB(22, 45), new ECB(3, 46)), new ECBlocks(30, new ECB(8, 23), new ECB(26, 24)), new ECBlocks(30, new ECB(12, 15), new ECB(28, 16))),\n new Version(28, Int32Array.from([6, 26, 50, 74, 98, 122]), new ECBlocks(30, new ECB(3, 117), new ECB(10, 118)), new ECBlocks(28, new ECB(3, 45), new ECB(23, 46)), new ECBlocks(30, new ECB(4, 24), new ECB(31, 25)), new ECBlocks(30, new ECB(11, 15), new ECB(31, 16))),\n new Version(29, Int32Array.from([6, 30, 54, 78, 102, 126]), new ECBlocks(30, new ECB(7, 116), new ECB(7, 117)), new ECBlocks(28, new ECB(21, 45), new ECB(7, 46)), new ECBlocks(30, new ECB(1, 23), new ECB(37, 24)), new ECBlocks(30, new ECB(19, 15), new ECB(26, 16))),\n new Version(30, Int32Array.from([6, 26, 52, 78, 104, 130]), new ECBlocks(30, new ECB(5, 115), new ECB(10, 116)), new ECBlocks(28, new ECB(19, 47), new ECB(10, 48)), new ECBlocks(30, new ECB(15, 24), new ECB(25, 25)), new ECBlocks(30, new ECB(23, 15), new ECB(25, 16))),\n new Version(31, Int32Array.from([6, 30, 56, 82, 108, 134]), new ECBlocks(30, new ECB(13, 115), new ECB(3, 116)), new ECBlocks(28, new ECB(2, 46), new ECB(29, 47)), new ECBlocks(30, new ECB(42, 24), new ECB(1, 25)), new ECBlocks(30, new ECB(23, 15), new ECB(28, 16))),\n new Version(32, Int32Array.from([6, 34, 60, 86, 112, 138]), new ECBlocks(30, new ECB(17, 115)), new ECBlocks(28, new ECB(10, 46), new ECB(23, 47)), new ECBlocks(30, new ECB(10, 24), new ECB(35, 25)), new ECBlocks(30, new ECB(19, 15), new ECB(35, 16))),\n new Version(33, Int32Array.from([6, 30, 58, 86, 114, 142]), new ECBlocks(30, new ECB(17, 115), new ECB(1, 116)), new ECBlocks(28, new ECB(14, 46), new ECB(21, 47)), new ECBlocks(30, new ECB(29, 24), new ECB(19, 25)), new ECBlocks(30, new ECB(11, 15), new ECB(46, 16))),\n new Version(34, Int32Array.from([6, 34, 62, 90, 118, 146]), new ECBlocks(30, new ECB(13, 115), new ECB(6, 116)), new ECBlocks(28, new ECB(14, 46), new ECB(23, 47)), new ECBlocks(30, new ECB(44, 24), new ECB(7, 25)), new ECBlocks(30, new ECB(59, 16), new ECB(1, 17))),\n new Version(35, Int32Array.from([6, 30, 54, 78, 102, 126, 150]), new ECBlocks(30, new ECB(12, 121), new ECB(7, 122)), new ECBlocks(28, new ECB(12, 47), new ECB(26, 48)), new ECBlocks(30, new ECB(39, 24), new ECB(14, 25)), new ECBlocks(30, new ECB(22, 15), new ECB(41, 16))),\n new Version(36, Int32Array.from([6, 24, 50, 76, 102, 128, 154]), new ECBlocks(30, new ECB(6, 121), new ECB(14, 122)), new ECBlocks(28, new ECB(6, 47), new ECB(34, 48)), new ECBlocks(30, new ECB(46, 24), new ECB(10, 25)), new ECBlocks(30, new ECB(2, 15), new ECB(64, 16))),\n new Version(37, Int32Array.from([6, 28, 54, 80, 106, 132, 158]), new ECBlocks(30, new ECB(17, 122), new ECB(4, 123)), new ECBlocks(28, new ECB(29, 46), new ECB(14, 47)), new ECBlocks(30, new ECB(49, 24), new ECB(10, 25)), new ECBlocks(30, new ECB(24, 15), new ECB(46, 16))),\n new Version(38, Int32Array.from([6, 32, 58, 84, 110, 136, 162]), new ECBlocks(30, new ECB(4, 122), new ECB(18, 123)), new ECBlocks(28, new ECB(13, 46), new ECB(32, 47)), new ECBlocks(30, new ECB(48, 24), new ECB(14, 25)), new ECBlocks(30, new ECB(42, 15), new ECB(32, 16))),\n new Version(39, Int32Array.from([6, 26, 54, 82, 110, 138, 166]), new ECBlocks(30, new ECB(20, 117), new ECB(4, 118)), new ECBlocks(28, new ECB(40, 47), new ECB(7, 48)), new ECBlocks(30, new ECB(43, 24), new ECB(22, 25)), new ECBlocks(30, new ECB(10, 15), new ECB(67, 16))),\n new Version(40, Int32Array.from([6, 30, 58, 86, 114, 142, 170]), new ECBlocks(30, new ECB(19, 118), new ECB(6, 119)), new ECBlocks(28, new ECB(18, 47), new ECB(31, 48)), new ECBlocks(30, new ECB(34, 24), new ECB(34, 25)), new ECBlocks(30, new ECB(20, 15), new ECB(61, 16)))\n ];\n return Version;\n}());\nexport default Version;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var DataMaskValues;\n(function (DataMaskValues) {\n DataMaskValues[DataMaskValues[\"DATA_MASK_000\"] = 0] = \"DATA_MASK_000\";\n DataMaskValues[DataMaskValues[\"DATA_MASK_001\"] = 1] = \"DATA_MASK_001\";\n DataMaskValues[DataMaskValues[\"DATA_MASK_010\"] = 2] = \"DATA_MASK_010\";\n DataMaskValues[DataMaskValues[\"DATA_MASK_011\"] = 3] = \"DATA_MASK_011\";\n DataMaskValues[DataMaskValues[\"DATA_MASK_100\"] = 4] = \"DATA_MASK_100\";\n DataMaskValues[DataMaskValues[\"DATA_MASK_101\"] = 5] = \"DATA_MASK_101\";\n DataMaskValues[DataMaskValues[\"DATA_MASK_110\"] = 6] = \"DATA_MASK_110\";\n DataMaskValues[DataMaskValues[\"DATA_MASK_111\"] = 7] = \"DATA_MASK_111\";\n})(DataMaskValues || (DataMaskValues = {}));\n/**\n *

Encapsulates data masks for the data bits in a QR code, per ISO 18004:2006 6.8. Implementations\n * of this class can un-mask a raw BitMatrix. For simplicity, they will unmask the entire BitMatrix,\n * including areas used for finder patterns, timing patterns, etc. These areas should be unused\n * after the point they are unmasked anyway.

\n *\n *

Note that the diagram in section 6.8.1 is misleading since it indicates that i is column position\n * and j is row position. In fact, as the text says, i is row position and j is column position.

\n *\n * @author Sean Owen\n */\nvar DataMask = /** @class */ (function () {\n // See ISO 18004:2006 6.8.1\n function DataMask(value, isMasked) {\n this.value = value;\n this.isMasked = isMasked;\n }\n // End of enum constants.\n /**\n *

Implementations of this method reverse the data masking process applied to a QR Code and\n * make its bits ready to read.

\n *\n * @param bits representation of QR Code bits\n * @param dimension dimension of QR Code, represented by bits, being unmasked\n */\n DataMask.prototype.unmaskBitMatrix = function (bits, dimension /*int*/) {\n for (var i = 0; i < dimension; i++) {\n for (var j = 0; j < dimension; j++) {\n if (this.isMasked(i, j)) {\n bits.flip(j, i);\n }\n }\n }\n };\n DataMask.values = new Map([\n /**\n * 000: mask bits for which (x + y) mod 2 == 0\n */\n [DataMaskValues.DATA_MASK_000, new DataMask(DataMaskValues.DATA_MASK_000, function (i /*int*/, j /*int*/) { return ((i + j) & 0x01) === 0; })],\n /**\n * 001: mask bits for which x mod 2 == 0\n */\n [DataMaskValues.DATA_MASK_001, new DataMask(DataMaskValues.DATA_MASK_001, function (i /*int*/, j /*int*/) { return (i & 0x01) === 0; })],\n /**\n * 010: mask bits for which y mod 3 == 0\n */\n [DataMaskValues.DATA_MASK_010, new DataMask(DataMaskValues.DATA_MASK_010, function (i /*int*/, j /*int*/) { return j % 3 === 0; })],\n /**\n * 011: mask bits for which (x + y) mod 3 == 0\n */\n [DataMaskValues.DATA_MASK_011, new DataMask(DataMaskValues.DATA_MASK_011, function (i /*int*/, j /*int*/) { return (i + j) % 3 === 0; })],\n /**\n * 100: mask bits for which (x/2 + y/3) mod 2 == 0\n */\n [DataMaskValues.DATA_MASK_100, new DataMask(DataMaskValues.DATA_MASK_100, function (i /*int*/, j /*int*/) { return ((Math.floor(i / 2) + Math.floor(j / 3)) & 0x01) === 0; })],\n /**\n * 101: mask bits for which xy mod 2 + xy mod 3 == 0\n * equivalently, such that xy mod 6 == 0\n */\n [DataMaskValues.DATA_MASK_101, new DataMask(DataMaskValues.DATA_MASK_101, function (i /*int*/, j /*int*/) { return (i * j) % 6 === 0; })],\n /**\n * 110: mask bits for which (xy mod 2 + xy mod 3) mod 2 == 0\n * equivalently, such that xy mod 6 < 3\n */\n [DataMaskValues.DATA_MASK_110, new DataMask(DataMaskValues.DATA_MASK_110, function (i /*int*/, j /*int*/) { return ((i * j) % 6) < 3; })],\n /**\n * 111: mask bits for which ((x+y)mod 2 + xy mod 3) mod 2 == 0\n * equivalently, such that (x + y + xy mod 3) mod 2 == 0\n */\n [DataMaskValues.DATA_MASK_111, new DataMask(DataMaskValues.DATA_MASK_111, function (i /*int*/, j /*int*/) { return ((i + j + ((i * j) % 3)) & 0x01) === 0; })],\n ]);\n return DataMask;\n}());\nexport default DataMask;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Version from './Version';\nimport FormatInformation from './FormatInformation';\nimport DataMask from './DataMask';\nimport FormatException from '../../FormatException';\n/**\n * @author Sean Owen\n */\nvar BitMatrixParser = /** @class */ (function () {\n /**\n * @param bitMatrix {@link BitMatrix} to parse\n * @throws FormatException if dimension is not >= 21 and 1 mod 4\n */\n function BitMatrixParser(bitMatrix) {\n var dimension = bitMatrix.getHeight();\n if (dimension < 21 || (dimension & 0x03) !== 1) {\n throw new FormatException();\n }\n this.bitMatrix = bitMatrix;\n }\n /**\n *

Reads format information from one of its two locations within the QR Code.

\n *\n * @return {@link FormatInformation} encapsulating the QR Code's format info\n * @throws FormatException if both format information locations cannot be parsed as\n * the valid encoding of format information\n */\n BitMatrixParser.prototype.readFormatInformation = function () {\n if (this.parsedFormatInfo !== null && this.parsedFormatInfo !== undefined) {\n return this.parsedFormatInfo;\n }\n // Read top-left format info bits\n var formatInfoBits1 = 0;\n for (var i = 0; i < 6; i++) {\n formatInfoBits1 = this.copyBit(i, 8, formatInfoBits1);\n }\n // .. and skip a bit in the timing pattern ...\n formatInfoBits1 = this.copyBit(7, 8, formatInfoBits1);\n formatInfoBits1 = this.copyBit(8, 8, formatInfoBits1);\n formatInfoBits1 = this.copyBit(8, 7, formatInfoBits1);\n // .. and skip a bit in the timing pattern ...\n for (var j = 5; j >= 0; j--) {\n formatInfoBits1 = this.copyBit(8, j, formatInfoBits1);\n }\n // Read the top-right/bottom-left pattern too\n var dimension = this.bitMatrix.getHeight();\n var formatInfoBits2 = 0;\n var jMin = dimension - 7;\n for (var j = dimension - 1; j >= jMin; j--) {\n formatInfoBits2 = this.copyBit(8, j, formatInfoBits2);\n }\n for (var i = dimension - 8; i < dimension; i++) {\n formatInfoBits2 = this.copyBit(i, 8, formatInfoBits2);\n }\n this.parsedFormatInfo = FormatInformation.decodeFormatInformation(formatInfoBits1, formatInfoBits2);\n if (this.parsedFormatInfo !== null) {\n return this.parsedFormatInfo;\n }\n throw new FormatException();\n };\n /**\n *

Reads version information from one of its two locations within the QR Code.

\n *\n * @return {@link Version} encapsulating the QR Code's version\n * @throws FormatException if both version information locations cannot be parsed as\n * the valid encoding of version information\n */\n BitMatrixParser.prototype.readVersion = function () {\n if (this.parsedVersion !== null && this.parsedVersion !== undefined) {\n return this.parsedVersion;\n }\n var dimension = this.bitMatrix.getHeight();\n var provisionalVersion = Math.floor((dimension - 17) / 4);\n if (provisionalVersion <= 6) {\n return Version.getVersionForNumber(provisionalVersion);\n }\n // Read top-right version info: 3 wide by 6 tall\n var versionBits = 0;\n var ijMin = dimension - 11;\n for (var j = 5; j >= 0; j--) {\n for (var i = dimension - 9; i >= ijMin; i--) {\n versionBits = this.copyBit(i, j, versionBits);\n }\n }\n var theParsedVersion = Version.decodeVersionInformation(versionBits);\n if (theParsedVersion !== null && theParsedVersion.getDimensionForVersion() === dimension) {\n this.parsedVersion = theParsedVersion;\n return theParsedVersion;\n }\n // Hmm, failed. Try bottom left: 6 wide by 3 tall\n versionBits = 0;\n for (var i = 5; i >= 0; i--) {\n for (var j = dimension - 9; j >= ijMin; j--) {\n versionBits = this.copyBit(i, j, versionBits);\n }\n }\n theParsedVersion = Version.decodeVersionInformation(versionBits);\n if (theParsedVersion !== null && theParsedVersion.getDimensionForVersion() === dimension) {\n this.parsedVersion = theParsedVersion;\n return theParsedVersion;\n }\n throw new FormatException();\n };\n BitMatrixParser.prototype.copyBit = function (i /*int*/, j /*int*/, versionBits /*int*/) {\n var bit = this.isMirror ? this.bitMatrix.get(j, i) : this.bitMatrix.get(i, j);\n return bit ? (versionBits << 1) | 0x1 : versionBits << 1;\n };\n /**\n *

Reads the bits in the {@link BitMatrix} representing the finder pattern in the\n * correct order in order to reconstruct the codewords bytes contained within the\n * QR Code.

\n *\n * @return bytes encoded within the QR Code\n * @throws FormatException if the exact number of bytes expected is not read\n */\n BitMatrixParser.prototype.readCodewords = function () {\n var formatInfo = this.readFormatInformation();\n var version = this.readVersion();\n // Get the data mask for the format used in this QR Code. This will exclude\n // some bits from reading as we wind through the bit matrix.\n var dataMask = DataMask.values.get(formatInfo.getDataMask());\n var dimension = this.bitMatrix.getHeight();\n dataMask.unmaskBitMatrix(this.bitMatrix, dimension);\n var functionPattern = version.buildFunctionPattern();\n var readingUp = true;\n var result = new Uint8Array(version.getTotalCodewords());\n var resultOffset = 0;\n var currentByte = 0;\n var bitsRead = 0;\n // Read columns in pairs, from right to left\n for (var j = dimension - 1; j > 0; j -= 2) {\n if (j === 6) {\n // Skip whole column with vertical alignment pattern\n // saves time and makes the other code proceed more cleanly\n j--;\n }\n // Read alternatingly from bottom to top then top to bottom\n for (var count = 0; count < dimension; count++) {\n var i = readingUp ? dimension - 1 - count : count;\n for (var col = 0; col < 2; col++) {\n // Ignore bits covered by the function pattern\n if (!functionPattern.get(j - col, i)) {\n // Read a bit\n bitsRead++;\n currentByte <<= 1;\n if (this.bitMatrix.get(j - col, i)) {\n currentByte |= 1;\n }\n // If we've made a whole byte, save it off\n if (bitsRead === 8) {\n result[resultOffset++] = /*(byte) */ currentByte;\n bitsRead = 0;\n currentByte = 0;\n }\n }\n }\n }\n readingUp = !readingUp; // readingUp ^= true; // readingUp = !readingUp; // switch directions\n }\n if (resultOffset !== version.getTotalCodewords()) {\n throw new FormatException();\n }\n return result;\n };\n /**\n * Revert the mask removal done while reading the code words. The bit matrix should revert to its original state.\n */\n BitMatrixParser.prototype.remask = function () {\n if (this.parsedFormatInfo === null) {\n return; // We have no format information, and have no data mask\n }\n var dataMask = DataMask.values[this.parsedFormatInfo.getDataMask()];\n var dimension = this.bitMatrix.getHeight();\n dataMask.unmaskBitMatrix(this.bitMatrix, dimension);\n };\n /**\n * Prepare the parser for a mirrored operation.\n * This flag has effect only on the {@link #readFormatInformation()} and the\n * {@link #readVersion()}. Before proceeding with {@link #readCodewords()} the\n * {@link #mirror()} method should be called.\n *\n * @param mirror Whether to read version and format information mirrored.\n */\n BitMatrixParser.prototype.setMirror = function (isMirror) {\n this.parsedVersion = null;\n this.parsedFormatInfo = null;\n this.isMirror = isMirror;\n };\n /** Mirror the bit matrix in order to attempt a second reading. */\n BitMatrixParser.prototype.mirror = function () {\n var bitMatrix = this.bitMatrix;\n for (var x = 0, width = bitMatrix.getWidth(); x < width; x++) {\n for (var y = x + 1, height = bitMatrix.getHeight(); y < height; y++) {\n if (bitMatrix.get(x, y) !== bitMatrix.get(y, x)) {\n bitMatrix.flip(y, x);\n bitMatrix.flip(x, y);\n }\n }\n }\n };\n return BitMatrixParser;\n}());\nexport default BitMatrixParser;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/**\n *

Encapsulates a block of data within a QR Code. QR Codes may split their data into\n * multiple blocks, each of which is a unit of data and error-correction codewords. Each\n * is represented by an instance of this class.

\n *\n * @author Sean Owen\n */\nvar DataBlock = /** @class */ (function () {\n function DataBlock(numDataCodewords /*int*/, codewords) {\n this.numDataCodewords = numDataCodewords;\n this.codewords = codewords;\n }\n /**\n *

When QR Codes use multiple data blocks, they are actually interleaved.\n * That is, the first byte of data block 1 to n is written, then the second bytes, and so on. This\n * method will separate the data into original blocks.

\n *\n * @param rawCodewords bytes as read directly from the QR Code\n * @param version version of the QR Code\n * @param ecLevel error-correction level of the QR Code\n * @return DataBlocks containing original bytes, \"de-interleaved\" from representation in the\n * QR Code\n */\n DataBlock.getDataBlocks = function (rawCodewords, version, ecLevel) {\n var e_1, _a, e_2, _b;\n if (rawCodewords.length !== version.getTotalCodewords()) {\n throw new IllegalArgumentException();\n }\n // Figure out the number and size of data blocks used by this version and\n // error correction level\n var ecBlocks = version.getECBlocksForLevel(ecLevel);\n // First count the total number of data blocks\n var totalBlocks = 0;\n var ecBlockArray = ecBlocks.getECBlocks();\n try {\n for (var ecBlockArray_1 = __values(ecBlockArray), ecBlockArray_1_1 = ecBlockArray_1.next(); !ecBlockArray_1_1.done; ecBlockArray_1_1 = ecBlockArray_1.next()) {\n var ecBlock = ecBlockArray_1_1.value;\n totalBlocks += ecBlock.getCount();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (ecBlockArray_1_1 && !ecBlockArray_1_1.done && (_a = ecBlockArray_1.return)) _a.call(ecBlockArray_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // Now establish DataBlocks of the appropriate size and number of data codewords\n var result = new Array(totalBlocks);\n var numResultBlocks = 0;\n try {\n for (var ecBlockArray_2 = __values(ecBlockArray), ecBlockArray_2_1 = ecBlockArray_2.next(); !ecBlockArray_2_1.done; ecBlockArray_2_1 = ecBlockArray_2.next()) {\n var ecBlock = ecBlockArray_2_1.value;\n for (var i = 0; i < ecBlock.getCount(); i++) {\n var numDataCodewords = ecBlock.getDataCodewords();\n var numBlockCodewords = ecBlocks.getECCodewordsPerBlock() + numDataCodewords;\n result[numResultBlocks++] = new DataBlock(numDataCodewords, new Uint8Array(numBlockCodewords));\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (ecBlockArray_2_1 && !ecBlockArray_2_1.done && (_b = ecBlockArray_2.return)) _b.call(ecBlockArray_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n // All blocks have the same amount of data, except that the last n\n // (where n may be 0) have 1 more byte. Figure out where these start.\n var shorterBlocksTotalCodewords = result[0].codewords.length;\n var longerBlocksStartAt = result.length - 1;\n // TYPESCRIPTPORT: check length is correct here\n while (longerBlocksStartAt >= 0) {\n var numCodewords = result[longerBlocksStartAt].codewords.length;\n if (numCodewords === shorterBlocksTotalCodewords) {\n break;\n }\n longerBlocksStartAt--;\n }\n longerBlocksStartAt++;\n var shorterBlocksNumDataCodewords = shorterBlocksTotalCodewords - ecBlocks.getECCodewordsPerBlock();\n // The last elements of result may be 1 element longer\n // first fill out as many elements as all of them have\n var rawCodewordsOffset = 0;\n for (var i = 0; i < shorterBlocksNumDataCodewords; i++) {\n for (var j = 0; j < numResultBlocks; j++) {\n result[j].codewords[i] = rawCodewords[rawCodewordsOffset++];\n }\n }\n // Fill out the last data block in the longer ones\n for (var j = longerBlocksStartAt; j < numResultBlocks; j++) {\n result[j].codewords[shorterBlocksNumDataCodewords] = rawCodewords[rawCodewordsOffset++];\n }\n // Now add in error correction blocks\n var max = result[0].codewords.length;\n for (var i = shorterBlocksNumDataCodewords; i < max; i++) {\n for (var j = 0; j < numResultBlocks; j++) {\n var iOffset = j < longerBlocksStartAt ? i : i + 1;\n result[j].codewords[iOffset] = rawCodewords[rawCodewordsOffset++];\n }\n }\n return result;\n };\n DataBlock.prototype.getNumDataCodewords = function () {\n return this.numDataCodewords;\n };\n DataBlock.prototype.getCodewords = function () {\n return this.codewords;\n };\n return DataBlock;\n}());\nexport default DataBlock;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport IllegalArgumentException from '../../IllegalArgumentException';\nexport var ModeValues;\n(function (ModeValues) {\n ModeValues[ModeValues[\"TERMINATOR\"] = 0] = \"TERMINATOR\";\n ModeValues[ModeValues[\"NUMERIC\"] = 1] = \"NUMERIC\";\n ModeValues[ModeValues[\"ALPHANUMERIC\"] = 2] = \"ALPHANUMERIC\";\n ModeValues[ModeValues[\"STRUCTURED_APPEND\"] = 3] = \"STRUCTURED_APPEND\";\n ModeValues[ModeValues[\"BYTE\"] = 4] = \"BYTE\";\n ModeValues[ModeValues[\"ECI\"] = 5] = \"ECI\";\n ModeValues[ModeValues[\"KANJI\"] = 6] = \"KANJI\";\n ModeValues[ModeValues[\"FNC1_FIRST_POSITION\"] = 7] = \"FNC1_FIRST_POSITION\";\n ModeValues[ModeValues[\"FNC1_SECOND_POSITION\"] = 8] = \"FNC1_SECOND_POSITION\";\n /** See GBT 18284-2000; \"Hanzi\" is a transliteration of this mode name. */\n ModeValues[ModeValues[\"HANZI\"] = 9] = \"HANZI\";\n})(ModeValues || (ModeValues = {}));\n/**\n *

See ISO 18004:2006, 6.4.1, Tables 2 and 3. This enum encapsulates the various modes in which\n * data can be encoded to bits in the QR code standard.

\n *\n * @author Sean Owen\n */\nvar Mode = /** @class */ (function () {\n function Mode(value, stringValue, characterCountBitsForVersions, bits /*int*/) {\n this.value = value;\n this.stringValue = stringValue;\n this.characterCountBitsForVersions = characterCountBitsForVersions;\n this.bits = bits;\n Mode.FOR_BITS.set(bits, this);\n Mode.FOR_VALUE.set(value, this);\n }\n /**\n * @param bits four bits encoding a QR Code data mode\n * @return Mode encoded by these bits\n * @throws IllegalArgumentException if bits do not correspond to a known mode\n */\n Mode.forBits = function (bits /*int*/) {\n var mode = Mode.FOR_BITS.get(bits);\n if (undefined === mode) {\n throw new IllegalArgumentException();\n }\n return mode;\n };\n /**\n * @param version version in question\n * @return number of bits used, in this QR Code symbol {@link Version}, to encode the\n * count of characters that will follow encoded in this Mode\n */\n Mode.prototype.getCharacterCountBits = function (version) {\n var versionNumber = version.getVersionNumber();\n var offset;\n if (versionNumber <= 9) {\n offset = 0;\n }\n else if (versionNumber <= 26) {\n offset = 1;\n }\n else {\n offset = 2;\n }\n return this.characterCountBitsForVersions[offset];\n };\n Mode.prototype.getValue = function () {\n return this.value;\n };\n Mode.prototype.getBits = function () {\n return this.bits;\n };\n Mode.prototype.equals = function (o) {\n if (!(o instanceof Mode)) {\n return false;\n }\n var other = o;\n return this.value === other.value;\n };\n Mode.prototype.toString = function () {\n return this.stringValue;\n };\n Mode.FOR_BITS = new Map();\n Mode.FOR_VALUE = new Map();\n Mode.TERMINATOR = new Mode(ModeValues.TERMINATOR, 'TERMINATOR', Int32Array.from([0, 0, 0]), 0x00); // Not really a mode...\n Mode.NUMERIC = new Mode(ModeValues.NUMERIC, 'NUMERIC', Int32Array.from([10, 12, 14]), 0x01);\n Mode.ALPHANUMERIC = new Mode(ModeValues.ALPHANUMERIC, 'ALPHANUMERIC', Int32Array.from([9, 11, 13]), 0x02);\n Mode.STRUCTURED_APPEND = new Mode(ModeValues.STRUCTURED_APPEND, 'STRUCTURED_APPEND', Int32Array.from([0, 0, 0]), 0x03); // Not supported\n Mode.BYTE = new Mode(ModeValues.BYTE, 'BYTE', Int32Array.from([8, 16, 16]), 0x04);\n Mode.ECI = new Mode(ModeValues.ECI, 'ECI', Int32Array.from([0, 0, 0]), 0x07); // character counts don't apply\n Mode.KANJI = new Mode(ModeValues.KANJI, 'KANJI', Int32Array.from([8, 10, 12]), 0x08);\n Mode.FNC1_FIRST_POSITION = new Mode(ModeValues.FNC1_FIRST_POSITION, 'FNC1_FIRST_POSITION', Int32Array.from([0, 0, 0]), 0x05);\n Mode.FNC1_SECOND_POSITION = new Mode(ModeValues.FNC1_SECOND_POSITION, 'FNC1_SECOND_POSITION', Int32Array.from([0, 0, 0]), 0x09);\n /** See GBT 18284-2000; \"Hanzi\" is a transliteration of this mode name. */\n Mode.HANZI = new Mode(ModeValues.HANZI, 'HANZI', Int32Array.from([8, 10, 12]), 0x0D);\n return Mode;\n}());\nexport default Mode;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.qrcode.decoder {*/\nimport BitSource from '../../common/BitSource';\nimport CharacterSetECI from '../../common/CharacterSetECI';\nimport DecoderResult from '../../common/DecoderResult';\nimport StringUtils from '../../common/StringUtils';\nimport FormatException from '../../FormatException';\nimport StringBuilder from '../../util/StringBuilder';\nimport StringEncoding from '../../util/StringEncoding';\nimport Mode from './Mode';\n/*import java.io.UnsupportedEncodingException;*/\n/*import java.util.ArrayList;*/\n/*import java.util.Collection;*/\n/*import java.util.List;*/\n/*import java.util.Map;*/\n/**\n *

QR Codes can encode text as bits in one of several modes, and can use multiple modes\n * in one QR Code. This class decodes the bits back into text.

\n *\n *

See ISO 18004:2006, 6.4.3 - 6.4.7

\n *\n * @author Sean Owen\n */\nvar DecodedBitStreamParser = /** @class */ (function () {\n function DecodedBitStreamParser() {\n }\n DecodedBitStreamParser.decode = function (bytes, version, ecLevel, hints) {\n var bits = new BitSource(bytes);\n var result = new StringBuilder();\n var byteSegments = new Array(); // 1\n // TYPESCRIPTPORT: I do not use constructor with size 1 as in original Java means capacity and the array length is checked below\n var symbolSequence = -1;\n var parityData = -1;\n try {\n var currentCharacterSetECI = null;\n var fc1InEffect = false;\n var mode = void 0;\n do {\n // While still another segment to read...\n if (bits.available() < 4) {\n // OK, assume we're done. Really, a TERMINATOR mode should have been recorded here\n mode = Mode.TERMINATOR;\n }\n else {\n var modeBits = bits.readBits(4);\n mode = Mode.forBits(modeBits); // mode is encoded by 4 bits\n }\n switch (mode) {\n case Mode.TERMINATOR:\n break;\n case Mode.FNC1_FIRST_POSITION:\n case Mode.FNC1_SECOND_POSITION:\n // We do little with FNC1 except alter the parsed result a bit according to the spec\n fc1InEffect = true;\n break;\n case Mode.STRUCTURED_APPEND:\n if (bits.available() < 16) {\n throw new FormatException();\n }\n // sequence number and parity is added later to the result metadata\n // Read next 8 bits (symbol sequence #) and 8 bits (data: parity), then continue\n symbolSequence = bits.readBits(8);\n parityData = bits.readBits(8);\n break;\n case Mode.ECI:\n // Count doesn't apply to ECI\n var value = DecodedBitStreamParser.parseECIValue(bits);\n currentCharacterSetECI = CharacterSetECI.getCharacterSetECIByValue(value);\n if (currentCharacterSetECI === null) {\n throw new FormatException();\n }\n break;\n case Mode.HANZI:\n // First handle Hanzi mode which does not start with character count\n // Chinese mode contains a sub set indicator right after mode indicator\n var subset = bits.readBits(4);\n var countHanzi = bits.readBits(mode.getCharacterCountBits(version));\n if (subset === DecodedBitStreamParser.GB2312_SUBSET) {\n DecodedBitStreamParser.decodeHanziSegment(bits, result, countHanzi);\n }\n break;\n default:\n // \"Normal\" QR code modes:\n // How many characters will follow, encoded in this mode?\n var count = bits.readBits(mode.getCharacterCountBits(version));\n switch (mode) {\n case Mode.NUMERIC:\n DecodedBitStreamParser.decodeNumericSegment(bits, result, count);\n break;\n case Mode.ALPHANUMERIC:\n DecodedBitStreamParser.decodeAlphanumericSegment(bits, result, count, fc1InEffect);\n break;\n case Mode.BYTE:\n DecodedBitStreamParser.decodeByteSegment(bits, result, count, currentCharacterSetECI, byteSegments, hints);\n break;\n case Mode.KANJI:\n DecodedBitStreamParser.decodeKanjiSegment(bits, result, count);\n break;\n default:\n throw new FormatException();\n }\n break;\n }\n } while (mode !== Mode.TERMINATOR);\n }\n catch (iae /*: IllegalArgumentException*/) {\n // from readBits() calls\n throw new FormatException();\n }\n return new DecoderResult(bytes, result.toString(), byteSegments.length === 0 ? null : byteSegments, ecLevel === null ? null : ecLevel.toString(), symbolSequence, parityData);\n };\n /**\n * See specification GBT 18284-2000\n */\n DecodedBitStreamParser.decodeHanziSegment = function (bits, result, count /*int*/) {\n // Don't crash trying to read more bits than we have available.\n if (count * 13 > bits.available()) {\n throw new FormatException();\n }\n // Each character will require 2 bytes. Read the characters as 2-byte pairs\n // and decode as GB2312 afterwards\n var buffer = new Uint8Array(2 * count);\n var offset = 0;\n while (count > 0) {\n // Each 13 bits encodes a 2-byte character\n var twoBytes = bits.readBits(13);\n var assembledTwoBytes = (((twoBytes / 0x060) << 8) & 0xFFFFFFFF) | (twoBytes % 0x060);\n if (assembledTwoBytes < 0x003BF) {\n // In the 0xA1A1 to 0xAAFE range\n assembledTwoBytes += 0x0A1A1;\n }\n else {\n // In the 0xB0A1 to 0xFAFE range\n assembledTwoBytes += 0x0A6A1;\n }\n buffer[offset] = /*(byte) */ ((assembledTwoBytes >> 8) & 0xFF);\n buffer[offset + 1] = /*(byte) */ (assembledTwoBytes & 0xFF);\n offset += 2;\n count--;\n }\n try {\n result.append(StringEncoding.decode(buffer, StringUtils.GB2312));\n // TYPESCRIPTPORT: TODO: implement GB2312 decode. StringView from MDN could be a starting point\n }\n catch (ignored /*: UnsupportedEncodingException*/) {\n throw new FormatException(ignored);\n }\n };\n DecodedBitStreamParser.decodeKanjiSegment = function (bits, result, count /*int*/) {\n // Don't crash trying to read more bits than we have available.\n if (count * 13 > bits.available()) {\n throw new FormatException();\n }\n // Each character will require 2 bytes. Read the characters as 2-byte pairs\n // and decode as Shift_JIS afterwards\n var buffer = new Uint8Array(2 * count);\n var offset = 0;\n while (count > 0) {\n // Each 13 bits encodes a 2-byte character\n var twoBytes = bits.readBits(13);\n var assembledTwoBytes = (((twoBytes / 0x0C0) << 8) & 0xFFFFFFFF) | (twoBytes % 0x0C0);\n if (assembledTwoBytes < 0x01F00) {\n // In the 0x8140 to 0x9FFC range\n assembledTwoBytes += 0x08140;\n }\n else {\n // In the 0xE040 to 0xEBBF range\n assembledTwoBytes += 0x0C140;\n }\n buffer[offset] = /*(byte) */ (assembledTwoBytes >> 8);\n buffer[offset + 1] = /*(byte) */ assembledTwoBytes;\n offset += 2;\n count--;\n }\n // Shift_JIS may not be supported in some environments:\n try {\n result.append(StringEncoding.decode(buffer, StringUtils.SHIFT_JIS));\n // TYPESCRIPTPORT: TODO: implement SHIFT_JIS decode. StringView from MDN could be a starting point\n }\n catch (ignored /*: UnsupportedEncodingException*/) {\n throw new FormatException(ignored);\n }\n };\n DecodedBitStreamParser.decodeByteSegment = function (bits, result, count /*int*/, currentCharacterSetECI, byteSegments, hints) {\n // Don't crash trying to read more bits than we have available.\n if (8 * count > bits.available()) {\n throw new FormatException();\n }\n var readBytes = new Uint8Array(count);\n for (var i = 0; i < count; i++) {\n readBytes[i] = /*(byte) */ bits.readBits(8);\n }\n var encoding;\n if (currentCharacterSetECI === null) {\n // The spec isn't clear on this mode; see\n // section 6.4.5: t does not say which encoding to assuming\n // upon decoding. I have seen ISO-8859-1 used as well as\n // Shift_JIS -- without anything like an ECI designator to\n // give a hint.\n encoding = StringUtils.guessEncoding(readBytes, hints);\n }\n else {\n encoding = currentCharacterSetECI.getName();\n }\n try {\n result.append(StringEncoding.decode(readBytes, encoding));\n }\n catch (ignored /*: UnsupportedEncodingException*/) {\n throw new FormatException(ignored);\n }\n byteSegments.push(readBytes);\n };\n DecodedBitStreamParser.toAlphaNumericChar = function (value /*int*/) {\n if (value >= DecodedBitStreamParser.ALPHANUMERIC_CHARS.length) {\n throw new FormatException();\n }\n return DecodedBitStreamParser.ALPHANUMERIC_CHARS[value];\n };\n DecodedBitStreamParser.decodeAlphanumericSegment = function (bits, result, count /*int*/, fc1InEffect) {\n // Read two characters at a time\n var start = result.length();\n while (count > 1) {\n if (bits.available() < 11) {\n throw new FormatException();\n }\n var nextTwoCharsBits = bits.readBits(11);\n result.append(DecodedBitStreamParser.toAlphaNumericChar(Math.floor(nextTwoCharsBits / 45)));\n result.append(DecodedBitStreamParser.toAlphaNumericChar(nextTwoCharsBits % 45));\n count -= 2;\n }\n if (count === 1) {\n // special case: one character left\n if (bits.available() < 6) {\n throw new FormatException();\n }\n result.append(DecodedBitStreamParser.toAlphaNumericChar(bits.readBits(6)));\n }\n // See section 6.4.8.1, 6.4.8.2\n if (fc1InEffect) {\n // We need to massage the result a bit if in an FNC1 mode:\n for (var i = start; i < result.length(); i++) {\n if (result.charAt(i) === '%') {\n if (i < result.length() - 1 && result.charAt(i + 1) === '%') {\n // %% is rendered as %\n result.deleteCharAt(i + 1);\n }\n else {\n // In alpha mode, % should be converted to FNC1 separator 0x1D\n result.setCharAt(i, String.fromCharCode(0x1D));\n }\n }\n }\n }\n };\n DecodedBitStreamParser.decodeNumericSegment = function (bits, result, count /*int*/) {\n // Read three digits at a time\n while (count >= 3) {\n // Each 10 bits encodes three digits\n if (bits.available() < 10) {\n throw new FormatException();\n }\n var threeDigitsBits = bits.readBits(10);\n if (threeDigitsBits >= 1000) {\n throw new FormatException();\n }\n result.append(DecodedBitStreamParser.toAlphaNumericChar(Math.floor(threeDigitsBits / 100)));\n result.append(DecodedBitStreamParser.toAlphaNumericChar(Math.floor(threeDigitsBits / 10) % 10));\n result.append(DecodedBitStreamParser.toAlphaNumericChar(threeDigitsBits % 10));\n count -= 3;\n }\n if (count === 2) {\n // Two digits left over to read, encoded in 7 bits\n if (bits.available() < 7) {\n throw new FormatException();\n }\n var twoDigitsBits = bits.readBits(7);\n if (twoDigitsBits >= 100) {\n throw new FormatException();\n }\n result.append(DecodedBitStreamParser.toAlphaNumericChar(Math.floor(twoDigitsBits / 10)));\n result.append(DecodedBitStreamParser.toAlphaNumericChar(twoDigitsBits % 10));\n }\n else if (count === 1) {\n // One digit left over to read\n if (bits.available() < 4) {\n throw new FormatException();\n }\n var digitBits = bits.readBits(4);\n if (digitBits >= 10) {\n throw new FormatException();\n }\n result.append(DecodedBitStreamParser.toAlphaNumericChar(digitBits));\n }\n };\n DecodedBitStreamParser.parseECIValue = function (bits) {\n var firstByte = bits.readBits(8);\n if ((firstByte & 0x80) === 0) {\n // just one byte\n return firstByte & 0x7F;\n }\n if ((firstByte & 0xC0) === 0x80) {\n // two bytes\n var secondByte = bits.readBits(8);\n return (((firstByte & 0x3F) << 8) & 0xFFFFFFFF) | secondByte;\n }\n if ((firstByte & 0xE0) === 0xC0) {\n // three bytes\n var secondThirdBytes = bits.readBits(16);\n return (((firstByte & 0x1F) << 16) & 0xFFFFFFFF) | secondThirdBytes;\n }\n throw new FormatException();\n };\n /**\n * See ISO 18004:2006, 6.4.4 Table 5\n */\n DecodedBitStreamParser.ALPHANUMERIC_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n DecodedBitStreamParser.GB2312_SUBSET = 1;\n return DecodedBitStreamParser;\n}());\nexport default DecodedBitStreamParser;\n// function Uint8ArrayToString(a: Uint8Array): string {\n// const CHUNK_SZ = 0x8000;\n// const c = new StringBuilder();\n// for (let i = 0, length = a.length; i < length; i += CHUNK_SZ) {\n// c.append(String.fromCharCode.apply(null, a.subarray(i, i + CHUNK_SZ)));\n// }\n// return c.toString();\n// }\n","/*\n * Copyright 2013 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Meta-data container for QR Code decoding. Instances of this class may be used to convey information back to the\n * decoding caller. Callers are expected to process this.\n *\n * @see com.google.zxing.common.DecoderResult#getOther()\n */\nvar QRCodeDecoderMetaData = /** @class */ (function () {\n function QRCodeDecoderMetaData(mirrored) {\n this.mirrored = mirrored;\n }\n /**\n * @return true if the QR Code was mirrored.\n */\n QRCodeDecoderMetaData.prototype.isMirrored = function () {\n return this.mirrored;\n };\n /**\n * Apply the result points' order correction due to mirroring.\n *\n * @param points Array of points to apply mirror correction to.\n */\n QRCodeDecoderMetaData.prototype.applyMirroredCorrection = function (points) {\n if (!this.mirrored || points === null || points.length < 3) {\n return;\n }\n var bottomLeft = points[0];\n points[0] = points[2];\n points[2] = bottomLeft;\n // No need to 'fix' top-left and alignment pattern.\n };\n return QRCodeDecoderMetaData;\n}());\nexport default QRCodeDecoderMetaData;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.decoder {*/\nimport ChecksumException from '../../ChecksumException';\nimport BitMatrix from '../../common/BitMatrix';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport ReedSolomonDecoder from '../../common/reedsolomon/ReedSolomonDecoder';\nimport BitMatrixParser from './BitMatrixParser';\nimport DataBlock from './DataBlock';\nimport DecodedBitStreamParser from './DecodedBitStreamParser';\nimport QRCodeDecoderMetaData from './QRCodeDecoderMetaData';\n/*import java.util.Map;*/\n/**\n *

The main class which implements QR Code decoding -- as opposed to locating and extracting\n * the QR Code from an image.

\n *\n * @author Sean Owen\n */\nvar Decoder = /** @class */ (function () {\n function Decoder() {\n this.rsDecoder = new ReedSolomonDecoder(GenericGF.QR_CODE_FIELD_256);\n }\n // public decode(image: boolean[][]): DecoderResult /*throws ChecksumException, FormatException*/ {\n // return decode(image, null)\n // }\n /**\n *

Convenience method that can decode a QR Code represented as a 2D array of booleans.\n * \"true\" is taken to mean a black module.

\n *\n * @param image booleans representing white/black QR Code modules\n * @param hints decoding hints that should be used to influence decoding\n * @return text and bytes encoded within the QR Code\n * @throws FormatException if the QR Code cannot be decoded\n * @throws ChecksumException if error correction fails\n */\n Decoder.prototype.decodeBooleanArray = function (image, hints) {\n return this.decodeBitMatrix(BitMatrix.parseFromBooleanArray(image), hints);\n };\n // public decodeBitMatrix(bits: BitMatrix): DecoderResult /*throws ChecksumException, FormatException*/ {\n // return decode(bits, null)\n // }\n /**\n *

Decodes a QR Code represented as a {@link BitMatrix}. A 1 or \"true\" is taken to mean a black module.

\n *\n * @param bits booleans representing white/black QR Code modules\n * @param hints decoding hints that should be used to influence decoding\n * @return text and bytes encoded within the QR Code\n * @throws FormatException if the QR Code cannot be decoded\n * @throws ChecksumException if error correction fails\n */\n Decoder.prototype.decodeBitMatrix = function (bits, hints) {\n // Construct a parser and read version, error-correction level\n var parser = new BitMatrixParser(bits);\n var ex = null;\n try {\n return this.decodeBitMatrixParser(parser, hints);\n }\n catch (e /*: FormatException, ChecksumException*/) {\n ex = e;\n }\n try {\n // Revert the bit matrix\n parser.remask();\n // Will be attempting a mirrored reading of the version and format info.\n parser.setMirror(true);\n // Preemptively read the version.\n parser.readVersion();\n // Preemptively read the format information.\n parser.readFormatInformation();\n /*\n * Since we're here, this means we have successfully detected some kind\n * of version and format information when mirrored. This is a good sign,\n * that the QR code may be mirrored, and we should try once more with a\n * mirrored content.\n */\n // Prepare for a mirrored reading.\n parser.mirror();\n var result = this.decodeBitMatrixParser(parser, hints);\n // Success! Notify the caller that the code was mirrored.\n result.setOther(new QRCodeDecoderMetaData(true));\n return result;\n }\n catch (e /*FormatException | ChecksumException*/) {\n // Throw the exception from the original reading\n if (ex !== null) {\n throw ex;\n }\n throw e;\n }\n };\n Decoder.prototype.decodeBitMatrixParser = function (parser, hints) {\n var e_1, _a, e_2, _b;\n var version = parser.readVersion();\n var ecLevel = parser.readFormatInformation().getErrorCorrectionLevel();\n // Read codewords\n var codewords = parser.readCodewords();\n // Separate into data blocks\n var dataBlocks = DataBlock.getDataBlocks(codewords, version, ecLevel);\n // Count total number of data bytes\n var totalBytes = 0;\n try {\n for (var dataBlocks_1 = __values(dataBlocks), dataBlocks_1_1 = dataBlocks_1.next(); !dataBlocks_1_1.done; dataBlocks_1_1 = dataBlocks_1.next()) {\n var dataBlock = dataBlocks_1_1.value;\n totalBytes += dataBlock.getNumDataCodewords();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (dataBlocks_1_1 && !dataBlocks_1_1.done && (_a = dataBlocks_1.return)) _a.call(dataBlocks_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n var resultBytes = new Uint8Array(totalBytes);\n var resultOffset = 0;\n try {\n // Error-correct and copy data blocks together into a stream of bytes\n for (var dataBlocks_2 = __values(dataBlocks), dataBlocks_2_1 = dataBlocks_2.next(); !dataBlocks_2_1.done; dataBlocks_2_1 = dataBlocks_2.next()) {\n var dataBlock = dataBlocks_2_1.value;\n var codewordBytes = dataBlock.getCodewords();\n var numDataCodewords = dataBlock.getNumDataCodewords();\n this.correctErrors(codewordBytes, numDataCodewords);\n for (var i = 0; i < numDataCodewords; i++) {\n resultBytes[resultOffset++] = codewordBytes[i];\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (dataBlocks_2_1 && !dataBlocks_2_1.done && (_b = dataBlocks_2.return)) _b.call(dataBlocks_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n // Decode the contents of that stream of bytes\n return DecodedBitStreamParser.decode(resultBytes, version, ecLevel, hints);\n };\n /**\n *

Given data and error-correction codewords received, possibly corrupted by errors, attempts to\n * correct the errors in-place using Reed-Solomon error correction.

\n *\n * @param codewordBytes data and error correction codewords\n * @param numDataCodewords number of codewords that are data bytes\n * @throws ChecksumException if error correction fails\n */\n Decoder.prototype.correctErrors = function (codewordBytes, numDataCodewords /*int*/) {\n // const numCodewords = codewordBytes.length;\n // First read into an array of ints\n var codewordsInts = new Int32Array(codewordBytes);\n // TYPESCRIPTPORT: not realy necessary to transform to ints? could redesign everything to work with unsigned bytes?\n // const codewordsInts = new Int32Array(numCodewords)\n // for (let i = 0; i < numCodewords; i++) {\n // codewordsInts[i] = codewordBytes[i] & 0xFF\n // }\n try {\n this.rsDecoder.decode(codewordsInts, codewordBytes.length - numDataCodewords);\n }\n catch (ignored /*: ReedSolomonException*/) {\n throw new ChecksumException();\n }\n // Copy back into array of bytes -- only need to worry about the bytes that were data\n // We don't care about errors in the error-correction codewords\n for (var i = 0; i < numDataCodewords; i++) {\n codewordBytes[i] = /*(byte) */ codewordsInts[i];\n }\n };\n return Decoder;\n}());\nexport default Decoder;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/*namespace com.google.zxing.qrcode.detector {*/\nimport ResultPoint from '../../ResultPoint';\n/**\n *

Encapsulates an alignment pattern, which are the smaller square patterns found in\n * all but the simplest QR Codes.

\n *\n * @author Sean Owen\n */\nvar AlignmentPattern = /** @class */ (function (_super) {\n __extends(AlignmentPattern, _super);\n function AlignmentPattern(posX /*float*/, posY /*float*/, estimatedModuleSize /*float*/) {\n var _this = _super.call(this, posX, posY) || this;\n _this.estimatedModuleSize = estimatedModuleSize;\n return _this;\n }\n /**\n *

Determines if this alignment pattern \"about equals\" an alignment pattern at the stated\n * position and size -- meaning, it is at nearly the same center with nearly the same size.

\n */\n AlignmentPattern.prototype.aboutEquals = function (moduleSize /*float*/, i /*float*/, j /*float*/) {\n if (Math.abs(i - this.getY()) <= moduleSize && Math.abs(j - this.getX()) <= moduleSize) {\n var moduleSizeDiff = Math.abs(moduleSize - this.estimatedModuleSize);\n return moduleSizeDiff <= 1.0 || moduleSizeDiff <= this.estimatedModuleSize;\n }\n return false;\n };\n /**\n * Combines this object's current estimate of a finder pattern position and module size\n * with a new estimate. It returns a new {@code FinderPattern} containing an average of the two.\n */\n AlignmentPattern.prototype.combineEstimate = function (i /*float*/, j /*float*/, newModuleSize /*float*/) {\n var combinedX = (this.getX() + j) / 2.0;\n var combinedY = (this.getY() + i) / 2.0;\n var combinedModuleSize = (this.estimatedModuleSize + newModuleSize) / 2.0;\n return new AlignmentPattern(combinedX, combinedY, combinedModuleSize);\n };\n return AlignmentPattern;\n}(ResultPoint));\nexport default AlignmentPattern;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport AlignmentPattern from './AlignmentPattern';\nimport NotFoundException from '../../NotFoundException';\n/*import java.util.ArrayList;*/\n/*import java.util.List;*/\n/**\n *

This class attempts to find alignment patterns in a QR Code. Alignment patterns look like finder\n * patterns but are smaller and appear at regular intervals throughout the image.

\n *\n *

At the moment this only looks for the bottom-right alignment pattern.

\n *\n *

This is mostly a simplified copy of {@link FinderPatternFinder}. It is copied,\n * pasted and stripped down here for maximum performance but does unfortunately duplicate\n * some code.

\n *\n *

This class is thread-safe but not reentrant. Each thread must allocate its own object.

\n *\n * @author Sean Owen\n */\nvar AlignmentPatternFinder = /** @class */ (function () {\n /**\n *

Creates a finder that will look in a portion of the whole image.

\n *\n * @param image image to search\n * @param startX left column from which to start searching\n * @param startY top row from which to start searching\n * @param width width of region to search\n * @param height height of region to search\n * @param moduleSize estimated module size so far\n */\n function AlignmentPatternFinder(image, startX /*int*/, startY /*int*/, width /*int*/, height /*int*/, moduleSize /*float*/, resultPointCallback) {\n this.image = image;\n this.startX = startX;\n this.startY = startY;\n this.width = width;\n this.height = height;\n this.moduleSize = moduleSize;\n this.resultPointCallback = resultPointCallback;\n this.possibleCenters = []; // new Array(5))\n // TYPESCRIPTPORT: array initialization without size as the length is checked below\n this.crossCheckStateCount = new Int32Array(3);\n }\n /**\n *

This method attempts to find the bottom-right alignment pattern in the image. It is a bit messy since\n * it's pretty performance-critical and so is written to be fast foremost.

\n *\n * @return {@link AlignmentPattern} if found\n * @throws NotFoundException if not found\n */\n AlignmentPatternFinder.prototype.find = function () {\n var startX = this.startX;\n var height = this.height;\n var width = this.width;\n var maxJ = startX + width;\n var middleI = this.startY + (height / 2);\n // We are looking for black/white/black modules in 1:1:1 ratio\n // this tracks the number of black/white/black modules seen so far\n var stateCount = new Int32Array(3);\n var image = this.image;\n for (var iGen = 0; iGen < height; iGen++) {\n // Search from middle outwards\n var i = middleI + ((iGen & 0x01) === 0 ? Math.floor((iGen + 1) / 2) : -Math.floor((iGen + 1) / 2));\n stateCount[0] = 0;\n stateCount[1] = 0;\n stateCount[2] = 0;\n var j = startX;\n // Burn off leading white pixels before anything else; if we start in the middle of\n // a white run, it doesn't make sense to count its length, since we don't know if the\n // white run continued to the left of the start point\n while (j < maxJ && !image.get(j, i)) {\n j++;\n }\n var currentState = 0;\n while (j < maxJ) {\n if (image.get(j, i)) {\n // Black pixel\n if (currentState === 1) { // Counting black pixels\n stateCount[1]++;\n }\n else { // Counting white pixels\n if (currentState === 2) { // A winner?\n if (this.foundPatternCross(stateCount)) { // Yes\n var confirmed = this.handlePossibleCenter(stateCount, i, j);\n if (confirmed !== null) {\n return confirmed;\n }\n }\n stateCount[0] = stateCount[2];\n stateCount[1] = 1;\n stateCount[2] = 0;\n currentState = 1;\n }\n else {\n stateCount[++currentState]++;\n }\n }\n }\n else { // White pixel\n if (currentState === 1) { // Counting black pixels\n currentState++;\n }\n stateCount[currentState]++;\n }\n j++;\n }\n if (this.foundPatternCross(stateCount)) {\n var confirmed = this.handlePossibleCenter(stateCount, i, maxJ);\n if (confirmed !== null) {\n return confirmed;\n }\n }\n }\n // Hmm, nothing we saw was observed and confirmed twice. If we had\n // any guess at all, return it.\n if (this.possibleCenters.length !== 0) {\n return this.possibleCenters[0];\n }\n throw new NotFoundException();\n };\n /**\n * Given a count of black/white/black pixels just seen and an end position,\n * figures the location of the center of this black/white/black run.\n */\n AlignmentPatternFinder.centerFromEnd = function (stateCount, end /*int*/) {\n return (end - stateCount[2]) - stateCount[1] / 2.0;\n };\n /**\n * @param stateCount count of black/white/black pixels just read\n * @return true iff the proportions of the counts is close enough to the 1/1/1 ratios\n * used by alignment patterns to be considered a match\n */\n AlignmentPatternFinder.prototype.foundPatternCross = function (stateCount) {\n var moduleSize = this.moduleSize;\n var maxVariance = moduleSize / 2.0;\n for (var i = 0; i < 3; i++) {\n if (Math.abs(moduleSize - stateCount[i]) >= maxVariance) {\n return false;\n }\n }\n return true;\n };\n /**\n *

After a horizontal scan finds a potential alignment pattern, this method\n * \"cross-checks\" by scanning down vertically through the center of the possible\n * alignment pattern to see if the same proportion is detected.

\n *\n * @param startI row where an alignment pattern was detected\n * @param centerJ center of the section that appears to cross an alignment pattern\n * @param maxCount maximum reasonable number of modules that should be\n * observed in any reading state, based on the results of the horizontal scan\n * @return vertical center of alignment pattern, or {@link Float#NaN} if not found\n */\n AlignmentPatternFinder.prototype.crossCheckVertical = function (startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n var image = this.image;\n var maxI = image.getHeight();\n var stateCount = this.crossCheckStateCount;\n stateCount[0] = 0;\n stateCount[1] = 0;\n stateCount[2] = 0;\n // Start counting up from center\n var i = startI;\n while (i >= 0 && image.get(centerJ, i) && stateCount[1] <= maxCount) {\n stateCount[1]++;\n i--;\n }\n // If already too many modules in this state or ran off the edge:\n if (i < 0 || stateCount[1] > maxCount) {\n return NaN;\n }\n while (i >= 0 && !image.get(centerJ, i) && stateCount[0] <= maxCount) {\n stateCount[0]++;\n i--;\n }\n if (stateCount[0] > maxCount) {\n return NaN;\n }\n // Now also count down from center\n i = startI + 1;\n while (i < maxI && image.get(centerJ, i) && stateCount[1] <= maxCount) {\n stateCount[1]++;\n i++;\n }\n if (i === maxI || stateCount[1] > maxCount) {\n return NaN;\n }\n while (i < maxI && !image.get(centerJ, i) && stateCount[2] <= maxCount) {\n stateCount[2]++;\n i++;\n }\n if (stateCount[2] > maxCount) {\n return NaN;\n }\n var stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2];\n if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= 2 * originalStateCountTotal) {\n return NaN;\n }\n return this.foundPatternCross(stateCount) ? AlignmentPatternFinder.centerFromEnd(stateCount, i) : NaN;\n };\n /**\n *

This is called when a horizontal scan finds a possible alignment pattern. It will\n * cross check with a vertical scan, and if successful, will see if this pattern had been\n * found on a previous horizontal scan. If so, we consider it confirmed and conclude we have\n * found the alignment pattern.

\n *\n * @param stateCount reading state module counts from horizontal scan\n * @param i row where alignment pattern may be found\n * @param j end of possible alignment pattern in row\n * @return {@link AlignmentPattern} if we have found the same pattern twice, or null if not\n */\n AlignmentPatternFinder.prototype.handlePossibleCenter = function (stateCount, i /*int*/, j /*int*/) {\n var e_1, _a;\n var stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2];\n var centerJ = AlignmentPatternFinder.centerFromEnd(stateCount, j);\n var centerI = this.crossCheckVertical(i, /*(int) */ centerJ, 2 * stateCount[1], stateCountTotal);\n if (!isNaN(centerI)) {\n var estimatedModuleSize = (stateCount[0] + stateCount[1] + stateCount[2]) / 3.0;\n try {\n for (var _b = __values(this.possibleCenters), _c = _b.next(); !_c.done; _c = _b.next()) {\n var center = _c.value;\n // Look for about the same center and module size:\n if (center.aboutEquals(estimatedModuleSize, centerI, centerJ)) {\n return center.combineEstimate(centerI, centerJ, estimatedModuleSize);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // Hadn't found this before; save it\n var point = new AlignmentPattern(centerJ, centerI, estimatedModuleSize);\n this.possibleCenters.push(point);\n if (this.resultPointCallback !== null && this.resultPointCallback !== undefined) {\n this.resultPointCallback.foundPossibleResultPoint(point);\n }\n }\n return null;\n };\n return AlignmentPatternFinder;\n}());\nexport default AlignmentPatternFinder;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/*namespace com.google.zxing.qrcode.detector {*/\nimport ResultPoint from '../../ResultPoint';\n/**\n *

Encapsulates a finder pattern, which are the three square patterns found in\n * the corners of QR Codes. It also encapsulates a count of similar finder patterns,\n * as a convenience to the finder's bookkeeping.

\n *\n * @author Sean Owen\n */\nvar FinderPattern = /** @class */ (function (_super) {\n __extends(FinderPattern, _super);\n // FinderPattern(posX: number/*float*/, posY: number/*float*/, estimatedModuleSize: number/*float*/) {\n // this(posX, posY, estimatedModuleSize, 1)\n // }\n function FinderPattern(posX /*float*/, posY /*float*/, estimatedModuleSize /*float*/, count /*int*/) {\n var _this = _super.call(this, posX, posY) || this;\n _this.estimatedModuleSize = estimatedModuleSize;\n _this.count = count;\n if (undefined === count) {\n _this.count = 1;\n }\n return _this;\n }\n FinderPattern.prototype.getEstimatedModuleSize = function () {\n return this.estimatedModuleSize;\n };\n FinderPattern.prototype.getCount = function () {\n return this.count;\n };\n /*\n void incrementCount() {\n this.count++\n }\n */\n /**\n *

Determines if this finder pattern \"about equals\" a finder pattern at the stated\n * position and size -- meaning, it is at nearly the same center with nearly the same size.

\n */\n FinderPattern.prototype.aboutEquals = function (moduleSize /*float*/, i /*float*/, j /*float*/) {\n if (Math.abs(i - this.getY()) <= moduleSize && Math.abs(j - this.getX()) <= moduleSize) {\n var moduleSizeDiff = Math.abs(moduleSize - this.estimatedModuleSize);\n return moduleSizeDiff <= 1.0 || moduleSizeDiff <= this.estimatedModuleSize;\n }\n return false;\n };\n /**\n * Combines this object's current estimate of a finder pattern position and module size\n * with a new estimate. It returns a new {@code FinderPattern} containing a weighted average\n * based on count.\n */\n FinderPattern.prototype.combineEstimate = function (i /*float*/, j /*float*/, newModuleSize /*float*/) {\n var combinedCount = this.count + 1;\n var combinedX = (this.count * this.getX() + j) / combinedCount;\n var combinedY = (this.count * this.getY() + i) / combinedCount;\n var combinedModuleSize = (this.count * this.estimatedModuleSize + newModuleSize) / combinedCount;\n return new FinderPattern(combinedX, combinedY, combinedModuleSize, combinedCount);\n };\n return FinderPattern;\n}(ResultPoint));\nexport default FinderPattern;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n *

Encapsulates information about finder patterns in an image, including the location of\n * the three finder patterns, and their estimated module size.

\n *\n * @author Sean Owen\n */\nvar FinderPatternInfo = /** @class */ (function () {\n function FinderPatternInfo(patternCenters) {\n this.bottomLeft = patternCenters[0];\n this.topLeft = patternCenters[1];\n this.topRight = patternCenters[2];\n }\n FinderPatternInfo.prototype.getBottomLeft = function () {\n return this.bottomLeft;\n };\n FinderPatternInfo.prototype.getTopLeft = function () {\n return this.topLeft;\n };\n FinderPatternInfo.prototype.getTopRight = function () {\n return this.topRight;\n };\n return FinderPatternInfo;\n}());\nexport default FinderPatternInfo;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.detector {*/\nimport DecodeHintType from '../../DecodeHintType';\nimport ResultPoint from '../../ResultPoint';\nimport FinderPattern from './FinderPattern';\nimport FinderPatternInfo from './FinderPatternInfo';\nimport NotFoundException from '../../NotFoundException';\n/*import java.io.Serializable;*/\n/*import java.util.ArrayList;*/\n/*import java.util.Collections;*/\n/*import java.util.Comparator;*/\n/*import java.util.List;*/\n/*import java.util.Map;*/\n/**\n *

This class attempts to find finder patterns in a QR Code. Finder patterns are the square\n * markers at three corners of a QR Code.

\n *\n *

This class is thread-safe but not reentrant. Each thread must allocate its own object.\n *\n * @author Sean Owen\n */\nvar FinderPatternFinder = /** @class */ (function () {\n /**\n *

Creates a finder that will search the image for three finder patterns.

\n *\n * @param image image to search\n */\n // public constructor(image: BitMatrix) {\n // this(image, null)\n // }\n function FinderPatternFinder(image, resultPointCallback) {\n this.image = image;\n this.resultPointCallback = resultPointCallback;\n this.possibleCenters = [];\n this.crossCheckStateCount = new Int32Array(5);\n this.resultPointCallback = resultPointCallback;\n }\n FinderPatternFinder.prototype.getImage = function () {\n return this.image;\n };\n FinderPatternFinder.prototype.getPossibleCenters = function () {\n return this.possibleCenters;\n };\n FinderPatternFinder.prototype.find = function (hints) {\n var tryHarder = (hints !== null && hints !== undefined) && undefined !== hints.get(DecodeHintType.TRY_HARDER);\n var pureBarcode = (hints !== null && hints !== undefined) && undefined !== hints.get(DecodeHintType.PURE_BARCODE);\n var image = this.image;\n var maxI = image.getHeight();\n var maxJ = image.getWidth();\n // We are looking for black/white/black/white/black modules in\n // 1:1:3:1:1 ratio; this tracks the number of such modules seen so far\n // Let's assume that the maximum version QR Code we support takes up 1/4 the height of the\n // image, and then account for the center being 3 modules in size. This gives the smallest\n // number of pixels the center could be, so skip this often. When trying harder, look for all\n // QR versions regardless of how dense they are.\n var iSkip = Math.floor((3 * maxI) / (4 * FinderPatternFinder.MAX_MODULES));\n if (iSkip < FinderPatternFinder.MIN_SKIP || tryHarder) {\n iSkip = FinderPatternFinder.MIN_SKIP;\n }\n var done = false;\n var stateCount = new Int32Array(5);\n for (var i = iSkip - 1; i < maxI && !done; i += iSkip) {\n // Get a row of black/white values\n stateCount[0] = 0;\n stateCount[1] = 0;\n stateCount[2] = 0;\n stateCount[3] = 0;\n stateCount[4] = 0;\n var currentState = 0;\n for (var j = 0; j < maxJ; j++) {\n if (image.get(j, i)) {\n // Black pixel\n if ((currentState & 1) === 1) { // Counting white pixels\n currentState++;\n }\n stateCount[currentState]++;\n }\n else { // White pixel\n if ((currentState & 1) === 0) { // Counting black pixels\n if (currentState === 4) { // A winner?\n if (FinderPatternFinder.foundPatternCross(stateCount)) { // Yes\n var confirmed = this.handlePossibleCenter(stateCount, i, j, pureBarcode);\n if (confirmed === true) {\n // Start examining every other line. Checking each line turned out to be too\n // expensive and didn't improve performance.\n iSkip = 2;\n if (this.hasSkipped === true) {\n done = this.haveMultiplyConfirmedCenters();\n }\n else {\n var rowSkip = this.findRowSkip();\n if (rowSkip > stateCount[2]) {\n // Skip rows between row of lower confirmed center\n // and top of presumed third confirmed center\n // but back up a bit to get a full chance of detecting\n // it, entire width of center of finder pattern\n // Skip by rowSkip, but back off by stateCount[2] (size of last center\n // of pattern we saw) to be conservative, and also back off by iSkip which\n // is about to be re-added\n i += rowSkip - stateCount[2] - iSkip;\n j = maxJ - 1;\n }\n }\n }\n else {\n stateCount[0] = stateCount[2];\n stateCount[1] = stateCount[3];\n stateCount[2] = stateCount[4];\n stateCount[3] = 1;\n stateCount[4] = 0;\n currentState = 3;\n continue;\n }\n // Clear state to start looking again\n currentState = 0;\n stateCount[0] = 0;\n stateCount[1] = 0;\n stateCount[2] = 0;\n stateCount[3] = 0;\n stateCount[4] = 0;\n }\n else { // No, shift counts back by two\n stateCount[0] = stateCount[2];\n stateCount[1] = stateCount[3];\n stateCount[2] = stateCount[4];\n stateCount[3] = 1;\n stateCount[4] = 0;\n currentState = 3;\n }\n }\n else {\n stateCount[++currentState]++;\n }\n }\n else { // Counting white pixels\n stateCount[currentState]++;\n }\n }\n }\n if (FinderPatternFinder.foundPatternCross(stateCount)) {\n var confirmed = this.handlePossibleCenter(stateCount, i, maxJ, pureBarcode);\n if (confirmed === true) {\n iSkip = stateCount[0];\n if (this.hasSkipped) {\n // Found a third one\n done = this.haveMultiplyConfirmedCenters();\n }\n }\n }\n }\n var patternInfo = this.selectBestPatterns();\n ResultPoint.orderBestPatterns(patternInfo);\n return new FinderPatternInfo(patternInfo);\n };\n /**\n * Given a count of black/white/black/white/black pixels just seen and an end position,\n * figures the location of the center of this run.\n */\n FinderPatternFinder.centerFromEnd = function (stateCount, end /*int*/) {\n return (end - stateCount[4] - stateCount[3]) - stateCount[2] / 2.0;\n };\n /**\n * @param stateCount count of black/white/black/white/black pixels just read\n * @return true iff the proportions of the counts is close enough to the 1/1/3/1/1 ratios\n * used by finder patterns to be considered a match\n */\n FinderPatternFinder.foundPatternCross = function (stateCount) {\n var totalModuleSize = 0;\n for (var i = 0; i < 5; i++) {\n var count = stateCount[i];\n if (count === 0) {\n return false;\n }\n totalModuleSize += count;\n }\n if (totalModuleSize < 7) {\n return false;\n }\n var moduleSize = totalModuleSize / 7.0;\n var maxVariance = moduleSize / 2.0;\n // Allow less than 50% variance from 1-1-3-1-1 proportions\n return Math.abs(moduleSize - stateCount[0]) < maxVariance &&\n Math.abs(moduleSize - stateCount[1]) < maxVariance &&\n Math.abs(3.0 * moduleSize - stateCount[2]) < 3 * maxVariance &&\n Math.abs(moduleSize - stateCount[3]) < maxVariance &&\n Math.abs(moduleSize - stateCount[4]) < maxVariance;\n };\n FinderPatternFinder.prototype.getCrossCheckStateCount = function () {\n var crossCheckStateCount = this.crossCheckStateCount;\n crossCheckStateCount[0] = 0;\n crossCheckStateCount[1] = 0;\n crossCheckStateCount[2] = 0;\n crossCheckStateCount[3] = 0;\n crossCheckStateCount[4] = 0;\n return crossCheckStateCount;\n };\n /**\n * After a vertical and horizontal scan finds a potential finder pattern, this method\n * \"cross-cross-cross-checks\" by scanning down diagonally through the center of the possible\n * finder pattern to see if the same proportion is detected.\n *\n * @param startI row where a finder pattern was detected\n * @param centerJ center of the section that appears to cross a finder pattern\n * @param maxCount maximum reasonable number of modules that should be\n * observed in any reading state, based on the results of the horizontal scan\n * @param originalStateCountTotal The original state count total.\n * @return true if proportions are withing expected limits\n */\n FinderPatternFinder.prototype.crossCheckDiagonal = function (startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n var stateCount = this.getCrossCheckStateCount();\n // Start counting up, left from center finding black center mass\n var i = 0;\n var image = this.image;\n while (startI >= i && centerJ >= i && image.get(centerJ - i, startI - i)) {\n stateCount[2]++;\n i++;\n }\n if (startI < i || centerJ < i) {\n return false;\n }\n // Continue up, left finding white space\n while (startI >= i && centerJ >= i && !image.get(centerJ - i, startI - i) &&\n stateCount[1] <= maxCount) {\n stateCount[1]++;\n i++;\n }\n // If already too many modules in this state or ran off the edge:\n if (startI < i || centerJ < i || stateCount[1] > maxCount) {\n return false;\n }\n // Continue up, left finding black border\n while (startI >= i && centerJ >= i && image.get(centerJ - i, startI - i) &&\n stateCount[0] <= maxCount) {\n stateCount[0]++;\n i++;\n }\n if (stateCount[0] > maxCount) {\n return false;\n }\n var maxI = image.getHeight();\n var maxJ = image.getWidth();\n // Now also count down, right from center\n i = 1;\n while (startI + i < maxI && centerJ + i < maxJ && image.get(centerJ + i, startI + i)) {\n stateCount[2]++;\n i++;\n }\n // Ran off the edge?\n if (startI + i >= maxI || centerJ + i >= maxJ) {\n return false;\n }\n while (startI + i < maxI && centerJ + i < maxJ && !image.get(centerJ + i, startI + i) &&\n stateCount[3] < maxCount) {\n stateCount[3]++;\n i++;\n }\n if (startI + i >= maxI || centerJ + i >= maxJ || stateCount[3] >= maxCount) {\n return false;\n }\n while (startI + i < maxI && centerJ + i < maxJ && image.get(centerJ + i, startI + i) &&\n stateCount[4] < maxCount) {\n stateCount[4]++;\n i++;\n }\n if (stateCount[4] >= maxCount) {\n return false;\n }\n // If we found a finder-pattern-like section, but its size is more than 100% different than\n // the original, assume it's a false positive\n var stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] + stateCount[4];\n return Math.abs(stateCountTotal - originalStateCountTotal) < 2 * originalStateCountTotal &&\n FinderPatternFinder.foundPatternCross(stateCount);\n };\n /**\n *

After a horizontal scan finds a potential finder pattern, this method\n * \"cross-checks\" by scanning down vertically through the center of the possible\n * finder pattern to see if the same proportion is detected.

\n *\n * @param startI row where a finder pattern was detected\n * @param centerJ center of the section that appears to cross a finder pattern\n * @param maxCount maximum reasonable number of modules that should be\n * observed in any reading state, based on the results of the horizontal scan\n * @return vertical center of finder pattern, or {@link Float#NaN} if not found\n */\n FinderPatternFinder.prototype.crossCheckVertical = function (startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n var image = this.image;\n var maxI = image.getHeight();\n var stateCount = this.getCrossCheckStateCount();\n // Start counting up from center\n var i = startI;\n while (i >= 0 && image.get(centerJ, i)) {\n stateCount[2]++;\n i--;\n }\n if (i < 0) {\n return NaN;\n }\n while (i >= 0 && !image.get(centerJ, i) && stateCount[1] <= maxCount) {\n stateCount[1]++;\n i--;\n }\n // If already too many modules in this state or ran off the edge:\n if (i < 0 || stateCount[1] > maxCount) {\n return NaN;\n }\n while (i >= 0 && image.get(centerJ, i) && stateCount[0] <= maxCount) {\n stateCount[0]++;\n i--;\n }\n if (stateCount[0] > maxCount) {\n return NaN;\n }\n // Now also count down from center\n i = startI + 1;\n while (i < maxI && image.get(centerJ, i)) {\n stateCount[2]++;\n i++;\n }\n if (i === maxI) {\n return NaN;\n }\n while (i < maxI && !image.get(centerJ, i) && stateCount[3] < maxCount) {\n stateCount[3]++;\n i++;\n }\n if (i === maxI || stateCount[3] >= maxCount) {\n return NaN;\n }\n while (i < maxI && image.get(centerJ, i) && stateCount[4] < maxCount) {\n stateCount[4]++;\n i++;\n }\n if (stateCount[4] >= maxCount) {\n return NaN;\n }\n // If we found a finder-pattern-like section, but its size is more than 40% different than\n // the original, assume it's a false positive\n var stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] +\n stateCount[4];\n if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= 2 * originalStateCountTotal) {\n return NaN;\n }\n return FinderPatternFinder.foundPatternCross(stateCount) ? FinderPatternFinder.centerFromEnd(stateCount, i) : NaN;\n };\n /**\n *

Like {@link #crossCheckVertical(int, int, int, int)}, and in fact is basically identical,\n * except it reads horizontally instead of vertically. This is used to cross-cross\n * check a vertical cross check and locate the real center of the alignment pattern.

\n */\n FinderPatternFinder.prototype.crossCheckHorizontal = function (startJ /*int*/, centerI /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n var image = this.image;\n var maxJ = image.getWidth();\n var stateCount = this.getCrossCheckStateCount();\n var j = startJ;\n while (j >= 0 && image.get(j, centerI)) {\n stateCount[2]++;\n j--;\n }\n if (j < 0) {\n return NaN;\n }\n while (j >= 0 && !image.get(j, centerI) && stateCount[1] <= maxCount) {\n stateCount[1]++;\n j--;\n }\n if (j < 0 || stateCount[1] > maxCount) {\n return NaN;\n }\n while (j >= 0 && image.get(j, centerI) && stateCount[0] <= maxCount) {\n stateCount[0]++;\n j--;\n }\n if (stateCount[0] > maxCount) {\n return NaN;\n }\n j = startJ + 1;\n while (j < maxJ && image.get(j, centerI)) {\n stateCount[2]++;\n j++;\n }\n if (j === maxJ) {\n return NaN;\n }\n while (j < maxJ && !image.get(j, centerI) && stateCount[3] < maxCount) {\n stateCount[3]++;\n j++;\n }\n if (j === maxJ || stateCount[3] >= maxCount) {\n return NaN;\n }\n while (j < maxJ && image.get(j, centerI) && stateCount[4] < maxCount) {\n stateCount[4]++;\n j++;\n }\n if (stateCount[4] >= maxCount) {\n return NaN;\n }\n // If we found a finder-pattern-like section, but its size is significantly different than\n // the original, assume it's a false positive\n var stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] +\n stateCount[4];\n if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= originalStateCountTotal) {\n return NaN;\n }\n return FinderPatternFinder.foundPatternCross(stateCount) ? FinderPatternFinder.centerFromEnd(stateCount, j) : NaN;\n };\n /**\n *

This is called when a horizontal scan finds a possible alignment pattern. It will\n * cross check with a vertical scan, and if successful, will, ah, cross-cross-check\n * with another horizontal scan. This is needed primarily to locate the real horizontal\n * center of the pattern in cases of extreme skew.\n * And then we cross-cross-cross check with another diagonal scan.

\n *\n *

If that succeeds the finder pattern location is added to a list that tracks\n * the number of times each location has been nearly-matched as a finder pattern.\n * Each additional find is more evidence that the location is in fact a finder\n * pattern center\n *\n * @param stateCount reading state module counts from horizontal scan\n * @param i row where finder pattern may be found\n * @param j end of possible finder pattern in row\n * @param pureBarcode true if in \"pure barcode\" mode\n * @return true if a finder pattern candidate was found this time\n */\n FinderPatternFinder.prototype.handlePossibleCenter = function (stateCount, i /*int*/, j /*int*/, pureBarcode) {\n var stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] +\n stateCount[4];\n var centerJ = FinderPatternFinder.centerFromEnd(stateCount, j);\n var centerI = this.crossCheckVertical(i, /*(int) */ Math.floor(centerJ), stateCount[2], stateCountTotal);\n if (!isNaN(centerI)) {\n // Re-cross check\n centerJ = this.crossCheckHorizontal(/*(int) */ Math.floor(centerJ), /*(int) */ Math.floor(centerI), stateCount[2], stateCountTotal);\n if (!isNaN(centerJ) &&\n (!pureBarcode || this.crossCheckDiagonal(/*(int) */ Math.floor(centerI), /*(int) */ Math.floor(centerJ), stateCount[2], stateCountTotal))) {\n var estimatedModuleSize = stateCountTotal / 7.0;\n var found = false;\n var possibleCenters = this.possibleCenters;\n for (var index = 0, length_1 = possibleCenters.length; index < length_1; index++) {\n var center = possibleCenters[index];\n // Look for about the same center and module size:\n if (center.aboutEquals(estimatedModuleSize, centerI, centerJ)) {\n possibleCenters[index] = center.combineEstimate(centerI, centerJ, estimatedModuleSize);\n found = true;\n break;\n }\n }\n if (!found) {\n var point = new FinderPattern(centerJ, centerI, estimatedModuleSize);\n possibleCenters.push(point);\n if (this.resultPointCallback !== null && this.resultPointCallback !== undefined) {\n this.resultPointCallback.foundPossibleResultPoint(point);\n }\n }\n return true;\n }\n }\n return false;\n };\n /**\n * @return number of rows we could safely skip during scanning, based on the first\n * two finder patterns that have been located. In some cases their position will\n * allow us to infer that the third pattern must lie below a certain point farther\n * down in the image.\n */\n FinderPatternFinder.prototype.findRowSkip = function () {\n var e_1, _a;\n var max = this.possibleCenters.length;\n if (max <= 1) {\n return 0;\n }\n var firstConfirmedCenter = null;\n try {\n for (var _b = __values(this.possibleCenters), _c = _b.next(); !_c.done; _c = _b.next()) {\n var center = _c.value;\n if (center.getCount() >= FinderPatternFinder.CENTER_QUORUM) {\n if (firstConfirmedCenter == null) {\n firstConfirmedCenter = center;\n }\n else {\n // We have two confirmed centers\n // How far down can we skip before resuming looking for the next\n // pattern? In the worst case, only the difference between the\n // difference in the x / y coordinates of the two centers.\n // This is the case where you find top left last.\n this.hasSkipped = true;\n return /*(int) */ Math.floor((Math.abs(firstConfirmedCenter.getX() - center.getX()) -\n Math.abs(firstConfirmedCenter.getY() - center.getY())) / 2);\n }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return 0;\n };\n /**\n * @return true iff we have found at least 3 finder patterns that have been detected\n * at least {@link #CENTER_QUORUM} times each, and, the estimated module size of the\n * candidates is \"pretty similar\"\n */\n FinderPatternFinder.prototype.haveMultiplyConfirmedCenters = function () {\n var e_2, _a, e_3, _b;\n var confirmedCount = 0;\n var totalModuleSize = 0.0;\n var max = this.possibleCenters.length;\n try {\n for (var _c = __values(this.possibleCenters), _d = _c.next(); !_d.done; _d = _c.next()) {\n var pattern = _d.value;\n if (pattern.getCount() >= FinderPatternFinder.CENTER_QUORUM) {\n confirmedCount++;\n totalModuleSize += pattern.getEstimatedModuleSize();\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (confirmedCount < 3) {\n return false;\n }\n // OK, we have at least 3 confirmed centers, but, it's possible that one is a \"false positive\"\n // and that we need to keep looking. We detect this by asking if the estimated module sizes\n // vary too much. We arbitrarily say that when the total deviation from average exceeds\n // 5% of the total module size estimates, it's too much.\n var average = totalModuleSize / max;\n var totalDeviation = 0.0;\n try {\n for (var _e = __values(this.possibleCenters), _f = _e.next(); !_f.done; _f = _e.next()) {\n var pattern = _f.value;\n totalDeviation += Math.abs(pattern.getEstimatedModuleSize() - average);\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return totalDeviation <= 0.05 * totalModuleSize;\n };\n /**\n * @return the 3 best {@link FinderPattern}s from our list of candidates. The \"best\" are\n * those that have been detected at least {@link #CENTER_QUORUM} times, and whose module\n * size differs from the average among those patterns the least\n * @throws NotFoundException if 3 such finder patterns do not exist\n */\n FinderPatternFinder.prototype.selectBestPatterns = function () {\n var e_4, _a, e_5, _b;\n var startSize = this.possibleCenters.length;\n if (startSize < 3) {\n // Couldn't find enough finder patterns\n throw new NotFoundException();\n }\n var possibleCenters = this.possibleCenters;\n var average;\n // Filter outlier possibilities whose module size is too different\n if (startSize > 3) {\n // But we can only afford to do so if we have at least 4 possibilities to choose from\n var totalModuleSize = 0.0;\n var square = 0.0;\n try {\n for (var _c = __values(this.possibleCenters), _d = _c.next(); !_d.done; _d = _c.next()) {\n var center = _d.value;\n var size = center.getEstimatedModuleSize();\n totalModuleSize += size;\n square += size * size;\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_4) throw e_4.error; }\n }\n average = totalModuleSize / startSize;\n var stdDev = Math.sqrt(square / startSize - average * average);\n possibleCenters.sort(\n /**\n *

Orders by furthest from average

\n */\n // FurthestFromAverageComparator implements Comparator\n function (center1, center2) {\n var dA = Math.abs(center2.getEstimatedModuleSize() - average);\n var dB = Math.abs(center1.getEstimatedModuleSize() - average);\n return dA < dB ? -1 : dA > dB ? 1 : 0;\n });\n var limit = Math.max(0.2 * average, stdDev);\n for (var i = 0; i < possibleCenters.length && possibleCenters.length > 3; i++) {\n var pattern = possibleCenters[i];\n if (Math.abs(pattern.getEstimatedModuleSize() - average) > limit) {\n possibleCenters.splice(i, 1);\n i--;\n }\n }\n }\n if (possibleCenters.length > 3) {\n // Throw away all but those first size candidate points we found.\n var totalModuleSize = 0.0;\n try {\n for (var possibleCenters_1 = __values(possibleCenters), possibleCenters_1_1 = possibleCenters_1.next(); !possibleCenters_1_1.done; possibleCenters_1_1 = possibleCenters_1.next()) {\n var possibleCenter = possibleCenters_1_1.value;\n totalModuleSize += possibleCenter.getEstimatedModuleSize();\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (possibleCenters_1_1 && !possibleCenters_1_1.done && (_b = possibleCenters_1.return)) _b.call(possibleCenters_1);\n }\n finally { if (e_5) throw e_5.error; }\n }\n average = totalModuleSize / possibleCenters.length;\n possibleCenters.sort(\n /**\n *

Orders by {@link FinderPattern#getCount()}, descending.

\n */\n // CenterComparator implements Comparator\n function (center1, center2) {\n if (center2.getCount() === center1.getCount()) {\n var dA = Math.abs(center2.getEstimatedModuleSize() - average);\n var dB = Math.abs(center1.getEstimatedModuleSize() - average);\n return dA < dB ? 1 : dA > dB ? -1 : 0;\n }\n else {\n return center2.getCount() - center1.getCount();\n }\n });\n possibleCenters.splice(3); // this is not realy necessary as we only return first 3 anyway\n }\n return [\n possibleCenters[0],\n possibleCenters[1],\n possibleCenters[2]\n ];\n };\n FinderPatternFinder.CENTER_QUORUM = 2;\n FinderPatternFinder.MIN_SKIP = 3; // 1 pixel/module times 3 modules/center\n FinderPatternFinder.MAX_MODULES = 57; // support up to version 10 for mobile clients\n return FinderPatternFinder;\n}());\nexport default FinderPatternFinder;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport MathUtils from '../../common/detector/MathUtils';\nimport DetectorResult from '../../common/DetectorResult';\n// import GridSampler from '../../common/GridSampler';\nimport GridSamplerInstance from '../../common/GridSamplerInstance';\nimport PerspectiveTransform from '../../common/PerspectiveTransform';\nimport DecodeHintType from '../../DecodeHintType';\nimport NotFoundException from '../../NotFoundException';\nimport ResultPoint from '../../ResultPoint';\nimport Version from '../decoder/Version';\nimport AlignmentPatternFinder from './AlignmentPatternFinder';\nimport FinderPatternFinder from './FinderPatternFinder';\n/*import java.util.Map;*/\n/**\n *

Encapsulates logic that can detect a QR Code in an image, even if the QR Code\n * is rotated or skewed, or partially obscured.

\n *\n * @author Sean Owen\n */\nvar Detector = /** @class */ (function () {\n function Detector(image) {\n this.image = image;\n }\n Detector.prototype.getImage = function () {\n return this.image;\n };\n Detector.prototype.getResultPointCallback = function () {\n return this.resultPointCallback;\n };\n /**\n *

Detects a QR Code in an image.

\n *\n * @return {@link DetectorResult} encapsulating results of detecting a QR Code\n * @throws NotFoundException if QR Code cannot be found\n * @throws FormatException if a QR Code cannot be decoded\n */\n // public detect(): DetectorResult /*throws NotFoundException, FormatException*/ {\n // return detect(null)\n // }\n /**\n *

Detects a QR Code in an image.

\n *\n * @param hints optional hints to detector\n * @return {@link DetectorResult} encapsulating results of detecting a QR Code\n * @throws NotFoundException if QR Code cannot be found\n * @throws FormatException if a QR Code cannot be decoded\n */\n Detector.prototype.detect = function (hints) {\n this.resultPointCallback = (hints === null || hints === undefined) ? null :\n /*(ResultPointCallback) */ hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);\n var finder = new FinderPatternFinder(this.image, this.resultPointCallback);\n var info = finder.find(hints);\n return this.processFinderPatternInfo(info);\n };\n Detector.prototype.processFinderPatternInfo = function (info) {\n var topLeft = info.getTopLeft();\n var topRight = info.getTopRight();\n var bottomLeft = info.getBottomLeft();\n var moduleSize = this.calculateModuleSize(topLeft, topRight, bottomLeft);\n if (moduleSize < 1.0) {\n throw new NotFoundException('No pattern found in proccess finder.');\n }\n var dimension = Detector.computeDimension(topLeft, topRight, bottomLeft, moduleSize);\n var provisionalVersion = Version.getProvisionalVersionForDimension(dimension);\n var modulesBetweenFPCenters = provisionalVersion.getDimensionForVersion() - 7;\n var alignmentPattern = null;\n // Anything above version 1 has an alignment pattern\n if (provisionalVersion.getAlignmentPatternCenters().length > 0) {\n // Guess where a \"bottom right\" finder pattern would have been\n var bottomRightX = topRight.getX() - topLeft.getX() + bottomLeft.getX();\n var bottomRightY = topRight.getY() - topLeft.getY() + bottomLeft.getY();\n // Estimate that alignment pattern is closer by 3 modules\n // from \"bottom right\" to known top left location\n var correctionToTopLeft = 1.0 - 3.0 / modulesBetweenFPCenters;\n var estAlignmentX = /*(int) */ Math.floor(topLeft.getX() + correctionToTopLeft * (bottomRightX - topLeft.getX()));\n var estAlignmentY = /*(int) */ Math.floor(topLeft.getY() + correctionToTopLeft * (bottomRightY - topLeft.getY()));\n // Kind of arbitrary -- expand search radius before giving up\n for (var i = 4; i <= 16; i <<= 1) {\n try {\n alignmentPattern = this.findAlignmentInRegion(moduleSize, estAlignmentX, estAlignmentY, i);\n break;\n }\n catch (re /*NotFoundException*/) {\n if (!(re instanceof NotFoundException)) {\n throw re;\n }\n // try next round\n }\n }\n // If we didn't find alignment pattern... well try anyway without it\n }\n var transform = Detector.createTransform(topLeft, topRight, bottomLeft, alignmentPattern, dimension);\n var bits = Detector.sampleGrid(this.image, transform, dimension);\n var points;\n if (alignmentPattern === null) {\n points = [bottomLeft, topLeft, topRight];\n }\n else {\n points = [bottomLeft, topLeft, topRight, alignmentPattern];\n }\n return new DetectorResult(bits, points);\n };\n Detector.createTransform = function (topLeft, topRight, bottomLeft, alignmentPattern, dimension /*int*/) {\n var dimMinusThree = dimension - 3.5;\n var bottomRightX; /*float*/\n var bottomRightY; /*float*/\n var sourceBottomRightX; /*float*/\n var sourceBottomRightY; /*float*/\n if (alignmentPattern !== null) {\n bottomRightX = alignmentPattern.getX();\n bottomRightY = alignmentPattern.getY();\n sourceBottomRightX = dimMinusThree - 3.0;\n sourceBottomRightY = sourceBottomRightX;\n }\n else {\n // Don't have an alignment pattern, just make up the bottom-right point\n bottomRightX = (topRight.getX() - topLeft.getX()) + bottomLeft.getX();\n bottomRightY = (topRight.getY() - topLeft.getY()) + bottomLeft.getY();\n sourceBottomRightX = dimMinusThree;\n sourceBottomRightY = dimMinusThree;\n }\n return PerspectiveTransform.quadrilateralToQuadrilateral(3.5, 3.5, dimMinusThree, 3.5, sourceBottomRightX, sourceBottomRightY, 3.5, dimMinusThree, topLeft.getX(), topLeft.getY(), topRight.getX(), topRight.getY(), bottomRightX, bottomRightY, bottomLeft.getX(), bottomLeft.getY());\n };\n Detector.sampleGrid = function (image, transform, dimension /*int*/) {\n var sampler = GridSamplerInstance.getInstance();\n return sampler.sampleGridWithTransform(image, dimension, dimension, transform);\n };\n /**\n *

Computes the dimension (number of modules on a size) of the QR Code based on the position\n * of the finder patterns and estimated module size.

\n */\n Detector.computeDimension = function (topLeft, topRight, bottomLeft, moduleSize /*float*/) {\n var tltrCentersDimension = MathUtils.round(ResultPoint.distance(topLeft, topRight) / moduleSize);\n var tlblCentersDimension = MathUtils.round(ResultPoint.distance(topLeft, bottomLeft) / moduleSize);\n var dimension = Math.floor((tltrCentersDimension + tlblCentersDimension) / 2) + 7;\n switch (dimension & 0x03) { // mod 4\n case 0:\n dimension++;\n break;\n // 1? do nothing\n case 2:\n dimension--;\n break;\n case 3:\n throw new NotFoundException('Dimensions could be not found.');\n }\n return dimension;\n };\n /**\n *

Computes an average estimated module size based on estimated derived from the positions\n * of the three finder patterns.

\n *\n * @param topLeft detected top-left finder pattern center\n * @param topRight detected top-right finder pattern center\n * @param bottomLeft detected bottom-left finder pattern center\n * @return estimated module size\n */\n Detector.prototype.calculateModuleSize = function (topLeft, topRight, bottomLeft) {\n // Take the average\n return (this.calculateModuleSizeOneWay(topLeft, topRight) +\n this.calculateModuleSizeOneWay(topLeft, bottomLeft)) / 2.0;\n };\n /**\n *

Estimates module size based on two finder patterns -- it uses\n * {@link #sizeOfBlackWhiteBlackRunBothWays(int, int, int, int)} to figure the\n * width of each, measuring along the axis between their centers.

\n */\n Detector.prototype.calculateModuleSizeOneWay = function (pattern, otherPattern) {\n var moduleSizeEst1 = this.sizeOfBlackWhiteBlackRunBothWays(/*(int) */ Math.floor(pattern.getX()), \n /*(int) */ Math.floor(pattern.getY()), \n /*(int) */ Math.floor(otherPattern.getX()), \n /*(int) */ Math.floor(otherPattern.getY()));\n var moduleSizeEst2 = this.sizeOfBlackWhiteBlackRunBothWays(/*(int) */ Math.floor(otherPattern.getX()), \n /*(int) */ Math.floor(otherPattern.getY()), \n /*(int) */ Math.floor(pattern.getX()), \n /*(int) */ Math.floor(pattern.getY()));\n if (isNaN(moduleSizeEst1)) {\n return moduleSizeEst2 / 7.0;\n }\n if (isNaN(moduleSizeEst2)) {\n return moduleSizeEst1 / 7.0;\n }\n // Average them, and divide by 7 since we've counted the width of 3 black modules,\n // and 1 white and 1 black module on either side. Ergo, divide sum by 14.\n return (moduleSizeEst1 + moduleSizeEst2) / 14.0;\n };\n /**\n * See {@link #sizeOfBlackWhiteBlackRun(int, int, int, int)}; computes the total width of\n * a finder pattern by looking for a black-white-black run from the center in the direction\n * of another point (another finder pattern center), and in the opposite direction too.\n */\n Detector.prototype.sizeOfBlackWhiteBlackRunBothWays = function (fromX /*int*/, fromY /*int*/, toX /*int*/, toY /*int*/) {\n var result = this.sizeOfBlackWhiteBlackRun(fromX, fromY, toX, toY);\n // Now count other way -- don't run off image though of course\n var scale = 1.0;\n var otherToX = fromX - (toX - fromX);\n if (otherToX < 0) {\n scale = fromX / /*(float) */ (fromX - otherToX);\n otherToX = 0;\n }\n else if (otherToX >= this.image.getWidth()) {\n scale = (this.image.getWidth() - 1 - fromX) / /*(float) */ (otherToX - fromX);\n otherToX = this.image.getWidth() - 1;\n }\n var otherToY = /*(int) */ Math.floor(fromY - (toY - fromY) * scale);\n scale = 1.0;\n if (otherToY < 0) {\n scale = fromY / /*(float) */ (fromY - otherToY);\n otherToY = 0;\n }\n else if (otherToY >= this.image.getHeight()) {\n scale = (this.image.getHeight() - 1 - fromY) / /*(float) */ (otherToY - fromY);\n otherToY = this.image.getHeight() - 1;\n }\n otherToX = /*(int) */ Math.floor(fromX + (otherToX - fromX) * scale);\n result += this.sizeOfBlackWhiteBlackRun(fromX, fromY, otherToX, otherToY);\n // Middle pixel is double-counted this way; subtract 1\n return result - 1.0;\n };\n /**\n *

This method traces a line from a point in the image, in the direction towards another point.\n * It begins in a black region, and keeps going until it finds white, then black, then white again.\n * It reports the distance from the start to this point.

\n *\n *

This is used when figuring out how wide a finder pattern is, when the finder pattern\n * may be skewed or rotated.

\n */\n Detector.prototype.sizeOfBlackWhiteBlackRun = function (fromX /*int*/, fromY /*int*/, toX /*int*/, toY /*int*/) {\n // Mild variant of Bresenham's algorithm\n // see http://en.wikipedia.org/wiki/Bresenham's_line_algorithm\n var steep = Math.abs(toY - fromY) > Math.abs(toX - fromX);\n if (steep) {\n var temp = fromX;\n fromX = fromY;\n fromY = temp;\n temp = toX;\n toX = toY;\n toY = temp;\n }\n var dx = Math.abs(toX - fromX);\n var dy = Math.abs(toY - fromY);\n var error = -dx / 2;\n var xstep = fromX < toX ? 1 : -1;\n var ystep = fromY < toY ? 1 : -1;\n // In black pixels, looking for white, first or second time.\n var state = 0;\n // Loop up until x == toX, but not beyond\n var xLimit = toX + xstep;\n for (var x = fromX, y = fromY; x !== xLimit; x += xstep) {\n var realX = steep ? y : x;\n var realY = steep ? x : y;\n // Does current pixel mean we have moved white to black or vice versa?\n // Scanning black in state 0,2 and white in state 1, so if we find the wrong\n // color, advance to next state or end if we are in state 2 already\n if ((state === 1) === this.image.get(realX, realY)) {\n if (state === 2) {\n return MathUtils.distance(x, y, fromX, fromY);\n }\n state++;\n }\n error += dy;\n if (error > 0) {\n if (y === toY) {\n break;\n }\n y += ystep;\n error -= dx;\n }\n }\n // Found black-white-black; give the benefit of the doubt that the next pixel outside the image\n // is \"white\" so this last point at (toX+xStep,toY) is the right ending. This is really a\n // small approximation; (toX+xStep,toY+yStep) might be really correct. Ignore this.\n if (state === 2) {\n return MathUtils.distance(toX + xstep, toY, fromX, fromY);\n }\n // else we didn't find even black-white-black; no estimate is really possible\n return NaN;\n };\n /**\n *

Attempts to locate an alignment pattern in a limited region of the image, which is\n * guessed to contain it. This method uses {@link AlignmentPattern}.

\n *\n * @param overallEstModuleSize estimated module size so far\n * @param estAlignmentX x coordinate of center of area probably containing alignment pattern\n * @param estAlignmentY y coordinate of above\n * @param allowanceFactor number of pixels in all directions to search from the center\n * @return {@link AlignmentPattern} if found, or null otherwise\n * @throws NotFoundException if an unexpected error occurs during detection\n */\n Detector.prototype.findAlignmentInRegion = function (overallEstModuleSize /*float*/, estAlignmentX /*int*/, estAlignmentY /*int*/, allowanceFactor /*float*/) {\n // Look for an alignment pattern (3 modules in size) around where it\n // should be\n var allowance = /*(int) */ Math.floor(allowanceFactor * overallEstModuleSize);\n var alignmentAreaLeftX = Math.max(0, estAlignmentX - allowance);\n var alignmentAreaRightX = Math.min(this.image.getWidth() - 1, estAlignmentX + allowance);\n if (alignmentAreaRightX - alignmentAreaLeftX < overallEstModuleSize * 3) {\n throw new NotFoundException('Alignment top exceeds estimated module size.');\n }\n var alignmentAreaTopY = Math.max(0, estAlignmentY - allowance);\n var alignmentAreaBottomY = Math.min(this.image.getHeight() - 1, estAlignmentY + allowance);\n if (alignmentAreaBottomY - alignmentAreaTopY < overallEstModuleSize * 3) {\n throw new NotFoundException('Alignment bottom exceeds estimated module size.');\n }\n var alignmentFinder = new AlignmentPatternFinder(this.image, alignmentAreaLeftX, alignmentAreaTopY, alignmentAreaRightX - alignmentAreaLeftX, alignmentAreaBottomY - alignmentAreaTopY, overallEstModuleSize, this.resultPointCallback);\n return alignmentFinder.find();\n };\n return Detector;\n}());\nexport default Detector;\n","/*\n * Copyright 2007 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.qrcode {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport BitMatrix from '../common/BitMatrix';\nimport DecodeHintType from '../DecodeHintType';\nimport NotFoundException from '../NotFoundException';\nimport Result from '../Result';\nimport ResultMetadataType from '../ResultMetadataType';\n// import DetectorResult from '../common/DetectorResult';\nimport Decoder from './decoder/Decoder';\nimport QRCodeDecoderMetaData from './decoder/QRCodeDecoderMetaData';\nimport Detector from './detector/Detector';\n/*import java.util.List;*/\n/*import java.util.Map;*/\n/**\n * This implementation can detect and decode QR Codes in an image.\n *\n * @author Sean Owen\n */\nvar QRCodeReader = /** @class */ (function () {\n function QRCodeReader() {\n this.decoder = new Decoder();\n }\n QRCodeReader.prototype.getDecoder = function () {\n return this.decoder;\n };\n /**\n * Locates and decodes a QR code in an image.\n *\n * @return a representing: string the content encoded by the QR code\n * @throws NotFoundException if a QR code cannot be found\n * @throws FormatException if a QR code cannot be decoded\n * @throws ChecksumException if error correction fails\n */\n /*@Override*/\n // public decode(image: BinaryBitmap): Result /*throws NotFoundException, ChecksumException, FormatException */ {\n // return this.decode(image, null)\n // }\n /*@Override*/\n QRCodeReader.prototype.decode = function (image, hints) {\n var decoderResult;\n var points;\n if (hints !== undefined && hints !== null && undefined !== hints.get(DecodeHintType.PURE_BARCODE)) {\n var bits = QRCodeReader.extractPureBits(image.getBlackMatrix());\n decoderResult = this.decoder.decodeBitMatrix(bits, hints);\n points = QRCodeReader.NO_POINTS;\n }\n else {\n var detectorResult = new Detector(image.getBlackMatrix()).detect(hints);\n decoderResult = this.decoder.decodeBitMatrix(detectorResult.getBits(), hints);\n points = detectorResult.getPoints();\n }\n // If the code was mirrored: swap the bottom-left and the top-right points.\n if (decoderResult.getOther() instanceof QRCodeDecoderMetaData) {\n decoderResult.getOther().applyMirroredCorrection(points);\n }\n var result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), undefined, points, BarcodeFormat.QR_CODE, undefined);\n var byteSegments = decoderResult.getByteSegments();\n if (byteSegments !== null) {\n result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, byteSegments);\n }\n var ecLevel = decoderResult.getECLevel();\n if (ecLevel !== null) {\n result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, ecLevel);\n }\n if (decoderResult.hasStructuredAppend()) {\n result.putMetadata(ResultMetadataType.STRUCTURED_APPEND_SEQUENCE, decoderResult.getStructuredAppendSequenceNumber());\n result.putMetadata(ResultMetadataType.STRUCTURED_APPEND_PARITY, decoderResult.getStructuredAppendParity());\n }\n return result;\n };\n /*@Override*/\n QRCodeReader.prototype.reset = function () {\n // do nothing\n };\n /**\n * This method detects a code in a \"pure\" image -- that is, pure monochrome image\n * which contains only an unrotated, unskewed, image of a code, with some white border\n * around it. This is a specialized method that works exceptionally fast in this special\n * case.\n *\n * @see com.google.zxing.datamatrix.DataMatrixReader#extractPureBits(BitMatrix)\n */\n QRCodeReader.extractPureBits = function (image) {\n var leftTopBlack = image.getTopLeftOnBit();\n var rightBottomBlack = image.getBottomRightOnBit();\n if (leftTopBlack === null || rightBottomBlack === null) {\n throw new NotFoundException();\n }\n var moduleSize = this.moduleSize(leftTopBlack, image);\n var top = leftTopBlack[1];\n var bottom = rightBottomBlack[1];\n var left = leftTopBlack[0];\n var right = rightBottomBlack[0];\n // Sanity check!\n if (left >= right || top >= bottom) {\n throw new NotFoundException();\n }\n if (bottom - top !== right - left) {\n // Special case, where bottom-right module wasn't black so we found something else in the last row\n // Assume it's a square, so use height as the width\n right = left + (bottom - top);\n if (right >= image.getWidth()) {\n // Abort if that would not make sense -- off image\n throw new NotFoundException();\n }\n }\n var matrixWidth = Math.round((right - left + 1) / moduleSize);\n var matrixHeight = Math.round((bottom - top + 1) / moduleSize);\n if (matrixWidth <= 0 || matrixHeight <= 0) {\n throw new NotFoundException();\n }\n if (matrixHeight !== matrixWidth) {\n // Only possibly decode square regions\n throw new NotFoundException();\n }\n // Push in the \"border\" by half the module width so that we start\n // sampling in the middle of the module. Just in case the image is a\n // little off, this will help recover.\n var nudge = /*(int) */ Math.floor(moduleSize / 2.0);\n top += nudge;\n left += nudge;\n // But careful that this does not sample off the edge\n // \"right\" is the farthest-right valid pixel location -- right+1 is not necessarily\n // This is positive by how much the inner x loop below would be too large\n var nudgedTooFarRight = left + /*(int) */ Math.floor((matrixWidth - 1) * moduleSize) - right;\n if (nudgedTooFarRight > 0) {\n if (nudgedTooFarRight > nudge) {\n // Neither way fits; abort\n throw new NotFoundException();\n }\n left -= nudgedTooFarRight;\n }\n // See logic above\n var nudgedTooFarDown = top + /*(int) */ Math.floor((matrixHeight - 1) * moduleSize) - bottom;\n if (nudgedTooFarDown > 0) {\n if (nudgedTooFarDown > nudge) {\n // Neither way fits; abort\n throw new NotFoundException();\n }\n top -= nudgedTooFarDown;\n }\n // Now just read off the bits\n var bits = new BitMatrix(matrixWidth, matrixHeight);\n for (var y = 0; y < matrixHeight; y++) {\n var iOffset = top + /*(int) */ Math.floor(y * moduleSize);\n for (var x = 0; x < matrixWidth; x++) {\n if (image.get(left + /*(int) */ Math.floor(x * moduleSize), iOffset)) {\n bits.set(x, y);\n }\n }\n }\n return bits;\n };\n QRCodeReader.moduleSize = function (leftTopBlack, image) {\n var height = image.getHeight();\n var width = image.getWidth();\n var x = leftTopBlack[0];\n var y = leftTopBlack[1];\n var inBlack = true;\n var transitions = 0;\n while (x < width && y < height) {\n if (inBlack !== image.get(x, y)) {\n if (++transitions === 5) {\n break;\n }\n inBlack = !inBlack;\n }\n x++;\n y++;\n }\n if (x === width || y === height) {\n throw new NotFoundException();\n }\n return (x - leftTopBlack[0]) / 7.0;\n };\n QRCodeReader.NO_POINTS = new Array();\n return QRCodeReader;\n}());\nexport default QRCodeReader;\n","/*\n* Copyright 2009 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n// package com.google.zxing.pdf417;\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// import java.util.Arrays;\nimport Arrays from '../util/Arrays';\n// import java.util.Collection;\n// import com.google.zxing.common.detector.MathUtils;\nimport MathUtils from '../common/detector/MathUtils';\n/**\n * @author SITA Lab (kevin.osullivan@sita.aero)\n * @author Guenther Grau\n */\nvar PDF417Common = /** @class */ (function () {\n function PDF417Common() {\n }\n PDF417Common.prototype.PDF417Common = function () {\n };\n /**\n * @param moduleBitCount values to sum\n * @return sum of values\n * @deprecated call {@link MathUtils#sum(int[])}\n */\n // @Deprecated\n PDF417Common.getBitCountSum = function (moduleBitCount) {\n return MathUtils.sum(moduleBitCount);\n };\n PDF417Common.toIntArray = function (list) {\n var e_1, _a;\n if (list == null || !list.length) {\n return PDF417Common.EMPTY_INT_ARRAY;\n }\n var result = new Int32Array(list.length);\n var i = 0;\n try {\n for (var list_1 = __values(list), list_1_1 = list_1.next(); !list_1_1.done; list_1_1 = list_1.next()) {\n var integer = list_1_1.value;\n result[i++] = integer;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (list_1_1 && !list_1_1.done && (_a = list_1.return)) _a.call(list_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return result;\n };\n /**\n * @param symbol encoded symbol to translate to a codeword\n * @return the codeword corresponding to the symbol.\n */\n PDF417Common.getCodeword = function (symbol /*int*/) {\n var i = Arrays.binarySearch(PDF417Common.SYMBOL_TABLE, symbol & 0x3FFFF);\n if (i < 0) {\n return -1;\n }\n return (PDF417Common.CODEWORD_TABLE[i] - 1) % PDF417Common.NUMBER_OF_CODEWORDS;\n };\n PDF417Common.NUMBER_OF_CODEWORDS = 929;\n // Maximum Codewords (Data + Error).\n PDF417Common.MAX_CODEWORDS_IN_BARCODE = PDF417Common.NUMBER_OF_CODEWORDS - 1;\n PDF417Common.MIN_ROWS_IN_BARCODE = 3;\n PDF417Common.MAX_ROWS_IN_BARCODE = 90;\n // One left row indication column + max 30 data columns + one right row indicator column\n // public static /*final*/ MAX_CODEWORDS_IN_ROW: /*int*/ number = 32;\n PDF417Common.MODULES_IN_CODEWORD = 17;\n PDF417Common.MODULES_IN_STOP_PATTERN = 18;\n PDF417Common.BARS_IN_MODULE = 8;\n PDF417Common.EMPTY_INT_ARRAY = new Int32Array([]);\n /**\n * The sorted table of all possible symbols. Extracted from the PDF417\n * specification. The index of a symbol in this table corresponds to the\n * index into the codeword table.\n */\n PDF417Common.SYMBOL_TABLE = Int32Array.from([\n 0x1025e, 0x1027a, 0x1029e, 0x102bc, 0x102f2, 0x102f4, 0x1032e, 0x1034e, 0x1035c, 0x10396, 0x103a6, 0x103ac,\n 0x10422, 0x10428, 0x10436, 0x10442, 0x10444, 0x10448, 0x10450, 0x1045e, 0x10466, 0x1046c, 0x1047a, 0x10482,\n 0x1049e, 0x104a0, 0x104bc, 0x104c6, 0x104d8, 0x104ee, 0x104f2, 0x104f4, 0x10504, 0x10508, 0x10510, 0x1051e,\n 0x10520, 0x1053c, 0x10540, 0x10578, 0x10586, 0x1058c, 0x10598, 0x105b0, 0x105be, 0x105ce, 0x105dc, 0x105e2,\n 0x105e4, 0x105e8, 0x105f6, 0x1062e, 0x1064e, 0x1065c, 0x1068e, 0x1069c, 0x106b8, 0x106de, 0x106fa, 0x10716,\n 0x10726, 0x1072c, 0x10746, 0x1074c, 0x10758, 0x1076e, 0x10792, 0x10794, 0x107a2, 0x107a4, 0x107a8, 0x107b6,\n 0x10822, 0x10828, 0x10842, 0x10848, 0x10850, 0x1085e, 0x10866, 0x1086c, 0x1087a, 0x10882, 0x10884, 0x10890,\n 0x1089e, 0x108a0, 0x108bc, 0x108c6, 0x108cc, 0x108d8, 0x108ee, 0x108f2, 0x108f4, 0x10902, 0x10908, 0x1091e,\n 0x10920, 0x1093c, 0x10940, 0x10978, 0x10986, 0x10998, 0x109b0, 0x109be, 0x109ce, 0x109dc, 0x109e2, 0x109e4,\n 0x109e8, 0x109f6, 0x10a08, 0x10a10, 0x10a1e, 0x10a20, 0x10a3c, 0x10a40, 0x10a78, 0x10af0, 0x10b06, 0x10b0c,\n 0x10b18, 0x10b30, 0x10b3e, 0x10b60, 0x10b7c, 0x10b8e, 0x10b9c, 0x10bb8, 0x10bc2, 0x10bc4, 0x10bc8, 0x10bd0,\n 0x10bde, 0x10be6, 0x10bec, 0x10c2e, 0x10c4e, 0x10c5c, 0x10c62, 0x10c64, 0x10c68, 0x10c76, 0x10c8e, 0x10c9c,\n 0x10cb8, 0x10cc2, 0x10cc4, 0x10cc8, 0x10cd0, 0x10cde, 0x10ce6, 0x10cec, 0x10cfa, 0x10d0e, 0x10d1c, 0x10d38,\n 0x10d70, 0x10d7e, 0x10d82, 0x10d84, 0x10d88, 0x10d90, 0x10d9e, 0x10da0, 0x10dbc, 0x10dc6, 0x10dcc, 0x10dd8,\n 0x10dee, 0x10df2, 0x10df4, 0x10e16, 0x10e26, 0x10e2c, 0x10e46, 0x10e58, 0x10e6e, 0x10e86, 0x10e8c, 0x10e98,\n 0x10eb0, 0x10ebe, 0x10ece, 0x10edc, 0x10f0a, 0x10f12, 0x10f14, 0x10f22, 0x10f28, 0x10f36, 0x10f42, 0x10f44,\n 0x10f48, 0x10f50, 0x10f5e, 0x10f66, 0x10f6c, 0x10fb2, 0x10fb4, 0x11022, 0x11028, 0x11042, 0x11048, 0x11050,\n 0x1105e, 0x1107a, 0x11082, 0x11084, 0x11090, 0x1109e, 0x110a0, 0x110bc, 0x110c6, 0x110cc, 0x110d8, 0x110ee,\n 0x110f2, 0x110f4, 0x11102, 0x1111e, 0x11120, 0x1113c, 0x11140, 0x11178, 0x11186, 0x11198, 0x111b0, 0x111be,\n 0x111ce, 0x111dc, 0x111e2, 0x111e4, 0x111e8, 0x111f6, 0x11208, 0x1121e, 0x11220, 0x11278, 0x112f0, 0x1130c,\n 0x11330, 0x1133e, 0x11360, 0x1137c, 0x1138e, 0x1139c, 0x113b8, 0x113c2, 0x113c8, 0x113d0, 0x113de, 0x113e6,\n 0x113ec, 0x11408, 0x11410, 0x1141e, 0x11420, 0x1143c, 0x11440, 0x11478, 0x114f0, 0x115e0, 0x1160c, 0x11618,\n 0x11630, 0x1163e, 0x11660, 0x1167c, 0x116c0, 0x116f8, 0x1171c, 0x11738, 0x11770, 0x1177e, 0x11782, 0x11784,\n 0x11788, 0x11790, 0x1179e, 0x117a0, 0x117bc, 0x117c6, 0x117cc, 0x117d8, 0x117ee, 0x1182e, 0x11834, 0x1184e,\n 0x1185c, 0x11862, 0x11864, 0x11868, 0x11876, 0x1188e, 0x1189c, 0x118b8, 0x118c2, 0x118c8, 0x118d0, 0x118de,\n 0x118e6, 0x118ec, 0x118fa, 0x1190e, 0x1191c, 0x11938, 0x11970, 0x1197e, 0x11982, 0x11984, 0x11990, 0x1199e,\n 0x119a0, 0x119bc, 0x119c6, 0x119cc, 0x119d8, 0x119ee, 0x119f2, 0x119f4, 0x11a0e, 0x11a1c, 0x11a38, 0x11a70,\n 0x11a7e, 0x11ae0, 0x11afc, 0x11b08, 0x11b10, 0x11b1e, 0x11b20, 0x11b3c, 0x11b40, 0x11b78, 0x11b8c, 0x11b98,\n 0x11bb0, 0x11bbe, 0x11bce, 0x11bdc, 0x11be2, 0x11be4, 0x11be8, 0x11bf6, 0x11c16, 0x11c26, 0x11c2c, 0x11c46,\n 0x11c4c, 0x11c58, 0x11c6e, 0x11c86, 0x11c98, 0x11cb0, 0x11cbe, 0x11cce, 0x11cdc, 0x11ce2, 0x11ce4, 0x11ce8,\n 0x11cf6, 0x11d06, 0x11d0c, 0x11d18, 0x11d30, 0x11d3e, 0x11d60, 0x11d7c, 0x11d8e, 0x11d9c, 0x11db8, 0x11dc4,\n 0x11dc8, 0x11dd0, 0x11dde, 0x11de6, 0x11dec, 0x11dfa, 0x11e0a, 0x11e12, 0x11e14, 0x11e22, 0x11e24, 0x11e28,\n 0x11e36, 0x11e42, 0x11e44, 0x11e50, 0x11e5e, 0x11e66, 0x11e6c, 0x11e82, 0x11e84, 0x11e88, 0x11e90, 0x11e9e,\n 0x11ea0, 0x11ebc, 0x11ec6, 0x11ecc, 0x11ed8, 0x11eee, 0x11f1a, 0x11f2e, 0x11f32, 0x11f34, 0x11f4e, 0x11f5c,\n 0x11f62, 0x11f64, 0x11f68, 0x11f76, 0x12048, 0x1205e, 0x12082, 0x12084, 0x12090, 0x1209e, 0x120a0, 0x120bc,\n 0x120d8, 0x120f2, 0x120f4, 0x12108, 0x1211e, 0x12120, 0x1213c, 0x12140, 0x12178, 0x12186, 0x12198, 0x121b0,\n 0x121be, 0x121e2, 0x121e4, 0x121e8, 0x121f6, 0x12204, 0x12210, 0x1221e, 0x12220, 0x12278, 0x122f0, 0x12306,\n 0x1230c, 0x12330, 0x1233e, 0x12360, 0x1237c, 0x1238e, 0x1239c, 0x123b8, 0x123c2, 0x123c8, 0x123d0, 0x123e6,\n 0x123ec, 0x1241e, 0x12420, 0x1243c, 0x124f0, 0x125e0, 0x12618, 0x1263e, 0x12660, 0x1267c, 0x126c0, 0x126f8,\n 0x12738, 0x12770, 0x1277e, 0x12782, 0x12784, 0x12790, 0x1279e, 0x127a0, 0x127bc, 0x127c6, 0x127cc, 0x127d8,\n 0x127ee, 0x12820, 0x1283c, 0x12840, 0x12878, 0x128f0, 0x129e0, 0x12bc0, 0x12c18, 0x12c30, 0x12c3e, 0x12c60,\n 0x12c7c, 0x12cc0, 0x12cf8, 0x12df0, 0x12e1c, 0x12e38, 0x12e70, 0x12e7e, 0x12ee0, 0x12efc, 0x12f04, 0x12f08,\n 0x12f10, 0x12f20, 0x12f3c, 0x12f40, 0x12f78, 0x12f86, 0x12f8c, 0x12f98, 0x12fb0, 0x12fbe, 0x12fce, 0x12fdc,\n 0x1302e, 0x1304e, 0x1305c, 0x13062, 0x13068, 0x1308e, 0x1309c, 0x130b8, 0x130c2, 0x130c8, 0x130d0, 0x130de,\n 0x130ec, 0x130fa, 0x1310e, 0x13138, 0x13170, 0x1317e, 0x13182, 0x13184, 0x13190, 0x1319e, 0x131a0, 0x131bc,\n 0x131c6, 0x131cc, 0x131d8, 0x131f2, 0x131f4, 0x1320e, 0x1321c, 0x13270, 0x1327e, 0x132e0, 0x132fc, 0x13308,\n 0x1331e, 0x13320, 0x1333c, 0x13340, 0x13378, 0x13386, 0x13398, 0x133b0, 0x133be, 0x133ce, 0x133dc, 0x133e2,\n 0x133e4, 0x133e8, 0x133f6, 0x1340e, 0x1341c, 0x13438, 0x13470, 0x1347e, 0x134e0, 0x134fc, 0x135c0, 0x135f8,\n 0x13608, 0x13610, 0x1361e, 0x13620, 0x1363c, 0x13640, 0x13678, 0x136f0, 0x1370c, 0x13718, 0x13730, 0x1373e,\n 0x13760, 0x1377c, 0x1379c, 0x137b8, 0x137c2, 0x137c4, 0x137c8, 0x137d0, 0x137de, 0x137e6, 0x137ec, 0x13816,\n 0x13826, 0x1382c, 0x13846, 0x1384c, 0x13858, 0x1386e, 0x13874, 0x13886, 0x13898, 0x138b0, 0x138be, 0x138ce,\n 0x138dc, 0x138e2, 0x138e4, 0x138e8, 0x13906, 0x1390c, 0x13930, 0x1393e, 0x13960, 0x1397c, 0x1398e, 0x1399c,\n 0x139b8, 0x139c8, 0x139d0, 0x139de, 0x139e6, 0x139ec, 0x139fa, 0x13a06, 0x13a0c, 0x13a18, 0x13a30, 0x13a3e,\n 0x13a60, 0x13a7c, 0x13ac0, 0x13af8, 0x13b0e, 0x13b1c, 0x13b38, 0x13b70, 0x13b7e, 0x13b88, 0x13b90, 0x13b9e,\n 0x13ba0, 0x13bbc, 0x13bcc, 0x13bd8, 0x13bee, 0x13bf2, 0x13bf4, 0x13c12, 0x13c14, 0x13c22, 0x13c24, 0x13c28,\n 0x13c36, 0x13c42, 0x13c48, 0x13c50, 0x13c5e, 0x13c66, 0x13c6c, 0x13c82, 0x13c84, 0x13c90, 0x13c9e, 0x13ca0,\n 0x13cbc, 0x13cc6, 0x13ccc, 0x13cd8, 0x13cee, 0x13d02, 0x13d04, 0x13d08, 0x13d10, 0x13d1e, 0x13d20, 0x13d3c,\n 0x13d40, 0x13d78, 0x13d86, 0x13d8c, 0x13d98, 0x13db0, 0x13dbe, 0x13dce, 0x13ddc, 0x13de4, 0x13de8, 0x13df6,\n 0x13e1a, 0x13e2e, 0x13e32, 0x13e34, 0x13e4e, 0x13e5c, 0x13e62, 0x13e64, 0x13e68, 0x13e76, 0x13e8e, 0x13e9c,\n 0x13eb8, 0x13ec2, 0x13ec4, 0x13ec8, 0x13ed0, 0x13ede, 0x13ee6, 0x13eec, 0x13f26, 0x13f2c, 0x13f3a, 0x13f46,\n 0x13f4c, 0x13f58, 0x13f6e, 0x13f72, 0x13f74, 0x14082, 0x1409e, 0x140a0, 0x140bc, 0x14104, 0x14108, 0x14110,\n 0x1411e, 0x14120, 0x1413c, 0x14140, 0x14178, 0x1418c, 0x14198, 0x141b0, 0x141be, 0x141e2, 0x141e4, 0x141e8,\n 0x14208, 0x14210, 0x1421e, 0x14220, 0x1423c, 0x14240, 0x14278, 0x142f0, 0x14306, 0x1430c, 0x14318, 0x14330,\n 0x1433e, 0x14360, 0x1437c, 0x1438e, 0x143c2, 0x143c4, 0x143c8, 0x143d0, 0x143e6, 0x143ec, 0x14408, 0x14410,\n 0x1441e, 0x14420, 0x1443c, 0x14440, 0x14478, 0x144f0, 0x145e0, 0x1460c, 0x14618, 0x14630, 0x1463e, 0x14660,\n 0x1467c, 0x146c0, 0x146f8, 0x1471c, 0x14738, 0x14770, 0x1477e, 0x14782, 0x14784, 0x14788, 0x14790, 0x147a0,\n 0x147bc, 0x147c6, 0x147cc, 0x147d8, 0x147ee, 0x14810, 0x14820, 0x1483c, 0x14840, 0x14878, 0x148f0, 0x149e0,\n 0x14bc0, 0x14c30, 0x14c3e, 0x14c60, 0x14c7c, 0x14cc0, 0x14cf8, 0x14df0, 0x14e38, 0x14e70, 0x14e7e, 0x14ee0,\n 0x14efc, 0x14f04, 0x14f08, 0x14f10, 0x14f1e, 0x14f20, 0x14f3c, 0x14f40, 0x14f78, 0x14f86, 0x14f8c, 0x14f98,\n 0x14fb0, 0x14fce, 0x14fdc, 0x15020, 0x15040, 0x15078, 0x150f0, 0x151e0, 0x153c0, 0x15860, 0x1587c, 0x158c0,\n 0x158f8, 0x159f0, 0x15be0, 0x15c70, 0x15c7e, 0x15ce0, 0x15cfc, 0x15dc0, 0x15df8, 0x15e08, 0x15e10, 0x15e20,\n 0x15e40, 0x15e78, 0x15ef0, 0x15f0c, 0x15f18, 0x15f30, 0x15f60, 0x15f7c, 0x15f8e, 0x15f9c, 0x15fb8, 0x1604e,\n 0x1605c, 0x1608e, 0x1609c, 0x160b8, 0x160c2, 0x160c4, 0x160c8, 0x160de, 0x1610e, 0x1611c, 0x16138, 0x16170,\n 0x1617e, 0x16184, 0x16188, 0x16190, 0x1619e, 0x161a0, 0x161bc, 0x161c6, 0x161cc, 0x161d8, 0x161f2, 0x161f4,\n 0x1620e, 0x1621c, 0x16238, 0x16270, 0x1627e, 0x162e0, 0x162fc, 0x16304, 0x16308, 0x16310, 0x1631e, 0x16320,\n 0x1633c, 0x16340, 0x16378, 0x16386, 0x1638c, 0x16398, 0x163b0, 0x163be, 0x163ce, 0x163dc, 0x163e2, 0x163e4,\n 0x163e8, 0x163f6, 0x1640e, 0x1641c, 0x16438, 0x16470, 0x1647e, 0x164e0, 0x164fc, 0x165c0, 0x165f8, 0x16610,\n 0x1661e, 0x16620, 0x1663c, 0x16640, 0x16678, 0x166f0, 0x16718, 0x16730, 0x1673e, 0x16760, 0x1677c, 0x1678e,\n 0x1679c, 0x167b8, 0x167c2, 0x167c4, 0x167c8, 0x167d0, 0x167de, 0x167e6, 0x167ec, 0x1681c, 0x16838, 0x16870,\n 0x168e0, 0x168fc, 0x169c0, 0x169f8, 0x16bf0, 0x16c10, 0x16c1e, 0x16c20, 0x16c3c, 0x16c40, 0x16c78, 0x16cf0,\n 0x16de0, 0x16e18, 0x16e30, 0x16e3e, 0x16e60, 0x16e7c, 0x16ec0, 0x16ef8, 0x16f1c, 0x16f38, 0x16f70, 0x16f7e,\n 0x16f84, 0x16f88, 0x16f90, 0x16f9e, 0x16fa0, 0x16fbc, 0x16fc6, 0x16fcc, 0x16fd8, 0x17026, 0x1702c, 0x17046,\n 0x1704c, 0x17058, 0x1706e, 0x17086, 0x1708c, 0x17098, 0x170b0, 0x170be, 0x170ce, 0x170dc, 0x170e8, 0x17106,\n 0x1710c, 0x17118, 0x17130, 0x1713e, 0x17160, 0x1717c, 0x1718e, 0x1719c, 0x171b8, 0x171c2, 0x171c4, 0x171c8,\n 0x171d0, 0x171de, 0x171e6, 0x171ec, 0x171fa, 0x17206, 0x1720c, 0x17218, 0x17230, 0x1723e, 0x17260, 0x1727c,\n 0x172c0, 0x172f8, 0x1730e, 0x1731c, 0x17338, 0x17370, 0x1737e, 0x17388, 0x17390, 0x1739e, 0x173a0, 0x173bc,\n 0x173cc, 0x173d8, 0x173ee, 0x173f2, 0x173f4, 0x1740c, 0x17418, 0x17430, 0x1743e, 0x17460, 0x1747c, 0x174c0,\n 0x174f8, 0x175f0, 0x1760e, 0x1761c, 0x17638, 0x17670, 0x1767e, 0x176e0, 0x176fc, 0x17708, 0x17710, 0x1771e,\n 0x17720, 0x1773c, 0x17740, 0x17778, 0x17798, 0x177b0, 0x177be, 0x177dc, 0x177e2, 0x177e4, 0x177e8, 0x17822,\n 0x17824, 0x17828, 0x17836, 0x17842, 0x17844, 0x17848, 0x17850, 0x1785e, 0x17866, 0x1786c, 0x17882, 0x17884,\n 0x17888, 0x17890, 0x1789e, 0x178a0, 0x178bc, 0x178c6, 0x178cc, 0x178d8, 0x178ee, 0x178f2, 0x178f4, 0x17902,\n 0x17904, 0x17908, 0x17910, 0x1791e, 0x17920, 0x1793c, 0x17940, 0x17978, 0x17986, 0x1798c, 0x17998, 0x179b0,\n 0x179be, 0x179ce, 0x179dc, 0x179e2, 0x179e4, 0x179e8, 0x179f6, 0x17a04, 0x17a08, 0x17a10, 0x17a1e, 0x17a20,\n 0x17a3c, 0x17a40, 0x17a78, 0x17af0, 0x17b06, 0x17b0c, 0x17b18, 0x17b30, 0x17b3e, 0x17b60, 0x17b7c, 0x17b8e,\n 0x17b9c, 0x17bb8, 0x17bc4, 0x17bc8, 0x17bd0, 0x17bde, 0x17be6, 0x17bec, 0x17c2e, 0x17c32, 0x17c34, 0x17c4e,\n 0x17c5c, 0x17c62, 0x17c64, 0x17c68, 0x17c76, 0x17c8e, 0x17c9c, 0x17cb8, 0x17cc2, 0x17cc4, 0x17cc8, 0x17cd0,\n 0x17cde, 0x17ce6, 0x17cec, 0x17d0e, 0x17d1c, 0x17d38, 0x17d70, 0x17d82, 0x17d84, 0x17d88, 0x17d90, 0x17d9e,\n 0x17da0, 0x17dbc, 0x17dc6, 0x17dcc, 0x17dd8, 0x17dee, 0x17e26, 0x17e2c, 0x17e3a, 0x17e46, 0x17e4c, 0x17e58,\n 0x17e6e, 0x17e72, 0x17e74, 0x17e86, 0x17e8c, 0x17e98, 0x17eb0, 0x17ece, 0x17edc, 0x17ee2, 0x17ee4, 0x17ee8,\n 0x17ef6, 0x1813a, 0x18172, 0x18174, 0x18216, 0x18226, 0x1823a, 0x1824c, 0x18258, 0x1826e, 0x18272, 0x18274,\n 0x18298, 0x182be, 0x182e2, 0x182e4, 0x182e8, 0x182f6, 0x1835e, 0x1837a, 0x183ae, 0x183d6, 0x18416, 0x18426,\n 0x1842c, 0x1843a, 0x18446, 0x18458, 0x1846e, 0x18472, 0x18474, 0x18486, 0x184b0, 0x184be, 0x184ce, 0x184dc,\n 0x184e2, 0x184e4, 0x184e8, 0x184f6, 0x18506, 0x1850c, 0x18518, 0x18530, 0x1853e, 0x18560, 0x1857c, 0x1858e,\n 0x1859c, 0x185b8, 0x185c2, 0x185c4, 0x185c8, 0x185d0, 0x185de, 0x185e6, 0x185ec, 0x185fa, 0x18612, 0x18614,\n 0x18622, 0x18628, 0x18636, 0x18642, 0x18650, 0x1865e, 0x1867a, 0x18682, 0x18684, 0x18688, 0x18690, 0x1869e,\n 0x186a0, 0x186bc, 0x186c6, 0x186cc, 0x186d8, 0x186ee, 0x186f2, 0x186f4, 0x1872e, 0x1874e, 0x1875c, 0x18796,\n 0x187a6, 0x187ac, 0x187d2, 0x187d4, 0x18826, 0x1882c, 0x1883a, 0x18846, 0x1884c, 0x18858, 0x1886e, 0x18872,\n 0x18874, 0x18886, 0x18898, 0x188b0, 0x188be, 0x188ce, 0x188dc, 0x188e2, 0x188e4, 0x188e8, 0x188f6, 0x1890c,\n 0x18930, 0x1893e, 0x18960, 0x1897c, 0x1898e, 0x189b8, 0x189c2, 0x189c8, 0x189d0, 0x189de, 0x189e6, 0x189ec,\n 0x189fa, 0x18a18, 0x18a30, 0x18a3e, 0x18a60, 0x18a7c, 0x18ac0, 0x18af8, 0x18b1c, 0x18b38, 0x18b70, 0x18b7e,\n 0x18b82, 0x18b84, 0x18b88, 0x18b90, 0x18b9e, 0x18ba0, 0x18bbc, 0x18bc6, 0x18bcc, 0x18bd8, 0x18bee, 0x18bf2,\n 0x18bf4, 0x18c22, 0x18c24, 0x18c28, 0x18c36, 0x18c42, 0x18c48, 0x18c50, 0x18c5e, 0x18c66, 0x18c7a, 0x18c82,\n 0x18c84, 0x18c90, 0x18c9e, 0x18ca0, 0x18cbc, 0x18ccc, 0x18cf2, 0x18cf4, 0x18d04, 0x18d08, 0x18d10, 0x18d1e,\n 0x18d20, 0x18d3c, 0x18d40, 0x18d78, 0x18d86, 0x18d98, 0x18dce, 0x18de2, 0x18de4, 0x18de8, 0x18e2e, 0x18e32,\n 0x18e34, 0x18e4e, 0x18e5c, 0x18e62, 0x18e64, 0x18e68, 0x18e8e, 0x18e9c, 0x18eb8, 0x18ec2, 0x18ec4, 0x18ec8,\n 0x18ed0, 0x18efa, 0x18f16, 0x18f26, 0x18f2c, 0x18f46, 0x18f4c, 0x18f58, 0x18f6e, 0x18f8a, 0x18f92, 0x18f94,\n 0x18fa2, 0x18fa4, 0x18fa8, 0x18fb6, 0x1902c, 0x1903a, 0x19046, 0x1904c, 0x19058, 0x19072, 0x19074, 0x19086,\n 0x19098, 0x190b0, 0x190be, 0x190ce, 0x190dc, 0x190e2, 0x190e8, 0x190f6, 0x19106, 0x1910c, 0x19130, 0x1913e,\n 0x19160, 0x1917c, 0x1918e, 0x1919c, 0x191b8, 0x191c2, 0x191c8, 0x191d0, 0x191de, 0x191e6, 0x191ec, 0x191fa,\n 0x19218, 0x1923e, 0x19260, 0x1927c, 0x192c0, 0x192f8, 0x19338, 0x19370, 0x1937e, 0x19382, 0x19384, 0x19390,\n 0x1939e, 0x193a0, 0x193bc, 0x193c6, 0x193cc, 0x193d8, 0x193ee, 0x193f2, 0x193f4, 0x19430, 0x1943e, 0x19460,\n 0x1947c, 0x194c0, 0x194f8, 0x195f0, 0x19638, 0x19670, 0x1967e, 0x196e0, 0x196fc, 0x19702, 0x19704, 0x19708,\n 0x19710, 0x19720, 0x1973c, 0x19740, 0x19778, 0x19786, 0x1978c, 0x19798, 0x197b0, 0x197be, 0x197ce, 0x197dc,\n 0x197e2, 0x197e4, 0x197e8, 0x19822, 0x19824, 0x19842, 0x19848, 0x19850, 0x1985e, 0x19866, 0x1987a, 0x19882,\n 0x19884, 0x19890, 0x1989e, 0x198a0, 0x198bc, 0x198cc, 0x198f2, 0x198f4, 0x19902, 0x19908, 0x1991e, 0x19920,\n 0x1993c, 0x19940, 0x19978, 0x19986, 0x19998, 0x199ce, 0x199e2, 0x199e4, 0x199e8, 0x19a08, 0x19a10, 0x19a1e,\n 0x19a20, 0x19a3c, 0x19a40, 0x19a78, 0x19af0, 0x19b18, 0x19b3e, 0x19b60, 0x19b9c, 0x19bc2, 0x19bc4, 0x19bc8,\n 0x19bd0, 0x19be6, 0x19c2e, 0x19c34, 0x19c4e, 0x19c5c, 0x19c62, 0x19c64, 0x19c68, 0x19c8e, 0x19c9c, 0x19cb8,\n 0x19cc2, 0x19cc8, 0x19cd0, 0x19ce6, 0x19cfa, 0x19d0e, 0x19d1c, 0x19d38, 0x19d70, 0x19d7e, 0x19d82, 0x19d84,\n 0x19d88, 0x19d90, 0x19da0, 0x19dcc, 0x19df2, 0x19df4, 0x19e16, 0x19e26, 0x19e2c, 0x19e46, 0x19e4c, 0x19e58,\n 0x19e74, 0x19e86, 0x19e8c, 0x19e98, 0x19eb0, 0x19ebe, 0x19ece, 0x19ee2, 0x19ee4, 0x19ee8, 0x19f0a, 0x19f12,\n 0x19f14, 0x19f22, 0x19f24, 0x19f28, 0x19f42, 0x19f44, 0x19f48, 0x19f50, 0x19f5e, 0x19f6c, 0x19f9a, 0x19fae,\n 0x19fb2, 0x19fb4, 0x1a046, 0x1a04c, 0x1a072, 0x1a074, 0x1a086, 0x1a08c, 0x1a098, 0x1a0b0, 0x1a0be, 0x1a0e2,\n 0x1a0e4, 0x1a0e8, 0x1a0f6, 0x1a106, 0x1a10c, 0x1a118, 0x1a130, 0x1a13e, 0x1a160, 0x1a17c, 0x1a18e, 0x1a19c,\n 0x1a1b8, 0x1a1c2, 0x1a1c4, 0x1a1c8, 0x1a1d0, 0x1a1de, 0x1a1e6, 0x1a1ec, 0x1a218, 0x1a230, 0x1a23e, 0x1a260,\n 0x1a27c, 0x1a2c0, 0x1a2f8, 0x1a31c, 0x1a338, 0x1a370, 0x1a37e, 0x1a382, 0x1a384, 0x1a388, 0x1a390, 0x1a39e,\n 0x1a3a0, 0x1a3bc, 0x1a3c6, 0x1a3cc, 0x1a3d8, 0x1a3ee, 0x1a3f2, 0x1a3f4, 0x1a418, 0x1a430, 0x1a43e, 0x1a460,\n 0x1a47c, 0x1a4c0, 0x1a4f8, 0x1a5f0, 0x1a61c, 0x1a638, 0x1a670, 0x1a67e, 0x1a6e0, 0x1a6fc, 0x1a702, 0x1a704,\n 0x1a708, 0x1a710, 0x1a71e, 0x1a720, 0x1a73c, 0x1a740, 0x1a778, 0x1a786, 0x1a78c, 0x1a798, 0x1a7b0, 0x1a7be,\n 0x1a7ce, 0x1a7dc, 0x1a7e2, 0x1a7e4, 0x1a7e8, 0x1a830, 0x1a860, 0x1a87c, 0x1a8c0, 0x1a8f8, 0x1a9f0, 0x1abe0,\n 0x1ac70, 0x1ac7e, 0x1ace0, 0x1acfc, 0x1adc0, 0x1adf8, 0x1ae04, 0x1ae08, 0x1ae10, 0x1ae20, 0x1ae3c, 0x1ae40,\n 0x1ae78, 0x1aef0, 0x1af06, 0x1af0c, 0x1af18, 0x1af30, 0x1af3e, 0x1af60, 0x1af7c, 0x1af8e, 0x1af9c, 0x1afb8,\n 0x1afc4, 0x1afc8, 0x1afd0, 0x1afde, 0x1b042, 0x1b05e, 0x1b07a, 0x1b082, 0x1b084, 0x1b088, 0x1b090, 0x1b09e,\n 0x1b0a0, 0x1b0bc, 0x1b0cc, 0x1b0f2, 0x1b0f4, 0x1b102, 0x1b104, 0x1b108, 0x1b110, 0x1b11e, 0x1b120, 0x1b13c,\n 0x1b140, 0x1b178, 0x1b186, 0x1b198, 0x1b1ce, 0x1b1e2, 0x1b1e4, 0x1b1e8, 0x1b204, 0x1b208, 0x1b210, 0x1b21e,\n 0x1b220, 0x1b23c, 0x1b240, 0x1b278, 0x1b2f0, 0x1b30c, 0x1b33e, 0x1b360, 0x1b39c, 0x1b3c2, 0x1b3c4, 0x1b3c8,\n 0x1b3d0, 0x1b3e6, 0x1b410, 0x1b41e, 0x1b420, 0x1b43c, 0x1b440, 0x1b478, 0x1b4f0, 0x1b5e0, 0x1b618, 0x1b660,\n 0x1b67c, 0x1b6c0, 0x1b738, 0x1b782, 0x1b784, 0x1b788, 0x1b790, 0x1b79e, 0x1b7a0, 0x1b7cc, 0x1b82e, 0x1b84e,\n 0x1b85c, 0x1b88e, 0x1b89c, 0x1b8b8, 0x1b8c2, 0x1b8c4, 0x1b8c8, 0x1b8d0, 0x1b8e6, 0x1b8fa, 0x1b90e, 0x1b91c,\n 0x1b938, 0x1b970, 0x1b97e, 0x1b982, 0x1b984, 0x1b988, 0x1b990, 0x1b99e, 0x1b9a0, 0x1b9cc, 0x1b9f2, 0x1b9f4,\n 0x1ba0e, 0x1ba1c, 0x1ba38, 0x1ba70, 0x1ba7e, 0x1bae0, 0x1bafc, 0x1bb08, 0x1bb10, 0x1bb20, 0x1bb3c, 0x1bb40,\n 0x1bb98, 0x1bbce, 0x1bbe2, 0x1bbe4, 0x1bbe8, 0x1bc16, 0x1bc26, 0x1bc2c, 0x1bc46, 0x1bc4c, 0x1bc58, 0x1bc72,\n 0x1bc74, 0x1bc86, 0x1bc8c, 0x1bc98, 0x1bcb0, 0x1bcbe, 0x1bcce, 0x1bce2, 0x1bce4, 0x1bce8, 0x1bd06, 0x1bd0c,\n 0x1bd18, 0x1bd30, 0x1bd3e, 0x1bd60, 0x1bd7c, 0x1bd9c, 0x1bdc2, 0x1bdc4, 0x1bdc8, 0x1bdd0, 0x1bde6, 0x1bdfa,\n 0x1be12, 0x1be14, 0x1be22, 0x1be24, 0x1be28, 0x1be42, 0x1be44, 0x1be48, 0x1be50, 0x1be5e, 0x1be66, 0x1be82,\n 0x1be84, 0x1be88, 0x1be90, 0x1be9e, 0x1bea0, 0x1bebc, 0x1becc, 0x1bef4, 0x1bf1a, 0x1bf2e, 0x1bf32, 0x1bf34,\n 0x1bf4e, 0x1bf5c, 0x1bf62, 0x1bf64, 0x1bf68, 0x1c09a, 0x1c0b2, 0x1c0b4, 0x1c11a, 0x1c132, 0x1c134, 0x1c162,\n 0x1c164, 0x1c168, 0x1c176, 0x1c1ba, 0x1c21a, 0x1c232, 0x1c234, 0x1c24e, 0x1c25c, 0x1c262, 0x1c264, 0x1c268,\n 0x1c276, 0x1c28e, 0x1c2c2, 0x1c2c4, 0x1c2c8, 0x1c2d0, 0x1c2de, 0x1c2e6, 0x1c2ec, 0x1c2fa, 0x1c316, 0x1c326,\n 0x1c33a, 0x1c346, 0x1c34c, 0x1c372, 0x1c374, 0x1c41a, 0x1c42e, 0x1c432, 0x1c434, 0x1c44e, 0x1c45c, 0x1c462,\n 0x1c464, 0x1c468, 0x1c476, 0x1c48e, 0x1c49c, 0x1c4b8, 0x1c4c2, 0x1c4c8, 0x1c4d0, 0x1c4de, 0x1c4e6, 0x1c4ec,\n 0x1c4fa, 0x1c51c, 0x1c538, 0x1c570, 0x1c57e, 0x1c582, 0x1c584, 0x1c588, 0x1c590, 0x1c59e, 0x1c5a0, 0x1c5bc,\n 0x1c5c6, 0x1c5cc, 0x1c5d8, 0x1c5ee, 0x1c5f2, 0x1c5f4, 0x1c616, 0x1c626, 0x1c62c, 0x1c63a, 0x1c646, 0x1c64c,\n 0x1c658, 0x1c66e, 0x1c672, 0x1c674, 0x1c686, 0x1c68c, 0x1c698, 0x1c6b0, 0x1c6be, 0x1c6ce, 0x1c6dc, 0x1c6e2,\n 0x1c6e4, 0x1c6e8, 0x1c712, 0x1c714, 0x1c722, 0x1c728, 0x1c736, 0x1c742, 0x1c744, 0x1c748, 0x1c750, 0x1c75e,\n 0x1c766, 0x1c76c, 0x1c77a, 0x1c7ae, 0x1c7d6, 0x1c7ea, 0x1c81a, 0x1c82e, 0x1c832, 0x1c834, 0x1c84e, 0x1c85c,\n 0x1c862, 0x1c864, 0x1c868, 0x1c876, 0x1c88e, 0x1c89c, 0x1c8b8, 0x1c8c2, 0x1c8c8, 0x1c8d0, 0x1c8de, 0x1c8e6,\n 0x1c8ec, 0x1c8fa, 0x1c90e, 0x1c938, 0x1c970, 0x1c97e, 0x1c982, 0x1c984, 0x1c990, 0x1c99e, 0x1c9a0, 0x1c9bc,\n 0x1c9c6, 0x1c9cc, 0x1c9d8, 0x1c9ee, 0x1c9f2, 0x1c9f4, 0x1ca38, 0x1ca70, 0x1ca7e, 0x1cae0, 0x1cafc, 0x1cb02,\n 0x1cb04, 0x1cb08, 0x1cb10, 0x1cb20, 0x1cb3c, 0x1cb40, 0x1cb78, 0x1cb86, 0x1cb8c, 0x1cb98, 0x1cbb0, 0x1cbbe,\n 0x1cbce, 0x1cbdc, 0x1cbe2, 0x1cbe4, 0x1cbe8, 0x1cbf6, 0x1cc16, 0x1cc26, 0x1cc2c, 0x1cc3a, 0x1cc46, 0x1cc58,\n 0x1cc72, 0x1cc74, 0x1cc86, 0x1ccb0, 0x1ccbe, 0x1ccce, 0x1cce2, 0x1cce4, 0x1cce8, 0x1cd06, 0x1cd0c, 0x1cd18,\n 0x1cd30, 0x1cd3e, 0x1cd60, 0x1cd7c, 0x1cd9c, 0x1cdc2, 0x1cdc4, 0x1cdc8, 0x1cdd0, 0x1cdde, 0x1cde6, 0x1cdfa,\n 0x1ce22, 0x1ce28, 0x1ce42, 0x1ce50, 0x1ce5e, 0x1ce66, 0x1ce7a, 0x1ce82, 0x1ce84, 0x1ce88, 0x1ce90, 0x1ce9e,\n 0x1cea0, 0x1cebc, 0x1cecc, 0x1cef2, 0x1cef4, 0x1cf2e, 0x1cf32, 0x1cf34, 0x1cf4e, 0x1cf5c, 0x1cf62, 0x1cf64,\n 0x1cf68, 0x1cf96, 0x1cfa6, 0x1cfac, 0x1cfca, 0x1cfd2, 0x1cfd4, 0x1d02e, 0x1d032, 0x1d034, 0x1d04e, 0x1d05c,\n 0x1d062, 0x1d064, 0x1d068, 0x1d076, 0x1d08e, 0x1d09c, 0x1d0b8, 0x1d0c2, 0x1d0c4, 0x1d0c8, 0x1d0d0, 0x1d0de,\n 0x1d0e6, 0x1d0ec, 0x1d0fa, 0x1d11c, 0x1d138, 0x1d170, 0x1d17e, 0x1d182, 0x1d184, 0x1d188, 0x1d190, 0x1d19e,\n 0x1d1a0, 0x1d1bc, 0x1d1c6, 0x1d1cc, 0x1d1d8, 0x1d1ee, 0x1d1f2, 0x1d1f4, 0x1d21c, 0x1d238, 0x1d270, 0x1d27e,\n 0x1d2e0, 0x1d2fc, 0x1d302, 0x1d304, 0x1d308, 0x1d310, 0x1d31e, 0x1d320, 0x1d33c, 0x1d340, 0x1d378, 0x1d386,\n 0x1d38c, 0x1d398, 0x1d3b0, 0x1d3be, 0x1d3ce, 0x1d3dc, 0x1d3e2, 0x1d3e4, 0x1d3e8, 0x1d3f6, 0x1d470, 0x1d47e,\n 0x1d4e0, 0x1d4fc, 0x1d5c0, 0x1d5f8, 0x1d604, 0x1d608, 0x1d610, 0x1d620, 0x1d640, 0x1d678, 0x1d6f0, 0x1d706,\n 0x1d70c, 0x1d718, 0x1d730, 0x1d73e, 0x1d760, 0x1d77c, 0x1d78e, 0x1d79c, 0x1d7b8, 0x1d7c2, 0x1d7c4, 0x1d7c8,\n 0x1d7d0, 0x1d7de, 0x1d7e6, 0x1d7ec, 0x1d826, 0x1d82c, 0x1d83a, 0x1d846, 0x1d84c, 0x1d858, 0x1d872, 0x1d874,\n 0x1d886, 0x1d88c, 0x1d898, 0x1d8b0, 0x1d8be, 0x1d8ce, 0x1d8e2, 0x1d8e4, 0x1d8e8, 0x1d8f6, 0x1d90c, 0x1d918,\n 0x1d930, 0x1d93e, 0x1d960, 0x1d97c, 0x1d99c, 0x1d9c2, 0x1d9c4, 0x1d9c8, 0x1d9d0, 0x1d9e6, 0x1d9fa, 0x1da0c,\n 0x1da18, 0x1da30, 0x1da3e, 0x1da60, 0x1da7c, 0x1dac0, 0x1daf8, 0x1db38, 0x1db82, 0x1db84, 0x1db88, 0x1db90,\n 0x1db9e, 0x1dba0, 0x1dbcc, 0x1dbf2, 0x1dbf4, 0x1dc22, 0x1dc42, 0x1dc44, 0x1dc48, 0x1dc50, 0x1dc5e, 0x1dc66,\n 0x1dc7a, 0x1dc82, 0x1dc84, 0x1dc88, 0x1dc90, 0x1dc9e, 0x1dca0, 0x1dcbc, 0x1dccc, 0x1dcf2, 0x1dcf4, 0x1dd04,\n 0x1dd08, 0x1dd10, 0x1dd1e, 0x1dd20, 0x1dd3c, 0x1dd40, 0x1dd78, 0x1dd86, 0x1dd98, 0x1ddce, 0x1dde2, 0x1dde4,\n 0x1dde8, 0x1de2e, 0x1de32, 0x1de34, 0x1de4e, 0x1de5c, 0x1de62, 0x1de64, 0x1de68, 0x1de8e, 0x1de9c, 0x1deb8,\n 0x1dec2, 0x1dec4, 0x1dec8, 0x1ded0, 0x1dee6, 0x1defa, 0x1df16, 0x1df26, 0x1df2c, 0x1df46, 0x1df4c, 0x1df58,\n 0x1df72, 0x1df74, 0x1df8a, 0x1df92, 0x1df94, 0x1dfa2, 0x1dfa4, 0x1dfa8, 0x1e08a, 0x1e092, 0x1e094, 0x1e0a2,\n 0x1e0a4, 0x1e0a8, 0x1e0b6, 0x1e0da, 0x1e10a, 0x1e112, 0x1e114, 0x1e122, 0x1e124, 0x1e128, 0x1e136, 0x1e142,\n 0x1e144, 0x1e148, 0x1e150, 0x1e166, 0x1e16c, 0x1e17a, 0x1e19a, 0x1e1b2, 0x1e1b4, 0x1e20a, 0x1e212, 0x1e214,\n 0x1e222, 0x1e224, 0x1e228, 0x1e236, 0x1e242, 0x1e248, 0x1e250, 0x1e25e, 0x1e266, 0x1e26c, 0x1e27a, 0x1e282,\n 0x1e284, 0x1e288, 0x1e290, 0x1e2a0, 0x1e2bc, 0x1e2c6, 0x1e2cc, 0x1e2d8, 0x1e2ee, 0x1e2f2, 0x1e2f4, 0x1e31a,\n 0x1e332, 0x1e334, 0x1e35c, 0x1e362, 0x1e364, 0x1e368, 0x1e3ba, 0x1e40a, 0x1e412, 0x1e414, 0x1e422, 0x1e428,\n 0x1e436, 0x1e442, 0x1e448, 0x1e450, 0x1e45e, 0x1e466, 0x1e46c, 0x1e47a, 0x1e482, 0x1e484, 0x1e490, 0x1e49e,\n 0x1e4a0, 0x1e4bc, 0x1e4c6, 0x1e4cc, 0x1e4d8, 0x1e4ee, 0x1e4f2, 0x1e4f4, 0x1e502, 0x1e504, 0x1e508, 0x1e510,\n 0x1e51e, 0x1e520, 0x1e53c, 0x1e540, 0x1e578, 0x1e586, 0x1e58c, 0x1e598, 0x1e5b0, 0x1e5be, 0x1e5ce, 0x1e5dc,\n 0x1e5e2, 0x1e5e4, 0x1e5e8, 0x1e5f6, 0x1e61a, 0x1e62e, 0x1e632, 0x1e634, 0x1e64e, 0x1e65c, 0x1e662, 0x1e668,\n 0x1e68e, 0x1e69c, 0x1e6b8, 0x1e6c2, 0x1e6c4, 0x1e6c8, 0x1e6d0, 0x1e6e6, 0x1e6fa, 0x1e716, 0x1e726, 0x1e72c,\n 0x1e73a, 0x1e746, 0x1e74c, 0x1e758, 0x1e772, 0x1e774, 0x1e792, 0x1e794, 0x1e7a2, 0x1e7a4, 0x1e7a8, 0x1e7b6,\n 0x1e812, 0x1e814, 0x1e822, 0x1e824, 0x1e828, 0x1e836, 0x1e842, 0x1e844, 0x1e848, 0x1e850, 0x1e85e, 0x1e866,\n 0x1e86c, 0x1e87a, 0x1e882, 0x1e884, 0x1e888, 0x1e890, 0x1e89e, 0x1e8a0, 0x1e8bc, 0x1e8c6, 0x1e8cc, 0x1e8d8,\n 0x1e8ee, 0x1e8f2, 0x1e8f4, 0x1e902, 0x1e904, 0x1e908, 0x1e910, 0x1e920, 0x1e93c, 0x1e940, 0x1e978, 0x1e986,\n 0x1e98c, 0x1e998, 0x1e9b0, 0x1e9be, 0x1e9ce, 0x1e9dc, 0x1e9e2, 0x1e9e4, 0x1e9e8, 0x1e9f6, 0x1ea04, 0x1ea08,\n 0x1ea10, 0x1ea20, 0x1ea40, 0x1ea78, 0x1eaf0, 0x1eb06, 0x1eb0c, 0x1eb18, 0x1eb30, 0x1eb3e, 0x1eb60, 0x1eb7c,\n 0x1eb8e, 0x1eb9c, 0x1ebb8, 0x1ebc2, 0x1ebc4, 0x1ebc8, 0x1ebd0, 0x1ebde, 0x1ebe6, 0x1ebec, 0x1ec1a, 0x1ec2e,\n 0x1ec32, 0x1ec34, 0x1ec4e, 0x1ec5c, 0x1ec62, 0x1ec64, 0x1ec68, 0x1ec8e, 0x1ec9c, 0x1ecb8, 0x1ecc2, 0x1ecc4,\n 0x1ecc8, 0x1ecd0, 0x1ece6, 0x1ecfa, 0x1ed0e, 0x1ed1c, 0x1ed38, 0x1ed70, 0x1ed7e, 0x1ed82, 0x1ed84, 0x1ed88,\n 0x1ed90, 0x1ed9e, 0x1eda0, 0x1edcc, 0x1edf2, 0x1edf4, 0x1ee16, 0x1ee26, 0x1ee2c, 0x1ee3a, 0x1ee46, 0x1ee4c,\n 0x1ee58, 0x1ee6e, 0x1ee72, 0x1ee74, 0x1ee86, 0x1ee8c, 0x1ee98, 0x1eeb0, 0x1eebe, 0x1eece, 0x1eedc, 0x1eee2,\n 0x1eee4, 0x1eee8, 0x1ef12, 0x1ef22, 0x1ef24, 0x1ef28, 0x1ef36, 0x1ef42, 0x1ef44, 0x1ef48, 0x1ef50, 0x1ef5e,\n 0x1ef66, 0x1ef6c, 0x1ef7a, 0x1efae, 0x1efb2, 0x1efb4, 0x1efd6, 0x1f096, 0x1f0a6, 0x1f0ac, 0x1f0ba, 0x1f0ca,\n 0x1f0d2, 0x1f0d4, 0x1f116, 0x1f126, 0x1f12c, 0x1f13a, 0x1f146, 0x1f14c, 0x1f158, 0x1f16e, 0x1f172, 0x1f174,\n 0x1f18a, 0x1f192, 0x1f194, 0x1f1a2, 0x1f1a4, 0x1f1a8, 0x1f1da, 0x1f216, 0x1f226, 0x1f22c, 0x1f23a, 0x1f246,\n 0x1f258, 0x1f26e, 0x1f272, 0x1f274, 0x1f286, 0x1f28c, 0x1f298, 0x1f2b0, 0x1f2be, 0x1f2ce, 0x1f2dc, 0x1f2e2,\n 0x1f2e4, 0x1f2e8, 0x1f2f6, 0x1f30a, 0x1f312, 0x1f314, 0x1f322, 0x1f328, 0x1f342, 0x1f344, 0x1f348, 0x1f350,\n 0x1f35e, 0x1f366, 0x1f37a, 0x1f39a, 0x1f3ae, 0x1f3b2, 0x1f3b4, 0x1f416, 0x1f426, 0x1f42c, 0x1f43a, 0x1f446,\n 0x1f44c, 0x1f458, 0x1f46e, 0x1f472, 0x1f474, 0x1f486, 0x1f48c, 0x1f498, 0x1f4b0, 0x1f4be, 0x1f4ce, 0x1f4dc,\n 0x1f4e2, 0x1f4e4, 0x1f4e8, 0x1f4f6, 0x1f506, 0x1f50c, 0x1f518, 0x1f530, 0x1f53e, 0x1f560, 0x1f57c, 0x1f58e,\n 0x1f59c, 0x1f5b8, 0x1f5c2, 0x1f5c4, 0x1f5c8, 0x1f5d0, 0x1f5de, 0x1f5e6, 0x1f5ec, 0x1f5fa, 0x1f60a, 0x1f612,\n 0x1f614, 0x1f622, 0x1f624, 0x1f628, 0x1f636, 0x1f642, 0x1f644, 0x1f648, 0x1f650, 0x1f65e, 0x1f666, 0x1f67a,\n 0x1f682, 0x1f684, 0x1f688, 0x1f690, 0x1f69e, 0x1f6a0, 0x1f6bc, 0x1f6cc, 0x1f6f2, 0x1f6f4, 0x1f71a, 0x1f72e,\n 0x1f732, 0x1f734, 0x1f74e, 0x1f75c, 0x1f762, 0x1f764, 0x1f768, 0x1f776, 0x1f796, 0x1f7a6, 0x1f7ac, 0x1f7ba,\n 0x1f7d2, 0x1f7d4, 0x1f89a, 0x1f8ae, 0x1f8b2, 0x1f8b4, 0x1f8d6, 0x1f8ea, 0x1f91a, 0x1f92e, 0x1f932, 0x1f934,\n 0x1f94e, 0x1f95c, 0x1f962, 0x1f964, 0x1f968, 0x1f976, 0x1f996, 0x1f9a6, 0x1f9ac, 0x1f9ba, 0x1f9ca, 0x1f9d2,\n 0x1f9d4, 0x1fa1a, 0x1fa2e, 0x1fa32, 0x1fa34, 0x1fa4e, 0x1fa5c, 0x1fa62, 0x1fa64, 0x1fa68, 0x1fa76, 0x1fa8e,\n 0x1fa9c, 0x1fab8, 0x1fac2, 0x1fac4, 0x1fac8, 0x1fad0, 0x1fade, 0x1fae6, 0x1faec, 0x1fb16, 0x1fb26, 0x1fb2c,\n 0x1fb3a, 0x1fb46, 0x1fb4c, 0x1fb58, 0x1fb6e, 0x1fb72, 0x1fb74, 0x1fb8a, 0x1fb92, 0x1fb94, 0x1fba2, 0x1fba4,\n 0x1fba8, 0x1fbb6, 0x1fbda\n ]);\n /**\n * This table contains to codewords for all symbols.\n */\n PDF417Common.CODEWORD_TABLE = Int32Array.from([\n 2627, 1819, 2622, 2621, 1813, 1812, 2729, 2724, 2723, 2779, 2774, 2773, 902, 896, 908, 868, 865, 861, 859, 2511,\n 873, 871, 1780, 835, 2493, 825, 2491, 842, 837, 844, 1764, 1762, 811, 810, 809, 2483, 807, 2482, 806, 2480, 815,\n 814, 813, 812, 2484, 817, 816, 1745, 1744, 1742, 1746, 2655, 2637, 2635, 2626, 2625, 2623, 2628, 1820, 2752,\n 2739, 2737, 2728, 2727, 2725, 2730, 2785, 2783, 2778, 2777, 2775, 2780, 787, 781, 747, 739, 736, 2413, 754, 752,\n 1719, 692, 689, 681, 2371, 678, 2369, 700, 697, 694, 703, 1688, 1686, 642, 638, 2343, 631, 2341, 627, 2338, 651,\n 646, 643, 2345, 654, 652, 1652, 1650, 1647, 1654, 601, 599, 2322, 596, 2321, 594, 2319, 2317, 611, 610, 608, 606,\n 2324, 603, 2323, 615, 614, 612, 1617, 1616, 1614, 1612, 616, 1619, 1618, 2575, 2538, 2536, 905, 901, 898, 909,\n 2509, 2507, 2504, 870, 867, 864, 860, 2512, 875, 872, 1781, 2490, 2489, 2487, 2485, 1748, 836, 834, 832, 830,\n 2494, 827, 2492, 843, 841, 839, 845, 1765, 1763, 2701, 2676, 2674, 2653, 2648, 2656, 2634, 2633, 2631, 2629,\n 1821, 2638, 2636, 2770, 2763, 2761, 2750, 2745, 2753, 2736, 2735, 2733, 2731, 1848, 2740, 2738, 2786, 2784, 591,\n 588, 576, 569, 566, 2296, 1590, 537, 534, 526, 2276, 522, 2274, 545, 542, 539, 548, 1572, 1570, 481, 2245, 466,\n 2242, 462, 2239, 492, 485, 482, 2249, 496, 494, 1534, 1531, 1528, 1538, 413, 2196, 406, 2191, 2188, 425, 419,\n 2202, 415, 2199, 432, 430, 427, 1472, 1467, 1464, 433, 1476, 1474, 368, 367, 2160, 365, 2159, 362, 2157, 2155,\n 2152, 378, 377, 375, 2166, 372, 2165, 369, 2162, 383, 381, 379, 2168, 1419, 1418, 1416, 1414, 385, 1411, 384,\n 1423, 1422, 1420, 1424, 2461, 802, 2441, 2439, 790, 786, 783, 794, 2409, 2406, 2403, 750, 742, 738, 2414, 756,\n 753, 1720, 2367, 2365, 2362, 2359, 1663, 693, 691, 684, 2373, 680, 2370, 702, 699, 696, 704, 1690, 1687, 2337,\n 2336, 2334, 2332, 1624, 2329, 1622, 640, 637, 2344, 634, 2342, 630, 2340, 650, 648, 645, 2346, 655, 653, 1653,\n 1651, 1649, 1655, 2612, 2597, 2595, 2571, 2568, 2565, 2576, 2534, 2529, 2526, 1787, 2540, 2537, 907, 904, 900,\n 910, 2503, 2502, 2500, 2498, 1768, 2495, 1767, 2510, 2508, 2506, 869, 866, 863, 2513, 876, 874, 1782, 2720, 2713,\n 2711, 2697, 2694, 2691, 2702, 2672, 2670, 2664, 1828, 2678, 2675, 2647, 2646, 2644, 2642, 1823, 2639, 1822, 2654,\n 2652, 2650, 2657, 2771, 1855, 2765, 2762, 1850, 1849, 2751, 2749, 2747, 2754, 353, 2148, 344, 342, 336, 2142,\n 332, 2140, 345, 1375, 1373, 306, 2130, 299, 2128, 295, 2125, 319, 314, 311, 2132, 1354, 1352, 1349, 1356, 262,\n 257, 2101, 253, 2096, 2093, 274, 273, 267, 2107, 263, 2104, 280, 278, 275, 1316, 1311, 1308, 1320, 1318, 2052,\n 202, 2050, 2044, 2040, 219, 2063, 212, 2060, 208, 2055, 224, 221, 2066, 1260, 1258, 1252, 231, 1248, 229, 1266,\n 1264, 1261, 1268, 155, 1998, 153, 1996, 1994, 1991, 1988, 165, 164, 2007, 162, 2006, 159, 2003, 2000, 172, 171,\n 169, 2012, 166, 2010, 1186, 1184, 1182, 1179, 175, 1176, 173, 1192, 1191, 1189, 1187, 176, 1194, 1193, 2313,\n 2307, 2305, 592, 589, 2294, 2292, 2289, 578, 572, 568, 2297, 580, 1591, 2272, 2267, 2264, 1547, 538, 536, 529,\n 2278, 525, 2275, 547, 544, 541, 1574, 1571, 2237, 2235, 2229, 1493, 2225, 1489, 478, 2247, 470, 2244, 465, 2241,\n 493, 488, 484, 2250, 498, 495, 1536, 1533, 1530, 1539, 2187, 2186, 2184, 2182, 1432, 2179, 1430, 2176, 1427, 414,\n 412, 2197, 409, 2195, 405, 2193, 2190, 426, 424, 421, 2203, 418, 2201, 431, 429, 1473, 1471, 1469, 1466, 434,\n 1477, 1475, 2478, 2472, 2470, 2459, 2457, 2454, 2462, 803, 2437, 2432, 2429, 1726, 2443, 2440, 792, 789, 785,\n 2401, 2399, 2393, 1702, 2389, 1699, 2411, 2408, 2405, 745, 741, 2415, 758, 755, 1721, 2358, 2357, 2355, 2353,\n 1661, 2350, 1660, 2347, 1657, 2368, 2366, 2364, 2361, 1666, 690, 687, 2374, 683, 2372, 701, 698, 705, 1691, 1689,\n 2619, 2617, 2610, 2608, 2605, 2613, 2593, 2588, 2585, 1803, 2599, 2596, 2563, 2561, 2555, 1797, 2551, 1795, 2573,\n 2570, 2567, 2577, 2525, 2524, 2522, 2520, 1786, 2517, 1785, 2514, 1783, 2535, 2533, 2531, 2528, 1788, 2541, 2539,\n 906, 903, 911, 2721, 1844, 2715, 2712, 1838, 1836, 2699, 2696, 2693, 2703, 1827, 1826, 1824, 2673, 2671, 2669,\n 2666, 1829, 2679, 2677, 1858, 1857, 2772, 1854, 1853, 1851, 1856, 2766, 2764, 143, 1987, 139, 1986, 135, 133,\n 131, 1984, 128, 1983, 125, 1981, 138, 137, 136, 1985, 1133, 1132, 1130, 112, 110, 1974, 107, 1973, 104, 1971,\n 1969, 122, 121, 119, 117, 1977, 114, 1976, 124, 1115, 1114, 1112, 1110, 1117, 1116, 84, 83, 1953, 81, 1952, 78,\n 1950, 1948, 1945, 94, 93, 91, 1959, 88, 1958, 85, 1955, 99, 97, 95, 1961, 1086, 1085, 1083, 1081, 1078, 100,\n 1090, 1089, 1087, 1091, 49, 47, 1917, 44, 1915, 1913, 1910, 1907, 59, 1926, 56, 1925, 53, 1922, 1919, 66, 64,\n 1931, 61, 1929, 1042, 1040, 1038, 71, 1035, 70, 1032, 68, 1048, 1047, 1045, 1043, 1050, 1049, 12, 10, 1869, 1867,\n 1864, 1861, 21, 1880, 19, 1877, 1874, 1871, 28, 1888, 25, 1886, 22, 1883, 982, 980, 977, 974, 32, 30, 991, 989,\n 987, 984, 34, 995, 994, 992, 2151, 2150, 2147, 2146, 2144, 356, 355, 354, 2149, 2139, 2138, 2136, 2134, 1359,\n 343, 341, 338, 2143, 335, 2141, 348, 347, 346, 1376, 1374, 2124, 2123, 2121, 2119, 1326, 2116, 1324, 310, 308,\n 305, 2131, 302, 2129, 298, 2127, 320, 318, 316, 313, 2133, 322, 321, 1355, 1353, 1351, 1357, 2092, 2091, 2089,\n 2087, 1276, 2084, 1274, 2081, 1271, 259, 2102, 256, 2100, 252, 2098, 2095, 272, 269, 2108, 266, 2106, 281, 279,\n 277, 1317, 1315, 1313, 1310, 282, 1321, 1319, 2039, 2037, 2035, 2032, 1203, 2029, 1200, 1197, 207, 2053, 205,\n 2051, 201, 2049, 2046, 2043, 220, 218, 2064, 215, 2062, 211, 2059, 228, 226, 223, 2069, 1259, 1257, 1254, 232,\n 1251, 230, 1267, 1265, 1263, 2316, 2315, 2312, 2311, 2309, 2314, 2304, 2303, 2301, 2299, 1593, 2308, 2306, 590,\n 2288, 2287, 2285, 2283, 1578, 2280, 1577, 2295, 2293, 2291, 579, 577, 574, 571, 2298, 582, 581, 1592, 2263, 2262,\n 2260, 2258, 1545, 2255, 1544, 2252, 1541, 2273, 2271, 2269, 2266, 1550, 535, 532, 2279, 528, 2277, 546, 543, 549,\n 1575, 1573, 2224, 2222, 2220, 1486, 2217, 1485, 2214, 1482, 1479, 2238, 2236, 2234, 2231, 1496, 2228, 1492, 480,\n 477, 2248, 473, 2246, 469, 2243, 490, 487, 2251, 497, 1537, 1535, 1532, 2477, 2476, 2474, 2479, 2469, 2468, 2466,\n 2464, 1730, 2473, 2471, 2453, 2452, 2450, 2448, 1729, 2445, 1728, 2460, 2458, 2456, 2463, 805, 804, 2428, 2427,\n 2425, 2423, 1725, 2420, 1724, 2417, 1722, 2438, 2436, 2434, 2431, 1727, 2444, 2442, 793, 791, 788, 795, 2388,\n 2386, 2384, 1697, 2381, 1696, 2378, 1694, 1692, 2402, 2400, 2398, 2395, 1703, 2392, 1701, 2412, 2410, 2407, 751,\n 748, 744, 2416, 759, 757, 1807, 2620, 2618, 1806, 1805, 2611, 2609, 2607, 2614, 1802, 1801, 1799, 2594, 2592,\n 2590, 2587, 1804, 2600, 2598, 1794, 1793, 1791, 1789, 2564, 2562, 2560, 2557, 1798, 2554, 1796, 2574, 2572, 2569,\n 2578, 1847, 1846, 2722, 1843, 1842, 1840, 1845, 2716, 2714, 1835, 1834, 1832, 1830, 1839, 1837, 2700, 2698, 2695,\n 2704, 1817, 1811, 1810, 897, 862, 1777, 829, 826, 838, 1760, 1758, 808, 2481, 1741, 1740, 1738, 1743, 2624, 1818,\n 2726, 2776, 782, 740, 737, 1715, 686, 679, 695, 1682, 1680, 639, 628, 2339, 647, 644, 1645, 1643, 1640, 1648,\n 602, 600, 597, 595, 2320, 593, 2318, 609, 607, 604, 1611, 1610, 1608, 1606, 613, 1615, 1613, 2328, 926, 924, 892,\n 886, 899, 857, 850, 2505, 1778, 824, 823, 821, 819, 2488, 818, 2486, 833, 831, 828, 840, 1761, 1759, 2649, 2632,\n 2630, 2746, 2734, 2732, 2782, 2781, 570, 567, 1587, 531, 527, 523, 540, 1566, 1564, 476, 467, 463, 2240, 486,\n 483, 1524, 1521, 1518, 1529, 411, 403, 2192, 399, 2189, 423, 416, 1462, 1457, 1454, 428, 1468, 1465, 2210, 366,\n 363, 2158, 360, 2156, 357, 2153, 376, 373, 370, 2163, 1410, 1409, 1407, 1405, 382, 1402, 380, 1417, 1415, 1412,\n 1421, 2175, 2174, 777, 774, 771, 784, 732, 725, 722, 2404, 743, 1716, 676, 674, 668, 2363, 665, 2360, 685, 1684,\n 1681, 626, 624, 622, 2335, 620, 2333, 617, 2330, 641, 635, 649, 1646, 1644, 1642, 2566, 928, 925, 2530, 2527,\n 894, 891, 888, 2501, 2499, 2496, 858, 856, 854, 851, 1779, 2692, 2668, 2665, 2645, 2643, 2640, 2651, 2768, 2759,\n 2757, 2744, 2743, 2741, 2748, 352, 1382, 340, 337, 333, 1371, 1369, 307, 300, 296, 2126, 315, 312, 1347, 1342,\n 1350, 261, 258, 250, 2097, 246, 2094, 271, 268, 264, 1306, 1301, 1298, 276, 1312, 1309, 2115, 203, 2048, 195,\n 2045, 191, 2041, 213, 209, 2056, 1246, 1244, 1238, 225, 1234, 222, 1256, 1253, 1249, 1262, 2080, 2079, 154, 1997,\n 150, 1995, 147, 1992, 1989, 163, 160, 2004, 156, 2001, 1175, 1174, 1172, 1170, 1167, 170, 1164, 167, 1185, 1183,\n 1180, 1177, 174, 1190, 1188, 2025, 2024, 2022, 587, 586, 564, 559, 556, 2290, 573, 1588, 520, 518, 512, 2268,\n 508, 2265, 530, 1568, 1565, 461, 457, 2233, 450, 2230, 446, 2226, 479, 471, 489, 1526, 1523, 1520, 397, 395,\n 2185, 392, 2183, 389, 2180, 2177, 410, 2194, 402, 422, 1463, 1461, 1459, 1456, 1470, 2455, 799, 2433, 2430, 779,\n 776, 773, 2397, 2394, 2390, 734, 728, 724, 746, 1717, 2356, 2354, 2351, 2348, 1658, 677, 675, 673, 670, 667, 688,\n 1685, 1683, 2606, 2589, 2586, 2559, 2556, 2552, 927, 2523, 2521, 2518, 2515, 1784, 2532, 895, 893, 890, 2718,\n 2709, 2707, 2689, 2687, 2684, 2663, 2662, 2660, 2658, 1825, 2667, 2769, 1852, 2760, 2758, 142, 141, 1139, 1138,\n 134, 132, 129, 126, 1982, 1129, 1128, 1126, 1131, 113, 111, 108, 105, 1972, 101, 1970, 120, 118, 115, 1109, 1108,\n 1106, 1104, 123, 1113, 1111, 82, 79, 1951, 75, 1949, 72, 1946, 92, 89, 86, 1956, 1077, 1076, 1074, 1072, 98,\n 1069, 96, 1084, 1082, 1079, 1088, 1968, 1967, 48, 45, 1916, 42, 1914, 39, 1911, 1908, 60, 57, 54, 1923, 50, 1920,\n 1031, 1030, 1028, 1026, 67, 1023, 65, 1020, 62, 1041, 1039, 1036, 1033, 69, 1046, 1044, 1944, 1943, 1941, 11, 9,\n 1868, 7, 1865, 1862, 1859, 20, 1878, 16, 1875, 13, 1872, 970, 968, 966, 963, 29, 960, 26, 23, 983, 981, 978, 975,\n 33, 971, 31, 990, 988, 985, 1906, 1904, 1902, 993, 351, 2145, 1383, 331, 330, 328, 326, 2137, 323, 2135, 339,\n 1372, 1370, 294, 293, 291, 289, 2122, 286, 2120, 283, 2117, 309, 303, 317, 1348, 1346, 1344, 245, 244, 242, 2090,\n 239, 2088, 236, 2085, 2082, 260, 2099, 249, 270, 1307, 1305, 1303, 1300, 1314, 189, 2038, 186, 2036, 183, 2033,\n 2030, 2026, 206, 198, 2047, 194, 216, 1247, 1245, 1243, 1240, 227, 1237, 1255, 2310, 2302, 2300, 2286, 2284,\n 2281, 565, 563, 561, 558, 575, 1589, 2261, 2259, 2256, 2253, 1542, 521, 519, 517, 514, 2270, 511, 533, 1569,\n 1567, 2223, 2221, 2218, 2215, 1483, 2211, 1480, 459, 456, 453, 2232, 449, 474, 491, 1527, 1525, 1522, 2475, 2467,\n 2465, 2451, 2449, 2446, 801, 800, 2426, 2424, 2421, 2418, 1723, 2435, 780, 778, 775, 2387, 2385, 2382, 2379,\n 1695, 2375, 1693, 2396, 735, 733, 730, 727, 749, 1718, 2616, 2615, 2604, 2603, 2601, 2584, 2583, 2581, 2579,\n 1800, 2591, 2550, 2549, 2547, 2545, 1792, 2542, 1790, 2558, 929, 2719, 1841, 2710, 2708, 1833, 1831, 2690, 2688,\n 2686, 1815, 1809, 1808, 1774, 1756, 1754, 1737, 1736, 1734, 1739, 1816, 1711, 1676, 1674, 633, 629, 1638, 1636,\n 1633, 1641, 598, 1605, 1604, 1602, 1600, 605, 1609, 1607, 2327, 887, 853, 1775, 822, 820, 1757, 1755, 1584, 524,\n 1560, 1558, 468, 464, 1514, 1511, 1508, 1519, 408, 404, 400, 1452, 1447, 1444, 417, 1458, 1455, 2208, 364, 361,\n 358, 2154, 1401, 1400, 1398, 1396, 374, 1393, 371, 1408, 1406, 1403, 1413, 2173, 2172, 772, 726, 723, 1712, 672,\n 669, 666, 682, 1678, 1675, 625, 623, 621, 618, 2331, 636, 632, 1639, 1637, 1635, 920, 918, 884, 880, 889, 849,\n 848, 847, 846, 2497, 855, 852, 1776, 2641, 2742, 2787, 1380, 334, 1367, 1365, 301, 297, 1340, 1338, 1335, 1343,\n 255, 251, 247, 1296, 1291, 1288, 265, 1302, 1299, 2113, 204, 196, 192, 2042, 1232, 1230, 1224, 214, 1220, 210,\n 1242, 1239, 1235, 1250, 2077, 2075, 151, 148, 1993, 144, 1990, 1163, 1162, 1160, 1158, 1155, 161, 1152, 157,\n 1173, 1171, 1168, 1165, 168, 1181, 1178, 2021, 2020, 2018, 2023, 585, 560, 557, 1585, 516, 509, 1562, 1559, 458,\n 447, 2227, 472, 1516, 1513, 1510, 398, 396, 393, 390, 2181, 386, 2178, 407, 1453, 1451, 1449, 1446, 420, 1460,\n 2209, 769, 764, 720, 712, 2391, 729, 1713, 664, 663, 661, 659, 2352, 656, 2349, 671, 1679, 1677, 2553, 922, 919,\n 2519, 2516, 885, 883, 881, 2685, 2661, 2659, 2767, 2756, 2755, 140, 1137, 1136, 130, 127, 1125, 1124, 1122, 1127,\n 109, 106, 102, 1103, 1102, 1100, 1098, 116, 1107, 1105, 1980, 80, 76, 73, 1947, 1068, 1067, 1065, 1063, 90, 1060,\n 87, 1075, 1073, 1070, 1080, 1966, 1965, 46, 43, 40, 1912, 36, 1909, 1019, 1018, 1016, 1014, 58, 1011, 55, 1008,\n 51, 1029, 1027, 1024, 1021, 63, 1037, 1034, 1940, 1939, 1937, 1942, 8, 1866, 4, 1863, 1, 1860, 956, 954, 952,\n 949, 946, 17, 14, 969, 967, 964, 961, 27, 957, 24, 979, 976, 972, 1901, 1900, 1898, 1896, 986, 1905, 1903, 350,\n 349, 1381, 329, 327, 324, 1368, 1366, 292, 290, 287, 284, 2118, 304, 1341, 1339, 1337, 1345, 243, 240, 237, 2086,\n 233, 2083, 254, 1297, 1295, 1293, 1290, 1304, 2114, 190, 187, 184, 2034, 180, 2031, 177, 2027, 199, 1233, 1231,\n 1229, 1226, 217, 1223, 1241, 2078, 2076, 584, 555, 554, 552, 550, 2282, 562, 1586, 507, 506, 504, 502, 2257, 499,\n 2254, 515, 1563, 1561, 445, 443, 441, 2219, 438, 2216, 435, 2212, 460, 454, 475, 1517, 1515, 1512, 2447, 798,\n 797, 2422, 2419, 770, 768, 766, 2383, 2380, 2376, 721, 719, 717, 714, 731, 1714, 2602, 2582, 2580, 2548, 2546,\n 2543, 923, 921, 2717, 2706, 2705, 2683, 2682, 2680, 1771, 1752, 1750, 1733, 1732, 1731, 1735, 1814, 1707, 1670,\n 1668, 1631, 1629, 1626, 1634, 1599, 1598, 1596, 1594, 1603, 1601, 2326, 1772, 1753, 1751, 1581, 1554, 1552, 1504,\n 1501, 1498, 1509, 1442, 1437, 1434, 401, 1448, 1445, 2206, 1392, 1391, 1389, 1387, 1384, 359, 1399, 1397, 1394,\n 1404, 2171, 2170, 1708, 1672, 1669, 619, 1632, 1630, 1628, 1773, 1378, 1363, 1361, 1333, 1328, 1336, 1286, 1281,\n 1278, 248, 1292, 1289, 2111, 1218, 1216, 1210, 197, 1206, 193, 1228, 1225, 1221, 1236, 2073, 2071, 1151, 1150,\n 1148, 1146, 152, 1143, 149, 1140, 145, 1161, 1159, 1156, 1153, 158, 1169, 1166, 2017, 2016, 2014, 2019, 1582,\n 510, 1556, 1553, 452, 448, 1506, 1500, 394, 391, 387, 1443, 1441, 1439, 1436, 1450, 2207, 765, 716, 713, 1709,\n 662, 660, 657, 1673, 1671, 916, 914, 879, 878, 877, 882, 1135, 1134, 1121, 1120, 1118, 1123, 1097, 1096, 1094,\n 1092, 103, 1101, 1099, 1979, 1059, 1058, 1056, 1054, 77, 1051, 74, 1066, 1064, 1061, 1071, 1964, 1963, 1007,\n 1006, 1004, 1002, 999, 41, 996, 37, 1017, 1015, 1012, 1009, 52, 1025, 1022, 1936, 1935, 1933, 1938, 942, 940,\n 938, 935, 932, 5, 2, 955, 953, 950, 947, 18, 943, 15, 965, 962, 958, 1895, 1894, 1892, 1890, 973, 1899, 1897,\n 1379, 325, 1364, 1362, 288, 285, 1334, 1332, 1330, 241, 238, 234, 1287, 1285, 1283, 1280, 1294, 2112, 188, 185,\n 181, 178, 2028, 1219, 1217, 1215, 1212, 200, 1209, 1227, 2074, 2072, 583, 553, 551, 1583, 505, 503, 500, 513,\n 1557, 1555, 444, 442, 439, 436, 2213, 455, 451, 1507, 1505, 1502, 796, 763, 762, 760, 767, 711, 710, 708, 706,\n 2377, 718, 715, 1710, 2544, 917, 915, 2681, 1627, 1597, 1595, 2325, 1769, 1749, 1747, 1499, 1438, 1435, 2204,\n 1390, 1388, 1385, 1395, 2169, 2167, 1704, 1665, 1662, 1625, 1623, 1620, 1770, 1329, 1282, 1279, 2109, 1214, 1207,\n 1222, 2068, 2065, 1149, 1147, 1144, 1141, 146, 1157, 1154, 2013, 2011, 2008, 2015, 1579, 1549, 1546, 1495, 1487,\n 1433, 1431, 1428, 1425, 388, 1440, 2205, 1705, 658, 1667, 1664, 1119, 1095, 1093, 1978, 1057, 1055, 1052, 1062,\n 1962, 1960, 1005, 1003, 1000, 997, 38, 1013, 1010, 1932, 1930, 1927, 1934, 941, 939, 936, 933, 6, 930, 3, 951,\n 948, 944, 1889, 1887, 1884, 1881, 959, 1893, 1891, 35, 1377, 1360, 1358, 1327, 1325, 1322, 1331, 1277, 1275,\n 1272, 1269, 235, 1284, 2110, 1205, 1204, 1201, 1198, 182, 1195, 179, 1213, 2070, 2067, 1580, 501, 1551, 1548,\n 440, 437, 1497, 1494, 1490, 1503, 761, 709, 707, 1706, 913, 912, 2198, 1386, 2164, 2161, 1621, 1766, 2103, 1208,\n 2058, 2054, 1145, 1142, 2005, 2002, 1999, 2009, 1488, 1429, 1426, 2200, 1698, 1659, 1656, 1975, 1053, 1957, 1954,\n 1001, 998, 1924, 1921, 1918, 1928, 937, 934, 931, 1879, 1876, 1873, 1870, 945, 1885, 1882, 1323, 1273, 1270,\n 2105, 1202, 1199, 1196, 1211, 2061, 2057, 1576, 1543, 1540, 1484, 1481, 1478, 1491, 1700\n ]);\n return PDF417Common;\n}());\nexport default PDF417Common;\n","/*\n* Copyright 2007 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n// import java.util.List;\n/**\n * @author Guenther Grau\n */\nvar PDF417DetectorResult = /** @class */ (function () {\n function PDF417DetectorResult(bits, points) {\n this.bits = bits;\n this.points = points;\n }\n PDF417DetectorResult.prototype.getBits = function () {\n return this.bits;\n };\n PDF417DetectorResult.prototype.getPoints = function () {\n return this.points;\n };\n return PDF417DetectorResult;\n}());\nexport default PDF417DetectorResult;\n","/*\n* Copyright 2009 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// import com.google.zxing.NotFoundException;\n// import com.google.zxing.ResultPoint;\nimport ResultPoint from '../../ResultPoint';\nimport System from '../../util/System';\nimport Arrays from '../../util/Arrays';\nimport PDF417DetectorResult from './PDF417DetectorResult';\n// import java.util.ArrayList;\n// import java.util.Arrays;\n// import java.util.List;\n// import java.util.Map;\n/**\n *

Encapsulates logic that can detect a PDF417 Code in an image, even if the\n * PDF417 Code is rotated or skewed, or partially obscured.

\n *\n * @author SITA Lab (kevin.osullivan@sita.aero)\n * @author dswitkin@google.com (Daniel Switkin)\n * @author Guenther Grau\n */\nvar Detector = /** @class */ (function () {\n function Detector() {\n }\n /**\n *

Detects a PDF417 Code in an image. Only checks 0 and 180 degree rotations.

\n *\n * @param image barcode image to decode\n * @param hints optional hints to detector\n * @param multiple if true, then the image is searched for multiple codes. If false, then at most one code will\n * be found and returned\n * @return {@link PDF417DetectorResult} encapsulating results of detecting a PDF417 code\n * @throws NotFoundException if no PDF417 Code can be found\n */\n Detector.detectMultiple = function (image, hints, multiple) {\n // TODO detection improvement, tryHarder could try several different luminance thresholds/blackpoints or even\n // different binarizers\n // boolean tryHarder = hints != null && hints.containsKey(DecodeHintType.TRY_HARDER);\n var bitMatrix = image.getBlackMatrix();\n var barcodeCoordinates = Detector.detect(multiple, bitMatrix);\n if (!barcodeCoordinates.length) {\n bitMatrix = bitMatrix.clone();\n bitMatrix.rotate180();\n barcodeCoordinates = Detector.detect(multiple, bitMatrix);\n }\n return new PDF417DetectorResult(bitMatrix, barcodeCoordinates);\n };\n /**\n * Detects PDF417 codes in an image. Only checks 0 degree rotation\n * @param multiple if true, then the image is searched for multiple codes. If false, then at most one code will\n * be found and returned\n * @param bitMatrix bit matrix to detect barcodes in\n * @return List of ResultPoint arrays containing the coordinates of found barcodes\n */\n Detector.detect = function (multiple, bitMatrix) {\n var e_1, _a;\n var barcodeCoordinates = new Array();\n var row = 0;\n var column = 0;\n var foundBarcodeInRow = false;\n while (row < bitMatrix.getHeight()) {\n var vertices = Detector.findVertices(bitMatrix, row, column);\n if (vertices[0] == null && vertices[3] == null) {\n if (!foundBarcodeInRow) {\n // we didn't find any barcode so that's the end of searching\n break;\n }\n // we didn't find a barcode starting at the given column and row. Try again from the first column and slightly\n // below the lowest barcode we found so far.\n foundBarcodeInRow = false;\n column = 0;\n try {\n for (var barcodeCoordinates_1 = (e_1 = void 0, __values(barcodeCoordinates)), barcodeCoordinates_1_1 = barcodeCoordinates_1.next(); !barcodeCoordinates_1_1.done; barcodeCoordinates_1_1 = barcodeCoordinates_1.next()) {\n var barcodeCoordinate = barcodeCoordinates_1_1.value;\n if (barcodeCoordinate[1] != null) {\n row = Math.trunc(Math.max(row, barcodeCoordinate[1].getY()));\n }\n if (barcodeCoordinate[3] != null) {\n row = Math.max(row, Math.trunc(barcodeCoordinate[3].getY()));\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (barcodeCoordinates_1_1 && !barcodeCoordinates_1_1.done && (_a = barcodeCoordinates_1.return)) _a.call(barcodeCoordinates_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n row += Detector.ROW_STEP;\n continue;\n }\n foundBarcodeInRow = true;\n barcodeCoordinates.push(vertices);\n if (!multiple) {\n break;\n }\n // if we didn't find a right row indicator column, then continue the search for the next barcode after the\n // start pattern of the barcode just found.\n if (vertices[2] != null) {\n column = Math.trunc(vertices[2].getX());\n row = Math.trunc(vertices[2].getY());\n }\n else {\n column = Math.trunc(vertices[4].getX());\n row = Math.trunc(vertices[4].getY());\n }\n }\n return barcodeCoordinates;\n };\n /**\n * Locate the vertices and the codewords area of a black blob using the Start\n * and Stop patterns as locators.\n *\n * @param matrix the scanned barcode image.\n * @return an array containing the vertices:\n * vertices[0] x, y top left barcode\n * vertices[1] x, y bottom left barcode\n * vertices[2] x, y top right barcode\n * vertices[3] x, y bottom right barcode\n * vertices[4] x, y top left codeword area\n * vertices[5] x, y bottom left codeword area\n * vertices[6] x, y top right codeword area\n * vertices[7] x, y bottom right codeword area\n */\n Detector.findVertices = function (matrix, startRow, startColumn) {\n var height = matrix.getHeight();\n var width = matrix.getWidth();\n // const result = new ResultPoint[8];\n var result = new Array(8);\n Detector.copyToResult(result, Detector.findRowsWithPattern(matrix, height, width, startRow, startColumn, Detector.START_PATTERN), Detector.INDEXES_START_PATTERN);\n if (result[4] != null) {\n startColumn = Math.trunc(result[4].getX());\n startRow = Math.trunc(result[4].getY());\n }\n Detector.copyToResult(result, Detector.findRowsWithPattern(matrix, height, width, startRow, startColumn, Detector.STOP_PATTERN), Detector.INDEXES_STOP_PATTERN);\n return result;\n };\n Detector.copyToResult = function (result, tmpResult, destinationIndexes) {\n for (var i = 0; i < destinationIndexes.length; i++) {\n result[destinationIndexes[i]] = tmpResult[i];\n }\n };\n Detector.findRowsWithPattern = function (matrix, height, width, startRow, startColumn, pattern) {\n // const result = new ResultPoint[4];\n var result = new Array(4);\n var found = false;\n var counters = new Int32Array(pattern.length);\n for (; startRow < height; startRow += Detector.ROW_STEP) {\n var loc = Detector.findGuardPattern(matrix, startColumn, startRow, width, false, pattern, counters);\n if (loc != null) {\n while (startRow > 0) {\n var previousRowLoc = Detector.findGuardPattern(matrix, startColumn, --startRow, width, false, pattern, counters);\n if (previousRowLoc != null) {\n loc = previousRowLoc;\n }\n else {\n startRow++;\n break;\n }\n }\n result[0] = new ResultPoint(loc[0], startRow);\n result[1] = new ResultPoint(loc[1], startRow);\n found = true;\n break;\n }\n }\n var stopRow = startRow + 1;\n // Last row of the current symbol that contains pattern\n if (found) {\n var skippedRowCount = 0;\n var previousRowLoc = Int32Array.from([Math.trunc(result[0].getX()), Math.trunc(result[1].getX())]);\n for (; stopRow < height; stopRow++) {\n var loc = Detector.findGuardPattern(matrix, previousRowLoc[0], stopRow, width, false, pattern, counters);\n // a found pattern is only considered to belong to the same barcode if the start and end positions\n // don't differ too much. Pattern drift should be not bigger than two for consecutive rows. With\n // a higher number of skipped rows drift could be larger. To keep it simple for now, we allow a slightly\n // larger drift and don't check for skipped rows.\n if (loc != null &&\n Math.abs(previousRowLoc[0] - loc[0]) < Detector.MAX_PATTERN_DRIFT &&\n Math.abs(previousRowLoc[1] - loc[1]) < Detector.MAX_PATTERN_DRIFT) {\n previousRowLoc = loc;\n skippedRowCount = 0;\n }\n else {\n if (skippedRowCount > Detector.SKIPPED_ROW_COUNT_MAX) {\n break;\n }\n else {\n skippedRowCount++;\n }\n }\n }\n stopRow -= skippedRowCount + 1;\n result[2] = new ResultPoint(previousRowLoc[0], stopRow);\n result[3] = new ResultPoint(previousRowLoc[1], stopRow);\n }\n if (stopRow - startRow < Detector.BARCODE_MIN_HEIGHT) {\n Arrays.fill(result, null);\n }\n return result;\n };\n /**\n * @param matrix row of black/white values to search\n * @param column x position to start search\n * @param row y position to start search\n * @param width the number of pixels to search on this row\n * @param pattern pattern of counts of number of black and white pixels that are\n * being searched for as a pattern\n * @param counters array of counters, as long as pattern, to re-use\n * @return start/end horizontal offset of guard pattern, as an array of two ints.\n */\n Detector.findGuardPattern = function (matrix, column, row, width, whiteFirst, pattern, counters) {\n Arrays.fillWithin(counters, 0, counters.length, 0);\n var patternStart = column;\n var pixelDrift = 0;\n // if there are black pixels left of the current pixel shift to the left, but only for MAX_PIXEL_DRIFT pixels\n while (matrix.get(patternStart, row) && patternStart > 0 && pixelDrift++ < Detector.MAX_PIXEL_DRIFT) {\n patternStart--;\n }\n var x = patternStart;\n var counterPosition = 0;\n var patternLength = pattern.length;\n for (var isWhite = whiteFirst; x < width; x++) {\n var pixel = matrix.get(x, row);\n if (pixel !== isWhite) {\n counters[counterPosition]++;\n }\n else {\n if (counterPosition === patternLength - 1) {\n if (Detector.patternMatchVariance(counters, pattern, Detector.MAX_INDIVIDUAL_VARIANCE) < Detector.MAX_AVG_VARIANCE) {\n return new Int32Array([patternStart, x]);\n }\n patternStart += counters[0] + counters[1];\n System.arraycopy(counters, 2, counters, 0, counterPosition - 1);\n counters[counterPosition - 1] = 0;\n counters[counterPosition] = 0;\n counterPosition--;\n }\n else {\n counterPosition++;\n }\n counters[counterPosition] = 1;\n isWhite = !isWhite;\n }\n }\n if (counterPosition === patternLength - 1 &&\n Detector.patternMatchVariance(counters, pattern, Detector.MAX_INDIVIDUAL_VARIANCE) < Detector.MAX_AVG_VARIANCE) {\n return new Int32Array([patternStart, x - 1]);\n }\n return null;\n };\n /**\n * Determines how closely a set of observed counts of runs of black/white\n * values matches a given target pattern. This is reported as the ratio of\n * the total variance from the expected pattern proportions across all\n * pattern elements, to the length of the pattern.\n *\n * @param counters observed counters\n * @param pattern expected pattern\n * @param maxIndividualVariance The most any counter can differ before we give up\n * @return ratio of total variance between counters and pattern compared to total pattern size\n */\n Detector.patternMatchVariance = function (counters, pattern, maxIndividualVariance) {\n var numCounters = counters.length;\n var total = 0;\n var patternLength = 0;\n for (var i = 0; i < numCounters; i++) {\n total += counters[i];\n patternLength += pattern[i];\n }\n if (total < patternLength) {\n // If we don't even have one pixel per unit of bar width, assume this\n // is too small to reliably match, so fail:\n return /*Float.POSITIVE_INFINITY*/ Infinity;\n }\n // We're going to fake floating-point math in integers. We just need to use more bits.\n // Scale up patternLength so that intermediate values below like scaledCounter will have\n // more \"significant digits\".\n var unitBarWidth = total / patternLength;\n maxIndividualVariance *= unitBarWidth;\n var totalVariance = 0.0;\n for (var x = 0; x < numCounters; x++) {\n var counter = counters[x];\n var scaledPattern = pattern[x] * unitBarWidth;\n var variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;\n if (variance > maxIndividualVariance) {\n return /*Float.POSITIVE_INFINITY*/ Infinity;\n }\n totalVariance += variance;\n }\n return totalVariance / total;\n };\n Detector.INDEXES_START_PATTERN = Int32Array.from([0, 4, 1, 5]);\n Detector.INDEXES_STOP_PATTERN = Int32Array.from([6, 2, 7, 3]);\n Detector.MAX_AVG_VARIANCE = 0.42;\n Detector.MAX_INDIVIDUAL_VARIANCE = 0.8;\n // B S B S B S B S Bar/Space pattern\n // 11111111 0 1 0 1 0 1 000\n Detector.START_PATTERN = Int32Array.from([8, 1, 1, 1, 1, 1, 1, 3]);\n // 1111111 0 1 000 1 0 1 00 1\n Detector.STOP_PATTERN = Int32Array.from([7, 1, 1, 3, 1, 1, 1, 2, 1]);\n Detector.MAX_PIXEL_DRIFT = 3;\n Detector.MAX_PATTERN_DRIFT = 5;\n // if we set the value too low, then we don't detect the correct height of the bar if the start patterns are damaged.\n // if we set the value too high, then we might detect the start pattern from a neighbor barcode.\n Detector.SKIPPED_ROW_COUNT_MAX = 25;\n // A PDF471 barcode should have at least 3 rows, with each row being >= 3 times the module width. Therefore it should be at least\n // 9 pixels tall. To be conservative, we use about half the size to ensure we don't miss it.\n Detector.ROW_STEP = 5;\n Detector.BARCODE_MIN_HEIGHT = 10;\n return Detector;\n}());\nexport default Detector;\n","/*\n* Copyright 2012 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417.decoder.ec;\nimport IllegalArgumentException from '../../../IllegalArgumentException';\nimport System from '../../../util/System';\nimport StringBuilder from '../../../util/StringBuilder';\n/**\n * @author Sean Owen\n * @see com.google.zxing.common.reedsolomon.GenericGFPoly\n */\nvar ModulusPoly = /** @class */ (function () {\n function ModulusPoly(field, coefficients) {\n if (coefficients.length === 0) {\n throw new IllegalArgumentException();\n }\n this.field = field;\n var coefficientsLength = /*int*/ coefficients.length;\n if (coefficientsLength > 1 && coefficients[0] === 0) {\n // Leading term must be non-zero for anything except the constant polynomial \"0\"\n var firstNonZero = /*int*/ 1;\n while (firstNonZero < coefficientsLength && coefficients[firstNonZero] === 0) {\n firstNonZero++;\n }\n if (firstNonZero === coefficientsLength) {\n this.coefficients = new Int32Array([0]);\n }\n else {\n this.coefficients = new Int32Array(coefficientsLength - firstNonZero);\n System.arraycopy(coefficients, firstNonZero, this.coefficients, 0, this.coefficients.length);\n }\n }\n else {\n this.coefficients = coefficients;\n }\n }\n ModulusPoly.prototype.getCoefficients = function () {\n return this.coefficients;\n };\n /**\n * @return degree of this polynomial\n */\n ModulusPoly.prototype.getDegree = function () {\n return this.coefficients.length - 1;\n };\n /**\n * @return true iff this polynomial is the monomial \"0\"\n */\n ModulusPoly.prototype.isZero = function () {\n return this.coefficients[0] === 0;\n };\n /**\n * @return coefficient of x^degree term in this polynomial\n */\n ModulusPoly.prototype.getCoefficient = function (degree) {\n return this.coefficients[this.coefficients.length - 1 - degree];\n };\n /**\n * @return evaluation of this polynomial at a given point\n */\n ModulusPoly.prototype.evaluateAt = function (a) {\n var e_1, _a;\n if (a === 0) {\n // Just return the x^0 coefficient\n return this.getCoefficient(0);\n }\n if (a === 1) {\n // Just the sum of the coefficients\n var sum = /*int*/ 0;\n try {\n for (var _b = __values(this.coefficients), _c = _b.next(); !_c.done; _c = _b.next()) {\n var coefficient = _c.value /*int*/;\n sum = this.field.add(sum, coefficient);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return sum;\n }\n var result = /*int*/ this.coefficients[0];\n var size = /*int*/ this.coefficients.length;\n for (var i /*int*/ = 1; i < size; i++) {\n result = this.field.add(this.field.multiply(a, result), this.coefficients[i]);\n }\n return result;\n };\n ModulusPoly.prototype.add = function (other) {\n if (!this.field.equals(other.field)) {\n throw new IllegalArgumentException('ModulusPolys do not have same ModulusGF field');\n }\n if (this.isZero()) {\n return other;\n }\n if (other.isZero()) {\n return this;\n }\n var smallerCoefficients = this.coefficients;\n var largerCoefficients = other.coefficients;\n if (smallerCoefficients.length > largerCoefficients.length) {\n var temp = smallerCoefficients;\n smallerCoefficients = largerCoefficients;\n largerCoefficients = temp;\n }\n var sumDiff = new Int32Array(largerCoefficients.length);\n var lengthDiff = /*int*/ largerCoefficients.length - smallerCoefficients.length;\n // Copy high-order terms only found in higher-degree polynomial's coefficients\n System.arraycopy(largerCoefficients, 0, sumDiff, 0, lengthDiff);\n for (var i /*int*/ = lengthDiff; i < largerCoefficients.length; i++) {\n sumDiff[i] = this.field.add(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);\n }\n return new ModulusPoly(this.field, sumDiff);\n };\n ModulusPoly.prototype.subtract = function (other) {\n if (!this.field.equals(other.field)) {\n throw new IllegalArgumentException('ModulusPolys do not have same ModulusGF field');\n }\n if (other.isZero()) {\n return this;\n }\n return this.add(other.negative());\n };\n ModulusPoly.prototype.multiply = function (other) {\n if (other instanceof ModulusPoly) {\n return this.multiplyOther(other);\n }\n return this.multiplyScalar(other);\n };\n ModulusPoly.prototype.multiplyOther = function (other) {\n if (!this.field.equals(other.field)) {\n throw new IllegalArgumentException('ModulusPolys do not have same ModulusGF field');\n }\n if (this.isZero() || other.isZero()) {\n // return this.field.getZero();\n return new ModulusPoly(this.field, new Int32Array([0]));\n }\n var aCoefficients = this.coefficients;\n var aLength = /*int*/ aCoefficients.length;\n var bCoefficients = other.coefficients;\n var bLength = /*int*/ bCoefficients.length;\n var product = new Int32Array(aLength + bLength - 1);\n for (var i /*int*/ = 0; i < aLength; i++) {\n var aCoeff = /*int*/ aCoefficients[i];\n for (var j /*int*/ = 0; j < bLength; j++) {\n product[i + j] = this.field.add(product[i + j], this.field.multiply(aCoeff, bCoefficients[j]));\n }\n }\n return new ModulusPoly(this.field, product);\n };\n ModulusPoly.prototype.negative = function () {\n var size = /*int*/ this.coefficients.length;\n var negativeCoefficients = new Int32Array(size);\n for (var i /*int*/ = 0; i < size; i++) {\n negativeCoefficients[i] = this.field.subtract(0, this.coefficients[i]);\n }\n return new ModulusPoly(this.field, negativeCoefficients);\n };\n ModulusPoly.prototype.multiplyScalar = function (scalar) {\n if (scalar === 0) {\n return new ModulusPoly(this.field, new Int32Array([0]));\n }\n if (scalar === 1) {\n return this;\n }\n var size = /*int*/ this.coefficients.length;\n var product = new Int32Array(size);\n for (var i /*int*/ = 0; i < size; i++) {\n product[i] = this.field.multiply(this.coefficients[i], scalar);\n }\n return new ModulusPoly(this.field, product);\n };\n ModulusPoly.prototype.multiplyByMonomial = function (degree, coefficient) {\n if (degree < 0) {\n throw new IllegalArgumentException();\n }\n if (coefficient === 0) {\n return new ModulusPoly(this.field, new Int32Array([0]));\n }\n var size = /*int*/ this.coefficients.length;\n var product = new Int32Array(size + degree);\n for (var i /*int*/ = 0; i < size; i++) {\n product[i] = this.field.multiply(this.coefficients[i], coefficient);\n }\n return new ModulusPoly(this.field, product);\n };\n /*\n ModulusPoly[] divide(other: ModulusPoly) {\n if (!field.equals(other.field)) {\n throw new IllegalArgumentException(\"ModulusPolys do not have same ModulusGF field\");\n }\n if (other.isZero()) {\n throw new IllegalArgumentException(\"Divide by 0\");\n }\n \n let quotient: ModulusPoly = field.getZero();\n let remainder: ModulusPoly = this;\n \n let denominatorLeadingTerm: /*int/ number = other.getCoefficient(other.getDegree());\n let inverseDenominatorLeadingTerm: /*int/ number = field.inverse(denominatorLeadingTerm);\n \n while (remainder.getDegree() >= other.getDegree() && !remainder.isZero()) {\n let degreeDifference: /*int/ number = remainder.getDegree() - other.getDegree();\n let scale: /*int/ number = field.multiply(remainder.getCoefficient(remainder.getDegree()), inverseDenominatorLeadingTerm);\n let term: ModulusPoly = other.multiplyByMonomial(degreeDifference, scale);\n let iterationQuotient: ModulusPoly = field.buildMonomial(degreeDifference, scale);\n quotient = quotient.add(iterationQuotient);\n remainder = remainder.subtract(term);\n }\n \n return new ModulusPoly[] { quotient, remainder };\n }\n */\n // @Override\n ModulusPoly.prototype.toString = function () {\n var result = new StringBuilder( /*8 * this.getDegree()*/); // dynamic string size in JS\n for (var degree /*int*/ = this.getDegree(); degree >= 0; degree--) {\n var coefficient = /*int*/ this.getCoefficient(degree);\n if (coefficient !== 0) {\n if (coefficient < 0) {\n result.append(' - ');\n coefficient = -coefficient;\n }\n else {\n if (result.length() > 0) {\n result.append(' + ');\n }\n }\n if (degree === 0 || coefficient !== 1) {\n result.append(coefficient);\n }\n if (degree !== 0) {\n if (degree === 1) {\n result.append('x');\n }\n else {\n result.append('x^');\n result.append(degree);\n }\n }\n }\n }\n return result.toString();\n };\n return ModulusPoly;\n}());\nexport default ModulusPoly;\n","import IllegalArgumentException from '../../../IllegalArgumentException';\nimport ArithmeticException from '../../../ArithmeticException';\nvar ModulusBase = /** @class */ (function () {\n function ModulusBase() {\n }\n ModulusBase.prototype.add = function (a, b) {\n return (a + b) % this.modulus;\n };\n ModulusBase.prototype.subtract = function (a, b) {\n return (this.modulus + a - b) % this.modulus;\n };\n ModulusBase.prototype.exp = function (a) {\n return this.expTable[a];\n };\n ModulusBase.prototype.log = function (a) {\n if (a === 0) {\n throw new IllegalArgumentException();\n }\n return this.logTable[a];\n };\n ModulusBase.prototype.inverse = function (a) {\n if (a === 0) {\n throw new ArithmeticException();\n }\n return this.expTable[this.modulus - this.logTable[a] - 1];\n };\n ModulusBase.prototype.multiply = function (a, b) {\n if (a === 0 || b === 0) {\n return 0;\n }\n return this.expTable[(this.logTable[a] + this.logTable[b]) % (this.modulus - 1)];\n };\n ModulusBase.prototype.getSize = function () {\n return this.modulus;\n };\n ModulusBase.prototype.equals = function (o) {\n return o === this;\n };\n return ModulusBase;\n}());\nexport default ModulusBase;\n","/*\n * Copyright 2012 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n// package com.google.zxing.pdf417.decoder.ec;\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../../PDF417Common';\nimport ModulusPoly from './ModulusPoly';\nimport IllegalArgumentException from '../../../IllegalArgumentException';\nimport ModulusBase from './ModulusBase';\n/**\n *

A field based on powers of a generator integer, modulo some modulus.

\n *\n * @author Sean Owen\n * @see com.google.zxing.common.reedsolomon.GenericGF\n */\nvar ModulusGF = /** @class */ (function (_super) {\n __extends(ModulusGF, _super);\n // private /*final*/ modulus: /*int*/ number;\n function ModulusGF(modulus, generator) {\n var _this = _super.call(this) || this;\n _this.modulus = modulus;\n _this.expTable = new Int32Array(modulus);\n _this.logTable = new Int32Array(modulus);\n var x = /*int*/ 1;\n for (var i /*int*/ = 0; i < modulus; i++) {\n _this.expTable[i] = x;\n x = (x * generator) % modulus;\n }\n for (var i /*int*/ = 0; i < modulus - 1; i++) {\n _this.logTable[_this.expTable[i]] = i;\n }\n // logTable[0] == 0 but this should never be used\n _this.zero = new ModulusPoly(_this, new Int32Array([0]));\n _this.one = new ModulusPoly(_this, new Int32Array([1]));\n return _this;\n }\n ModulusGF.prototype.getZero = function () {\n return this.zero;\n };\n ModulusGF.prototype.getOne = function () {\n return this.one;\n };\n ModulusGF.prototype.buildMonomial = function (degree, coefficient) {\n if (degree < 0) {\n throw new IllegalArgumentException();\n }\n if (coefficient === 0) {\n return this.zero;\n }\n var coefficients = new Int32Array(degree + 1);\n coefficients[0] = coefficient;\n return new ModulusPoly(this, coefficients);\n };\n ModulusGF.PDF417_GF = new ModulusGF(PDF417Common.NUMBER_OF_CODEWORDS, 3);\n return ModulusGF;\n}(ModulusBase));\nexport default ModulusGF;\n","/*\n* Copyright 2012 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417.decoder.ec;\n// import com.google.zxing.ChecksumException;\nimport ChecksumException from '../../../ChecksumException';\nimport ModulusPoly from './ModulusPoly';\nimport ModulusGF from './ModulusGF';\n/**\n *

PDF417 error correction implementation.

\n *\n *

This example\n * is quite useful in understanding the algorithm.

\n *\n * @author Sean Owen\n * @see com.google.zxing.common.reedsolomon.ReedSolomonDecoder\n */\nvar ErrorCorrection = /** @class */ (function () {\n function ErrorCorrection() {\n this.field = ModulusGF.PDF417_GF;\n }\n /**\n * @param received received codewords\n * @param numECCodewords number of those codewords used for EC\n * @param erasures location of erasures\n * @return number of errors\n * @throws ChecksumException if errors cannot be corrected, maybe because of too many errors\n */\n ErrorCorrection.prototype.decode = function (received, numECCodewords, erasures) {\n var e_1, _a;\n var poly = new ModulusPoly(this.field, received);\n var S = new Int32Array(numECCodewords);\n var error = false;\n for (var i /*int*/ = numECCodewords; i > 0; i--) {\n var evaluation = poly.evaluateAt(this.field.exp(i));\n S[numECCodewords - i] = evaluation;\n if (evaluation !== 0) {\n error = true;\n }\n }\n if (!error) {\n return 0;\n }\n var knownErrors = this.field.getOne();\n if (erasures != null) {\n try {\n for (var erasures_1 = __values(erasures), erasures_1_1 = erasures_1.next(); !erasures_1_1.done; erasures_1_1 = erasures_1.next()) {\n var erasure = erasures_1_1.value;\n var b = this.field.exp(received.length - 1 - erasure);\n // Add (1 - bx) term:\n var term = new ModulusPoly(this.field, new Int32Array([this.field.subtract(0, b), 1]));\n knownErrors = knownErrors.multiply(term);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (erasures_1_1 && !erasures_1_1.done && (_a = erasures_1.return)) _a.call(erasures_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n var syndrome = new ModulusPoly(this.field, S);\n // syndrome = syndrome.multiply(knownErrors);\n var sigmaOmega = this.runEuclideanAlgorithm(this.field.buildMonomial(numECCodewords, 1), syndrome, numECCodewords);\n var sigma = sigmaOmega[0];\n var omega = sigmaOmega[1];\n // sigma = sigma.multiply(knownErrors);\n var errorLocations = this.findErrorLocations(sigma);\n var errorMagnitudes = this.findErrorMagnitudes(omega, sigma, errorLocations);\n for (var i /*int*/ = 0; i < errorLocations.length; i++) {\n var position = received.length - 1 - this.field.log(errorLocations[i]);\n if (position < 0) {\n throw ChecksumException.getChecksumInstance();\n }\n received[position] = this.field.subtract(received[position], errorMagnitudes[i]);\n }\n return errorLocations.length;\n };\n /**\n *\n * @param ModulusPoly\n * @param a\n * @param ModulusPoly\n * @param b\n * @param int\n * @param R\n * @throws ChecksumException\n */\n ErrorCorrection.prototype.runEuclideanAlgorithm = function (a, b, R) {\n // Assume a's degree is >= b's\n if (a.getDegree() < b.getDegree()) {\n var temp = a;\n a = b;\n b = temp;\n }\n var rLast = a;\n var r = b;\n var tLast = this.field.getZero();\n var t = this.field.getOne();\n // Run Euclidean algorithm until r's degree is less than R/2\n while (r.getDegree() >= Math.round(R / 2)) {\n var rLastLast = rLast;\n var tLastLast = tLast;\n rLast = r;\n tLast = t;\n // Divide rLastLast by rLast, with quotient in q and remainder in r\n if (rLast.isZero()) {\n // Oops, Euclidean algorithm already terminated?\n throw ChecksumException.getChecksumInstance();\n }\n r = rLastLast;\n var q = this.field.getZero();\n var denominatorLeadingTerm = rLast.getCoefficient(rLast.getDegree());\n var dltInverse = this.field.inverse(denominatorLeadingTerm);\n while (r.getDegree() >= rLast.getDegree() && !r.isZero()) {\n var degreeDiff = r.getDegree() - rLast.getDegree();\n var scale = this.field.multiply(r.getCoefficient(r.getDegree()), dltInverse);\n q = q.add(this.field.buildMonomial(degreeDiff, scale));\n r = r.subtract(rLast.multiplyByMonomial(degreeDiff, scale));\n }\n t = q.multiply(tLast).subtract(tLastLast).negative();\n }\n var sigmaTildeAtZero = t.getCoefficient(0);\n if (sigmaTildeAtZero === 0) {\n throw ChecksumException.getChecksumInstance();\n }\n var inverse = this.field.inverse(sigmaTildeAtZero);\n var sigma = t.multiply(inverse);\n var omega = r.multiply(inverse);\n return [sigma, omega];\n };\n /**\n *\n * @param errorLocator\n * @throws ChecksumException\n */\n ErrorCorrection.prototype.findErrorLocations = function (errorLocator) {\n // This is a direct application of Chien's search\n var numErrors = errorLocator.getDegree();\n var result = new Int32Array(numErrors);\n var e = 0;\n for (var i /*int*/ = 1; i < this.field.getSize() && e < numErrors; i++) {\n if (errorLocator.evaluateAt(i) === 0) {\n result[e] = this.field.inverse(i);\n e++;\n }\n }\n if (e !== numErrors) {\n throw ChecksumException.getChecksumInstance();\n }\n return result;\n };\n ErrorCorrection.prototype.findErrorMagnitudes = function (errorEvaluator, errorLocator, errorLocations) {\n var errorLocatorDegree = errorLocator.getDegree();\n var formalDerivativeCoefficients = new Int32Array(errorLocatorDegree);\n for (var i /*int*/ = 1; i <= errorLocatorDegree; i++) {\n formalDerivativeCoefficients[errorLocatorDegree - i] =\n this.field.multiply(i, errorLocator.getCoefficient(i));\n }\n var formalDerivative = new ModulusPoly(this.field, formalDerivativeCoefficients);\n // This is directly applying Forney's Formula\n var s = errorLocations.length;\n var result = new Int32Array(s);\n for (var i /*int*/ = 0; i < s; i++) {\n var xiInverse = this.field.inverse(errorLocations[i]);\n var numerator = this.field.subtract(0, errorEvaluator.evaluateAt(xiInverse));\n var denominator = this.field.inverse(formalDerivative.evaluateAt(xiInverse));\n result[i] = this.field.multiply(numerator, denominator);\n }\n return result;\n };\n return ErrorCorrection;\n}());\nexport default ErrorCorrection;\n","/*\n* Copyright 2013 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n// package com.google.zxing.pdf417.decoder;\n// import com.google.zxing.NotFoundException;\nimport NotFoundException from '../../NotFoundException';\n// import com.google.zxing.ResultPoint;\nimport ResultPoint from '../../ResultPoint';\n/**\n * @author Guenther Grau\n */\nvar BoundingBox = /** @class */ (function () {\n function BoundingBox(image, topLeft, bottomLeft, topRight, bottomRight) {\n if (image instanceof BoundingBox) {\n this.constructor_2(image);\n }\n else {\n this.constructor_1(image, topLeft, bottomLeft, topRight, bottomRight);\n }\n }\n /**\n *\n * @param image\n * @param topLeft\n * @param bottomLeft\n * @param topRight\n * @param bottomRight\n *\n * @throws NotFoundException\n */\n BoundingBox.prototype.constructor_1 = function (image, topLeft, bottomLeft, topRight, bottomRight) {\n var leftUnspecified = topLeft == null || bottomLeft == null;\n var rightUnspecified = topRight == null || bottomRight == null;\n if (leftUnspecified && rightUnspecified) {\n throw new NotFoundException();\n }\n if (leftUnspecified) {\n topLeft = new ResultPoint(0, topRight.getY());\n bottomLeft = new ResultPoint(0, bottomRight.getY());\n }\n else if (rightUnspecified) {\n topRight = new ResultPoint(image.getWidth() - 1, topLeft.getY());\n bottomRight = new ResultPoint(image.getWidth() - 1, bottomLeft.getY());\n }\n this.image = image;\n this.topLeft = topLeft;\n this.bottomLeft = bottomLeft;\n this.topRight = topRight;\n this.bottomRight = bottomRight;\n this.minX = Math.trunc(Math.min(topLeft.getX(), bottomLeft.getX()));\n this.maxX = Math.trunc(Math.max(topRight.getX(), bottomRight.getX()));\n this.minY = Math.trunc(Math.min(topLeft.getY(), topRight.getY()));\n this.maxY = Math.trunc(Math.max(bottomLeft.getY(), bottomRight.getY()));\n };\n BoundingBox.prototype.constructor_2 = function (boundingBox) {\n this.image = boundingBox.image;\n this.topLeft = boundingBox.getTopLeft();\n this.bottomLeft = boundingBox.getBottomLeft();\n this.topRight = boundingBox.getTopRight();\n this.bottomRight = boundingBox.getBottomRight();\n this.minX = boundingBox.getMinX();\n this.maxX = boundingBox.getMaxX();\n this.minY = boundingBox.getMinY();\n this.maxY = boundingBox.getMaxY();\n };\n /**\n * @throws NotFoundException\n */\n BoundingBox.merge = function (leftBox, rightBox) {\n if (leftBox == null) {\n return rightBox;\n }\n if (rightBox == null) {\n return leftBox;\n }\n return new BoundingBox(leftBox.image, leftBox.topLeft, leftBox.bottomLeft, rightBox.topRight, rightBox.bottomRight);\n };\n /**\n * @throws NotFoundException\n */\n BoundingBox.prototype.addMissingRows = function (missingStartRows, missingEndRows, isLeft) {\n var newTopLeft = this.topLeft;\n var newBottomLeft = this.bottomLeft;\n var newTopRight = this.topRight;\n var newBottomRight = this.bottomRight;\n if (missingStartRows > 0) {\n var top_1 = isLeft ? this.topLeft : this.topRight;\n var newMinY = Math.trunc(top_1.getY() - missingStartRows);\n if (newMinY < 0) {\n newMinY = 0;\n }\n var newTop = new ResultPoint(top_1.getX(), newMinY);\n if (isLeft) {\n newTopLeft = newTop;\n }\n else {\n newTopRight = newTop;\n }\n }\n if (missingEndRows > 0) {\n var bottom = isLeft ? this.bottomLeft : this.bottomRight;\n var newMaxY = Math.trunc(bottom.getY() + missingEndRows);\n if (newMaxY >= this.image.getHeight()) {\n newMaxY = this.image.getHeight() - 1;\n }\n var newBottom = new ResultPoint(bottom.getX(), newMaxY);\n if (isLeft) {\n newBottomLeft = newBottom;\n }\n else {\n newBottomRight = newBottom;\n }\n }\n return new BoundingBox(this.image, newTopLeft, newBottomLeft, newTopRight, newBottomRight);\n };\n BoundingBox.prototype.getMinX = function () {\n return this.minX;\n };\n BoundingBox.prototype.getMaxX = function () {\n return this.maxX;\n };\n BoundingBox.prototype.getMinY = function () {\n return this.minY;\n };\n BoundingBox.prototype.getMaxY = function () {\n return this.maxY;\n };\n BoundingBox.prototype.getTopLeft = function () {\n return this.topLeft;\n };\n BoundingBox.prototype.getTopRight = function () {\n return this.topRight;\n };\n BoundingBox.prototype.getBottomLeft = function () {\n return this.bottomLeft;\n };\n BoundingBox.prototype.getBottomRight = function () {\n return this.bottomRight;\n };\n return BoundingBox;\n}());\nexport default BoundingBox;\n","/*\n * Copyright 2013 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// package com.google.zxing.pdf417.decoder;\n/**\n * @author Guenther Grau\n */\nvar BarcodeMetadata = /** @class */ (function () {\n function BarcodeMetadata(columnCount, rowCountUpperPart, rowCountLowerPart, errorCorrectionLevel) {\n this.columnCount = columnCount;\n this.errorCorrectionLevel = errorCorrectionLevel;\n this.rowCountUpperPart = rowCountUpperPart;\n this.rowCountLowerPart = rowCountLowerPart;\n this.rowCount = rowCountUpperPart + rowCountLowerPart;\n }\n BarcodeMetadata.prototype.getColumnCount = function () {\n return this.columnCount;\n };\n BarcodeMetadata.prototype.getErrorCorrectionLevel = function () {\n return this.errorCorrectionLevel;\n };\n BarcodeMetadata.prototype.getRowCount = function () {\n return this.rowCount;\n };\n BarcodeMetadata.prototype.getRowCountUpperPart = function () {\n return this.rowCountUpperPart;\n };\n BarcodeMetadata.prototype.getRowCountLowerPart = function () {\n return this.rowCountLowerPart;\n };\n return BarcodeMetadata;\n}());\nexport default BarcodeMetadata;\n","/**\n * Java Formatter class polyfill that works in the JS way.\n */\nvar Formatter = /** @class */ (function () {\n function Formatter() {\n this.buffer = '';\n }\n /**\n *\n * @see https://stackoverflow.com/a/13439711/4367683\n *\n * @param str\n * @param arr\n */\n Formatter.form = function (str, arr) {\n var i = -1;\n function callback(exp, p0, p1, p2, p3, p4) {\n if (exp === '%%')\n return '%';\n if (arr[++i] === undefined)\n return undefined;\n exp = p2 ? parseInt(p2.substr(1)) : undefined;\n var base = p3 ? parseInt(p3.substr(1)) : undefined;\n var val;\n switch (p4) {\n case 's':\n val = arr[i];\n break;\n case 'c':\n val = arr[i][0];\n break;\n case 'f':\n val = parseFloat(arr[i]).toFixed(exp);\n break;\n case 'p':\n val = parseFloat(arr[i]).toPrecision(exp);\n break;\n case 'e':\n val = parseFloat(arr[i]).toExponential(exp);\n break;\n case 'x':\n val = parseInt(arr[i]).toString(base ? base : 16);\n break;\n case 'd':\n val = parseFloat(parseInt(arr[i], base ? base : 10).toPrecision(exp)).toFixed(0);\n break;\n }\n val = typeof val === 'object' ? JSON.stringify(val) : (+val).toString(base);\n var size = parseInt(p1); /* padding size */\n var ch = p1 && (p1[0] + '') === '0' ? '0' : ' '; /* isnull? */\n while (val.length < size)\n val = p0 !== undefined ? val + ch : ch + val; /* isminus? */\n return val;\n }\n var regex = /%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g;\n return str.replace(regex, callback);\n };\n /**\n *\n * @param append The new string to append.\n * @param args Argumets values to be formated.\n */\n Formatter.prototype.format = function (append) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n this.buffer += Formatter.form(append, args);\n };\n /**\n * Returns the Formatter string value.\n */\n Formatter.prototype.toString = function () {\n return this.buffer;\n };\n return Formatter;\n}());\nexport default Formatter;\n","/*\n * Copyright 2013 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417.decoder;\n// import java.util.Formatter;\nimport Formatter from '../../util/Formatter';\nimport BoundingBox from './BoundingBox';\n/**\n * @author Guenther Grau\n */\nvar DetectionResultColumn = /** @class */ (function () {\n function DetectionResultColumn(boundingBox) {\n this.boundingBox = new BoundingBox(boundingBox);\n // this.codewords = new Codeword[boundingBox.getMaxY() - boundingBox.getMinY() + 1];\n this.codewords = new Array(boundingBox.getMaxY() - boundingBox.getMinY() + 1);\n }\n /*final*/ DetectionResultColumn.prototype.getCodewordNearby = function (imageRow) {\n var codeword = this.getCodeword(imageRow);\n if (codeword != null) {\n return codeword;\n }\n for (var i = 1; i < DetectionResultColumn.MAX_NEARBY_DISTANCE; i++) {\n var nearImageRow = this.imageRowToCodewordIndex(imageRow) - i;\n if (nearImageRow >= 0) {\n codeword = this.codewords[nearImageRow];\n if (codeword != null) {\n return codeword;\n }\n }\n nearImageRow = this.imageRowToCodewordIndex(imageRow) + i;\n if (nearImageRow < this.codewords.length) {\n codeword = this.codewords[nearImageRow];\n if (codeword != null) {\n return codeword;\n }\n }\n }\n return null;\n };\n /*final int*/ DetectionResultColumn.prototype.imageRowToCodewordIndex = function (imageRow) {\n return imageRow - this.boundingBox.getMinY();\n };\n /*final void*/ DetectionResultColumn.prototype.setCodeword = function (imageRow, codeword) {\n this.codewords[this.imageRowToCodewordIndex(imageRow)] = codeword;\n };\n /*final*/ DetectionResultColumn.prototype.getCodeword = function (imageRow) {\n return this.codewords[this.imageRowToCodewordIndex(imageRow)];\n };\n /*final*/ DetectionResultColumn.prototype.getBoundingBox = function () {\n return this.boundingBox;\n };\n /*final*/ DetectionResultColumn.prototype.getCodewords = function () {\n return this.codewords;\n };\n // @Override\n DetectionResultColumn.prototype.toString = function () {\n var e_1, _a;\n var formatter = new Formatter();\n var row = 0;\n try {\n for (var _b = __values(this.codewords), _c = _b.next(); !_c.done; _c = _b.next()) {\n var codeword = _c.value;\n if (codeword == null) {\n formatter.format('%3d: | %n', row++);\n continue;\n }\n formatter.format('%3d: %3d|%3d%n', row++, codeword.getRowNumber(), codeword.getValue());\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return formatter.toString();\n };\n DetectionResultColumn.MAX_NEARBY_DISTANCE = 5;\n return DetectionResultColumn;\n}());\nexport default DetectionResultColumn;\n","/*\n * Copyright 2013 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\n// package com.google.zxing.pdf417.decoder;\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../PDF417Common';\n// import java.util.ArrayList;\n// import java.util.Collection;\n// import java.util.HashMap;\n// import java.util.Map;\n// import java.util.Map.Entry;\n/**\n * @author Guenther Grau\n */\nvar BarcodeValue = /** @class */ (function () {\n function BarcodeValue() {\n this.values = new Map();\n }\n /**\n * Add an occurrence of a value\n */\n BarcodeValue.prototype.setValue = function (value) {\n value = Math.trunc(value);\n var confidence = this.values.get(value);\n if (confidence == null) {\n confidence = 0;\n }\n confidence++;\n this.values.set(value, confidence);\n };\n /**\n * Determines the maximum occurrence of a set value and returns all values which were set with this occurrence.\n * @return an array of int, containing the values with the highest occurrence, or null, if no value was set\n */\n BarcodeValue.prototype.getValue = function () {\n var e_1, _a;\n var maxConfidence = -1;\n var result = new Array();\n var _loop_1 = function (key, value) {\n var entry = {\n getKey: function () { return key; },\n getValue: function () { return value; },\n };\n if (entry.getValue() > maxConfidence) {\n maxConfidence = entry.getValue();\n result = [];\n result.push(entry.getKey());\n }\n else if (entry.getValue() === maxConfidence) {\n result.push(entry.getKey());\n }\n };\n try {\n for (var _b = __values(this.values.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n _loop_1(key, value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return PDF417Common.toIntArray(result);\n };\n BarcodeValue.prototype.getConfidence = function (value) {\n return this.values.get(value);\n };\n return BarcodeValue;\n}());\nexport default BarcodeValue;\n","/*\n * Copyright 2013 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../PDF417Common';\nimport BarcodeMetadata from './BarcodeMetadata';\nimport DetectionResultColumn from './DetectionResultColumn';\nimport BarcodeValue from './BarcodeValue';\n/**\n * @author Guenther Grau\n */\nvar DetectionResultRowIndicatorColumn = /** @class */ (function (_super) {\n __extends(DetectionResultRowIndicatorColumn, _super);\n function DetectionResultRowIndicatorColumn(boundingBox, isLeft) {\n var _this = _super.call(this, boundingBox) || this;\n _this._isLeft = isLeft;\n return _this;\n }\n DetectionResultRowIndicatorColumn.prototype.setRowNumbers = function () {\n var e_1, _a;\n try {\n for (var _b = __values(this.getCodewords()), _c = _b.next(); !_c.done; _c = _b.next()) {\n var codeword = _c.value /*Codeword*/;\n if (codeword != null) {\n codeword.setRowNumberAsRowIndicatorColumn();\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n // TODO implement properly\n // TODO maybe we should add missing codewords to store the correct row number to make\n // finding row numbers for other columns easier\n // use row height count to make detection of invalid row numbers more reliable\n DetectionResultRowIndicatorColumn.prototype.adjustCompleteIndicatorColumnRowNumbers = function (barcodeMetadata) {\n var codewords = this.getCodewords();\n this.setRowNumbers();\n this.removeIncorrectCodewords(codewords, barcodeMetadata);\n var boundingBox = this.getBoundingBox();\n var top = this._isLeft ? boundingBox.getTopLeft() : boundingBox.getTopRight();\n var bottom = this._isLeft ? boundingBox.getBottomLeft() : boundingBox.getBottomRight();\n var firstRow = this.imageRowToCodewordIndex(Math.trunc(top.getY()));\n var lastRow = this.imageRowToCodewordIndex(Math.trunc(bottom.getY()));\n // We need to be careful using the average row height. Barcode could be skewed so that we have smaller and\n // taller rows\n // float averageRowHeight = (lastRow - firstRow) / /*(float)*/ barcodeMetadata.getRowCount();\n var barcodeRow = -1;\n var maxRowHeight = 1;\n var currentRowHeight = 0;\n for (var codewordsRow /*int*/ = firstRow; codewordsRow < lastRow; codewordsRow++) {\n if (codewords[codewordsRow] == null) {\n continue;\n }\n var codeword = codewords[codewordsRow];\n // float expectedRowNumber = (codewordsRow - firstRow) / averageRowHeight;\n // if (Math.abs(codeword.getRowNumber() - expectedRowNumber) > 2) {\n // SimpleLog.log(LEVEL.WARNING,\n // \"Removing codeword, rowNumberSkew too high, codeword[\" + codewordsRow + \"]: Expected Row: \" +\n // expectedRowNumber + \", RealRow: \" + codeword.getRowNumber() + \", value: \" + codeword.getValue());\n // codewords[codewordsRow] = null;\n // }\n var rowDifference = codeword.getRowNumber() - barcodeRow;\n // TODO improve handling with case where first row indicator doesn't start with 0\n if (rowDifference === 0) {\n currentRowHeight++;\n }\n else if (rowDifference === 1) {\n maxRowHeight = Math.max(maxRowHeight, currentRowHeight);\n currentRowHeight = 1;\n barcodeRow = codeword.getRowNumber();\n }\n else if (rowDifference < 0 ||\n codeword.getRowNumber() >= barcodeMetadata.getRowCount() ||\n rowDifference > codewordsRow) {\n codewords[codewordsRow] = null;\n }\n else {\n var checkedRows = void 0;\n if (maxRowHeight > 2) {\n checkedRows = (maxRowHeight - 2) * rowDifference;\n }\n else {\n checkedRows = rowDifference;\n }\n var closePreviousCodewordFound = checkedRows >= codewordsRow;\n for (var i /*int*/ = 1; i <= checkedRows && !closePreviousCodewordFound; i++) {\n // there must be (height * rowDifference) number of codewords missing. For now we assume height = 1.\n // This should hopefully get rid of most problems already.\n closePreviousCodewordFound = codewords[codewordsRow - i] != null;\n }\n if (closePreviousCodewordFound) {\n codewords[codewordsRow] = null;\n }\n else {\n barcodeRow = codeword.getRowNumber();\n currentRowHeight = 1;\n }\n }\n }\n // return (int) (averageRowHeight + 0.5);\n };\n DetectionResultRowIndicatorColumn.prototype.getRowHeights = function () {\n var e_2, _a;\n var barcodeMetadata = this.getBarcodeMetadata();\n if (barcodeMetadata == null) {\n return null;\n }\n this.adjustIncompleteIndicatorColumnRowNumbers(barcodeMetadata);\n var result = new Int32Array(barcodeMetadata.getRowCount());\n try {\n for (var _b = __values(this.getCodewords()), _c = _b.next(); !_c.done; _c = _b.next()) {\n var codeword = _c.value /*Codeword*/;\n if (codeword != null) {\n var rowNumber = codeword.getRowNumber();\n if (rowNumber >= result.length) {\n // We have more rows than the barcode metadata allows for, ignore them.\n continue;\n }\n result[rowNumber]++;\n } // else throw exception?\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return result;\n };\n // TODO maybe we should add missing codewords to store the correct row number to make\n // finding row numbers for other columns easier\n // use row height count to make detection of invalid row numbers more reliable\n DetectionResultRowIndicatorColumn.prototype.adjustIncompleteIndicatorColumnRowNumbers = function (barcodeMetadata) {\n var boundingBox = this.getBoundingBox();\n var top = this._isLeft ? boundingBox.getTopLeft() : boundingBox.getTopRight();\n var bottom = this._isLeft ? boundingBox.getBottomLeft() : boundingBox.getBottomRight();\n var firstRow = this.imageRowToCodewordIndex(Math.trunc(top.getY()));\n var lastRow = this.imageRowToCodewordIndex(Math.trunc(bottom.getY()));\n // float averageRowHeight = (lastRow - firstRow) / /*(float)*/ barcodeMetadata.getRowCount();\n var codewords = this.getCodewords();\n var barcodeRow = -1;\n var maxRowHeight = 1;\n var currentRowHeight = 0;\n for (var codewordsRow /*int*/ = firstRow; codewordsRow < lastRow; codewordsRow++) {\n if (codewords[codewordsRow] == null) {\n continue;\n }\n var codeword = codewords[codewordsRow];\n codeword.setRowNumberAsRowIndicatorColumn();\n var rowDifference = codeword.getRowNumber() - barcodeRow;\n // TODO improve handling with case where first row indicator doesn't start with 0\n if (rowDifference === 0) {\n currentRowHeight++;\n }\n else if (rowDifference === 1) {\n maxRowHeight = Math.max(maxRowHeight, currentRowHeight);\n currentRowHeight = 1;\n barcodeRow = codeword.getRowNumber();\n }\n else if (codeword.getRowNumber() >= barcodeMetadata.getRowCount()) {\n codewords[codewordsRow] = null;\n }\n else {\n barcodeRow = codeword.getRowNumber();\n currentRowHeight = 1;\n }\n }\n // return (int) (averageRowHeight + 0.5);\n };\n DetectionResultRowIndicatorColumn.prototype.getBarcodeMetadata = function () {\n var e_3, _a;\n var codewords = this.getCodewords();\n var barcodeColumnCount = new BarcodeValue();\n var barcodeRowCountUpperPart = new BarcodeValue();\n var barcodeRowCountLowerPart = new BarcodeValue();\n var barcodeECLevel = new BarcodeValue();\n try {\n for (var codewords_1 = __values(codewords), codewords_1_1 = codewords_1.next(); !codewords_1_1.done; codewords_1_1 = codewords_1.next()) {\n var codeword = codewords_1_1.value /*Codeword*/;\n if (codeword == null) {\n continue;\n }\n codeword.setRowNumberAsRowIndicatorColumn();\n var rowIndicatorValue = codeword.getValue() % 30;\n var codewordRowNumber = codeword.getRowNumber();\n if (!this._isLeft) {\n codewordRowNumber += 2;\n }\n switch (codewordRowNumber % 3) {\n case 0:\n barcodeRowCountUpperPart.setValue(rowIndicatorValue * 3 + 1);\n break;\n case 1:\n barcodeECLevel.setValue(rowIndicatorValue / 3);\n barcodeRowCountLowerPart.setValue(rowIndicatorValue % 3);\n break;\n case 2:\n barcodeColumnCount.setValue(rowIndicatorValue + 1);\n break;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (codewords_1_1 && !codewords_1_1.done && (_a = codewords_1.return)) _a.call(codewords_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n // Maybe we should check if we have ambiguous values?\n if ((barcodeColumnCount.getValue().length === 0) ||\n (barcodeRowCountUpperPart.getValue().length === 0) ||\n (barcodeRowCountLowerPart.getValue().length === 0) ||\n (barcodeECLevel.getValue().length === 0) ||\n barcodeColumnCount.getValue()[0] < 1 ||\n barcodeRowCountUpperPart.getValue()[0] + barcodeRowCountLowerPart.getValue()[0] < PDF417Common.MIN_ROWS_IN_BARCODE ||\n barcodeRowCountUpperPart.getValue()[0] + barcodeRowCountLowerPart.getValue()[0] > PDF417Common.MAX_ROWS_IN_BARCODE) {\n return null;\n }\n var barcodeMetadata = new BarcodeMetadata(barcodeColumnCount.getValue()[0], barcodeRowCountUpperPart.getValue()[0], barcodeRowCountLowerPart.getValue()[0], barcodeECLevel.getValue()[0]);\n this.removeIncorrectCodewords(codewords, barcodeMetadata);\n return barcodeMetadata;\n };\n DetectionResultRowIndicatorColumn.prototype.removeIncorrectCodewords = function (codewords, barcodeMetadata) {\n // Remove codewords which do not match the metadata\n // TODO Maybe we should keep the incorrect codewords for the start and end positions?\n for (var codewordRow /*int*/ = 0; codewordRow < codewords.length; codewordRow++) {\n var codeword = codewords[codewordRow];\n if (codewords[codewordRow] == null) {\n continue;\n }\n var rowIndicatorValue = codeword.getValue() % 30;\n var codewordRowNumber = codeword.getRowNumber();\n if (codewordRowNumber > barcodeMetadata.getRowCount()) {\n codewords[codewordRow] = null;\n continue;\n }\n if (!this._isLeft) {\n codewordRowNumber += 2;\n }\n switch (codewordRowNumber % 3) {\n case 0:\n if (rowIndicatorValue * 3 + 1 !== barcodeMetadata.getRowCountUpperPart()) {\n codewords[codewordRow] = null;\n }\n break;\n case 1:\n if (Math.trunc(rowIndicatorValue / 3) !== barcodeMetadata.getErrorCorrectionLevel() ||\n rowIndicatorValue % 3 !== barcodeMetadata.getRowCountLowerPart()) {\n codewords[codewordRow] = null;\n }\n break;\n case 2:\n if (rowIndicatorValue + 1 !== barcodeMetadata.getColumnCount()) {\n codewords[codewordRow] = null;\n }\n break;\n }\n }\n };\n DetectionResultRowIndicatorColumn.prototype.isLeft = function () {\n return this._isLeft;\n };\n // @Override\n DetectionResultRowIndicatorColumn.prototype.toString = function () {\n return 'IsLeft: ' + this._isLeft + '\\n' + _super.prototype.toString.call(this);\n };\n return DetectionResultRowIndicatorColumn;\n}(DetectionResultColumn));\nexport default DetectionResultRowIndicatorColumn;\n","/*\n * Copyright 2013 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417.decoder;\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../PDF417Common';\nimport Formatter from '../../util/Formatter';\n/**\n * @author Guenther Grau\n */\nvar DetectionResult = /** @class */ (function () {\n function DetectionResult(barcodeMetadata, boundingBox) {\n /*final*/ this.ADJUST_ROW_NUMBER_SKIP = 2;\n this.barcodeMetadata = barcodeMetadata;\n this.barcodeColumnCount = barcodeMetadata.getColumnCount();\n this.boundingBox = boundingBox;\n // this.detectionResultColumns = new DetectionResultColumn[this.barcodeColumnCount + 2];\n this.detectionResultColumns = new Array(this.barcodeColumnCount + 2);\n }\n DetectionResult.prototype.getDetectionResultColumns = function () {\n this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]);\n this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount + 1]);\n var unadjustedCodewordCount = PDF417Common.MAX_CODEWORDS_IN_BARCODE;\n var previousUnadjustedCount;\n do {\n previousUnadjustedCount = unadjustedCodewordCount;\n unadjustedCodewordCount = this.adjustRowNumbersAndGetCount();\n } while (unadjustedCodewordCount > 0 && unadjustedCodewordCount < previousUnadjustedCount);\n return this.detectionResultColumns;\n };\n DetectionResult.prototype.adjustIndicatorColumnRowNumbers = function (detectionResultColumn) {\n if (detectionResultColumn != null) {\n detectionResultColumn\n .adjustCompleteIndicatorColumnRowNumbers(this.barcodeMetadata);\n }\n };\n // TODO ensure that no detected codewords with unknown row number are left\n // we should be able to estimate the row height and use it as a hint for the row number\n // we should also fill the rows top to bottom and bottom to top\n /**\n * @return number of codewords which don't have a valid row number. Note that the count is not accurate as codewords\n * will be counted several times. It just serves as an indicator to see when we can stop adjusting row numbers\n */\n DetectionResult.prototype.adjustRowNumbersAndGetCount = function () {\n var unadjustedCount = this.adjustRowNumbersByRow();\n if (unadjustedCount === 0) {\n return 0;\n }\n for (var barcodeColumn /*int*/ = 1; barcodeColumn < this.barcodeColumnCount + 1; barcodeColumn++) {\n var codewords = this.detectionResultColumns[barcodeColumn].getCodewords();\n for (var codewordsRow /*int*/ = 0; codewordsRow < codewords.length; codewordsRow++) {\n if (codewords[codewordsRow] == null) {\n continue;\n }\n if (!codewords[codewordsRow].hasValidRowNumber()) {\n this.adjustRowNumbers(barcodeColumn, codewordsRow, codewords);\n }\n }\n }\n return unadjustedCount;\n };\n DetectionResult.prototype.adjustRowNumbersByRow = function () {\n this.adjustRowNumbersFromBothRI();\n // TODO we should only do full row adjustments if row numbers of left and right row indicator column match.\n // Maybe it's even better to calculated the height (rows: d) and divide it by the number of barcode\n // rows. This, together with the LRI and RRI row numbers should allow us to get a good estimate where a row\n // number starts and ends.\n var unadjustedCount = this.adjustRowNumbersFromLRI();\n return unadjustedCount + this.adjustRowNumbersFromRRI();\n };\n DetectionResult.prototype.adjustRowNumbersFromBothRI = function () {\n if (this.detectionResultColumns[0] == null || this.detectionResultColumns[this.barcodeColumnCount + 1] == null) {\n return;\n }\n var LRIcodewords = this.detectionResultColumns[0].getCodewords();\n var RRIcodewords = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\n for (var codewordsRow /*int*/ = 0; codewordsRow < LRIcodewords.length; codewordsRow++) {\n if (LRIcodewords[codewordsRow] != null &&\n RRIcodewords[codewordsRow] != null &&\n LRIcodewords[codewordsRow].getRowNumber() === RRIcodewords[codewordsRow].getRowNumber()) {\n for (var barcodeColumn /*int*/ = 1; barcodeColumn <= this.barcodeColumnCount; barcodeColumn++) {\n var codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n if (codeword == null) {\n continue;\n }\n codeword.setRowNumber(LRIcodewords[codewordsRow].getRowNumber());\n if (!codeword.hasValidRowNumber()) {\n this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow] = null;\n }\n }\n }\n }\n };\n DetectionResult.prototype.adjustRowNumbersFromRRI = function () {\n if (this.detectionResultColumns[this.barcodeColumnCount + 1] == null) {\n return 0;\n }\n var unadjustedCount = 0;\n var codewords = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\n for (var codewordsRow /*int*/ = 0; codewordsRow < codewords.length; codewordsRow++) {\n if (codewords[codewordsRow] == null) {\n continue;\n }\n var rowIndicatorRowNumber = codewords[codewordsRow].getRowNumber();\n var invalidRowCounts = 0;\n for (var barcodeColumn /*int*/ = this.barcodeColumnCount + 1; barcodeColumn > 0 && invalidRowCounts < this.ADJUST_ROW_NUMBER_SKIP; barcodeColumn--) {\n var codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n if (codeword != null) {\n invalidRowCounts = DetectionResult.adjustRowNumberIfValid(rowIndicatorRowNumber, invalidRowCounts, codeword);\n if (!codeword.hasValidRowNumber()) {\n unadjustedCount++;\n }\n }\n }\n }\n return unadjustedCount;\n };\n DetectionResult.prototype.adjustRowNumbersFromLRI = function () {\n if (this.detectionResultColumns[0] == null) {\n return 0;\n }\n var unadjustedCount = 0;\n var codewords = this.detectionResultColumns[0].getCodewords();\n for (var codewordsRow /*int*/ = 0; codewordsRow < codewords.length; codewordsRow++) {\n if (codewords[codewordsRow] == null) {\n continue;\n }\n var rowIndicatorRowNumber = codewords[codewordsRow].getRowNumber();\n var invalidRowCounts = 0;\n for (var barcodeColumn /*int*/ = 1; barcodeColumn < this.barcodeColumnCount + 1 && invalidRowCounts < this.ADJUST_ROW_NUMBER_SKIP; barcodeColumn++) {\n var codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n if (codeword != null) {\n invalidRowCounts = DetectionResult.adjustRowNumberIfValid(rowIndicatorRowNumber, invalidRowCounts, codeword);\n if (!codeword.hasValidRowNumber()) {\n unadjustedCount++;\n }\n }\n }\n }\n return unadjustedCount;\n };\n DetectionResult.adjustRowNumberIfValid = function (rowIndicatorRowNumber, invalidRowCounts, codeword) {\n if (codeword == null) {\n return invalidRowCounts;\n }\n if (!codeword.hasValidRowNumber()) {\n if (codeword.isValidRowNumber(rowIndicatorRowNumber)) {\n codeword.setRowNumber(rowIndicatorRowNumber);\n invalidRowCounts = 0;\n }\n else {\n ++invalidRowCounts;\n }\n }\n return invalidRowCounts;\n };\n DetectionResult.prototype.adjustRowNumbers = function (barcodeColumn, codewordsRow, codewords) {\n var e_1, _a;\n if (this.detectionResultColumns[barcodeColumn - 1] == null) {\n return;\n }\n var codeword = codewords[codewordsRow];\n var previousColumnCodewords = this.detectionResultColumns[barcodeColumn - 1].getCodewords();\n var nextColumnCodewords = previousColumnCodewords;\n if (this.detectionResultColumns[barcodeColumn + 1] != null) {\n nextColumnCodewords = this.detectionResultColumns[barcodeColumn + 1].getCodewords();\n }\n // let otherCodewords: Codeword[] = new Codeword[14];\n var otherCodewords = new Array(14);\n otherCodewords[2] = previousColumnCodewords[codewordsRow];\n otherCodewords[3] = nextColumnCodewords[codewordsRow];\n if (codewordsRow > 0) {\n otherCodewords[0] = codewords[codewordsRow - 1];\n otherCodewords[4] = previousColumnCodewords[codewordsRow - 1];\n otherCodewords[5] = nextColumnCodewords[codewordsRow - 1];\n }\n if (codewordsRow > 1) {\n otherCodewords[8] = codewords[codewordsRow - 2];\n otherCodewords[10] = previousColumnCodewords[codewordsRow - 2];\n otherCodewords[11] = nextColumnCodewords[codewordsRow - 2];\n }\n if (codewordsRow < codewords.length - 1) {\n otherCodewords[1] = codewords[codewordsRow + 1];\n otherCodewords[6] = previousColumnCodewords[codewordsRow + 1];\n otherCodewords[7] = nextColumnCodewords[codewordsRow + 1];\n }\n if (codewordsRow < codewords.length - 2) {\n otherCodewords[9] = codewords[codewordsRow + 2];\n otherCodewords[12] = previousColumnCodewords[codewordsRow + 2];\n otherCodewords[13] = nextColumnCodewords[codewordsRow + 2];\n }\n try {\n for (var otherCodewords_1 = __values(otherCodewords), otherCodewords_1_1 = otherCodewords_1.next(); !otherCodewords_1_1.done; otherCodewords_1_1 = otherCodewords_1.next()) {\n var otherCodeword = otherCodewords_1_1.value;\n if (DetectionResult.adjustRowNumber(codeword, otherCodeword)) {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (otherCodewords_1_1 && !otherCodewords_1_1.done && (_a = otherCodewords_1.return)) _a.call(otherCodewords_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n /**\n * @return true, if row number was adjusted, false otherwise\n */\n DetectionResult.adjustRowNumber = function (codeword, otherCodeword) {\n if (otherCodeword == null) {\n return false;\n }\n if (otherCodeword.hasValidRowNumber() && otherCodeword.getBucket() === codeword.getBucket()) {\n codeword.setRowNumber(otherCodeword.getRowNumber());\n return true;\n }\n return false;\n };\n DetectionResult.prototype.getBarcodeColumnCount = function () {\n return this.barcodeColumnCount;\n };\n DetectionResult.prototype.getBarcodeRowCount = function () {\n return this.barcodeMetadata.getRowCount();\n };\n DetectionResult.prototype.getBarcodeECLevel = function () {\n return this.barcodeMetadata.getErrorCorrectionLevel();\n };\n DetectionResult.prototype.setBoundingBox = function (boundingBox) {\n this.boundingBox = boundingBox;\n };\n DetectionResult.prototype.getBoundingBox = function () {\n return this.boundingBox;\n };\n DetectionResult.prototype.setDetectionResultColumn = function (barcodeColumn, detectionResultColumn) {\n this.detectionResultColumns[barcodeColumn] = detectionResultColumn;\n };\n DetectionResult.prototype.getDetectionResultColumn = function (barcodeColumn) {\n return this.detectionResultColumns[barcodeColumn];\n };\n // @Override\n DetectionResult.prototype.toString = function () {\n var rowIndicatorColumn = this.detectionResultColumns[0];\n if (rowIndicatorColumn == null) {\n rowIndicatorColumn = this.detectionResultColumns[this.barcodeColumnCount + 1];\n }\n // try (\n var formatter = new Formatter();\n // ) {\n for (var codewordsRow /*int*/ = 0; codewordsRow < rowIndicatorColumn.getCodewords().length; codewordsRow++) {\n formatter.format('CW %3d:', codewordsRow);\n for (var barcodeColumn /*int*/ = 0; barcodeColumn < this.barcodeColumnCount + 2; barcodeColumn++) {\n if (this.detectionResultColumns[barcodeColumn] == null) {\n formatter.format(' | ');\n continue;\n }\n var codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n if (codeword == null) {\n formatter.format(' | ');\n continue;\n }\n formatter.format(' %3d|%3d', codeword.getRowNumber(), codeword.getValue());\n }\n formatter.format('%n');\n }\n return formatter.toString();\n // }\n };\n return DetectionResult;\n}());\nexport default DetectionResult;\n","/*\n * Copyright 2013 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// package com.google.zxing.pdf417.decoder;\n/**\n * @author Guenther Grau\n */\nvar Codeword = /** @class */ (function () {\n function Codeword(startX, endX, bucket, value) {\n this.rowNumber = Codeword.BARCODE_ROW_UNKNOWN;\n this.startX = Math.trunc(startX);\n this.endX = Math.trunc(endX);\n this.bucket = Math.trunc(bucket);\n this.value = Math.trunc(value);\n }\n Codeword.prototype.hasValidRowNumber = function () {\n return this.isValidRowNumber(this.rowNumber);\n };\n Codeword.prototype.isValidRowNumber = function (rowNumber) {\n return rowNumber !== Codeword.BARCODE_ROW_UNKNOWN && this.bucket === (rowNumber % 3) * 3;\n };\n Codeword.prototype.setRowNumberAsRowIndicatorColumn = function () {\n this.rowNumber = Math.trunc((Math.trunc(this.value / 30)) * 3 + Math.trunc(this.bucket / 3));\n };\n Codeword.prototype.getWidth = function () {\n return this.endX - this.startX;\n };\n Codeword.prototype.getStartX = function () {\n return this.startX;\n };\n Codeword.prototype.getEndX = function () {\n return this.endX;\n };\n Codeword.prototype.getBucket = function () {\n return this.bucket;\n };\n Codeword.prototype.getValue = function () {\n return this.value;\n };\n Codeword.prototype.getRowNumber = function () {\n return this.rowNumber;\n };\n Codeword.prototype.setRowNumber = function (rowNumber) {\n this.rowNumber = rowNumber;\n };\n // @Override\n Codeword.prototype.toString = function () {\n return this.rowNumber + '|' + this.value;\n };\n Codeword.BARCODE_ROW_UNKNOWN = -1;\n return Codeword;\n}());\nexport default Codeword;\n","/*\n* Copyright 2013 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n// package com.google.zxing.pdf417.decoder;\n// import com.google.zxing.common.detector.MathUtils;\nimport MathUtils from '../../common/detector/MathUtils';\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../PDF417Common';\nimport Float from '../../util/Float';\n/**\n * @author Guenther Grau\n * @author creatale GmbH (christoph.schulz@creatale.de)\n */\nvar PDF417CodewordDecoder = /** @class */ (function () {\n function PDF417CodewordDecoder() {\n }\n /* @note\n * this action have to be performed before first use of class\n * - static constructor\n * working with 32bit float (based from Java logic)\n */\n PDF417CodewordDecoder.initialize = function () {\n // Pre-computes the symbol ratio table.\n for ( /*int*/var i = 0; i < PDF417Common.SYMBOL_TABLE.length; i++) {\n var currentSymbol = PDF417Common.SYMBOL_TABLE[i];\n var currentBit = currentSymbol & 0x1;\n for ( /*int*/var j = 0; j < PDF417Common.BARS_IN_MODULE; j++) {\n var size = 0.0;\n while ((currentSymbol & 0x1) === currentBit) {\n size += 1.0;\n currentSymbol >>= 1;\n }\n currentBit = currentSymbol & 0x1;\n if (!PDF417CodewordDecoder.RATIOS_TABLE[i]) {\n PDF417CodewordDecoder.RATIOS_TABLE[i] = new Array(PDF417Common.BARS_IN_MODULE);\n }\n PDF417CodewordDecoder.RATIOS_TABLE[i][PDF417Common.BARS_IN_MODULE - j - 1] = Math.fround(size / PDF417Common.MODULES_IN_CODEWORD);\n }\n }\n this.bSymbolTableReady = true;\n };\n PDF417CodewordDecoder.getDecodedValue = function (moduleBitCount) {\n var decodedValue = PDF417CodewordDecoder.getDecodedCodewordValue(PDF417CodewordDecoder.sampleBitCounts(moduleBitCount));\n if (decodedValue !== -1) {\n return decodedValue;\n }\n return PDF417CodewordDecoder.getClosestDecodedValue(moduleBitCount);\n };\n PDF417CodewordDecoder.sampleBitCounts = function (moduleBitCount) {\n var bitCountSum = MathUtils.sum(moduleBitCount);\n var result = new Int32Array(PDF417Common.BARS_IN_MODULE);\n var bitCountIndex = 0;\n var sumPreviousBits = 0;\n for ( /*int*/var i = 0; i < PDF417Common.MODULES_IN_CODEWORD; i++) {\n var sampleIndex = bitCountSum / (2 * PDF417Common.MODULES_IN_CODEWORD) +\n (i * bitCountSum) / PDF417Common.MODULES_IN_CODEWORD;\n if (sumPreviousBits + moduleBitCount[bitCountIndex] <= sampleIndex) {\n sumPreviousBits += moduleBitCount[bitCountIndex];\n bitCountIndex++;\n }\n result[bitCountIndex]++;\n }\n return result;\n };\n PDF417CodewordDecoder.getDecodedCodewordValue = function (moduleBitCount) {\n var decodedValue = PDF417CodewordDecoder.getBitValue(moduleBitCount);\n return PDF417Common.getCodeword(decodedValue) === -1 ? -1 : decodedValue;\n };\n PDF417CodewordDecoder.getBitValue = function (moduleBitCount) {\n var result = /*long*/ 0;\n for (var /*int*/ i = 0; i < moduleBitCount.length; i++) {\n for ( /*int*/var bit = 0; bit < moduleBitCount[i]; bit++) {\n result = (result << 1) | (i % 2 === 0 ? 1 : 0);\n }\n }\n return Math.trunc(result);\n };\n // working with 32bit float (as in Java)\n PDF417CodewordDecoder.getClosestDecodedValue = function (moduleBitCount) {\n var bitCountSum = MathUtils.sum(moduleBitCount);\n var bitCountRatios = new Array(PDF417Common.BARS_IN_MODULE);\n if (bitCountSum > 1) {\n for (var /*int*/ i = 0; i < bitCountRatios.length; i++) {\n bitCountRatios[i] = Math.fround(moduleBitCount[i] / bitCountSum);\n }\n }\n var bestMatchError = Float.MAX_VALUE;\n var bestMatch = -1;\n if (!this.bSymbolTableReady) {\n PDF417CodewordDecoder.initialize();\n }\n for ( /*int*/var j = 0; j < PDF417CodewordDecoder.RATIOS_TABLE.length; j++) {\n var error = 0.0;\n var ratioTableRow = PDF417CodewordDecoder.RATIOS_TABLE[j];\n for ( /*int*/var k = 0; k < PDF417Common.BARS_IN_MODULE; k++) {\n var diff = Math.fround(ratioTableRow[k] - bitCountRatios[k]);\n error += Math.fround(diff * diff);\n if (error >= bestMatchError) {\n break;\n }\n }\n if (error < bestMatchError) {\n bestMatchError = error;\n bestMatch = PDF417Common.SYMBOL_TABLE[j];\n }\n }\n return bestMatch;\n };\n // flag that the table is ready for use\n PDF417CodewordDecoder.bSymbolTableReady = false;\n PDF417CodewordDecoder.RATIOS_TABLE = new Array(PDF417Common.SYMBOL_TABLE.length).map(function (x) { return x = new Array(PDF417Common.BARS_IN_MODULE); });\n return PDF417CodewordDecoder;\n}());\nexport default PDF417CodewordDecoder;\n","/*\n * Copyright 2013 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// package com.google.zxing.pdf417;\n/**\n * @author Guenther Grau\n */\nvar PDF417ResultMetadata = /** @class */ (function () {\n function PDF417ResultMetadata() {\n this.segmentCount = -1;\n this.fileSize = -1;\n this.timestamp = -1;\n this.checksum = -1;\n }\n /**\n * The Segment ID represents the segment of the whole file distributed over different symbols.\n *\n * @return File segment index\n */\n PDF417ResultMetadata.prototype.getSegmentIndex = function () {\n return this.segmentIndex;\n };\n PDF417ResultMetadata.prototype.setSegmentIndex = function (segmentIndex) {\n this.segmentIndex = segmentIndex;\n };\n /**\n * Is the same for each related PDF417 symbol\n *\n * @return File ID\n */\n PDF417ResultMetadata.prototype.getFileId = function () {\n return this.fileId;\n };\n PDF417ResultMetadata.prototype.setFileId = function (fileId) {\n this.fileId = fileId;\n };\n /**\n * @return always null\n * @deprecated use dedicated already parsed fields\n */\n // @Deprecated\n PDF417ResultMetadata.prototype.getOptionalData = function () {\n return this.optionalData;\n };\n /**\n * @param optionalData old optional data format as int array\n * @deprecated parse and use new fields\n */\n // @Deprecated\n PDF417ResultMetadata.prototype.setOptionalData = function (optionalData) {\n this.optionalData = optionalData;\n };\n /**\n * @return true if it is the last segment\n */\n PDF417ResultMetadata.prototype.isLastSegment = function () {\n return this.lastSegment;\n };\n PDF417ResultMetadata.prototype.setLastSegment = function (lastSegment) {\n this.lastSegment = lastSegment;\n };\n /**\n * @return count of segments, -1 if not set\n */\n PDF417ResultMetadata.prototype.getSegmentCount = function () {\n return this.segmentCount;\n };\n PDF417ResultMetadata.prototype.setSegmentCount = function (segmentCount /*int*/) {\n this.segmentCount = segmentCount;\n };\n PDF417ResultMetadata.prototype.getSender = function () {\n return this.sender || null;\n };\n PDF417ResultMetadata.prototype.setSender = function (sender) {\n this.sender = sender;\n };\n PDF417ResultMetadata.prototype.getAddressee = function () {\n return this.addressee || null;\n };\n PDF417ResultMetadata.prototype.setAddressee = function (addressee) {\n this.addressee = addressee;\n };\n /**\n * Filename of the encoded file\n *\n * @return filename\n */\n PDF417ResultMetadata.prototype.getFileName = function () {\n return this.fileName;\n };\n PDF417ResultMetadata.prototype.setFileName = function (fileName) {\n this.fileName = fileName;\n };\n /**\n * filesize in bytes of the encoded file\n *\n * @return filesize in bytes, -1 if not set\n */\n PDF417ResultMetadata.prototype.getFileSize = function () {\n return this.fileSize;\n };\n PDF417ResultMetadata.prototype.setFileSize = function (fileSize /*long*/) {\n this.fileSize = fileSize;\n };\n /**\n * 16-bit CRC checksum using CCITT-16\n *\n * @return crc checksum, -1 if not set\n */\n PDF417ResultMetadata.prototype.getChecksum = function () {\n return this.checksum;\n };\n PDF417ResultMetadata.prototype.setChecksum = function (checksum /*int*/) {\n this.checksum = checksum;\n };\n /**\n * unix epock timestamp, elapsed seconds since 1970-01-01\n *\n * @return elapsed seconds, -1 if not set\n */\n PDF417ResultMetadata.prototype.getTimestamp = function () {\n return this.timestamp;\n };\n PDF417ResultMetadata.prototype.setTimestamp = function (timestamp /*long*/) {\n this.timestamp = timestamp;\n };\n return PDF417ResultMetadata;\n}());\nexport default PDF417ResultMetadata;\n","/**\n * Ponyfill for Java's Long class.\n */\nvar Long = /** @class */ (function () {\n function Long() {\n }\n /**\n * Parses a string to a number, since JS has no really Int64.\n *\n * @param num Numeric string.\n * @param radix Destination radix.\n */\n Long.parseLong = function (num, radix) {\n if (radix === void 0) { radix = undefined; }\n return parseInt(num, radix);\n };\n return Long;\n}());\nexport default Long;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar NullPointerException = /** @class */ (function (_super) {\n __extends(NullPointerException, _super);\n function NullPointerException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NullPointerException.kind = 'NullPointerException';\n return NullPointerException;\n}(Exception));\nexport default NullPointerException;\n","import IndexOutOfBoundsException from '../IndexOutOfBoundsException';\nimport NullPointerException from '../NullPointerException';\n/*\n * Copyright (c) 1994, 2004, Oracle and/or its affiliates. All rights reserved.\n * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.\n *\n * This code is free software; you can redistribute it and/or modify it\n * under the terms of the GNU General Public License version 2 only, as\n * published by the Free Software Foundation. Oracle designates this\n * particular file as subject to the \"Classpath\" exception as provided\n * by Oracle in the LICENSE file that accompanied this code.\n *\n * This code is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\n * version 2 for more details (a copy is included in the LICENSE file that\n * accompanied this code).\n *\n * You should have received a copy of the GNU General Public License version\n * 2 along with this work; if not, write to the Free Software Foundation,\n * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n *\n * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA\n * or visit www.oracle.com if you need additional information or have any\n * questions.\n */\n// package java.io;\n/**\n * This abstract class is the superclass of all classes representing\n * an output stream of bytes. An output stream accepts output bytes\n * and sends them to some sink.\n *

\n * Applications that need to define a subclass of\n * OutputStream must always provide at least a method\n * that writes one byte of output.\n *\n * @author Arthur van Hoff\n * @see java.io.BufferedOutputStream\n * @see java.io.ByteArrayOutputStream\n * @see java.io.DataOutputStream\n * @see java.io.FilterOutputStream\n * @see java.io.InputStream\n * @see java.io.OutputStream#write(int)\n * @since JDK1.0\n */\nvar OutputStream /*implements Closeable, Flushable*/ = /** @class */ (function () {\n function OutputStream() {\n }\n /**\n * Writes b.length bytes from the specified byte array\n * to this output stream. The general contract for write(b)\n * is that it should have exactly the same effect as the call\n * write(b, 0, b.length).\n *\n * @param b the data.\n * @exception IOException if an I/O error occurs.\n * @see java.io.OutputStream#write(byte[], int, int)\n */\n OutputStream.prototype.writeBytes = function (b) {\n this.writeBytesOffset(b, 0, b.length);\n };\n /**\n * Writes len bytes from the specified byte array\n * starting at offset off to this output stream.\n * The general contract for write(b, off, len) is that\n * some of the bytes in the array b are written to the\n * output stream in order; element b[off] is the first\n * byte written and b[off+len-1] is the last byte written\n * by this operation.\n *

\n * The write method of OutputStream calls\n * the write method of one argument on each of the bytes to be\n * written out. Subclasses are encouraged to override this method and\n * provide a more efficient implementation.\n *

\n * If b is null, a\n * NullPointerException is thrown.\n *

\n * If off is negative, or len is negative, or\n * off+len is greater than the length of the array\n * b, then an IndexOutOfBoundsException is thrown.\n *\n * @param b the data.\n * @param off the start offset in the data.\n * @param len the number of bytes to write.\n * @exception IOException if an I/O error occurs. In particular,\n * an IOException is thrown if the output\n * stream is closed.\n */\n OutputStream.prototype.writeBytesOffset = function (b, off, len) {\n if (b == null) {\n throw new NullPointerException();\n }\n else if ((off < 0) || (off > b.length) || (len < 0) ||\n ((off + len) > b.length) || ((off + len) < 0)) {\n throw new IndexOutOfBoundsException();\n }\n else if (len === 0) {\n return;\n }\n for (var i = 0; i < len; i++) {\n this.write(b[off + i]);\n }\n };\n /**\n * Flushes this output stream and forces any buffered output bytes\n * to be written out. The general contract of flush is\n * that calling it is an indication that, if any bytes previously\n * written have been buffered by the implementation of the output\n * stream, such bytes should immediately be written to their\n * intended destination.\n *

\n * If the intended destination of this stream is an abstraction provided by\n * the underlying operating system, for example a file, then flushing the\n * stream guarantees only that bytes previously written to the stream are\n * passed to the operating system for writing; it does not guarantee that\n * they are actually written to a physical device such as a disk drive.\n *

\n * The flush method of OutputStream does nothing.\n *\n * @exception IOException if an I/O error occurs.\n */\n OutputStream.prototype.flush = function () {\n };\n /**\n * Closes this output stream and releases any system resources\n * associated with this stream. The general contract of close\n * is that it closes the output stream. A closed stream cannot perform\n * output operations and cannot be reopened.\n *

\n * The close method of OutputStream does nothing.\n *\n * @exception IOException if an I/O error occurs.\n */\n OutputStream.prototype.close = function () {\n };\n return OutputStream;\n}());\nexport default OutputStream;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar OutOfMemoryError = /** @class */ (function (_super) {\n __extends(OutOfMemoryError, _super);\n function OutOfMemoryError() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return OutOfMemoryError;\n}(Exception));\nexport default OutOfMemoryError;\n","/*\n * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.\n * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.\n *\n * This code is free software; you can redistribute it and/or modify it\n * under the terms of the GNU General Public License version 2 only, as\n * published by the Free Software Foundation. Oracle designates this\n * particular file as subject to the \"Classpath\" exception as provided\n * by Oracle in the LICENSE file that accompanied this code.\n *\n * This code is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\n * version 2 for more details (a copy is included in the LICENSE file that\n * accompanied this code).\n *\n * You should have received a copy of the GNU General Public License version\n * 2 along with this work; if not, write to the Free Software Foundation,\n * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n *\n * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA\n * or visit www.oracle.com if you need additional information or have any\n * questions.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n// package java.io;\n// import java.util.Arrays;\nimport Arrays from './Arrays';\nimport OutputStream from './OutputStream';\nimport Integer from './Integer';\nimport IllegalArgumentException from '../IllegalArgumentException';\nimport OutOfMemoryError from '../OutOfMemoryError';\nimport System from './System';\nimport IndexOutOfBoundsException from '../IndexOutOfBoundsException';\n/**\n * This class implements an output stream in which the data is\n * written into a byte array. The buffer automatically grows as data\n * is written to it.\n * The data can be retrieved using toByteArray() and\n * toString().\n *

\n * Closing a ByteArrayOutputStream has no effect. The methods in\n * this class can be called after the stream has been closed without\n * generating an IOException.\n *\n * @author Arthur van Hoff\n * @since JDK1.0\n */\nvar ByteArrayOutputStream = /** @class */ (function (_super) {\n __extends(ByteArrayOutputStream, _super);\n /**\n * Creates a new byte array output stream. The buffer capacity is\n * initially 32 bytes, though its size increases if necessary.\n */\n // public constructor() {\n // this(32);\n // }\n /**\n * Creates a new byte array output stream, with a buffer capacity of\n * the specified size, in bytes.\n *\n * @param size the initial size.\n * @exception IllegalArgumentException if size is negative.\n */\n function ByteArrayOutputStream(size) {\n if (size === void 0) { size = 32; }\n var _this = _super.call(this) || this;\n /**\n * The number of valid bytes in the buffer.\n */\n _this.count = 0;\n if (size < 0) {\n throw new IllegalArgumentException('Negative initial size: '\n + size);\n }\n _this.buf = new Uint8Array(size);\n return _this;\n }\n /**\n * Increases the capacity if necessary to ensure that it can hold\n * at least the number of elements specified by the minimum\n * capacity argument.\n *\n * @param minCapacity the desired minimum capacity\n * @throws OutOfMemoryError if {@code minCapacity < 0}. This is\n * interpreted as a request for the unsatisfiably large capacity\n * {@code (long) Integer.MAX_VALUE + (minCapacity - Integer.MAX_VALUE)}.\n */\n ByteArrayOutputStream.prototype.ensureCapacity = function (minCapacity) {\n // overflow-conscious code\n if (minCapacity - this.buf.length > 0)\n this.grow(minCapacity);\n };\n /**\n * Increases the capacity to ensure that it can hold at least the\n * number of elements specified by the minimum capacity argument.\n *\n * @param minCapacity the desired minimum capacity\n */\n ByteArrayOutputStream.prototype.grow = function (minCapacity) {\n // overflow-conscious code\n var oldCapacity = this.buf.length;\n var newCapacity = oldCapacity << 1;\n if (newCapacity - minCapacity < 0)\n newCapacity = minCapacity;\n if (newCapacity < 0) {\n if (minCapacity < 0) // overflow\n throw new OutOfMemoryError();\n newCapacity = Integer.MAX_VALUE;\n }\n this.buf = Arrays.copyOfUint8Array(this.buf, newCapacity);\n };\n /**\n * Writes the specified byte to this byte array output stream.\n *\n * @param b the byte to be written.\n */\n ByteArrayOutputStream.prototype.write = function (b) {\n this.ensureCapacity(this.count + 1);\n this.buf[this.count] = /*(byte)*/ b;\n this.count += 1;\n };\n /**\n * Writes len bytes from the specified byte array\n * starting at offset off to this byte array output stream.\n *\n * @param b the data.\n * @param off the start offset in the data.\n * @param len the number of bytes to write.\n */\n ByteArrayOutputStream.prototype.writeBytesOffset = function (b, off, len) {\n if ((off < 0) || (off > b.length) || (len < 0) ||\n ((off + len) - b.length > 0)) {\n throw new IndexOutOfBoundsException();\n }\n this.ensureCapacity(this.count + len);\n System.arraycopy(b, off, this.buf, this.count, len);\n this.count += len;\n };\n /**\n * Writes the complete contents of this byte array output stream to\n * the specified output stream argument, as if by calling the output\n * stream's write method using out.write(buf, 0, count).\n *\n * @param out the output stream to which to write the data.\n * @exception IOException if an I/O error occurs.\n */\n ByteArrayOutputStream.prototype.writeTo = function (out) {\n out.writeBytesOffset(this.buf, 0, this.count);\n };\n /**\n * Resets the count field of this byte array output\n * stream to zero, so that all currently accumulated output in the\n * output stream is discarded. The output stream can be used again,\n * reusing the already allocated buffer space.\n *\n * @see java.io.ByteArrayInputStream#count\n */\n ByteArrayOutputStream.prototype.reset = function () {\n this.count = 0;\n };\n /**\n * Creates a newly allocated byte array. Its size is the current\n * size of this output stream and the valid contents of the buffer\n * have been copied into it.\n *\n * @return the current contents of this output stream, as a byte array.\n * @see java.io.ByteArrayOutputStream#size()\n */\n ByteArrayOutputStream.prototype.toByteArray = function () {\n return Arrays.copyOfUint8Array(this.buf, this.count);\n };\n /**\n * Returns the current size of the buffer.\n *\n * @return the value of the count field, which is the number\n * of valid bytes in this output stream.\n * @see java.io.ByteArrayOutputStream#count\n */\n ByteArrayOutputStream.prototype.size = function () {\n return this.count;\n };\n ByteArrayOutputStream.prototype.toString = function (param) {\n if (!param) {\n return this.toString_void();\n }\n if (typeof param === 'string') {\n return this.toString_string(param);\n }\n return this.toString_number(param);\n };\n /**\n * Converts the buffer's contents into a string decoding bytes using the\n * platform's default character set. The length of the new String\n * is a function of the character set, and hence may not be equal to the\n * size of the buffer.\n *\n *

This method always replaces malformed-input and unmappable-character\n * sequences with the default replacement string for the platform's\n * default character set. The {@linkplain java.nio.charset.CharsetDecoder}\n * class should be used when more control over the decoding process is\n * required.\n *\n * @return String decoded from the buffer's contents.\n * @since JDK1.1\n */\n ByteArrayOutputStream.prototype.toString_void = function () {\n return new String(this.buf /*, 0, this.count*/).toString();\n };\n /**\n * Converts the buffer's contents into a string by decoding the bytes using\n * the specified {@link java.nio.charset.Charset charsetName}. The length of\n * the new String is a function of the charset, and hence may not be\n * equal to the length of the byte array.\n *\n *

This method always replaces malformed-input and unmappable-character\n * sequences with this charset's default replacement string. The {@link\n * java.nio.charset.CharsetDecoder} class should be used when more control\n * over the decoding process is required.\n *\n * @param charsetName the name of a supported\n * {@linkplain java.nio.charset.Charset charset}\n * @return String decoded from the buffer's contents.\n * @exception UnsupportedEncodingException\n * If the named charset is not supported\n * @since JDK1.1\n */\n ByteArrayOutputStream.prototype.toString_string = function (charsetName) {\n return new String(this.buf /*, 0, this.count, charsetName*/).toString();\n };\n /**\n * Creates a newly allocated string. Its size is the current size of\n * the output stream and the valid contents of the buffer have been\n * copied into it. Each character c in the resulting string is\n * constructed from the corresponding element b in the byte\n * array such that:\n *

\n     *     c == (char)(((hibyte & 0xff) << 8) | (b & 0xff))\n     * 
\n *\n * @deprecated This method does not properly convert bytes into characters.\n * As of JDK 1.1, the preferred way to do this is via the\n * toString(String enc) method, which takes an encoding-name\n * argument, or the toString() method, which uses the\n * platform's default character encoding.\n *\n * @param hibyte the high byte of each resulting Unicode character.\n * @return the current contents of the output stream, as a string.\n * @see java.io.ByteArrayOutputStream#size()\n * @see java.io.ByteArrayOutputStream#toString(String)\n * @see java.io.ByteArrayOutputStream#toString()\n */\n // @Deprecated\n ByteArrayOutputStream.prototype.toString_number = function (hibyte) {\n return new String(this.buf /*, hibyte, 0, this.count*/).toString();\n };\n /**\n * Closing a ByteArrayOutputStream has no effect. The methods in\n * this class can be called after the stream has been closed without\n * generating an IOException.\n *

\n *\n * @throws IOException\n */\n ByteArrayOutputStream.prototype.close = function () {\n };\n return ByteArrayOutputStream;\n}(OutputStream));\nexport default ByteArrayOutputStream;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// package com.google.zxing.pdf417.decoder;\n// import com.google.zxing.FormatException;\nimport FormatException from '../../FormatException';\n// import com.google.zxing.common.CharacterSetECI;\nimport CharacterSetECI from '../../common/CharacterSetECI';\n// import com.google.zxing.common.DecoderResult;\nimport DecoderResult from '../../common/DecoderResult';\n// import com.google.zxing.pdf417.PDF417ResultMetadata;\nimport PDF417ResultMetadata from '../PDF417ResultMetadata';\n// import java.io.ByteArrayOutputStream;\n// import java.math.BigInteger;\n// import java.nio.charset.Charset;\n// import java.nio.charset.StandardCharsets;\n// import java.util.Arrays;\nimport Arrays from '../../util/Arrays';\nimport StringBuilder from '../../util/StringBuilder';\nimport Integer from '../../util/Integer';\nimport Long from '../../util/Long';\nimport ByteArrayOutputStream from '../../util/ByteArrayOutputStream';\nimport StringEncoding from '../../util/StringEncoding';\n/*private*/ var Mode;\n(function (Mode) {\n Mode[Mode[\"ALPHA\"] = 0] = \"ALPHA\";\n Mode[Mode[\"LOWER\"] = 1] = \"LOWER\";\n Mode[Mode[\"MIXED\"] = 2] = \"MIXED\";\n Mode[Mode[\"PUNCT\"] = 3] = \"PUNCT\";\n Mode[Mode[\"ALPHA_SHIFT\"] = 4] = \"ALPHA_SHIFT\";\n Mode[Mode[\"PUNCT_SHIFT\"] = 5] = \"PUNCT_SHIFT\";\n})(Mode || (Mode = {}));\n/**\n * Indirectly access the global BigInt constructor, it\n * allows browsers that doesn't support BigInt to run\n * the library without breaking due to \"undefined BigInt\"\n * errors.\n */\nfunction getBigIntConstructor() {\n if (typeof window !== 'undefined') {\n return window['BigInt'] || null;\n }\n if (typeof global !== 'undefined') {\n return global['BigInt'] || null;\n }\n if (typeof self !== 'undefined') {\n return self['BigInt'] || null;\n }\n throw new Error('Can\\'t search globals for BigInt!');\n}\n/**\n * Used to store the BigInt constructor.\n */\nvar BigInteger;\n/**\n * This function creates a bigint value. It allows browsers\n * that doesn't support BigInt to run the rest of the library\n * by not directly accessing the BigInt constructor.\n */\nfunction createBigInt(num) {\n if (typeof BigInteger === 'undefined') {\n BigInteger = getBigIntConstructor();\n }\n if (BigInteger === null) {\n throw new Error('BigInt is not supported!');\n }\n return BigInteger(num);\n}\nfunction getEXP900() {\n // in Java - array with length = 16\n var EXP900 = [];\n EXP900[0] = createBigInt(1);\n var nineHundred = createBigInt(900);\n EXP900[1] = nineHundred;\n // in Java - array with length = 16\n for (var i /*int*/ = 2; i < 16; i++) {\n EXP900[i] = EXP900[i - 1] * nineHundred;\n }\n return EXP900;\n}\n/**\n *

This class contains the methods for decoding the PDF417 codewords.

\n *\n * @author SITA Lab (kevin.osullivan@sita.aero)\n * @author Guenther Grau\n */\nvar DecodedBitStreamParser = /** @class */ (function () {\n function DecodedBitStreamParser() {\n }\n // private DecodedBitStreamParser() {\n // }\n /**\n *\n * @param codewords\n * @param ecLevel\n *\n * @throws FormatException\n */\n DecodedBitStreamParser.decode = function (codewords, ecLevel) {\n // pass encoding to result (will be used for decode symbols in byte mode)\n var result = new StringBuilder('');\n // let encoding: Charset = StandardCharsets.ISO_8859_1;\n var encoding = CharacterSetECI.ISO8859_1;\n /**\n * @note the next command is specific from this TypeScript library\n * because TS can't properly cast some values to char and\n * convert it to string later correctly due to encoding\n * differences from Java version. As reported here:\n * https://github.com/zxing-js/library/pull/264/files#r382831593\n */\n result.enableDecoding(encoding);\n // Get compaction mode\n var codeIndex = 1;\n var code = codewords[codeIndex++];\n var resultMetadata = new PDF417ResultMetadata();\n while (codeIndex < codewords[0]) {\n switch (code) {\n case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n codeIndex = DecodedBitStreamParser.textCompaction(codewords, codeIndex, result);\n break;\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6:\n codeIndex = DecodedBitStreamParser.byteCompaction(code, codewords, encoding, codeIndex, result);\n break;\n case DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n result.append(/*(char)*/ codewords[codeIndex++]);\n break;\n case DecodedBitStreamParser.NUMERIC_COMPACTION_MODE_LATCH:\n codeIndex = DecodedBitStreamParser.numericCompaction(codewords, codeIndex, result);\n break;\n case DecodedBitStreamParser.ECI_CHARSET:\n var charsetECI = CharacterSetECI.getCharacterSetECIByValue(codewords[codeIndex++]);\n // encoding = Charset.forName(charsetECI.getName());\n break;\n case DecodedBitStreamParser.ECI_GENERAL_PURPOSE:\n // Can't do anything with generic ECI; skip its 2 characters\n codeIndex += 2;\n break;\n case DecodedBitStreamParser.ECI_USER_DEFINED:\n // Can't do anything with user ECI; skip its 1 character\n codeIndex++;\n break;\n case DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n codeIndex = DecodedBitStreamParser.decodeMacroBlock(codewords, codeIndex, resultMetadata);\n break;\n case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n case DecodedBitStreamParser.MACRO_PDF417_TERMINATOR:\n // Should not see these outside a macro block\n throw new FormatException();\n default:\n // Default to text compaction. During testing numerous barcodes\n // appeared to be missing the starting mode. In these cases defaulting\n // to text compaction seems to work.\n codeIndex--;\n codeIndex = DecodedBitStreamParser.textCompaction(codewords, codeIndex, result);\n break;\n }\n if (codeIndex < codewords.length) {\n code = codewords[codeIndex++];\n }\n else {\n throw FormatException.getFormatInstance();\n }\n }\n if (result.length() === 0) {\n throw FormatException.getFormatInstance();\n }\n var decoderResult = new DecoderResult(null, result.toString(), null, ecLevel);\n decoderResult.setOther(resultMetadata);\n return decoderResult;\n };\n /**\n *\n * @param int\n * @param param1\n * @param codewords\n * @param int\n * @param codeIndex\n * @param PDF417ResultMetadata\n * @param resultMetadata\n *\n * @throws FormatException\n */\n // @SuppressWarnings(\"deprecation\")\n DecodedBitStreamParser.decodeMacroBlock = function (codewords, codeIndex, resultMetadata) {\n if (codeIndex + DecodedBitStreamParser.NUMBER_OF_SEQUENCE_CODEWORDS > codewords[0]) {\n // we must have at least two bytes left for the segment index\n throw FormatException.getFormatInstance();\n }\n var segmentIndexArray = new Int32Array(DecodedBitStreamParser.NUMBER_OF_SEQUENCE_CODEWORDS);\n for (var i /*int*/ = 0; i < DecodedBitStreamParser.NUMBER_OF_SEQUENCE_CODEWORDS; i++, codeIndex++) {\n segmentIndexArray[i] = codewords[codeIndex];\n }\n resultMetadata.setSegmentIndex(Integer.parseInt(DecodedBitStreamParser.decodeBase900toBase10(segmentIndexArray, DecodedBitStreamParser.NUMBER_OF_SEQUENCE_CODEWORDS)));\n var fileId = new StringBuilder();\n codeIndex = DecodedBitStreamParser.textCompaction(codewords, codeIndex, fileId);\n resultMetadata.setFileId(fileId.toString());\n var optionalFieldsStart = -1;\n if (codewords[codeIndex] === DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD) {\n optionalFieldsStart = codeIndex + 1;\n }\n while (codeIndex < codewords[0]) {\n switch (codewords[codeIndex]) {\n case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n codeIndex++;\n switch (codewords[codeIndex]) {\n case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME:\n var fileName = new StringBuilder();\n codeIndex = DecodedBitStreamParser.textCompaction(codewords, codeIndex + 1, fileName);\n resultMetadata.setFileName(fileName.toString());\n break;\n case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_SENDER:\n var sender = new StringBuilder();\n codeIndex = DecodedBitStreamParser.textCompaction(codewords, codeIndex + 1, sender);\n resultMetadata.setSender(sender.toString());\n break;\n case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE:\n var addressee = new StringBuilder();\n codeIndex = DecodedBitStreamParser.textCompaction(codewords, codeIndex + 1, addressee);\n resultMetadata.setAddressee(addressee.toString());\n break;\n case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT:\n var segmentCount = new StringBuilder();\n codeIndex = DecodedBitStreamParser.numericCompaction(codewords, codeIndex + 1, segmentCount);\n resultMetadata.setSegmentCount(Integer.parseInt(segmentCount.toString()));\n break;\n case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP:\n var timestamp = new StringBuilder();\n codeIndex = DecodedBitStreamParser.numericCompaction(codewords, codeIndex + 1, timestamp);\n resultMetadata.setTimestamp(Long.parseLong(timestamp.toString()));\n break;\n case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM:\n var checksum = new StringBuilder();\n codeIndex = DecodedBitStreamParser.numericCompaction(codewords, codeIndex + 1, checksum);\n resultMetadata.setChecksum(Integer.parseInt(checksum.toString()));\n break;\n case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE:\n var fileSize = new StringBuilder();\n codeIndex = DecodedBitStreamParser.numericCompaction(codewords, codeIndex + 1, fileSize);\n resultMetadata.setFileSize(Long.parseLong(fileSize.toString()));\n break;\n default:\n throw FormatException.getFormatInstance();\n }\n break;\n case DecodedBitStreamParser.MACRO_PDF417_TERMINATOR:\n codeIndex++;\n resultMetadata.setLastSegment(true);\n break;\n default:\n throw FormatException.getFormatInstance();\n }\n }\n // copy optional fields to additional options\n if (optionalFieldsStart !== -1) {\n var optionalFieldsLength = codeIndex - optionalFieldsStart;\n if (resultMetadata.isLastSegment()) {\n // do not include terminator\n optionalFieldsLength--;\n }\n resultMetadata.setOptionalData(Arrays.copyOfRange(codewords, optionalFieldsStart, optionalFieldsStart + optionalFieldsLength));\n }\n return codeIndex;\n };\n /**\n * Text Compaction mode (see 5.4.1.5) permits all printable ASCII characters to be\n * encoded, i.e. values 32 - 126 inclusive in accordance with ISO/IEC 646 (IRV), as\n * well as selected control characters.\n *\n * @param codewords The array of codewords (data + error)\n * @param codeIndex The current index into the codeword array.\n * @param result The decoded data is appended to the result.\n * @return The next index into the codeword array.\n */\n DecodedBitStreamParser.textCompaction = function (codewords, codeIndex, result) {\n // 2 character per codeword\n var textCompactionData = new Int32Array((codewords[0] - codeIndex) * 2);\n // Used to hold the byte compaction value if there is a mode shift\n var byteCompactionData = new Int32Array((codewords[0] - codeIndex) * 2);\n var index = 0;\n var end = false;\n while ((codeIndex < codewords[0]) && !end) {\n var code = codewords[codeIndex++];\n if (code < DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH) {\n textCompactionData[index] = code / 30;\n textCompactionData[index + 1] = code % 30;\n index += 2;\n }\n else {\n switch (code) {\n case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n // reinitialize text compaction mode to alpha sub mode\n textCompactionData[index++] = DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH;\n break;\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6:\n case DecodedBitStreamParser.NUMERIC_COMPACTION_MODE_LATCH:\n case DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n case DecodedBitStreamParser.MACRO_PDF417_TERMINATOR:\n codeIndex--;\n end = true;\n break;\n case DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n // The Mode Shift codeword 913 shall cause a temporary\n // switch from Text Compaction mode to Byte Compaction mode.\n // This switch shall be in effect for only the next codeword,\n // after which the mode shall revert to the prevailing sub-mode\n // of the Text Compaction mode. Codeword 913 is only available\n // in Text Compaction mode; its use is described in 5.4.2.4.\n textCompactionData[index] = DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE;\n code = codewords[codeIndex++];\n byteCompactionData[index] = code;\n index++;\n break;\n }\n }\n }\n DecodedBitStreamParser.decodeTextCompaction(textCompactionData, byteCompactionData, index, result);\n return codeIndex;\n };\n /**\n * The Text Compaction mode includes all the printable ASCII characters\n * (i.e. values from 32 to 126) and three ASCII control characters: HT or tab\n * (9: e), LF or line feed (10: e), and CR or carriage\n * return (13: e). The Text Compaction mode also includes various latch\n * and shift characters which are used exclusively within the mode. The Text\n * Compaction mode encodes up to 2 characters per codeword. The compaction rules\n * for converting data into PDF417 codewords are defined in 5.4.2.2. The sub-mode\n * switches are defined in 5.4.2.3.\n *\n * @param textCompactionData The text compaction data.\n * @param byteCompactionData The byte compaction data if there\n * was a mode shift.\n * @param length The size of the text compaction and byte compaction data.\n * @param result The decoded data is appended to the result.\n */\n DecodedBitStreamParser.decodeTextCompaction = function (textCompactionData, byteCompactionData, length, result) {\n // Beginning from an initial state of the Alpha sub-mode\n // The default compaction mode for PDF417 in effect at the start of each symbol shall always be Text\n // Compaction mode Alpha sub-mode (alphabetic: uppercase). A latch codeword from another mode to the Text\n // Compaction mode shall always switch to the Text Compaction Alpha sub-mode.\n var subMode = Mode.ALPHA;\n var priorToShiftMode = Mode.ALPHA;\n var i = 0;\n while (i < length) {\n var subModeCh = textCompactionData[i];\n var ch = /*char*/ '';\n switch (subMode) {\n case Mode.ALPHA:\n // Alpha (alphabetic: uppercase)\n if (subModeCh < 26) {\n // Upper case Alpha Character\n // Note: 65 = 'A' ASCII -> there is byte code of symbol\n ch = /*(char)('A' + subModeCh) */ String.fromCharCode(65 + subModeCh);\n }\n else {\n switch (subModeCh) {\n case 26:\n ch = ' ';\n break;\n case DecodedBitStreamParser.LL:\n subMode = Mode.LOWER;\n break;\n case DecodedBitStreamParser.ML:\n subMode = Mode.MIXED;\n break;\n case DecodedBitStreamParser.PS:\n // Shift to punctuation\n priorToShiftMode = subMode;\n subMode = Mode.PUNCT_SHIFT;\n break;\n case DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n result.append(/*(char)*/ byteCompactionData[i]);\n break;\n case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n subMode = Mode.ALPHA;\n break;\n }\n }\n break;\n case Mode.LOWER:\n // Lower (alphabetic: lowercase)\n if (subModeCh < 26) {\n ch = /*(char)('a' + subModeCh)*/ String.fromCharCode(97 + subModeCh);\n }\n else {\n switch (subModeCh) {\n case 26:\n ch = ' ';\n break;\n case DecodedBitStreamParser.AS:\n // Shift to alpha\n priorToShiftMode = subMode;\n subMode = Mode.ALPHA_SHIFT;\n break;\n case DecodedBitStreamParser.ML:\n subMode = Mode.MIXED;\n break;\n case DecodedBitStreamParser.PS:\n // Shift to punctuation\n priorToShiftMode = subMode;\n subMode = Mode.PUNCT_SHIFT;\n break;\n case DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n // TODO Does this need to use the current character encoding? See other occurrences below\n result.append(/*(char)*/ byteCompactionData[i]);\n break;\n case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n subMode = Mode.ALPHA;\n break;\n }\n }\n break;\n case Mode.MIXED:\n // Mixed (punctuation: e)\n if (subModeCh < DecodedBitStreamParser.PL) {\n ch = DecodedBitStreamParser.MIXED_CHARS[subModeCh];\n }\n else {\n switch (subModeCh) {\n case DecodedBitStreamParser.PL:\n subMode = Mode.PUNCT;\n break;\n case 26:\n ch = ' ';\n break;\n case DecodedBitStreamParser.LL:\n subMode = Mode.LOWER;\n break;\n case DecodedBitStreamParser.AL:\n subMode = Mode.ALPHA;\n break;\n case DecodedBitStreamParser.PS:\n // Shift to punctuation\n priorToShiftMode = subMode;\n subMode = Mode.PUNCT_SHIFT;\n break;\n case DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n result.append(/*(char)*/ byteCompactionData[i]);\n break;\n case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n subMode = Mode.ALPHA;\n break;\n }\n }\n break;\n case Mode.PUNCT:\n // Punctuation\n if (subModeCh < DecodedBitStreamParser.PAL) {\n ch = DecodedBitStreamParser.PUNCT_CHARS[subModeCh];\n }\n else {\n switch (subModeCh) {\n case DecodedBitStreamParser.PAL:\n subMode = Mode.ALPHA;\n break;\n case DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n result.append(/*(char)*/ byteCompactionData[i]);\n break;\n case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n subMode = Mode.ALPHA;\n break;\n }\n }\n break;\n case Mode.ALPHA_SHIFT:\n // Restore sub-mode\n subMode = priorToShiftMode;\n if (subModeCh < 26) {\n ch = /*(char)('A' + subModeCh)*/ String.fromCharCode(65 + subModeCh);\n }\n else {\n switch (subModeCh) {\n case 26:\n ch = ' ';\n break;\n case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n subMode = Mode.ALPHA;\n break;\n }\n }\n break;\n case Mode.PUNCT_SHIFT:\n // Restore sub-mode\n subMode = priorToShiftMode;\n if (subModeCh < DecodedBitStreamParser.PAL) {\n ch = DecodedBitStreamParser.PUNCT_CHARS[subModeCh];\n }\n else {\n switch (subModeCh) {\n case DecodedBitStreamParser.PAL:\n subMode = Mode.ALPHA;\n break;\n case DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n // PS before Shift-to-Byte is used as a padding character,\n // see 5.4.2.4 of the specification\n result.append(/*(char)*/ byteCompactionData[i]);\n break;\n case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n subMode = Mode.ALPHA;\n break;\n }\n }\n break;\n }\n // if (ch !== 0) {\n if (ch !== '') {\n // Append decoded character to result\n result.append(ch);\n }\n i++;\n }\n };\n /**\n * Byte Compaction mode (see 5.4.3) permits all 256 possible 8-bit byte values to be encoded.\n * This includes all ASCII characters value 0 to 127 inclusive and provides for international\n * character set support.\n *\n * @param mode The byte compaction mode i.e. 901 or 924\n * @param codewords The array of codewords (data + error)\n * @param encoding Currently active character encoding\n * @param codeIndex The current index into the codeword array.\n * @param result The decoded data is appended to the result.\n * @return The next index into the codeword array.\n */\n DecodedBitStreamParser.byteCompaction = function (mode, codewords, encoding, codeIndex, result) {\n var decodedBytes = new ByteArrayOutputStream();\n var count = 0;\n var value = /*long*/ 0;\n var end = false;\n switch (mode) {\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n // Total number of Byte Compaction characters to be encoded\n // is not a multiple of 6\n var byteCompactedCodewords = new Int32Array(6);\n var nextCode = codewords[codeIndex++];\n while ((codeIndex < codewords[0]) && !end) {\n byteCompactedCodewords[count++] = nextCode;\n // Base 900\n value = 900 * value + nextCode;\n nextCode = codewords[codeIndex++];\n // perhaps it should be ok to check only nextCode >= TEXT_COMPACTION_MODE_LATCH\n switch (nextCode) {\n case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n case DecodedBitStreamParser.NUMERIC_COMPACTION_MODE_LATCH:\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6:\n case DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n case DecodedBitStreamParser.MACRO_PDF417_TERMINATOR:\n codeIndex--;\n end = true;\n break;\n default:\n if ((count % 5 === 0) && (count > 0)) {\n // Decode every 5 codewords\n // Convert to Base 256\n for (var j /*int*/ = 0; j < 6; ++j) {\n /* @note\n * JavaScript stores numbers as 64 bits floating point numbers, but all bitwise operations are performed on 32 bits binary numbers.\n * So the next bitwise operation could not be done with simple numbers\n */\n decodedBytes.write(/*(byte)*/ Number(createBigInt(value) >> createBigInt(8 * (5 - j))));\n }\n value = 0;\n count = 0;\n }\n break;\n }\n }\n // if the end of all codewords is reached the last codeword needs to be added\n if (codeIndex === codewords[0] && nextCode < DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH) {\n byteCompactedCodewords[count++] = nextCode;\n }\n // If Byte Compaction mode is invoked with codeword 901,\n // the last group of codewords is interpreted directly\n // as one byte per codeword, without compaction.\n for (var i /*int*/ = 0; i < count; i++) {\n decodedBytes.write(/*(byte)*/ byteCompactedCodewords[i]);\n }\n break;\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6:\n // Total number of Byte Compaction characters to be encoded\n // is an integer multiple of 6\n while (codeIndex < codewords[0] && !end) {\n var code = codewords[codeIndex++];\n if (code < DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH) {\n count++;\n // Base 900\n value = 900 * value + code;\n }\n else {\n switch (code) {\n case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n case DecodedBitStreamParser.NUMERIC_COMPACTION_MODE_LATCH:\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6:\n case DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n case DecodedBitStreamParser.MACRO_PDF417_TERMINATOR:\n codeIndex--;\n end = true;\n break;\n }\n }\n if ((count % 5 === 0) && (count > 0)) {\n // Decode every 5 codewords\n // Convert to Base 256\n /* @note\n * JavaScript stores numbers as 64 bits floating point numbers, but all bitwise operations are performed on 32 bits binary numbers.\n * So the next bitwise operation could not be done with simple numbers\n */\n for (var j /*int*/ = 0; j < 6; ++j) {\n decodedBytes.write(/*(byte)*/ Number(createBigInt(value) >> createBigInt(8 * (5 - j))));\n }\n value = 0;\n count = 0;\n }\n }\n break;\n }\n result.append(StringEncoding.decode(decodedBytes.toByteArray(), encoding));\n return codeIndex;\n };\n /**\n * Numeric Compaction mode (see 5.4.4) permits efficient encoding of numeric data strings.\n *\n * @param codewords The array of codewords (data + error)\n * @param codeIndex The current index into the codeword array.\n * @param result The decoded data is appended to the result.\n * @return The next index into the codeword array.\n *\n * @throws FormatException\n */\n DecodedBitStreamParser.numericCompaction = function (codewords, codeIndex /*int*/, result) {\n var count = 0;\n var end = false;\n var numericCodewords = new Int32Array(DecodedBitStreamParser.MAX_NUMERIC_CODEWORDS);\n while (codeIndex < codewords[0] && !end) {\n var code = codewords[codeIndex++];\n if (codeIndex === codewords[0]) {\n end = true;\n }\n if (code < DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH) {\n numericCodewords[count] = code;\n count++;\n }\n else {\n switch (code) {\n case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6:\n case DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n case DecodedBitStreamParser.MACRO_PDF417_TERMINATOR:\n codeIndex--;\n end = true;\n break;\n }\n }\n if ((count % DecodedBitStreamParser.MAX_NUMERIC_CODEWORDS === 0 || code === DecodedBitStreamParser.NUMERIC_COMPACTION_MODE_LATCH || end) && count > 0) {\n // Re-invoking Numeric Compaction mode (by using codeword 902\n // while in Numeric Compaction mode) serves to terminate the\n // current Numeric Compaction mode grouping as described in 5.4.4.2,\n // and then to start a new one grouping.\n result.append(DecodedBitStreamParser.decodeBase900toBase10(numericCodewords, count));\n count = 0;\n }\n }\n return codeIndex;\n };\n /**\n * Convert a list of Numeric Compacted codewords from Base 900 to Base 10.\n *\n * @param codewords The array of codewords\n * @param count The number of codewords\n * @return The decoded string representing the Numeric data.\n *\n * EXAMPLE\n * Encode the fifteen digit numeric string 000213298174000\n * Prefix the numeric string with a 1 and set the initial value of\n * t = 1 000 213 298 174 000\n * Calculate codeword 0\n * d0 = 1 000 213 298 174 000 mod 900 = 200\n *\n * t = 1 000 213 298 174 000 div 900 = 1 111 348 109 082\n * Calculate codeword 1\n * d1 = 1 111 348 109 082 mod 900 = 282\n *\n * t = 1 111 348 109 082 div 900 = 1 234 831 232\n * Calculate codeword 2\n * d2 = 1 234 831 232 mod 900 = 632\n *\n * t = 1 234 831 232 div 900 = 1 372 034\n * Calculate codeword 3\n * d3 = 1 372 034 mod 900 = 434\n *\n * t = 1 372 034 div 900 = 1 524\n * Calculate codeword 4\n * d4 = 1 524 mod 900 = 624\n *\n * t = 1 524 div 900 = 1\n * Calculate codeword 5\n * d5 = 1 mod 900 = 1\n * t = 1 div 900 = 0\n * Codeword sequence is: 1, 624, 434, 632, 282, 200\n *\n * Decode the above codewords involves\n * 1 x 900 power of 5 + 624 x 900 power of 4 + 434 x 900 power of 3 +\n * 632 x 900 power of 2 + 282 x 900 power of 1 + 200 x 900 power of 0 = 1000213298174000\n *\n * Remove leading 1 => Result is 000213298174000\n *\n * @throws FormatException\n */\n DecodedBitStreamParser.decodeBase900toBase10 = function (codewords, count) {\n var result = createBigInt(0);\n for (var i /*int*/ = 0; i < count; i++) {\n result += DecodedBitStreamParser.EXP900[count - i - 1] * createBigInt(codewords[i]);\n }\n var resultString = result.toString();\n if (resultString.charAt(0) !== '1') {\n throw new FormatException();\n }\n return resultString.substring(1);\n };\n DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH = 900;\n DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH = 901;\n DecodedBitStreamParser.NUMERIC_COMPACTION_MODE_LATCH = 902;\n DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6 = 924;\n DecodedBitStreamParser.ECI_USER_DEFINED = 925;\n DecodedBitStreamParser.ECI_GENERAL_PURPOSE = 926;\n DecodedBitStreamParser.ECI_CHARSET = 927;\n DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK = 928;\n DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD = 923;\n DecodedBitStreamParser.MACRO_PDF417_TERMINATOR = 922;\n DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE = 913;\n DecodedBitStreamParser.MAX_NUMERIC_CODEWORDS = 15;\n DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME = 0;\n DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT = 1;\n DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP = 2;\n DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_SENDER = 3;\n DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE = 4;\n DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE = 5;\n DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM = 6;\n DecodedBitStreamParser.PL = 25;\n DecodedBitStreamParser.LL = 27;\n DecodedBitStreamParser.AS = 27;\n DecodedBitStreamParser.ML = 28;\n DecodedBitStreamParser.AL = 28;\n DecodedBitStreamParser.PS = 29;\n DecodedBitStreamParser.PAL = 29;\n DecodedBitStreamParser.PUNCT_CHARS = ';<>@[\\\\]_`~!\\r\\t,:\\n-.$/\"|*()?{}\\'';\n DecodedBitStreamParser.MIXED_CHARS = '0123456789&\\r\\t,:#-.$/+%*=^';\n /**\n * Table containing values for the exponent of 900.\n * This is used in the numeric compaction decode algorithm.\n */\n DecodedBitStreamParser.EXP900 = getBigIntConstructor() ? getEXP900() : [];\n DecodedBitStreamParser.NUMBER_OF_SEQUENCE_CODEWORDS = 2;\n return DecodedBitStreamParser;\n}());\nexport default DecodedBitStreamParser;\n","/*\n* Copyright 2013 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417.decoder;\n// import com.google.zxing.ChecksumException;\nimport ChecksumException from '../../ChecksumException';\n// import com.google.zxing.FormatException;\nimport FormatException from '../../FormatException';\n// import com.google.zxing.NotFoundException;\nimport NotFoundException from '../../NotFoundException';\n// import com.google.zxing.common.detector.MathUtils;\nimport MathUtils from '../../common/detector/MathUtils';\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../PDF417Common';\n// import com.google.zxing.pdf417.decoder.ec.ErrorCorrection;\nimport ErrorCorrection from './ec/ErrorCorrection';\n// local\nimport BoundingBox from './BoundingBox';\nimport DetectionResultRowIndicatorColumn from './DetectionResultRowIndicatorColumn';\nimport DetectionResult from './DetectionResult';\nimport DetectionResultColumn from './DetectionResultColumn';\nimport Codeword from './Codeword';\nimport BarcodeValue from './BarcodeValue';\nimport PDF417CodewordDecoder from './PDF417CodewordDecoder';\nimport DecodedBitStreamParser from './DecodedBitStreamParser';\n// utils\nimport Formatter from '../../util/Formatter';\n// import java.util.ArrayList;\n// import java.util.Collection;\n// import java.util.Formatter;\n// import java.util.List;\n/**\n * @author Guenther Grau\n */\nvar PDF417ScanningDecoder = /** @class */ (function () {\n function PDF417ScanningDecoder() {\n }\n /**\n * @TODO don't pass in minCodewordWidth and maxCodewordWidth, pass in barcode columns for start and stop pattern\n *\n * columns. That way width can be deducted from the pattern column.\n * This approach also allows to detect more details about the barcode, e.g. if a bar type (white or black) is wider\n * than it should be. This can happen if the scanner used a bad blackpoint.\n *\n * @param BitMatrix\n * @param image\n * @param ResultPoint\n * @param imageTopLeft\n * @param ResultPoint\n * @param imageBottomLeft\n * @param ResultPoint\n * @param imageTopRight\n * @param ResultPoint\n * @param imageBottomRight\n * @param int\n * @param minCodewordWidth\n * @param int\n * @param maxCodewordWidth\n *\n * @throws NotFoundException\n * @throws FormatException\n * @throws ChecksumException\n */\n PDF417ScanningDecoder.decode = function (image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight, minCodewordWidth, maxCodewordWidth) {\n var boundingBox = new BoundingBox(image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight);\n var leftRowIndicatorColumn = null;\n var rightRowIndicatorColumn = null;\n var detectionResult;\n for (var firstPass /*boolean*/ = true;; firstPass = false) {\n if (imageTopLeft != null) {\n leftRowIndicatorColumn = PDF417ScanningDecoder.getRowIndicatorColumn(image, boundingBox, imageTopLeft, true, minCodewordWidth, maxCodewordWidth);\n }\n if (imageTopRight != null) {\n rightRowIndicatorColumn = PDF417ScanningDecoder.getRowIndicatorColumn(image, boundingBox, imageTopRight, false, minCodewordWidth, maxCodewordWidth);\n }\n detectionResult = PDF417ScanningDecoder.merge(leftRowIndicatorColumn, rightRowIndicatorColumn);\n if (detectionResult == null) {\n throw NotFoundException.getNotFoundInstance();\n }\n var resultBox = detectionResult.getBoundingBox();\n if (firstPass && resultBox != null &&\n (resultBox.getMinY() < boundingBox.getMinY() || resultBox.getMaxY() > boundingBox.getMaxY())) {\n boundingBox = resultBox;\n }\n else {\n break;\n }\n }\n detectionResult.setBoundingBox(boundingBox);\n var maxBarcodeColumn = detectionResult.getBarcodeColumnCount() + 1;\n detectionResult.setDetectionResultColumn(0, leftRowIndicatorColumn);\n detectionResult.setDetectionResultColumn(maxBarcodeColumn, rightRowIndicatorColumn);\n var leftToRight = leftRowIndicatorColumn != null;\n for (var barcodeColumnCount /*int*/ = 1; barcodeColumnCount <= maxBarcodeColumn; barcodeColumnCount++) {\n var barcodeColumn = leftToRight ? barcodeColumnCount : maxBarcodeColumn - barcodeColumnCount;\n if (detectionResult.getDetectionResultColumn(barcodeColumn) !== /* null */ undefined) {\n // This will be the case for the opposite row indicator column, which doesn't need to be decoded again.\n continue;\n }\n var detectionResultColumn = void 0;\n if (barcodeColumn === 0 || barcodeColumn === maxBarcodeColumn) {\n detectionResultColumn = new DetectionResultRowIndicatorColumn(boundingBox, barcodeColumn === 0);\n }\n else {\n detectionResultColumn = new DetectionResultColumn(boundingBox);\n }\n detectionResult.setDetectionResultColumn(barcodeColumn, detectionResultColumn);\n var startColumn = -1;\n var previousStartColumn = startColumn;\n // TODO start at a row for which we know the start position, then detect upwards and downwards from there.\n for (var imageRow /*int*/ = boundingBox.getMinY(); imageRow <= boundingBox.getMaxY(); imageRow++) {\n startColumn = PDF417ScanningDecoder.getStartColumn(detectionResult, barcodeColumn, imageRow, leftToRight);\n if (startColumn < 0 || startColumn > boundingBox.getMaxX()) {\n if (previousStartColumn === -1) {\n continue;\n }\n startColumn = previousStartColumn;\n }\n var codeword = PDF417ScanningDecoder.detectCodeword(image, boundingBox.getMinX(), boundingBox.getMaxX(), leftToRight, startColumn, imageRow, minCodewordWidth, maxCodewordWidth);\n if (codeword != null) {\n detectionResultColumn.setCodeword(imageRow, codeword);\n previousStartColumn = startColumn;\n minCodewordWidth = Math.min(minCodewordWidth, codeword.getWidth());\n maxCodewordWidth = Math.max(maxCodewordWidth, codeword.getWidth());\n }\n }\n }\n return PDF417ScanningDecoder.createDecoderResult(detectionResult);\n };\n /**\n *\n * @param leftRowIndicatorColumn\n * @param rightRowIndicatorColumn\n *\n * @throws NotFoundException\n */\n PDF417ScanningDecoder.merge = function (leftRowIndicatorColumn, rightRowIndicatorColumn) {\n if (leftRowIndicatorColumn == null && rightRowIndicatorColumn == null) {\n return null;\n }\n var barcodeMetadata = PDF417ScanningDecoder.getBarcodeMetadata(leftRowIndicatorColumn, rightRowIndicatorColumn);\n if (barcodeMetadata == null) {\n return null;\n }\n var boundingBox = BoundingBox.merge(PDF417ScanningDecoder.adjustBoundingBox(leftRowIndicatorColumn), PDF417ScanningDecoder.adjustBoundingBox(rightRowIndicatorColumn));\n return new DetectionResult(barcodeMetadata, boundingBox);\n };\n /**\n *\n * @param rowIndicatorColumn\n *\n * @throws NotFoundException\n */\n PDF417ScanningDecoder.adjustBoundingBox = function (rowIndicatorColumn) {\n var e_1, _a;\n if (rowIndicatorColumn == null) {\n return null;\n }\n var rowHeights = rowIndicatorColumn.getRowHeights();\n if (rowHeights == null) {\n return null;\n }\n var maxRowHeight = PDF417ScanningDecoder.getMax(rowHeights);\n var missingStartRows = 0;\n try {\n for (var rowHeights_1 = __values(rowHeights), rowHeights_1_1 = rowHeights_1.next(); !rowHeights_1_1.done; rowHeights_1_1 = rowHeights_1.next()) {\n var rowHeight = rowHeights_1_1.value /*int*/;\n missingStartRows += maxRowHeight - rowHeight;\n if (rowHeight > 0) {\n break;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (rowHeights_1_1 && !rowHeights_1_1.done && (_a = rowHeights_1.return)) _a.call(rowHeights_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n var codewords = rowIndicatorColumn.getCodewords();\n for (var row /*int*/ = 0; missingStartRows > 0 && codewords[row] == null; row++) {\n missingStartRows--;\n }\n var missingEndRows = 0;\n for (var row /*int*/ = rowHeights.length - 1; row >= 0; row--) {\n missingEndRows += maxRowHeight - rowHeights[row];\n if (rowHeights[row] > 0) {\n break;\n }\n }\n for (var row /*int*/ = codewords.length - 1; missingEndRows > 0 && codewords[row] == null; row--) {\n missingEndRows--;\n }\n return rowIndicatorColumn.getBoundingBox().addMissingRows(missingStartRows, missingEndRows, rowIndicatorColumn.isLeft());\n };\n PDF417ScanningDecoder.getMax = function (values) {\n var e_2, _a;\n var maxValue = -1;\n try {\n for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {\n var value = values_1_1.value /*int*/;\n maxValue = Math.max(maxValue, value);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return maxValue;\n };\n PDF417ScanningDecoder.getBarcodeMetadata = function (leftRowIndicatorColumn, rightRowIndicatorColumn) {\n var leftBarcodeMetadata;\n if (leftRowIndicatorColumn == null ||\n (leftBarcodeMetadata = leftRowIndicatorColumn.getBarcodeMetadata()) == null) {\n return rightRowIndicatorColumn == null ? null : rightRowIndicatorColumn.getBarcodeMetadata();\n }\n var rightBarcodeMetadata;\n if (rightRowIndicatorColumn == null ||\n (rightBarcodeMetadata = rightRowIndicatorColumn.getBarcodeMetadata()) == null) {\n return leftBarcodeMetadata;\n }\n if (leftBarcodeMetadata.getColumnCount() !== rightBarcodeMetadata.getColumnCount() &&\n leftBarcodeMetadata.getErrorCorrectionLevel() !== rightBarcodeMetadata.getErrorCorrectionLevel() &&\n leftBarcodeMetadata.getRowCount() !== rightBarcodeMetadata.getRowCount()) {\n return null;\n }\n return leftBarcodeMetadata;\n };\n PDF417ScanningDecoder.getRowIndicatorColumn = function (image, boundingBox, startPoint, leftToRight, minCodewordWidth, maxCodewordWidth) {\n var rowIndicatorColumn = new DetectionResultRowIndicatorColumn(boundingBox, leftToRight);\n for (var i /*int*/ = 0; i < 2; i++) {\n var increment = i === 0 ? 1 : -1;\n var startColumn = Math.trunc(Math.trunc(startPoint.getX()));\n for (var imageRow /*int*/ = Math.trunc(Math.trunc(startPoint.getY())); imageRow <= boundingBox.getMaxY() &&\n imageRow >= boundingBox.getMinY(); imageRow += increment) {\n var codeword = PDF417ScanningDecoder.detectCodeword(image, 0, image.getWidth(), leftToRight, startColumn, imageRow, minCodewordWidth, maxCodewordWidth);\n if (codeword != null) {\n rowIndicatorColumn.setCodeword(imageRow, codeword);\n if (leftToRight) {\n startColumn = codeword.getStartX();\n }\n else {\n startColumn = codeword.getEndX();\n }\n }\n }\n }\n return rowIndicatorColumn;\n };\n /**\n *\n * @param detectionResult\n * @param BarcodeValue\n * @param param2\n * @param param3\n * @param barcodeMatrix\n *\n * @throws NotFoundException\n */\n PDF417ScanningDecoder.adjustCodewordCount = function (detectionResult, barcodeMatrix) {\n var barcodeMatrix01 = barcodeMatrix[0][1];\n var numberOfCodewords = barcodeMatrix01.getValue();\n var calculatedNumberOfCodewords = detectionResult.getBarcodeColumnCount() *\n detectionResult.getBarcodeRowCount() -\n PDF417ScanningDecoder.getNumberOfECCodeWords(detectionResult.getBarcodeECLevel());\n if (numberOfCodewords.length === 0) {\n if (calculatedNumberOfCodewords < 1 || calculatedNumberOfCodewords > PDF417Common.MAX_CODEWORDS_IN_BARCODE) {\n throw NotFoundException.getNotFoundInstance();\n }\n barcodeMatrix01.setValue(calculatedNumberOfCodewords);\n }\n else if (numberOfCodewords[0] !== calculatedNumberOfCodewords) {\n // The calculated one is more reliable as it is derived from the row indicator columns\n barcodeMatrix01.setValue(calculatedNumberOfCodewords);\n }\n };\n /**\n *\n * @param detectionResult\n *\n * @throws FormatException\n * @throws ChecksumException\n * @throws NotFoundException\n */\n PDF417ScanningDecoder.createDecoderResult = function (detectionResult) {\n var barcodeMatrix = PDF417ScanningDecoder.createBarcodeMatrix(detectionResult);\n PDF417ScanningDecoder.adjustCodewordCount(detectionResult, barcodeMatrix);\n var erasures /*Collection*/ = new Array();\n var codewords = new Int32Array(detectionResult.getBarcodeRowCount() * detectionResult.getBarcodeColumnCount());\n var ambiguousIndexValuesList = /*List*/ [];\n var ambiguousIndexesList = /*Collection*/ new Array();\n for (var row /*int*/ = 0; row < detectionResult.getBarcodeRowCount(); row++) {\n for (var column /*int*/ = 0; column < detectionResult.getBarcodeColumnCount(); column++) {\n var values = barcodeMatrix[row][column + 1].getValue();\n var codewordIndex = row * detectionResult.getBarcodeColumnCount() + column;\n if (values.length === 0) {\n erasures.push(codewordIndex);\n }\n else if (values.length === 1) {\n codewords[codewordIndex] = values[0];\n }\n else {\n ambiguousIndexesList.push(codewordIndex);\n ambiguousIndexValuesList.push(values);\n }\n }\n }\n var ambiguousIndexValues = new Array(ambiguousIndexValuesList.length);\n for (var i /*int*/ = 0; i < ambiguousIndexValues.length; i++) {\n ambiguousIndexValues[i] = ambiguousIndexValuesList[i];\n }\n return PDF417ScanningDecoder.createDecoderResultFromAmbiguousValues(detectionResult.getBarcodeECLevel(), codewords, PDF417Common.toIntArray(erasures), PDF417Common.toIntArray(ambiguousIndexesList), ambiguousIndexValues);\n };\n /**\n * This method deals with the fact, that the decoding process doesn't always yield a single most likely value. The\n * current error correction implementation doesn't deal with erasures very well, so it's better to provide a value\n * for these ambiguous codewords instead of treating it as an erasure. The problem is that we don't know which of\n * the ambiguous values to choose. We try decode using the first value, and if that fails, we use another of the\n * ambiguous values and try to decode again. This usually only happens on very hard to read and decode barcodes,\n * so decoding the normal barcodes is not affected by this.\n *\n * @param erasureArray contains the indexes of erasures\n * @param ambiguousIndexes array with the indexes that have more than one most likely value\n * @param ambiguousIndexValues two dimensional array that contains the ambiguous values. The first dimension must\n * be the same length as the ambiguousIndexes array\n *\n * @throws FormatException\n * @throws ChecksumException\n */\n PDF417ScanningDecoder.createDecoderResultFromAmbiguousValues = function (ecLevel, codewords, erasureArray, ambiguousIndexes, ambiguousIndexValues) {\n var ambiguousIndexCount = new Int32Array(ambiguousIndexes.length);\n var tries = 100;\n while (tries-- > 0) {\n for (var i /*int*/ = 0; i < ambiguousIndexCount.length; i++) {\n codewords[ambiguousIndexes[i]] = ambiguousIndexValues[i][ambiguousIndexCount[i]];\n }\n try {\n return PDF417ScanningDecoder.decodeCodewords(codewords, ecLevel, erasureArray);\n }\n catch (err) {\n var ignored = err instanceof ChecksumException;\n if (!ignored) {\n throw err;\n }\n }\n if (ambiguousIndexCount.length === 0) {\n throw ChecksumException.getChecksumInstance();\n }\n for (var i /*int*/ = 0; i < ambiguousIndexCount.length; i++) {\n if (ambiguousIndexCount[i] < ambiguousIndexValues[i].length - 1) {\n ambiguousIndexCount[i]++;\n break;\n }\n else {\n ambiguousIndexCount[i] = 0;\n if (i === ambiguousIndexCount.length - 1) {\n throw ChecksumException.getChecksumInstance();\n }\n }\n }\n }\n throw ChecksumException.getChecksumInstance();\n };\n PDF417ScanningDecoder.createBarcodeMatrix = function (detectionResult) {\n var e_3, _a, e_4, _b;\n // let barcodeMatrix: BarcodeValue[][] =\n // new BarcodeValue[detectionResult.getBarcodeRowCount()][detectionResult.getBarcodeColumnCount() + 2];\n var barcodeMatrix = Array.from({ length: detectionResult.getBarcodeRowCount() }, function () { return new Array(detectionResult.getBarcodeColumnCount() + 2); });\n for (var row /*int*/ = 0; row < barcodeMatrix.length; row++) {\n for (var column_1 /*int*/ = 0; column_1 < barcodeMatrix[row].length; column_1++) {\n barcodeMatrix[row][column_1] = new BarcodeValue();\n }\n }\n var column = 0;\n try {\n for (var _c = __values(detectionResult.getDetectionResultColumns()), _d = _c.next(); !_d.done; _d = _c.next()) {\n var detectionResultColumn = _d.value /*DetectionResultColumn*/;\n if (detectionResultColumn != null) {\n try {\n for (var _e = (e_4 = void 0, __values(detectionResultColumn.getCodewords())), _f = _e.next(); !_f.done; _f = _e.next()) {\n var codeword = _f.value /*Codeword*/;\n if (codeword != null) {\n var rowNumber = codeword.getRowNumber();\n if (rowNumber >= 0) {\n if (rowNumber >= barcodeMatrix.length) {\n // We have more rows than the barcode metadata allows for, ignore them.\n continue;\n }\n barcodeMatrix[rowNumber][column].setValue(codeword.getValue());\n }\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n }\n finally { if (e_4) throw e_4.error; }\n }\n }\n column++;\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return barcodeMatrix;\n };\n PDF417ScanningDecoder.isValidBarcodeColumn = function (detectionResult, barcodeColumn) {\n return barcodeColumn >= 0 && barcodeColumn <= detectionResult.getBarcodeColumnCount() + 1;\n };\n PDF417ScanningDecoder.getStartColumn = function (detectionResult, barcodeColumn, imageRow, leftToRight) {\n var e_5, _a;\n var offset = leftToRight ? 1 : -1;\n var codeword = null;\n if (PDF417ScanningDecoder.isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) {\n codeword = detectionResult.getDetectionResultColumn(barcodeColumn - offset).getCodeword(imageRow);\n }\n if (codeword != null) {\n return leftToRight ? codeword.getEndX() : codeword.getStartX();\n }\n codeword = detectionResult.getDetectionResultColumn(barcodeColumn).getCodewordNearby(imageRow);\n if (codeword != null) {\n return leftToRight ? codeword.getStartX() : codeword.getEndX();\n }\n if (PDF417ScanningDecoder.isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) {\n codeword = detectionResult.getDetectionResultColumn(barcodeColumn - offset).getCodewordNearby(imageRow);\n }\n if (codeword != null) {\n return leftToRight ? codeword.getEndX() : codeword.getStartX();\n }\n var skippedColumns = 0;\n while (PDF417ScanningDecoder.isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) {\n barcodeColumn -= offset;\n try {\n for (var _b = (e_5 = void 0, __values(detectionResult.getDetectionResultColumn(barcodeColumn).getCodewords())), _c = _b.next(); !_c.done; _c = _b.next()) {\n var previousRowCodeword = _c.value /*Codeword*/;\n if (previousRowCodeword != null) {\n return (leftToRight ? previousRowCodeword.getEndX() : previousRowCodeword.getStartX()) +\n offset *\n skippedColumns *\n (previousRowCodeword.getEndX() - previousRowCodeword.getStartX());\n }\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_5) throw e_5.error; }\n }\n skippedColumns++;\n }\n return leftToRight ? detectionResult.getBoundingBox().getMinX() : detectionResult.getBoundingBox().getMaxX();\n };\n PDF417ScanningDecoder.detectCodeword = function (image, minColumn, maxColumn, leftToRight, startColumn, imageRow, minCodewordWidth, maxCodewordWidth) {\n startColumn = PDF417ScanningDecoder.adjustCodewordStartColumn(image, minColumn, maxColumn, leftToRight, startColumn, imageRow);\n // we usually know fairly exact now how long a codeword is. We should provide minimum and maximum expected length\n // and try to adjust the read pixels, e.g. remove single pixel errors or try to cut off exceeding pixels.\n // min and maxCodewordWidth should not be used as they are calculated for the whole barcode an can be inaccurate\n // for the current position\n var moduleBitCount = PDF417ScanningDecoder.getModuleBitCount(image, minColumn, maxColumn, leftToRight, startColumn, imageRow);\n if (moduleBitCount == null) {\n return null;\n }\n var endColumn;\n var codewordBitCount = MathUtils.sum(moduleBitCount);\n if (leftToRight) {\n endColumn = startColumn + codewordBitCount;\n }\n else {\n for (var i /*int*/ = 0; i < moduleBitCount.length / 2; i++) {\n var tmpCount = moduleBitCount[i];\n moduleBitCount[i] = moduleBitCount[moduleBitCount.length - 1 - i];\n moduleBitCount[moduleBitCount.length - 1 - i] = tmpCount;\n }\n endColumn = startColumn;\n startColumn = endColumn - codewordBitCount;\n }\n // TODO implement check for width and correction of black and white bars\n // use start (and maybe stop pattern) to determine if black bars are wider than white bars. If so, adjust.\n // should probably done only for codewords with a lot more than 17 bits.\n // The following fixes 10-1.png, which has wide black bars and small white bars\n // for (let i /*int*/ = 0; i < moduleBitCount.length; i++) {\n // if (i % 2 === 0) {\n // moduleBitCount[i]--;\n // } else {\n // moduleBitCount[i]++;\n // }\n // }\n // We could also use the width of surrounding codewords for more accurate results, but this seems\n // sufficient for now\n if (!PDF417ScanningDecoder.checkCodewordSkew(codewordBitCount, minCodewordWidth, maxCodewordWidth)) {\n // We could try to use the startX and endX position of the codeword in the same column in the previous row,\n // create the bit count from it and normalize it to 8. This would help with single pixel errors.\n return null;\n }\n var decodedValue = PDF417CodewordDecoder.getDecodedValue(moduleBitCount);\n var codeword = PDF417Common.getCodeword(decodedValue);\n if (codeword === -1) {\n return null;\n }\n return new Codeword(startColumn, endColumn, PDF417ScanningDecoder.getCodewordBucketNumber(decodedValue), codeword);\n };\n PDF417ScanningDecoder.getModuleBitCount = function (image, minColumn, maxColumn, leftToRight, startColumn, imageRow) {\n var imageColumn = startColumn;\n var moduleBitCount = new Int32Array(8);\n var moduleNumber = 0;\n var increment = leftToRight ? 1 : -1;\n var previousPixelValue = leftToRight;\n while ((leftToRight ? imageColumn < maxColumn : imageColumn >= minColumn) &&\n moduleNumber < moduleBitCount.length) {\n if (image.get(imageColumn, imageRow) === previousPixelValue) {\n moduleBitCount[moduleNumber]++;\n imageColumn += increment;\n }\n else {\n moduleNumber++;\n previousPixelValue = !previousPixelValue;\n }\n }\n if (moduleNumber === moduleBitCount.length ||\n ((imageColumn === (leftToRight ? maxColumn : minColumn)) &&\n moduleNumber === moduleBitCount.length - 1)) {\n return moduleBitCount;\n }\n return null;\n };\n PDF417ScanningDecoder.getNumberOfECCodeWords = function (barcodeECLevel) {\n return 2 << barcodeECLevel;\n };\n PDF417ScanningDecoder.adjustCodewordStartColumn = function (image, minColumn, maxColumn, leftToRight, codewordStartColumn, imageRow) {\n var correctedStartColumn = codewordStartColumn;\n var increment = leftToRight ? -1 : 1;\n // there should be no black pixels before the start column. If there are, then we need to start earlier.\n for (var i /*int*/ = 0; i < 2; i++) {\n while ((leftToRight ? correctedStartColumn >= minColumn : correctedStartColumn < maxColumn) &&\n leftToRight === image.get(correctedStartColumn, imageRow)) {\n if (Math.abs(codewordStartColumn - correctedStartColumn) > PDF417ScanningDecoder.CODEWORD_SKEW_SIZE) {\n return codewordStartColumn;\n }\n correctedStartColumn += increment;\n }\n increment = -increment;\n leftToRight = !leftToRight;\n }\n return correctedStartColumn;\n };\n PDF417ScanningDecoder.checkCodewordSkew = function (codewordSize, minCodewordWidth, maxCodewordWidth) {\n return minCodewordWidth - PDF417ScanningDecoder.CODEWORD_SKEW_SIZE <= codewordSize &&\n codewordSize <= maxCodewordWidth + PDF417ScanningDecoder.CODEWORD_SKEW_SIZE;\n };\n /**\n * @throws FormatException,\n * @throws ChecksumException\n */\n PDF417ScanningDecoder.decodeCodewords = function (codewords, ecLevel, erasures) {\n if (codewords.length === 0) {\n throw FormatException.getFormatInstance();\n }\n var numECCodewords = 1 << (ecLevel + 1);\n var correctedErrorsCount = PDF417ScanningDecoder.correctErrors(codewords, erasures, numECCodewords);\n PDF417ScanningDecoder.verifyCodewordCount(codewords, numECCodewords);\n // Decode the codewords\n var decoderResult = DecodedBitStreamParser.decode(codewords, '' + ecLevel);\n decoderResult.setErrorsCorrected(correctedErrorsCount);\n decoderResult.setErasures(erasures.length);\n return decoderResult;\n };\n /**\n *

Given data and error-correction codewords received, possibly corrupted by errors, attempts to\n * correct the errors in-place.

\n *\n * @param codewords data and error correction codewords\n * @param erasures positions of any known erasures\n * @param numECCodewords number of error correction codewords that are available in codewords\n * @throws ChecksumException if error correction fails\n */\n PDF417ScanningDecoder.correctErrors = function (codewords, erasures, numECCodewords) {\n if (erasures != null &&\n erasures.length > numECCodewords / 2 + PDF417ScanningDecoder.MAX_ERRORS ||\n numECCodewords < 0 ||\n numECCodewords > PDF417ScanningDecoder.MAX_EC_CODEWORDS) {\n // Too many errors or EC Codewords is corrupted\n throw ChecksumException.getChecksumInstance();\n }\n return PDF417ScanningDecoder.errorCorrection.decode(codewords, numECCodewords, erasures);\n };\n /**\n * Verify that all is OK with the codeword array.\n * @throws FormatException\n */\n PDF417ScanningDecoder.verifyCodewordCount = function (codewords, numECCodewords) {\n if (codewords.length < 4) {\n // Codeword array size should be at least 4 allowing for\n // Count CW, At least one Data CW, Error Correction CW, Error Correction CW\n throw FormatException.getFormatInstance();\n }\n // The first codeword, the Symbol Length Descriptor, shall always encode the total number of data\n // codewords in the symbol, including the Symbol Length Descriptor itself, data codewords and pad\n // codewords, but excluding the number of error correction codewords.\n var numberOfCodewords = codewords[0];\n if (numberOfCodewords > codewords.length) {\n throw FormatException.getFormatInstance();\n }\n if (numberOfCodewords === 0) {\n // Reset to the length of the array - 8 (Allow for at least level 3 Error Correction (8 Error Codewords)\n if (numECCodewords < codewords.length) {\n codewords[0] = codewords.length - numECCodewords;\n }\n else {\n throw FormatException.getFormatInstance();\n }\n }\n };\n PDF417ScanningDecoder.getBitCountForCodeword = function (codeword) {\n var result = new Int32Array(8);\n var previousValue = 0;\n var i = result.length - 1;\n while (true) {\n if ((codeword & 0x1) !== previousValue) {\n previousValue = codeword & 0x1;\n i--;\n if (i < 0) {\n break;\n }\n }\n result[i]++;\n codeword >>= 1;\n }\n return result;\n };\n PDF417ScanningDecoder.getCodewordBucketNumber = function (codeword) {\n if (codeword instanceof Int32Array) {\n return this.getCodewordBucketNumber_Int32Array(codeword);\n }\n return this.getCodewordBucketNumber_number(codeword);\n };\n PDF417ScanningDecoder.getCodewordBucketNumber_number = function (codeword) {\n return PDF417ScanningDecoder.getCodewordBucketNumber(PDF417ScanningDecoder.getBitCountForCodeword(codeword));\n };\n PDF417ScanningDecoder.getCodewordBucketNumber_Int32Array = function (moduleBitCount) {\n return (moduleBitCount[0] - moduleBitCount[2] + moduleBitCount[4] - moduleBitCount[6] + 9) % 9;\n };\n PDF417ScanningDecoder.toString = function (barcodeMatrix) {\n var formatter = new Formatter();\n // try (let formatter = new Formatter()) {\n for (var row /*int*/ = 0; row < barcodeMatrix.length; row++) {\n formatter.format('Row %2d: ', row);\n for (var column /*int*/ = 0; column < barcodeMatrix[row].length; column++) {\n var barcodeValue = barcodeMatrix[row][column];\n if (barcodeValue.getValue().length === 0) {\n formatter.format(' ', null);\n }\n else {\n formatter.format('%4d(%2d)', barcodeValue.getValue()[0], barcodeValue.getConfidence(barcodeValue.getValue()[0]));\n }\n }\n formatter.format('%n');\n }\n return formatter.toString();\n // }\n };\n /*final*/ PDF417ScanningDecoder.CODEWORD_SKEW_SIZE = 2;\n /*final*/ PDF417ScanningDecoder.MAX_ERRORS = 3;\n /*final*/ PDF417ScanningDecoder.MAX_EC_CODEWORDS = 512;\n /*final*/ PDF417ScanningDecoder.errorCorrection = new ErrorCorrection();\n return PDF417ScanningDecoder;\n}());\nexport default PDF417ScanningDecoder;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417;\n// import com.google.zxing.BarcodeFormat;\nimport BarcodeFormat from '../BarcodeFormat';\n// import com.google.zxing.ChecksumException;\nimport ChecksumException from '../ChecksumException';\n// import com.google.zxing.FormatException;\nimport FormatException from '../FormatException';\n// import com.google.zxing.NotFoundException;\nimport NotFoundException from '../NotFoundException';\n// import com.google.zxing.Result;\nimport Result from '../Result';\n// import com.google.zxing.common.DecoderResult;\n// import com.google.zxing.multi.MultipleBarcodeReader;\n// import com.google.zxing.pdf417.decoder.PDF417ScanningDecoder;\n// import com.google.zxing.pdf417.detector.Detector;\n// import com.google.zxing.pdf417.detector.PDF417DetectorResult;\nimport PDF417Common from './PDF417Common';\nimport Integer from '../util/Integer';\nimport ResultMetadataType from '../ResultMetadataType';\nimport Detector from './detector/Detector';\nimport PDF417ScanningDecoder from './decoder/PDF417ScanningDecoder';\n// import java.util.ArrayList;\n// import java.util.List;\n// import java.util.Map;\n/**\n * This implementation can detect and decode PDF417 codes in an image.\n *\n * @author Guenther Grau\n */\nvar PDF417Reader = /** @class */ (function () {\n function PDF417Reader() {\n }\n // private static /*final Result[]*/ EMPTY_RESULT_ARRAY: Result[] = new Result([0]);\n /**\n * Locates and decodes a PDF417 code in an image.\n *\n * @return a String representing the content encoded by the PDF417 code\n * @throws NotFoundException if a PDF417 code cannot be found,\n * @throws FormatException if a PDF417 cannot be decoded\n * @throws ChecksumException\n */\n // @Override\n PDF417Reader.prototype.decode = function (image, hints) {\n if (hints === void 0) { hints = null; }\n var result = PDF417Reader.decode(image, hints, false);\n if (result == null || result.length === 0 || result[0] == null) {\n throw NotFoundException.getNotFoundInstance();\n }\n return result[0];\n };\n /**\n *\n * @param BinaryBitmap\n * @param image\n * @throws NotFoundException\n */\n // @Override\n PDF417Reader.prototype.decodeMultiple = function (image, hints) {\n if (hints === void 0) { hints = null; }\n try {\n return PDF417Reader.decode(image, hints, true);\n }\n catch (ignored) {\n if (ignored instanceof FormatException || ignored instanceof ChecksumException) {\n throw NotFoundException.getNotFoundInstance();\n }\n throw ignored;\n }\n };\n /**\n *\n * @param image\n * @param hints\n * @param multiple\n *\n * @throws NotFoundException\n * @throws FormatExceptionß\n * @throws ChecksumException\n */\n PDF417Reader.decode = function (image, hints, multiple) {\n var e_1, _a;\n var results = new Array();\n var detectorResult = Detector.detectMultiple(image, hints, multiple);\n try {\n for (var _b = __values(detectorResult.getPoints()), _c = _b.next(); !_c.done; _c = _b.next()) {\n var points = _c.value;\n var decoderResult = PDF417ScanningDecoder.decode(detectorResult.getBits(), points[4], points[5], points[6], points[7], PDF417Reader.getMinCodewordWidth(points), PDF417Reader.getMaxCodewordWidth(points));\n var result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), undefined, points, BarcodeFormat.PDF_417);\n result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, decoderResult.getECLevel());\n var pdf417ResultMetadata = decoderResult.getOther();\n if (pdf417ResultMetadata != null) {\n result.putMetadata(ResultMetadataType.PDF417_EXTRA_METADATA, pdf417ResultMetadata);\n }\n results.push(result);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return results.map(function (x) { return x; });\n };\n PDF417Reader.getMaxWidth = function (p1, p2) {\n if (p1 == null || p2 == null) {\n return 0;\n }\n return Math.trunc(Math.abs(p1.getX() - p2.getX()));\n };\n PDF417Reader.getMinWidth = function (p1, p2) {\n if (p1 == null || p2 == null) {\n return Integer.MAX_VALUE;\n }\n return Math.trunc(Math.abs(p1.getX() - p2.getX()));\n };\n PDF417Reader.getMaxCodewordWidth = function (p) {\n return Math.floor(Math.max(Math.max(PDF417Reader.getMaxWidth(p[0], p[4]), PDF417Reader.getMaxWidth(p[6], p[2]) * PDF417Common.MODULES_IN_CODEWORD /\n PDF417Common.MODULES_IN_STOP_PATTERN), Math.max(PDF417Reader.getMaxWidth(p[1], p[5]), PDF417Reader.getMaxWidth(p[7], p[3]) * PDF417Common.MODULES_IN_CODEWORD /\n PDF417Common.MODULES_IN_STOP_PATTERN)));\n };\n PDF417Reader.getMinCodewordWidth = function (p) {\n return Math.floor(Math.min(Math.min(PDF417Reader.getMinWidth(p[0], p[4]), PDF417Reader.getMinWidth(p[6], p[2]) * PDF417Common.MODULES_IN_CODEWORD /\n PDF417Common.MODULES_IN_STOP_PATTERN), Math.min(PDF417Reader.getMinWidth(p[1], p[5]), PDF417Reader.getMinWidth(p[7], p[3]) * PDF417Common.MODULES_IN_CODEWORD /\n PDF417Common.MODULES_IN_STOP_PATTERN)));\n };\n // @Override\n PDF417Reader.prototype.reset = function () {\n // nothing needs to be reset\n };\n return PDF417Reader;\n}());\nexport default PDF417Reader;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar ReaderException = /** @class */ (function (_super) {\n __extends(ReaderException, _super);\n function ReaderException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ReaderException.kind = 'ReaderException';\n return ReaderException;\n}(Exception));\nexport default ReaderException;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport DecodeHintType from './DecodeHintType';\nimport BarcodeFormat from './BarcodeFormat';\nimport QRCodeReader from './qrcode/QRCodeReader';\nimport AztecReader from './aztec/AztecReader';\nimport MultiFormatOneDReader from './oned/MultiFormatOneDReader';\nimport DataMatrixReader from './datamatrix/DataMatrixReader';\nimport NotFoundException from './NotFoundException';\nimport PDF417Reader from './pdf417/PDF417Reader';\nimport ReaderException from './ReaderException';\n/*namespace com.google.zxing {*/\n/**\n * MultiFormatReader is a convenience class and the main entry point into the library for most uses.\n * By default it attempts to decode all barcode formats that the library supports. Optionally, you\n * can provide a hints object to request different behavior, for example only decoding QR codes.\n *\n * @author Sean Owen\n * @author dswitkin@google.com (Daniel Switkin)\n */\nvar MultiFormatReader = /** @class */ (function () {\n function MultiFormatReader() {\n }\n /**\n * This version of decode honors the intent of Reader.decode(BinaryBitmap) in that it\n * passes null as a hint to the decoders. However, that makes it inefficient to call repeatedly.\n * Use setHints() followed by decodeWithState() for continuous scan applications.\n *\n * @param image The pixel data to decode\n * @return The contents of the image\n *\n * @throws NotFoundException Any errors which occurred\n */\n /*@Override*/\n // public decode(image: BinaryBitmap): Result {\n // setHints(null)\n // return decodeInternal(image)\n // }\n /**\n * Decode an image using the hints provided. Does not honor existing state.\n *\n * @param image The pixel data to decode\n * @param hints The hints to use, clearing the previous state.\n * @return The contents of the image\n *\n * @throws NotFoundException Any errors which occurred\n */\n /*@Override*/\n MultiFormatReader.prototype.decode = function (image, hints) {\n this.setHints(hints);\n return this.decodeInternal(image);\n };\n /**\n * Decode an image using the state set up by calling setHints() previously. Continuous scan\n * clients will get a large speed increase by using this instead of decode().\n *\n * @param image The pixel data to decode\n * @return The contents of the image\n *\n * @throws NotFoundException Any errors which occurred\n */\n MultiFormatReader.prototype.decodeWithState = function (image) {\n // Make sure to set up the default state so we don't crash\n if (this.readers === null || this.readers === undefined) {\n this.setHints(null);\n }\n return this.decodeInternal(image);\n };\n /**\n * This method adds state to the MultiFormatReader. By setting the hints once, subsequent calls\n * to decodeWithState(image) can reuse the same set of readers without reallocating memory. This\n * is important for performance in continuous scan clients.\n *\n * @param hints The set of hints to use for subsequent calls to decode(image)\n */\n MultiFormatReader.prototype.setHints = function (hints) {\n this.hints = hints;\n var tryHarder = hints !== null && hints !== undefined && undefined !== hints.get(DecodeHintType.TRY_HARDER);\n /*@SuppressWarnings(\"unchecked\")*/\n var formats = hints === null || hints === undefined ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS);\n var readers = new Array();\n if (formats !== null && formats !== undefined) {\n var addOneDReader = formats.some(function (f) {\n return f === BarcodeFormat.UPC_A ||\n f === BarcodeFormat.UPC_E ||\n f === BarcodeFormat.EAN_13 ||\n f === BarcodeFormat.EAN_8 ||\n f === BarcodeFormat.CODABAR ||\n f === BarcodeFormat.CODE_39 ||\n f === BarcodeFormat.CODE_93 ||\n f === BarcodeFormat.CODE_128 ||\n f === BarcodeFormat.ITF ||\n f === BarcodeFormat.RSS_14 ||\n f === BarcodeFormat.RSS_EXPANDED;\n });\n // Put 1D readers upfront in \"normal\" mode\n // TYPESCRIPTPORT: TODO: uncomment below as they are ported\n if (addOneDReader && !tryHarder) {\n readers.push(new MultiFormatOneDReader(hints));\n }\n if (formats.includes(BarcodeFormat.QR_CODE)) {\n readers.push(new QRCodeReader());\n }\n if (formats.includes(BarcodeFormat.DATA_MATRIX)) {\n readers.push(new DataMatrixReader());\n }\n if (formats.includes(BarcodeFormat.AZTEC)) {\n readers.push(new AztecReader());\n }\n if (formats.includes(BarcodeFormat.PDF_417)) {\n readers.push(new PDF417Reader());\n }\n // if (formats.includes(BarcodeFormat.MAXICODE)) {\n // readers.push(new MaxiCodeReader())\n // }\n // At end in \"try harder\" mode\n if (addOneDReader && tryHarder) {\n readers.push(new MultiFormatOneDReader(hints));\n }\n }\n if (readers.length === 0) {\n if (!tryHarder) {\n readers.push(new MultiFormatOneDReader(hints));\n }\n readers.push(new QRCodeReader());\n readers.push(new DataMatrixReader());\n readers.push(new AztecReader());\n readers.push(new PDF417Reader());\n // readers.push(new MaxiCodeReader())\n if (tryHarder) {\n readers.push(new MultiFormatOneDReader(hints));\n }\n }\n this.readers = readers; // .toArray(new Reader[readers.size()])\n };\n /*@Override*/\n MultiFormatReader.prototype.reset = function () {\n var e_1, _a;\n if (this.readers !== null) {\n try {\n for (var _b = __values(this.readers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var reader = _c.value;\n reader.reset();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n };\n /**\n * @throws NotFoundException\n */\n MultiFormatReader.prototype.decodeInternal = function (image) {\n var e_2, _a;\n if (this.readers === null) {\n throw new ReaderException('No readers where selected, nothing can be read.');\n }\n try {\n for (var _b = __values(this.readers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var reader = _c.value;\n // Trying to decode with ${reader} reader.\n try {\n return reader.decode(image, this.hints);\n }\n catch (ex) {\n if (ex instanceof ReaderException) {\n continue;\n }\n // Bad Exception.\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n throw new NotFoundException('No MultiFormat Readers were able to detect the code.');\n };\n return MultiFormatReader;\n}());\nexport default MultiFormatReader;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport MultiFormatReader from '../core/MultiFormatReader';\nvar BrowserMultiFormatReader = /** @class */ (function (_super) {\n __extends(BrowserMultiFormatReader, _super);\n function BrowserMultiFormatReader(hints, timeBetweenScansMillis) {\n if (hints === void 0) { hints = null; }\n if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n var _this = this;\n var reader = new MultiFormatReader();\n reader.setHints(hints);\n _this = _super.call(this, reader, timeBetweenScansMillis) || this;\n return _this;\n }\n /**\n * Overwrite decodeBitmap to call decodeWithState, which will pay\n * attention to the hints set in the constructor function\n */\n BrowserMultiFormatReader.prototype.decodeBitmap = function (binaryBitmap) {\n return this.reader.decodeWithState(binaryBitmap);\n };\n return BrowserMultiFormatReader;\n}(BrowserCodeReader));\nexport { BrowserMultiFormatReader };\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing {*/\n/**\n * These are a set of hints that you may pass to Writers to specify their behavior.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n */\nvar EncodeHintType;\n(function (EncodeHintType) {\n /**\n * Specifies what degree of error correction to use, for example in QR Codes.\n * Type depends on the encoder. For example for QR codes it's type\n * {@link com.google.zxing.qrcode.decoder.ErrorCorrectionLevel ErrorCorrectionLevel}.\n * For Aztec it is of type {@link Integer}, representing the minimal percentage of error correction words.\n * For PDF417 it is of type {@link Integer}, valid values being 0 to 8.\n * In all cases, it can also be a {@link String} representation of the desired value as well.\n * Note: an Aztec symbol should have a minimum of 25% EC words.\n */\n EncodeHintType[EncodeHintType[\"ERROR_CORRECTION\"] = 0] = \"ERROR_CORRECTION\";\n /**\n * Specifies what character encoding to use where applicable (type {@link String})\n */\n EncodeHintType[EncodeHintType[\"CHARACTER_SET\"] = 1] = \"CHARACTER_SET\";\n /**\n * Specifies the matrix shape for Data Matrix (type {@link com.google.zxing.datamatrix.encoder.SymbolShapeHint})\n */\n EncodeHintType[EncodeHintType[\"DATA_MATRIX_SHAPE\"] = 2] = \"DATA_MATRIX_SHAPE\";\n /**\n * Specifies whether to use compact mode for Data Matrix (type {@link Boolean}, or \"true\" or \"false\"\n * {@link String } value).\n * The compact encoding mode also supports the encoding of characters that are not in the ISO-8859-1\n * character set via ECIs.\n * Please note that in that case, the most compact character encoding is chosen for characters in\n * the input that are not in the ISO-8859-1 character set. Based on experience, some scanners do not\n * support encodings like cp-1256 (Arabic). In such cases the encoding can be forced to UTF-8 by\n * means of the {@link #CHARACTER_SET} encoding hint.\n * Compact encoding also provides GS1-FNC1 support when {@link #GS1_FORMAT} is selected. In this case\n * group-separator character (ASCII 29 decimal) can be used to encode the positions of FNC1 codewords\n * for the purpose of delimiting AIs.\n * This option and {@link #FORCE_C40} are mutually exclusive.\n */\n EncodeHintType[EncodeHintType[\"DATA_MATRIX_COMPACT\"] = 3] = \"DATA_MATRIX_COMPACT\";\n /**\n * Specifies a minimum barcode size (type {@link Dimension}). Only applicable to Data Matrix now.\n *\n * @deprecated use width/height params in\n * {@link com.google.zxing.datamatrix.DataMatrixWriter#encode(String, BarcodeFormat, int, int)}\n */\n /*@Deprecated*/\n EncodeHintType[EncodeHintType[\"MIN_SIZE\"] = 4] = \"MIN_SIZE\";\n /**\n * Specifies a maximum barcode size (type {@link Dimension}). Only applicable to Data Matrix now.\n *\n * @deprecated without replacement\n */\n /*@Deprecated*/\n EncodeHintType[EncodeHintType[\"MAX_SIZE\"] = 5] = \"MAX_SIZE\";\n /**\n * Specifies margin, in pixels, to use when generating the barcode. The meaning can vary\n * by format; for example it controls margin before and after the barcode horizontally for\n * most 1D formats. (Type {@link Integer}, or {@link String} representation of the integer value).\n */\n EncodeHintType[EncodeHintType[\"MARGIN\"] = 6] = \"MARGIN\";\n /**\n * Specifies whether to use compact mode for PDF417 (type {@link Boolean}, or \"true\" or \"false\"\n * {@link String} value).\n */\n EncodeHintType[EncodeHintType[\"PDF417_COMPACT\"] = 7] = \"PDF417_COMPACT\";\n /**\n * Specifies what compaction mode to use for PDF417 (type\n * {@link com.google.zxing.pdf417.encoder.Compaction Compaction} or {@link String} value of one of its\n * enum values).\n */\n EncodeHintType[EncodeHintType[\"PDF417_COMPACTION\"] = 8] = \"PDF417_COMPACTION\";\n /**\n * Specifies the minimum and maximum number of rows and columns for PDF417 (type\n * {@link com.google.zxing.pdf417.encoder.Dimensions Dimensions}).\n */\n EncodeHintType[EncodeHintType[\"PDF417_DIMENSIONS\"] = 9] = \"PDF417_DIMENSIONS\";\n /**\n * Specifies the required number of layers for an Aztec code.\n * A negative number (-1, -2, -3, -4) specifies a compact Aztec code.\n * 0 indicates to use the minimum number of layers (the default).\n * A positive number (1, 2, .. 32) specifies a normal (non-compact) Aztec code.\n * (Type {@link Integer}, or {@link String} representation of the integer value).\n */\n EncodeHintType[EncodeHintType[\"AZTEC_LAYERS\"] = 10] = \"AZTEC_LAYERS\";\n /**\n * Specifies the exact version of QR code to be encoded.\n * (Type {@link Integer}, or {@link String} representation of the integer value).\n */\n EncodeHintType[EncodeHintType[\"QR_VERSION\"] = 11] = \"QR_VERSION\";\n /**\n * Specifies whether the data should be encoded to the GS1 standard (type {@link Boolean}, or \"true\" or \"false\"\n * {@link String } value).\n */\n EncodeHintType[EncodeHintType[\"GS1_FORMAT\"] = 12] = \"GS1_FORMAT\";\n /**\n * Forces C40 encoding for data-matrix (type {@link Boolean}, or \"true\" or \"false\") {@link String } value). This\n * option and {@link #DATA_MATRIX_COMPACT} are mutually exclusive.\n */\n EncodeHintType[EncodeHintType[\"FORCE_C40\"] = 13] = \"FORCE_C40\";\n})(EncodeHintType || (EncodeHintType = {}));\nexport default EncodeHintType;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport PDF417Reader from '../core/pdf417/PDF417Reader';\n/**\n * @deprecated Moving to @zxing/browser\n *\n * QR Code reader to use from browser.\n */\nvar BrowserPDF417Reader = /** @class */ (function (_super) {\n __extends(BrowserPDF417Reader, _super);\n /**\n * Creates an instance of BrowserPDF417Reader.\n * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n */\n function BrowserPDF417Reader(timeBetweenScansMillis) {\n if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n return _super.call(this, new PDF417Reader(), timeBetweenScansMillis) || this;\n }\n return BrowserPDF417Reader;\n}(BrowserCodeReader));\nexport { BrowserPDF417Reader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport QRCodeReader from '../core/qrcode/QRCodeReader';\n/**\n * @deprecated Moving to @zxing/browser\n *\n * QR Code reader to use from browser.\n */\nvar BrowserQRCodeReader = /** @class */ (function (_super) {\n __extends(BrowserQRCodeReader, _super);\n /**\n * Creates an instance of BrowserQRCodeReader.\n * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n */\n function BrowserQRCodeReader(timeBetweenScansMillis) {\n if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n return _super.call(this, new QRCodeReader(), timeBetweenScansMillis) || this;\n }\n return BrowserQRCodeReader;\n}(BrowserCodeReader));\nexport { BrowserQRCodeReader };\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport GenericGFPoly from './GenericGFPoly';\nimport System from '../../util/System';\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/**\n *

Implements Reed-Solomon encoding, as the name implies.

\n *\n * @author Sean Owen\n * @author William Rucklidge\n */\nvar ReedSolomonEncoder = /** @class */ (function () {\n /**\n * A reed solomon error-correcting encoding constructor is created by\n * passing as Galois Field with of size equal to the number of code\n * words (symbols) in the alphabet (the number of values in each\n * element of arrays that are encoded/decoded).\n * @param field A galois field with a number of elements equal to the size\n * of the alphabet of symbols to encode.\n */\n function ReedSolomonEncoder(field) {\n this.field = field;\n this.cachedGenerators = [];\n this.cachedGenerators.push(new GenericGFPoly(field, Int32Array.from([1])));\n }\n ReedSolomonEncoder.prototype.buildGenerator = function (degree /*int*/) {\n var cachedGenerators = this.cachedGenerators;\n if (degree >= cachedGenerators.length) {\n var lastGenerator = cachedGenerators[cachedGenerators.length - 1];\n var field = this.field;\n for (var d = cachedGenerators.length; d <= degree; d++) {\n var nextGenerator = lastGenerator.multiply(new GenericGFPoly(field, Int32Array.from([1, field.exp(d - 1 + field.getGeneratorBase())])));\n cachedGenerators.push(nextGenerator);\n lastGenerator = nextGenerator;\n }\n }\n return cachedGenerators[degree];\n };\n /**\n *

Encode a sequence of code words (symbols) using Reed-Solomon to allow decoders\n * to detect and correct errors that may have been introduced when the resulting\n * data is stored or transmitted.

\n *\n * @param toEncode array used for both and output. Caller initializes the array with\n * the code words (symbols) to be encoded followed by empty elements allocated to make\n * space for error-correction code words in the encoded output. The array contains\n * the encdoded output when encode returns. Code words are encoded as numbers from\n * 0 to n-1, where n is the number of possible code words (symbols), as determined\n * by the size of the Galois Field passed in the constructor of this object.\n * @param ecBytes the number of elements reserved in the array (first parameter)\n * to store error-correction code words. Thus, the number of code words (symbols)\n * to encode in the first parameter is thus toEncode.length - ecBytes.\n * Note, the use of \"bytes\" in the name of this parameter is misleading, as there may\n * be more or fewer than 256 symbols being encoded, as determined by the number of\n * elements in the Galois Field passed as a constructor to this object.\n * @throws IllegalArgumentException thrown in response to validation errros.\n */\n ReedSolomonEncoder.prototype.encode = function (toEncode, ecBytes /*int*/) {\n if (ecBytes === 0) {\n throw new IllegalArgumentException('No error correction bytes');\n }\n var dataBytes = toEncode.length - ecBytes;\n if (dataBytes <= 0) {\n throw new IllegalArgumentException('No data bytes provided');\n }\n var generator = this.buildGenerator(ecBytes);\n var infoCoefficients = new Int32Array(dataBytes);\n System.arraycopy(toEncode, 0, infoCoefficients, 0, dataBytes);\n var info = new GenericGFPoly(this.field, infoCoefficients);\n info = info.multiplyByMonomial(ecBytes, 1);\n var remainder = info.divide(generator)[1];\n var coefficients = remainder.getCoefficients();\n var numZeroCoefficients = ecBytes - coefficients.length;\n for (var i = 0; i < numZeroCoefficients; i++) {\n toEncode[dataBytes + i] = 0;\n }\n System.arraycopy(coefficients, 0, toEncode, dataBytes + numZeroCoefficients, coefficients.length);\n };\n return ReedSolomonEncoder;\n}());\nexport default ReedSolomonEncoder;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/**\n * @author Satoru Takabayashi\n * @author Daniel Switkin\n * @author Sean Owen\n */\nvar MaskUtil = /** @class */ (function () {\n function MaskUtil() {\n // do nothing\n }\n /**\n * Apply mask penalty rule 1 and return the penalty. Find repetitive cells with the same color and\n * give penalty to them. Example: 00000 or 11111.\n */\n MaskUtil.applyMaskPenaltyRule1 = function (matrix) {\n return MaskUtil.applyMaskPenaltyRule1Internal(matrix, true) + MaskUtil.applyMaskPenaltyRule1Internal(matrix, false);\n };\n /**\n * Apply mask penalty rule 2 and return the penalty. Find 2x2 blocks with the same color and give\n * penalty to them. This is actually equivalent to the spec's rule, which is to find MxN blocks and give a\n * penalty proportional to (M-1)x(N-1), because this is the number of 2x2 blocks inside such a block.\n */\n MaskUtil.applyMaskPenaltyRule2 = function (matrix) {\n var penalty = 0;\n var array = matrix.getArray();\n var width = matrix.getWidth();\n var height = matrix.getHeight();\n for (var y = 0; y < height - 1; y++) {\n var arrayY = array[y];\n for (var x = 0; x < width - 1; x++) {\n var value = arrayY[x];\n if (value === arrayY[x + 1] && value === array[y + 1][x] && value === array[y + 1][x + 1]) {\n penalty++;\n }\n }\n }\n return MaskUtil.N2 * penalty;\n };\n /**\n * Apply mask penalty rule 3 and return the penalty. Find consecutive runs of 1:1:3:1:1:4\n * starting with black, or 4:1:1:3:1:1 starting with white, and give penalty to them. If we\n * find patterns like 000010111010000, we give penalty once.\n */\n MaskUtil.applyMaskPenaltyRule3 = function (matrix) {\n var numPenalties = 0;\n var array = matrix.getArray();\n var width = matrix.getWidth();\n var height = matrix.getHeight();\n for (var y = 0; y < height; y++) {\n for (var x = 0; x < width; x++) {\n var arrayY = array[y]; // We can at least optimize this access\n if (x + 6 < width &&\n arrayY[x] === 1 &&\n arrayY[x + 1] === 0 &&\n arrayY[x + 2] === 1 &&\n arrayY[x + 3] === 1 &&\n arrayY[x + 4] === 1 &&\n arrayY[x + 5] === 0 &&\n arrayY[x + 6] === 1 &&\n (MaskUtil.isWhiteHorizontal(arrayY, x - 4, x) || MaskUtil.isWhiteHorizontal(arrayY, x + 7, x + 11))) {\n numPenalties++;\n }\n if (y + 6 < height &&\n array[y][x] === 1 &&\n array[y + 1][x] === 0 &&\n array[y + 2][x] === 1 &&\n array[y + 3][x] === 1 &&\n array[y + 4][x] === 1 &&\n array[y + 5][x] === 0 &&\n array[y + 6][x] === 1 &&\n (MaskUtil.isWhiteVertical(array, x, y - 4, y) || MaskUtil.isWhiteVertical(array, x, y + 7, y + 11))) {\n numPenalties++;\n }\n }\n }\n return numPenalties * MaskUtil.N3;\n };\n MaskUtil.isWhiteHorizontal = function (rowArray, from /*int*/, to /*int*/) {\n from = Math.max(from, 0);\n to = Math.min(to, rowArray.length);\n for (var i = from; i < to; i++) {\n if (rowArray[i] === 1) {\n return false;\n }\n }\n return true;\n };\n MaskUtil.isWhiteVertical = function (array, col /*int*/, from /*int*/, to /*int*/) {\n from = Math.max(from, 0);\n to = Math.min(to, array.length);\n for (var i = from; i < to; i++) {\n if (array[i][col] === 1) {\n return false;\n }\n }\n return true;\n };\n /**\n * Apply mask penalty rule 4 and return the penalty. Calculate the ratio of dark cells and give\n * penalty if the ratio is far from 50%. It gives 10 penalty for 5% distance.\n */\n MaskUtil.applyMaskPenaltyRule4 = function (matrix) {\n var numDarkCells = 0;\n var array = matrix.getArray();\n var width = matrix.getWidth();\n var height = matrix.getHeight();\n for (var y = 0; y < height; y++) {\n var arrayY = array[y];\n for (var x = 0; x < width; x++) {\n if (arrayY[x] === 1) {\n numDarkCells++;\n }\n }\n }\n var numTotalCells = matrix.getHeight() * matrix.getWidth();\n var fivePercentVariances = Math.floor(Math.abs(numDarkCells * 2 - numTotalCells) * 10 / numTotalCells);\n return fivePercentVariances * MaskUtil.N4;\n };\n /**\n * Return the mask bit for \"getMaskPattern\" at \"x\" and \"y\". See 8.8 of JISX0510:2004 for mask\n * pattern conditions.\n */\n MaskUtil.getDataMaskBit = function (maskPattern /*int*/, x /*int*/, y /*int*/) {\n var intermediate; /*int*/\n var temp; /*int*/\n switch (maskPattern) {\n case 0:\n intermediate = (y + x) & 0x1;\n break;\n case 1:\n intermediate = y & 0x1;\n break;\n case 2:\n intermediate = x % 3;\n break;\n case 3:\n intermediate = (y + x) % 3;\n break;\n case 4:\n intermediate = (Math.floor(y / 2) + Math.floor(x / 3)) & 0x1;\n break;\n case 5:\n temp = y * x;\n intermediate = (temp & 0x1) + (temp % 3);\n break;\n case 6:\n temp = y * x;\n intermediate = ((temp & 0x1) + (temp % 3)) & 0x1;\n break;\n case 7:\n temp = y * x;\n intermediate = ((temp % 3) + ((y + x) & 0x1)) & 0x1;\n break;\n default:\n throw new IllegalArgumentException('Invalid mask pattern: ' + maskPattern);\n }\n return intermediate === 0;\n };\n /**\n * Helper function for applyMaskPenaltyRule1. We need this for doing this calculation in both\n * vertical and horizontal orders respectively.\n */\n MaskUtil.applyMaskPenaltyRule1Internal = function (matrix, isHorizontal) {\n var penalty = 0;\n var iLimit = isHorizontal ? matrix.getHeight() : matrix.getWidth();\n var jLimit = isHorizontal ? matrix.getWidth() : matrix.getHeight();\n var array = matrix.getArray();\n for (var i = 0; i < iLimit; i++) {\n var numSameBitCells = 0;\n var prevBit = -1;\n for (var j = 0; j < jLimit; j++) {\n var bit = isHorizontal ? array[i][j] : array[j][i];\n if (bit === prevBit) {\n numSameBitCells++;\n }\n else {\n if (numSameBitCells >= 5) {\n penalty += MaskUtil.N1 + (numSameBitCells - 5);\n }\n numSameBitCells = 1; // Include the cell itself.\n prevBit = bit;\n }\n }\n if (numSameBitCells >= 5) {\n penalty += MaskUtil.N1 + (numSameBitCells - 5);\n }\n }\n return penalty;\n };\n // Penalty weights from section 6.8.2.1\n MaskUtil.N1 = 3;\n MaskUtil.N2 = 3;\n MaskUtil.N3 = 40;\n MaskUtil.N4 = 10;\n return MaskUtil;\n}());\nexport default MaskUtil;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.encoder {*/\n/*import java.util.Arrays;*/\nimport Arrays from '../../util/Arrays';\nimport StringBuilder from '../../util/StringBuilder';\n/**\n * JAVAPORT: The original code was a 2D array of ints, but since it only ever gets assigned\n * -1, 0, and 1, I'm going to use less memory and go with bytes.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n */\nvar ByteMatrix = /** @class */ (function () {\n function ByteMatrix(width /*int*/, height /*int*/) {\n this.width = width;\n this.height = height;\n var bytes = new Array(height); // [height][width]\n for (var i = 0; i !== height; i++) {\n bytes[i] = new Uint8Array(width);\n }\n this.bytes = bytes;\n }\n ByteMatrix.prototype.getHeight = function () {\n return this.height;\n };\n ByteMatrix.prototype.getWidth = function () {\n return this.width;\n };\n ByteMatrix.prototype.get = function (x /*int*/, y /*int*/) {\n return this.bytes[y][x];\n };\n /**\n * @return an internal representation as bytes, in row-major order. array[y][x] represents point (x,y)\n */\n ByteMatrix.prototype.getArray = function () {\n return this.bytes;\n };\n // TYPESCRIPTPORT: preffer to let two methods instead of override to avoid type comparison inside\n ByteMatrix.prototype.setNumber = function (x /*int*/, y /*int*/, value /*byte|int*/) {\n this.bytes[y][x] = value;\n };\n // public set(x: number /*int*/, y: number /*int*/, value: number /*int*/): void {\n // bytes[y][x] = (byte) value\n // }\n ByteMatrix.prototype.setBoolean = function (x /*int*/, y /*int*/, value) {\n this.bytes[y][x] = /*(byte) */ (value ? 1 : 0);\n };\n ByteMatrix.prototype.clear = function (value /*byte*/) {\n var e_1, _a;\n try {\n for (var _b = __values(this.bytes), _c = _b.next(); !_c.done; _c = _b.next()) {\n var aByte = _c.value;\n Arrays.fill(aByte, value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n ByteMatrix.prototype.equals = function (o) {\n if (!(o instanceof ByteMatrix)) {\n return false;\n }\n var other = o;\n if (this.width !== other.width) {\n return false;\n }\n if (this.height !== other.height) {\n return false;\n }\n for (var y = 0, height = this.height; y < height; ++y) {\n var bytesY = this.bytes[y];\n var otherBytesY = other.bytes[y];\n for (var x = 0, width = this.width; x < width; ++x) {\n if (bytesY[x] !== otherBytesY[x]) {\n return false;\n }\n }\n }\n return true;\n };\n /*@Override*/\n ByteMatrix.prototype.toString = function () {\n var result = new StringBuilder(); // (2 * width * height + 2)\n for (var y = 0, height = this.height; y < height; ++y) {\n var bytesY = this.bytes[y];\n for (var x = 0, width = this.width; x < width; ++x) {\n switch (bytesY[x]) {\n case 0:\n result.append(' 0');\n break;\n case 1:\n result.append(' 1');\n break;\n default:\n result.append(' ');\n break;\n }\n }\n result.append('\\n');\n }\n return result.toString();\n };\n return ByteMatrix;\n}());\nexport default ByteMatrix;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport StringBuilder from '../../util/StringBuilder';\n/**\n * @author satorux@google.com (Satoru Takabayashi) - creator\n * @author dswitkin@google.com (Daniel Switkin) - ported from C++\n */\nvar QRCode = /** @class */ (function () {\n function QRCode() {\n this.maskPattern = -1;\n }\n QRCode.prototype.getMode = function () {\n return this.mode;\n };\n QRCode.prototype.getECLevel = function () {\n return this.ecLevel;\n };\n QRCode.prototype.getVersion = function () {\n return this.version;\n };\n QRCode.prototype.getMaskPattern = function () {\n return this.maskPattern;\n };\n QRCode.prototype.getMatrix = function () {\n return this.matrix;\n };\n /*@Override*/\n QRCode.prototype.toString = function () {\n var result = new StringBuilder(); // (200)\n result.append('<<\\n');\n result.append(' mode: ');\n result.append(this.mode ? this.mode.toString() : 'null');\n result.append('\\n ecLevel: ');\n result.append(this.ecLevel ? this.ecLevel.toString() : 'null');\n result.append('\\n version: ');\n result.append(this.version ? this.version.toString() : 'null');\n result.append('\\n maskPattern: ');\n result.append(this.maskPattern.toString());\n if (this.matrix) {\n result.append('\\n matrix:\\n');\n result.append(this.matrix.toString());\n }\n else {\n result.append('\\n matrix: null\\n');\n }\n result.append('>>\\n');\n return result.toString();\n };\n QRCode.prototype.setMode = function (value) {\n this.mode = value;\n };\n QRCode.prototype.setECLevel = function (value) {\n this.ecLevel = value;\n };\n QRCode.prototype.setVersion = function (version) {\n this.version = version;\n };\n QRCode.prototype.setMaskPattern = function (value /*int*/) {\n this.maskPattern = value;\n };\n QRCode.prototype.setMatrix = function (value) {\n this.matrix = value;\n };\n // Check if \"mask_pattern\" is valid.\n QRCode.isValidMaskPattern = function (maskPattern /*int*/) {\n return maskPattern >= 0 && maskPattern < QRCode.NUM_MASK_PATTERNS;\n };\n QRCode.NUM_MASK_PATTERNS = 8;\n return QRCode;\n}());\nexport default QRCode;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar WriterException = /** @class */ (function (_super) {\n __extends(WriterException, _super);\n function WriterException() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n WriterException.kind = 'WriterException';\n return WriterException;\n}(Exception));\nexport default WriterException;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.qrcode.encoder {*/\nimport BitArray from '../../common/BitArray';\nimport Integer from '../../util/Integer';\nimport QRCode from './QRCode';\nimport MaskUtil from './MaskUtil';\nimport WriterException from '../../WriterException';\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/**\n * @author satorux@google.com (Satoru Takabayashi) - creator\n * @author dswitkin@google.com (Daniel Switkin) - ported from C++\n */\nvar MatrixUtil = /** @class */ (function () {\n function MatrixUtil() {\n // do nothing\n }\n // Set all cells to -1 (TYPESCRIPTPORT: 255). -1 (TYPESCRIPTPORT: 255) means that the cell is empty (not set yet).\n //\n // JAVAPORT: We shouldn't need to do this at all. The code should be rewritten to begin encoding\n // with the ByteMatrix initialized all to zero.\n MatrixUtil.clearMatrix = function (matrix) {\n // TYPESCRIPTPORT: we use UintArray se changed here from -1 to 255\n matrix.clear(/*(byte) */ /*-1*/ 255);\n };\n // Build 2D matrix of QR Code from \"dataBits\" with \"ecLevel\", \"version\" and \"getMaskPattern\". On\n // success, store the result in \"matrix\" and return true.\n MatrixUtil.buildMatrix = function (dataBits, ecLevel, version, maskPattern /*int*/, matrix) {\n MatrixUtil.clearMatrix(matrix);\n MatrixUtil.embedBasicPatterns(version, matrix);\n // Type information appear with any version.\n MatrixUtil.embedTypeInfo(ecLevel, maskPattern, matrix);\n // Version info appear if version >= 7.\n MatrixUtil.maybeEmbedVersionInfo(version, matrix);\n // Data should be embedded at end.\n MatrixUtil.embedDataBits(dataBits, maskPattern, matrix);\n };\n // Embed basic patterns. On success, modify the matrix and return true.\n // The basic patterns are:\n // - Position detection patterns\n // - Timing patterns\n // - Dark dot at the left bottom corner\n // - Position adjustment patterns, if need be\n MatrixUtil.embedBasicPatterns = function (version, matrix) {\n // Let's get started with embedding big squares at corners.\n MatrixUtil.embedPositionDetectionPatternsAndSeparators(matrix);\n // Then, embed the dark dot at the left bottom corner.\n MatrixUtil.embedDarkDotAtLeftBottomCorner(matrix);\n // Position adjustment patterns appear if version >= 2.\n MatrixUtil.maybeEmbedPositionAdjustmentPatterns(version, matrix);\n // Timing patterns should be embedded after position adj. patterns.\n MatrixUtil.embedTimingPatterns(matrix);\n };\n // Embed type information. On success, modify the matrix.\n MatrixUtil.embedTypeInfo = function (ecLevel, maskPattern /*int*/, matrix) {\n var typeInfoBits = new BitArray();\n MatrixUtil.makeTypeInfoBits(ecLevel, maskPattern, typeInfoBits);\n for (var i = 0, size = typeInfoBits.getSize(); i < size; ++i) {\n // Place bits in LSB to MSB order. LSB (least significant bit) is the last value in\n // \"typeInfoBits\".\n var bit = typeInfoBits.get(typeInfoBits.getSize() - 1 - i);\n // Type info bits at the left top corner. See 8.9 of JISX0510:2004 (p.46).\n var coordinates = MatrixUtil.TYPE_INFO_COORDINATES[i];\n var x1 = coordinates[0];\n var y1 = coordinates[1];\n matrix.setBoolean(x1, y1, bit);\n if (i < 8) {\n // Right top corner.\n var x2 = matrix.getWidth() - i - 1;\n var y2 = 8;\n matrix.setBoolean(x2, y2, bit);\n }\n else {\n // Left bottom corner.\n var x2 = 8;\n var y2 = matrix.getHeight() - 7 + (i - 8);\n matrix.setBoolean(x2, y2, bit);\n }\n }\n };\n // Embed version information if need be. On success, modify the matrix and return true.\n // See 8.10 of JISX0510:2004 (p.47) for how to embed version information.\n MatrixUtil.maybeEmbedVersionInfo = function (version, matrix) {\n if (version.getVersionNumber() < 7) { // Version info is necessary if version >= 7.\n return; // Don't need version info.\n }\n var versionInfoBits = new BitArray();\n MatrixUtil.makeVersionInfoBits(version, versionInfoBits);\n var bitIndex = 6 * 3 - 1; // It will decrease from 17 to 0.\n for (var i = 0; i < 6; ++i) {\n for (var j = 0; j < 3; ++j) {\n // Place bits in LSB (least significant bit) to MSB order.\n var bit = versionInfoBits.get(bitIndex);\n bitIndex--;\n // Left bottom corner.\n matrix.setBoolean(i, matrix.getHeight() - 11 + j, bit);\n // Right bottom corner.\n matrix.setBoolean(matrix.getHeight() - 11 + j, i, bit);\n }\n }\n };\n // Embed \"dataBits\" using \"getMaskPattern\". On success, modify the matrix and return true.\n // For debugging purposes, it skips masking process if \"getMaskPattern\" is -1(TYPESCRIPTPORT: 255).\n // See 8.7 of JISX0510:2004 (p.38) for how to embed data bits.\n MatrixUtil.embedDataBits = function (dataBits, maskPattern /*int*/, matrix) {\n var bitIndex = 0;\n var direction = -1;\n // Start from the right bottom cell.\n var x = matrix.getWidth() - 1;\n var y = matrix.getHeight() - 1;\n while (x > 0) {\n // Skip the vertical timing pattern.\n if (x === 6) {\n x -= 1;\n }\n while (y >= 0 && y < matrix.getHeight()) {\n for (var i = 0; i < 2; ++i) {\n var xx = x - i;\n // Skip the cell if it's not empty.\n if (!MatrixUtil.isEmpty(matrix.get(xx, y))) {\n continue;\n }\n var bit = void 0;\n if (bitIndex < dataBits.getSize()) {\n bit = dataBits.get(bitIndex);\n ++bitIndex;\n }\n else {\n // Padding bit. If there is no bit left, we'll fill the left cells with 0, as described\n // in 8.4.9 of JISX0510:2004 (p. 24).\n bit = false;\n }\n // Skip masking if mask_pattern is -1 (TYPESCRIPTPORT: 255).\n if (maskPattern !== 255 && MaskUtil.getDataMaskBit(maskPattern, xx, y)) {\n bit = !bit;\n }\n matrix.setBoolean(xx, y, bit);\n }\n y += direction;\n }\n direction = -direction; // Reverse the direction.\n y += direction;\n x -= 2; // Move to the left.\n }\n // All bits should be consumed.\n if (bitIndex !== dataBits.getSize()) {\n throw new WriterException('Not all bits consumed: ' + bitIndex + '/' + dataBits.getSize());\n }\n };\n // Return the position of the most significant bit set (one: to) in the \"value\". The most\n // significant bit is position 32. If there is no bit set, return 0. Examples:\n // - findMSBSet(0) => 0\n // - findMSBSet(1) => 1\n // - findMSBSet(255) => 8\n MatrixUtil.findMSBSet = function (value /*int*/) {\n return 32 - Integer.numberOfLeadingZeros(value);\n };\n // Calculate BCH (Bose-Chaudhuri-Hocquenghem) code for \"value\" using polynomial \"poly\". The BCH\n // code is used for encoding type information and version information.\n // Example: Calculation of version information of 7.\n // f(x) is created from 7.\n // - 7 = 000111 in 6 bits\n // - f(x) = x^2 + x^1 + x^0\n // g(x) is given by the standard (p. 67)\n // - g(x) = x^12 + x^11 + x^10 + x^9 + x^8 + x^5 + x^2 + 1\n // Multiply f(x) by x^(18 - 6)\n // - f'(x) = f(x) * x^(18 - 6)\n // - f'(x) = x^14 + x^13 + x^12\n // Calculate the remainder of f'(x) / g(x)\n // x^2\n // __________________________________________________\n // g(x) )x^14 + x^13 + x^12\n // x^14 + x^13 + x^12 + x^11 + x^10 + x^7 + x^4 + x^2\n // --------------------------------------------------\n // x^11 + x^10 + x^7 + x^4 + x^2\n //\n // The remainder is x^11 + x^10 + x^7 + x^4 + x^2\n // Encode it in binary: 110010010100\n // The return value is 0xc94 (1100 1001 0100)\n //\n // Since all coefficients in the polynomials are 1 or 0, we can do the calculation by bit\n // operations. We don't care if coefficients are positive or negative.\n MatrixUtil.calculateBCHCode = function (value /*int*/, poly /*int*/) {\n if (poly === 0) {\n throw new IllegalArgumentException('0 polynomial');\n }\n // If poly is \"1 1111 0010 0101\" (version info poly), msbSetInPoly is 13. We'll subtract 1\n // from 13 to make it 12.\n var msbSetInPoly = MatrixUtil.findMSBSet(poly);\n value <<= msbSetInPoly - 1;\n // Do the division business using exclusive-or operations.\n while (MatrixUtil.findMSBSet(value) >= msbSetInPoly) {\n value ^= poly << (MatrixUtil.findMSBSet(value) - msbSetInPoly);\n }\n // Now the \"value\" is the remainder (i.e. the BCH code)\n return value;\n };\n // Make bit vector of type information. On success, store the result in \"bits\" and return true.\n // Encode error correction level and mask pattern. See 8.9 of\n // JISX0510:2004 (p.45) for details.\n MatrixUtil.makeTypeInfoBits = function (ecLevel, maskPattern /*int*/, bits) {\n if (!QRCode.isValidMaskPattern(maskPattern)) {\n throw new WriterException('Invalid mask pattern');\n }\n var typeInfo = (ecLevel.getBits() << 3) | maskPattern;\n bits.appendBits(typeInfo, 5);\n var bchCode = MatrixUtil.calculateBCHCode(typeInfo, MatrixUtil.TYPE_INFO_POLY);\n bits.appendBits(bchCode, 10);\n var maskBits = new BitArray();\n maskBits.appendBits(MatrixUtil.TYPE_INFO_MASK_PATTERN, 15);\n bits.xor(maskBits);\n if (bits.getSize() !== 15) { // Just in case.\n throw new WriterException('should not happen but we got: ' + bits.getSize());\n }\n };\n // Make bit vector of version information. On success, store the result in \"bits\" and return true.\n // See 8.10 of JISX0510:2004 (p.45) for details.\n MatrixUtil.makeVersionInfoBits = function (version, bits) {\n bits.appendBits(version.getVersionNumber(), 6);\n var bchCode = MatrixUtil.calculateBCHCode(version.getVersionNumber(), MatrixUtil.VERSION_INFO_POLY);\n bits.appendBits(bchCode, 12);\n if (bits.getSize() !== 18) { // Just in case.\n throw new WriterException('should not happen but we got: ' + bits.getSize());\n }\n };\n // Check if \"value\" is empty.\n MatrixUtil.isEmpty = function (value /*int*/) {\n return value === 255; // -1\n };\n MatrixUtil.embedTimingPatterns = function (matrix) {\n // -8 is for skipping position detection patterns (7: size), and two horizontal/vertical\n // separation patterns (1: size). Thus, 8 = 7 + 1.\n for (var i = 8; i < matrix.getWidth() - 8; ++i) {\n var bit = (i + 1) % 2;\n // Horizontal line.\n if (MatrixUtil.isEmpty(matrix.get(i, 6))) {\n matrix.setNumber(i, 6, bit);\n }\n // Vertical line.\n if (MatrixUtil.isEmpty(matrix.get(6, i))) {\n matrix.setNumber(6, i, bit);\n }\n }\n };\n // Embed the lonely dark dot at left bottom corner. JISX0510:2004 (p.46)\n MatrixUtil.embedDarkDotAtLeftBottomCorner = function (matrix) {\n if (matrix.get(8, matrix.getHeight() - 8) === 0) {\n throw new WriterException();\n }\n matrix.setNumber(8, matrix.getHeight() - 8, 1);\n };\n MatrixUtil.embedHorizontalSeparationPattern = function (xStart /*int*/, yStart /*int*/, matrix) {\n for (var x = 0; x < 8; ++x) {\n if (!MatrixUtil.isEmpty(matrix.get(xStart + x, yStart))) {\n throw new WriterException();\n }\n matrix.setNumber(xStart + x, yStart, 0);\n }\n };\n MatrixUtil.embedVerticalSeparationPattern = function (xStart /*int*/, yStart /*int*/, matrix) {\n for (var y = 0; y < 7; ++y) {\n if (!MatrixUtil.isEmpty(matrix.get(xStart, yStart + y))) {\n throw new WriterException();\n }\n matrix.setNumber(xStart, yStart + y, 0);\n }\n };\n MatrixUtil.embedPositionAdjustmentPattern = function (xStart /*int*/, yStart /*int*/, matrix) {\n for (var y = 0; y < 5; ++y) {\n var patternY = MatrixUtil.POSITION_ADJUSTMENT_PATTERN[y];\n for (var x = 0; x < 5; ++x) {\n matrix.setNumber(xStart + x, yStart + y, patternY[x]);\n }\n }\n };\n MatrixUtil.embedPositionDetectionPattern = function (xStart /*int*/, yStart /*int*/, matrix) {\n for (var y = 0; y < 7; ++y) {\n var patternY = MatrixUtil.POSITION_DETECTION_PATTERN[y];\n for (var x = 0; x < 7; ++x) {\n matrix.setNumber(xStart + x, yStart + y, patternY[x]);\n }\n }\n };\n // Embed position detection patterns and surrounding vertical/horizontal separators.\n MatrixUtil.embedPositionDetectionPatternsAndSeparators = function (matrix) {\n // Embed three big squares at corners.\n var pdpWidth = MatrixUtil.POSITION_DETECTION_PATTERN[0].length;\n // Left top corner.\n MatrixUtil.embedPositionDetectionPattern(0, 0, matrix);\n // Right top corner.\n MatrixUtil.embedPositionDetectionPattern(matrix.getWidth() - pdpWidth, 0, matrix);\n // Left bottom corner.\n MatrixUtil.embedPositionDetectionPattern(0, matrix.getWidth() - pdpWidth, matrix);\n // Embed horizontal separation patterns around the squares.\n var hspWidth = 8;\n // Left top corner.\n MatrixUtil.embedHorizontalSeparationPattern(0, hspWidth - 1, matrix);\n // Right top corner.\n MatrixUtil.embedHorizontalSeparationPattern(matrix.getWidth() - hspWidth, hspWidth - 1, matrix);\n // Left bottom corner.\n MatrixUtil.embedHorizontalSeparationPattern(0, matrix.getWidth() - hspWidth, matrix);\n // Embed vertical separation patterns around the squares.\n var vspSize = 7;\n // Left top corner.\n MatrixUtil.embedVerticalSeparationPattern(vspSize, 0, matrix);\n // Right top corner.\n MatrixUtil.embedVerticalSeparationPattern(matrix.getHeight() - vspSize - 1, 0, matrix);\n // Left bottom corner.\n MatrixUtil.embedVerticalSeparationPattern(vspSize, matrix.getHeight() - vspSize, matrix);\n };\n // Embed position adjustment patterns if need be.\n MatrixUtil.maybeEmbedPositionAdjustmentPatterns = function (version, matrix) {\n if (version.getVersionNumber() < 2) { // The patterns appear if version >= 2\n return;\n }\n var index = version.getVersionNumber() - 1;\n var coordinates = MatrixUtil.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index];\n for (var i = 0, length_1 = coordinates.length; i !== length_1; i++) {\n var y = coordinates[i];\n if (y >= 0) {\n for (var j = 0; j !== length_1; j++) {\n var x = coordinates[j];\n if (x >= 0 && MatrixUtil.isEmpty(matrix.get(x, y))) {\n // If the cell is unset, we embed the position adjustment pattern here.\n // -2 is necessary since the x/y coordinates point to the center of the pattern, not the\n // left top corner.\n MatrixUtil.embedPositionAdjustmentPattern(x - 2, y - 2, matrix);\n }\n }\n }\n }\n };\n MatrixUtil.POSITION_DETECTION_PATTERN = Array.from([\n Int32Array.from([1, 1, 1, 1, 1, 1, 1]),\n Int32Array.from([1, 0, 0, 0, 0, 0, 1]),\n Int32Array.from([1, 0, 1, 1, 1, 0, 1]),\n Int32Array.from([1, 0, 1, 1, 1, 0, 1]),\n Int32Array.from([1, 0, 1, 1, 1, 0, 1]),\n Int32Array.from([1, 0, 0, 0, 0, 0, 1]),\n Int32Array.from([1, 1, 1, 1, 1, 1, 1]),\n ]);\n MatrixUtil.POSITION_ADJUSTMENT_PATTERN = Array.from([\n Int32Array.from([1, 1, 1, 1, 1]),\n Int32Array.from([1, 0, 0, 0, 1]),\n Int32Array.from([1, 0, 1, 0, 1]),\n Int32Array.from([1, 0, 0, 0, 1]),\n Int32Array.from([1, 1, 1, 1, 1]),\n ]);\n // From Appendix E. Table 1, JIS0510X:2004 (71: p). The table was double-checked by komatsu.\n MatrixUtil.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE = Array.from([\n Int32Array.from([-1, -1, -1, -1, -1, -1, -1]),\n Int32Array.from([6, 18, -1, -1, -1, -1, -1]),\n Int32Array.from([6, 22, -1, -1, -1, -1, -1]),\n Int32Array.from([6, 26, -1, -1, -1, -1, -1]),\n Int32Array.from([6, 30, -1, -1, -1, -1, -1]),\n Int32Array.from([6, 34, -1, -1, -1, -1, -1]),\n Int32Array.from([6, 22, 38, -1, -1, -1, -1]),\n Int32Array.from([6, 24, 42, -1, -1, -1, -1]),\n Int32Array.from([6, 26, 46, -1, -1, -1, -1]),\n Int32Array.from([6, 28, 50, -1, -1, -1, -1]),\n Int32Array.from([6, 30, 54, -1, -1, -1, -1]),\n Int32Array.from([6, 32, 58, -1, -1, -1, -1]),\n Int32Array.from([6, 34, 62, -1, -1, -1, -1]),\n Int32Array.from([6, 26, 46, 66, -1, -1, -1]),\n Int32Array.from([6, 26, 48, 70, -1, -1, -1]),\n Int32Array.from([6, 26, 50, 74, -1, -1, -1]),\n Int32Array.from([6, 30, 54, 78, -1, -1, -1]),\n Int32Array.from([6, 30, 56, 82, -1, -1, -1]),\n Int32Array.from([6, 30, 58, 86, -1, -1, -1]),\n Int32Array.from([6, 34, 62, 90, -1, -1, -1]),\n Int32Array.from([6, 28, 50, 72, 94, -1, -1]),\n Int32Array.from([6, 26, 50, 74, 98, -1, -1]),\n Int32Array.from([6, 30, 54, 78, 102, -1, -1]),\n Int32Array.from([6, 28, 54, 80, 106, -1, -1]),\n Int32Array.from([6, 32, 58, 84, 110, -1, -1]),\n Int32Array.from([6, 30, 58, 86, 114, -1, -1]),\n Int32Array.from([6, 34, 62, 90, 118, -1, -1]),\n Int32Array.from([6, 26, 50, 74, 98, 122, -1]),\n Int32Array.from([6, 30, 54, 78, 102, 126, -1]),\n Int32Array.from([6, 26, 52, 78, 104, 130, -1]),\n Int32Array.from([6, 30, 56, 82, 108, 134, -1]),\n Int32Array.from([6, 34, 60, 86, 112, 138, -1]),\n Int32Array.from([6, 30, 58, 86, 114, 142, -1]),\n Int32Array.from([6, 34, 62, 90, 118, 146, -1]),\n Int32Array.from([6, 30, 54, 78, 102, 126, 150]),\n Int32Array.from([6, 24, 50, 76, 102, 128, 154]),\n Int32Array.from([6, 28, 54, 80, 106, 132, 158]),\n Int32Array.from([6, 32, 58, 84, 110, 136, 162]),\n Int32Array.from([6, 26, 54, 82, 110, 138, 166]),\n Int32Array.from([6, 30, 58, 86, 114, 142, 170]),\n ]);\n // Type info cells at the left top corner.\n MatrixUtil.TYPE_INFO_COORDINATES = Array.from([\n Int32Array.from([8, 0]),\n Int32Array.from([8, 1]),\n Int32Array.from([8, 2]),\n Int32Array.from([8, 3]),\n Int32Array.from([8, 4]),\n Int32Array.from([8, 5]),\n Int32Array.from([8, 7]),\n Int32Array.from([8, 8]),\n Int32Array.from([7, 8]),\n Int32Array.from([5, 8]),\n Int32Array.from([4, 8]),\n Int32Array.from([3, 8]),\n Int32Array.from([2, 8]),\n Int32Array.from([1, 8]),\n Int32Array.from([0, 8]),\n ]);\n // From Appendix D in JISX0510:2004 (p. 67)\n MatrixUtil.VERSION_INFO_POLY = 0x1f25; // 1 1111 0010 0101\n // From Appendix C in JISX0510:2004 (p.65).\n MatrixUtil.TYPE_INFO_POLY = 0x537;\n MatrixUtil.TYPE_INFO_MASK_PATTERN = 0x5412;\n return MatrixUtil;\n}());\nexport default MatrixUtil;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.qrcode.encoder {*/\nvar BlockPair = /** @class */ (function () {\n function BlockPair(dataBytes, errorCorrectionBytes) {\n this.dataBytes = dataBytes;\n this.errorCorrectionBytes = errorCorrectionBytes;\n }\n BlockPair.prototype.getDataBytes = function () {\n return this.dataBytes;\n };\n BlockPair.prototype.getErrorCorrectionBytes = function () {\n return this.errorCorrectionBytes;\n };\n return BlockPair;\n}());\nexport default BlockPair;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.encoder {*/\nimport EncodeHintType from '../../EncodeHintType';\nimport BitArray from '../../common/BitArray';\nimport CharacterSetECI from '../../common/CharacterSetECI';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport ReedSolomonEncoder from '../../common/reedsolomon/ReedSolomonEncoder';\nimport Mode from '../decoder/Mode';\nimport Version from '../decoder/Version';\nimport MaskUtil from './MaskUtil';\nimport ByteMatrix from './ByteMatrix';\nimport QRCode from './QRCode';\nimport MatrixUtil from './MatrixUtil';\nimport StringEncoding from '../../util/StringEncoding';\nimport BlockPair from './BlockPair';\nimport WriterException from '../../WriterException';\n/*import java.io.UnsupportedEncodingException;*/\n/*import java.util.ArrayList;*/\n/*import java.util.Collection;*/\n/*import java.util.Map;*/\n/**\n * @author satorux@google.com (Satoru Takabayashi) - creator\n * @author dswitkin@google.com (Daniel Switkin) - ported from C++\n */\nvar Encoder = /** @class */ (function () {\n // TYPESCRIPTPORT: changed to UTF8, the default for js\n function Encoder() {\n }\n // The mask penalty calculation is complicated. See Table 21 of JISX0510:2004 (p.45) for details.\n // Basically it applies four rules and summate all penalties.\n Encoder.calculateMaskPenalty = function (matrix) {\n return MaskUtil.applyMaskPenaltyRule1(matrix)\n + MaskUtil.applyMaskPenaltyRule2(matrix)\n + MaskUtil.applyMaskPenaltyRule3(matrix)\n + MaskUtil.applyMaskPenaltyRule4(matrix);\n };\n /**\n * @param content text to encode\n * @param ecLevel error correction level to use\n * @return {@link QRCode} representing the encoded QR code\n * @throws WriterException if encoding can't succeed, because of for example invalid content\n * or configuration\n */\n // public static encode(content: string, ecLevel: ErrorCorrectionLevel): QRCode /*throws WriterException*/ {\n // return encode(content, ecLevel, null)\n // }\n Encoder.encode = function (content, ecLevel, hints) {\n if (hints === void 0) { hints = null; }\n // Determine what character encoding has been specified by the caller, if any\n var encoding = Encoder.DEFAULT_BYTE_MODE_ENCODING;\n var hasEncodingHint = hints !== null && undefined !== hints.get(EncodeHintType.CHARACTER_SET);\n if (hasEncodingHint) {\n encoding = hints.get(EncodeHintType.CHARACTER_SET).toString();\n }\n // Pick an encoding mode appropriate for the content. Note that this will not attempt to use\n // multiple modes / segments even if that were more efficient. Twould be nice.\n var mode = this.chooseMode(content, encoding);\n // This will store the header information, like mode and\n // length, as well as \"header\" segments like an ECI segment.\n var headerBits = new BitArray();\n // Append ECI segment if applicable\n if (mode === Mode.BYTE && (hasEncodingHint || Encoder.DEFAULT_BYTE_MODE_ENCODING !== encoding)) {\n var eci = CharacterSetECI.getCharacterSetECIByName(encoding);\n if (eci !== undefined) {\n this.appendECI(eci, headerBits);\n }\n }\n // (With ECI in place,) Write the mode marker\n this.appendModeInfo(mode, headerBits);\n // Collect data within the main segment, separately, to count its size if needed. Don't add it to\n // main payload yet.\n var dataBits = new BitArray();\n this.appendBytes(content, mode, dataBits, encoding);\n var version;\n if (hints !== null && undefined !== hints.get(EncodeHintType.QR_VERSION)) {\n var versionNumber = Number.parseInt(hints.get(EncodeHintType.QR_VERSION).toString(), 10);\n version = Version.getVersionForNumber(versionNumber);\n var bitsNeeded = this.calculateBitsNeeded(mode, headerBits, dataBits, version);\n if (!this.willFit(bitsNeeded, version, ecLevel)) {\n throw new WriterException('Data too big for requested version');\n }\n }\n else {\n version = this.recommendVersion(ecLevel, mode, headerBits, dataBits);\n }\n var headerAndDataBits = new BitArray();\n headerAndDataBits.appendBitArray(headerBits);\n // Find \"length\" of main segment and write it\n var numLetters = mode === Mode.BYTE ? dataBits.getSizeInBytes() : content.length;\n this.appendLengthInfo(numLetters, version, mode, headerAndDataBits);\n // Put data together into the overall payload\n headerAndDataBits.appendBitArray(dataBits);\n var ecBlocks = version.getECBlocksForLevel(ecLevel);\n var numDataBytes = version.getTotalCodewords() - ecBlocks.getTotalECCodewords();\n // Terminate the bits properly.\n this.terminateBits(numDataBytes, headerAndDataBits);\n // Interleave data bits with error correction code.\n var finalBits = this.interleaveWithECBytes(headerAndDataBits, version.getTotalCodewords(), numDataBytes, ecBlocks.getNumBlocks());\n var qrCode = new QRCode();\n qrCode.setECLevel(ecLevel);\n qrCode.setMode(mode);\n qrCode.setVersion(version);\n // Choose the mask pattern and set to \"qrCode\".\n var dimension = version.getDimensionForVersion();\n var matrix = new ByteMatrix(dimension, dimension);\n var maskPattern = this.chooseMaskPattern(finalBits, ecLevel, version, matrix);\n qrCode.setMaskPattern(maskPattern);\n // Build the matrix and set it to \"qrCode\".\n MatrixUtil.buildMatrix(finalBits, ecLevel, version, maskPattern, matrix);\n qrCode.setMatrix(matrix);\n return qrCode;\n };\n /**\n * Decides the smallest version of QR code that will contain all of the provided data.\n *\n * @throws WriterException if the data cannot fit in any version\n */\n Encoder.recommendVersion = function (ecLevel, mode, headerBits, dataBits) {\n // Hard part: need to know version to know how many bits length takes. But need to know how many\n // bits it takes to know version. First we take a guess at version by assuming version will be\n // the minimum, 1:\n var provisionalBitsNeeded = this.calculateBitsNeeded(mode, headerBits, dataBits, Version.getVersionForNumber(1));\n var provisionalVersion = this.chooseVersion(provisionalBitsNeeded, ecLevel);\n // Use that guess to calculate the right version. I am still not sure this works in 100% of cases.\n var bitsNeeded = this.calculateBitsNeeded(mode, headerBits, dataBits, provisionalVersion);\n return this.chooseVersion(bitsNeeded, ecLevel);\n };\n Encoder.calculateBitsNeeded = function (mode, headerBits, dataBits, version) {\n return headerBits.getSize() + mode.getCharacterCountBits(version) + dataBits.getSize();\n };\n /**\n * @return the code point of the table used in alphanumeric mode or\n * -1 if there is no corresponding code in the table.\n */\n Encoder.getAlphanumericCode = function (code /*int*/) {\n if (code < Encoder.ALPHANUMERIC_TABLE.length) {\n return Encoder.ALPHANUMERIC_TABLE[code];\n }\n return -1;\n };\n // public static chooseMode(content: string): Mode {\n // return chooseMode(content, null);\n // }\n /**\n * Choose the best mode by examining the content. Note that 'encoding' is used as a hint;\n * if it is Shift_JIS, and the input is only double-byte Kanji, then we return {@link Mode#KANJI}.\n */\n Encoder.chooseMode = function (content, encoding) {\n if (encoding === void 0) { encoding = null; }\n if (CharacterSetECI.SJIS.getName() === encoding && this.isOnlyDoubleByteKanji(content)) {\n // Choose Kanji mode if all input are double-byte characters\n return Mode.KANJI;\n }\n var hasNumeric = false;\n var hasAlphanumeric = false;\n for (var i = 0, length_1 = content.length; i < length_1; ++i) {\n var c = content.charAt(i);\n if (Encoder.isDigit(c)) {\n hasNumeric = true;\n }\n else if (this.getAlphanumericCode(c.charCodeAt(0)) !== -1) {\n hasAlphanumeric = true;\n }\n else {\n return Mode.BYTE;\n }\n }\n if (hasAlphanumeric) {\n return Mode.ALPHANUMERIC;\n }\n if (hasNumeric) {\n return Mode.NUMERIC;\n }\n return Mode.BYTE;\n };\n Encoder.isOnlyDoubleByteKanji = function (content) {\n var bytes;\n try {\n bytes = StringEncoding.encode(content, CharacterSetECI.SJIS); // content.getBytes(\"Shift_JIS\"))\n }\n catch (ignored /*: UnsupportedEncodingException*/) {\n return false;\n }\n var length = bytes.length;\n if (length % 2 !== 0) {\n return false;\n }\n for (var i = 0; i < length; i += 2) {\n var byte1 = bytes[i] & 0xFF;\n if ((byte1 < 0x81 || byte1 > 0x9F) && (byte1 < 0xE0 || byte1 > 0xEB)) {\n return false;\n }\n }\n return true;\n };\n Encoder.chooseMaskPattern = function (bits, ecLevel, version, matrix) {\n var minPenalty = Number.MAX_SAFE_INTEGER; // Lower penalty is better.\n var bestMaskPattern = -1;\n // We try all mask patterns to choose the best one.\n for (var maskPattern = 0; maskPattern < QRCode.NUM_MASK_PATTERNS; maskPattern++) {\n MatrixUtil.buildMatrix(bits, ecLevel, version, maskPattern, matrix);\n var penalty = this.calculateMaskPenalty(matrix);\n if (penalty < minPenalty) {\n minPenalty = penalty;\n bestMaskPattern = maskPattern;\n }\n }\n return bestMaskPattern;\n };\n Encoder.chooseVersion = function (numInputBits /*int*/, ecLevel) {\n for (var versionNum = 1; versionNum <= 40; versionNum++) {\n var version = Version.getVersionForNumber(versionNum);\n if (Encoder.willFit(numInputBits, version, ecLevel)) {\n return version;\n }\n }\n throw new WriterException('Data too big');\n };\n /**\n * @return true if the number of input bits will fit in a code with the specified version and\n * error correction level.\n */\n Encoder.willFit = function (numInputBits /*int*/, version, ecLevel) {\n // In the following comments, we use numbers of Version 7-H.\n // numBytes = 196\n var numBytes = version.getTotalCodewords();\n // getNumECBytes = 130\n var ecBlocks = version.getECBlocksForLevel(ecLevel);\n var numEcBytes = ecBlocks.getTotalECCodewords();\n // getNumDataBytes = 196 - 130 = 66\n var numDataBytes = numBytes - numEcBytes;\n var totalInputBytes = (numInputBits + 7) / 8;\n return numDataBytes >= totalInputBytes;\n };\n /**\n * Terminate bits as described in 8.4.8 and 8.4.9 of JISX0510:2004 (p.24).\n */\n Encoder.terminateBits = function (numDataBytes /*int*/, bits) {\n var capacity = numDataBytes * 8;\n if (bits.getSize() > capacity) {\n throw new WriterException('data bits cannot fit in the QR Code' + bits.getSize() + ' > ' +\n capacity);\n }\n for (var i = 0; i < 4 && bits.getSize() < capacity; ++i) {\n bits.appendBit(false);\n }\n // Append termination bits. See 8.4.8 of JISX0510:2004 (p.24) for details.\n // If the last byte isn't 8-bit aligned, we'll add padding bits.\n var numBitsInLastByte = bits.getSize() & 0x07;\n if (numBitsInLastByte > 0) {\n for (var i = numBitsInLastByte; i < 8; i++) {\n bits.appendBit(false);\n }\n }\n // If we have more space, we'll fill the space with padding patterns defined in 8.4.9 (p.24).\n var numPaddingBytes = numDataBytes - bits.getSizeInBytes();\n for (var i = 0; i < numPaddingBytes; ++i) {\n bits.appendBits((i & 0x01) === 0 ? 0xEC : 0x11, 8);\n }\n if (bits.getSize() !== capacity) {\n throw new WriterException('Bits size does not equal capacity');\n }\n };\n /**\n * Get number of data bytes and number of error correction bytes for block id \"blockID\". Store\n * the result in \"numDataBytesInBlock\", and \"numECBytesInBlock\". See table 12 in 8.5.1 of\n * JISX0510:2004 (p.30)\n */\n Encoder.getNumDataBytesAndNumECBytesForBlockID = function (numTotalBytes /*int*/, numDataBytes /*int*/, numRSBlocks /*int*/, blockID /*int*/, numDataBytesInBlock, numECBytesInBlock) {\n if (blockID >= numRSBlocks) {\n throw new WriterException('Block ID too large');\n }\n // numRsBlocksInGroup2 = 196 % 5 = 1\n var numRsBlocksInGroup2 = numTotalBytes % numRSBlocks;\n // numRsBlocksInGroup1 = 5 - 1 = 4\n var numRsBlocksInGroup1 = numRSBlocks - numRsBlocksInGroup2;\n // numTotalBytesInGroup1 = 196 / 5 = 39\n var numTotalBytesInGroup1 = Math.floor(numTotalBytes / numRSBlocks);\n // numTotalBytesInGroup2 = 39 + 1 = 40\n var numTotalBytesInGroup2 = numTotalBytesInGroup1 + 1;\n // numDataBytesInGroup1 = 66 / 5 = 13\n var numDataBytesInGroup1 = Math.floor(numDataBytes / numRSBlocks);\n // numDataBytesInGroup2 = 13 + 1 = 14\n var numDataBytesInGroup2 = numDataBytesInGroup1 + 1;\n // numEcBytesInGroup1 = 39 - 13 = 26\n var numEcBytesInGroup1 = numTotalBytesInGroup1 - numDataBytesInGroup1;\n // numEcBytesInGroup2 = 40 - 14 = 26\n var numEcBytesInGroup2 = numTotalBytesInGroup2 - numDataBytesInGroup2;\n // Sanity checks.\n // 26 = 26\n if (numEcBytesInGroup1 !== numEcBytesInGroup2) {\n throw new WriterException('EC bytes mismatch');\n }\n // 5 = 4 + 1.\n if (numRSBlocks !== numRsBlocksInGroup1 + numRsBlocksInGroup2) {\n throw new WriterException('RS blocks mismatch');\n }\n // 196 = (13 + 26) * 4 + (14 + 26) * 1\n if (numTotalBytes !==\n ((numDataBytesInGroup1 + numEcBytesInGroup1) *\n numRsBlocksInGroup1) +\n ((numDataBytesInGroup2 + numEcBytesInGroup2) *\n numRsBlocksInGroup2)) {\n throw new WriterException('Total bytes mismatch');\n }\n if (blockID < numRsBlocksInGroup1) {\n numDataBytesInBlock[0] = numDataBytesInGroup1;\n numECBytesInBlock[0] = numEcBytesInGroup1;\n }\n else {\n numDataBytesInBlock[0] = numDataBytesInGroup2;\n numECBytesInBlock[0] = numEcBytesInGroup2;\n }\n };\n /**\n * Interleave \"bits\" with corresponding error correction bytes. On success, store the result in\n * \"result\". The interleave rule is complicated. See 8.6 of JISX0510:2004 (p.37) for details.\n */\n Encoder.interleaveWithECBytes = function (bits, numTotalBytes /*int*/, numDataBytes /*int*/, numRSBlocks /*int*/) {\n var e_1, _a, e_2, _b;\n // \"bits\" must have \"getNumDataBytes\" bytes of data.\n if (bits.getSizeInBytes() !== numDataBytes) {\n throw new WriterException('Number of bits and data bytes does not match');\n }\n // Step 1. Divide data bytes into blocks and generate error correction bytes for them. We'll\n // store the divided data bytes blocks and error correction bytes blocks into \"blocks\".\n var dataBytesOffset = 0;\n var maxNumDataBytes = 0;\n var maxNumEcBytes = 0;\n // Since, we know the number of reedsolmon blocks, we can initialize the vector with the number.\n var blocks = new Array(); // new Array(numRSBlocks)\n for (var i = 0; i < numRSBlocks; ++i) {\n var numDataBytesInBlock = new Int32Array(1);\n var numEcBytesInBlock = new Int32Array(1);\n Encoder.getNumDataBytesAndNumECBytesForBlockID(numTotalBytes, numDataBytes, numRSBlocks, i, numDataBytesInBlock, numEcBytesInBlock);\n var size = numDataBytesInBlock[0];\n var dataBytes = new Uint8Array(size);\n bits.toBytes(8 * dataBytesOffset, dataBytes, 0, size);\n var ecBytes = Encoder.generateECBytes(dataBytes, numEcBytesInBlock[0]);\n blocks.push(new BlockPair(dataBytes, ecBytes));\n maxNumDataBytes = Math.max(maxNumDataBytes, size);\n maxNumEcBytes = Math.max(maxNumEcBytes, ecBytes.length);\n dataBytesOffset += numDataBytesInBlock[0];\n }\n if (numDataBytes !== dataBytesOffset) {\n throw new WriterException('Data bytes does not match offset');\n }\n var result = new BitArray();\n // First, place data blocks.\n for (var i = 0; i < maxNumDataBytes; ++i) {\n try {\n for (var blocks_1 = (e_1 = void 0, __values(blocks)), blocks_1_1 = blocks_1.next(); !blocks_1_1.done; blocks_1_1 = blocks_1.next()) {\n var block = blocks_1_1.value;\n var dataBytes = block.getDataBytes();\n if (i < dataBytes.length) {\n result.appendBits(dataBytes[i], 8);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (blocks_1_1 && !blocks_1_1.done && (_a = blocks_1.return)) _a.call(blocks_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n // Then, place error correction blocks.\n for (var i = 0; i < maxNumEcBytes; ++i) {\n try {\n for (var blocks_2 = (e_2 = void 0, __values(blocks)), blocks_2_1 = blocks_2.next(); !blocks_2_1.done; blocks_2_1 = blocks_2.next()) {\n var block = blocks_2_1.value;\n var ecBytes = block.getErrorCorrectionBytes();\n if (i < ecBytes.length) {\n result.appendBits(ecBytes[i], 8);\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (blocks_2_1 && !blocks_2_1.done && (_b = blocks_2.return)) _b.call(blocks_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (numTotalBytes !== result.getSizeInBytes()) { // Should be same.\n throw new WriterException('Interleaving error: ' + numTotalBytes + ' and ' +\n result.getSizeInBytes() + ' differ.');\n }\n return result;\n };\n Encoder.generateECBytes = function (dataBytes, numEcBytesInBlock /*int*/) {\n var numDataBytes = dataBytes.length;\n var toEncode = new Int32Array(numDataBytes + numEcBytesInBlock); // int[numDataBytes + numEcBytesInBlock]\n for (var i = 0; i < numDataBytes; i++) {\n toEncode[i] = dataBytes[i] & 0xFF;\n }\n new ReedSolomonEncoder(GenericGF.QR_CODE_FIELD_256).encode(toEncode, numEcBytesInBlock);\n var ecBytes = new Uint8Array(numEcBytesInBlock);\n for (var i = 0; i < numEcBytesInBlock; i++) {\n ecBytes[i] = /*(byte) */ toEncode[numDataBytes + i];\n }\n return ecBytes;\n };\n /**\n * Append mode info. On success, store the result in \"bits\".\n */\n Encoder.appendModeInfo = function (mode, bits) {\n bits.appendBits(mode.getBits(), 4);\n };\n /**\n * Append length info. On success, store the result in \"bits\".\n */\n Encoder.appendLengthInfo = function (numLetters /*int*/, version, mode, bits) {\n var numBits = mode.getCharacterCountBits(version);\n if (numLetters >= (1 << numBits)) {\n throw new WriterException(numLetters + ' is bigger than ' + ((1 << numBits) - 1));\n }\n bits.appendBits(numLetters, numBits);\n };\n /**\n * Append \"bytes\" in \"mode\" mode (encoding) into \"bits\". On success, store the result in \"bits\".\n */\n Encoder.appendBytes = function (content, mode, bits, encoding) {\n switch (mode) {\n case Mode.NUMERIC:\n Encoder.appendNumericBytes(content, bits);\n break;\n case Mode.ALPHANUMERIC:\n Encoder.appendAlphanumericBytes(content, bits);\n break;\n case Mode.BYTE:\n Encoder.append8BitBytes(content, bits, encoding);\n break;\n case Mode.KANJI:\n Encoder.appendKanjiBytes(content, bits);\n break;\n default:\n throw new WriterException('Invalid mode: ' + mode);\n }\n };\n Encoder.getDigit = function (singleCharacter) {\n return singleCharacter.charCodeAt(0) - 48;\n };\n Encoder.isDigit = function (singleCharacter) {\n var cn = Encoder.getDigit(singleCharacter);\n return cn >= 0 && cn <= 9;\n };\n Encoder.appendNumericBytes = function (content, bits) {\n var length = content.length;\n var i = 0;\n while (i < length) {\n var num1 = Encoder.getDigit(content.charAt(i));\n if (i + 2 < length) {\n // Encode three numeric letters in ten bits.\n var num2 = Encoder.getDigit(content.charAt(i + 1));\n var num3 = Encoder.getDigit(content.charAt(i + 2));\n bits.appendBits(num1 * 100 + num2 * 10 + num3, 10);\n i += 3;\n }\n else if (i + 1 < length) {\n // Encode two numeric letters in seven bits.\n var num2 = Encoder.getDigit(content.charAt(i + 1));\n bits.appendBits(num1 * 10 + num2, 7);\n i += 2;\n }\n else {\n // Encode one numeric letter in four bits.\n bits.appendBits(num1, 4);\n i++;\n }\n }\n };\n Encoder.appendAlphanumericBytes = function (content, bits) {\n var length = content.length;\n var i = 0;\n while (i < length) {\n var code1 = Encoder.getAlphanumericCode(content.charCodeAt(i));\n if (code1 === -1) {\n throw new WriterException();\n }\n if (i + 1 < length) {\n var code2 = Encoder.getAlphanumericCode(content.charCodeAt(i + 1));\n if (code2 === -1) {\n throw new WriterException();\n }\n // Encode two alphanumeric letters in 11 bits.\n bits.appendBits(code1 * 45 + code2, 11);\n i += 2;\n }\n else {\n // Encode one alphanumeric letter in six bits.\n bits.appendBits(code1, 6);\n i++;\n }\n }\n };\n Encoder.append8BitBytes = function (content, bits, encoding) {\n var bytes;\n try {\n bytes = StringEncoding.encode(content, encoding);\n }\n catch (uee /*: UnsupportedEncodingException*/) {\n throw new WriterException(uee);\n }\n for (var i = 0, length_2 = bytes.length; i !== length_2; i++) {\n var b = bytes[i];\n bits.appendBits(b, 8);\n }\n };\n /**\n * @throws WriterException\n */\n Encoder.appendKanjiBytes = function (content, bits) {\n var bytes;\n try {\n bytes = StringEncoding.encode(content, CharacterSetECI.SJIS);\n }\n catch (uee /*: UnsupportedEncodingException*/) {\n throw new WriterException(uee);\n }\n var length = bytes.length;\n for (var i = 0; i < length; i += 2) {\n var byte1 = bytes[i] & 0xFF;\n var byte2 = bytes[i + 1] & 0xFF;\n var code = ((byte1 << 8) & 0xFFFFFFFF) | byte2;\n var subtracted = -1;\n if (code >= 0x8140 && code <= 0x9ffc) {\n subtracted = code - 0x8140;\n }\n else if (code >= 0xe040 && code <= 0xebbf) {\n subtracted = code - 0xc140;\n }\n if (subtracted === -1) {\n throw new WriterException('Invalid byte sequence');\n }\n var encoded = ((subtracted >> 8) * 0xc0) + (subtracted & 0xff);\n bits.appendBits(encoded, 13);\n }\n };\n Encoder.appendECI = function (eci, bits) {\n bits.appendBits(Mode.ECI.getBits(), 4);\n // This is correct for values up to 127, which is all we need now.\n bits.appendBits(eci.getValue(), 8);\n };\n // The original table is defined in the table 5 of JISX0510:2004 (p.19).\n Encoder.ALPHANUMERIC_TABLE = Int32Array.from([\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1,\n -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,\n ]);\n Encoder.DEFAULT_BYTE_MODE_ENCODING = CharacterSetECI.UTF8.getName(); // \"ISO-8859-1\"\n return Encoder;\n}());\nexport default Encoder;\n","import EncodeHintType from '../core/EncodeHintType';\nimport Encoder from '../core/qrcode/encoder/Encoder';\nimport ErrorCorrectionLevel from '../core/qrcode/decoder/ErrorCorrectionLevel';\nimport IllegalArgumentException from '../core/IllegalArgumentException';\nimport IllegalStateException from '../core/IllegalStateException';\n/**\n * @deprecated Moving to @zxing/browser\n */\nvar BrowserQRCodeSvgWriter = /** @class */ (function () {\n function BrowserQRCodeSvgWriter() {\n }\n /**\n * Writes and renders a QRCode SVG element.\n *\n * @param contents\n * @param width\n * @param height\n * @param hints\n */\n BrowserQRCodeSvgWriter.prototype.write = function (contents, width, height, hints) {\n if (hints === void 0) { hints = null; }\n if (contents.length === 0) {\n throw new IllegalArgumentException('Found empty contents');\n }\n // if (format != BarcodeFormat.QR_CODE) {\n // throw new IllegalArgumentException(\"Can only encode QR_CODE, but got \" + format)\n // }\n if (width < 0 || height < 0) {\n throw new IllegalArgumentException('Requested dimensions are too small: ' + width + 'x' + height);\n }\n var errorCorrectionLevel = ErrorCorrectionLevel.L;\n var quietZone = BrowserQRCodeSvgWriter.QUIET_ZONE_SIZE;\n if (hints !== null) {\n if (undefined !== hints.get(EncodeHintType.ERROR_CORRECTION)) {\n errorCorrectionLevel = ErrorCorrectionLevel.fromString(hints.get(EncodeHintType.ERROR_CORRECTION).toString());\n }\n if (undefined !== hints.get(EncodeHintType.MARGIN)) {\n quietZone = Number.parseInt(hints.get(EncodeHintType.MARGIN).toString(), 10);\n }\n }\n var code = Encoder.encode(contents, errorCorrectionLevel, hints);\n return this.renderResult(code, width, height, quietZone);\n };\n /**\n * Renders the result and then appends it to the DOM.\n */\n BrowserQRCodeSvgWriter.prototype.writeToDom = function (containerElement, contents, width, height, hints) {\n if (hints === void 0) { hints = null; }\n if (typeof containerElement === 'string') {\n containerElement = document.querySelector(containerElement);\n }\n var svgElement = this.write(contents, width, height, hints);\n if (containerElement)\n containerElement.appendChild(svgElement);\n };\n /**\n * Note that the input matrix uses 0 == white, 1 == black.\n * The output matrix uses 0 == black, 255 == white (i.e. an 8 bit greyscale bitmap).\n */\n BrowserQRCodeSvgWriter.prototype.renderResult = function (code, width /*int*/, height /*int*/, quietZone /*int*/) {\n var input = code.getMatrix();\n if (input === null) {\n throw new IllegalStateException();\n }\n var inputWidth = input.getWidth();\n var inputHeight = input.getHeight();\n var qrWidth = inputWidth + (quietZone * 2);\n var qrHeight = inputHeight + (quietZone * 2);\n var outputWidth = Math.max(width, qrWidth);\n var outputHeight = Math.max(height, qrHeight);\n var multiple = Math.min(Math.floor(outputWidth / qrWidth), Math.floor(outputHeight / qrHeight));\n // Padding includes both the quiet zone and the extra white pixels to accommodate the requested\n // dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone.\n // If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will\n // handle all the padding from 100x100 (the actual QR) up to 200x160.\n var leftPadding = Math.floor((outputWidth - (inputWidth * multiple)) / 2);\n var topPadding = Math.floor((outputHeight - (inputHeight * multiple)) / 2);\n var svgElement = this.createSVGElement(outputWidth, outputHeight);\n for (var inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n // Write the contents of this row of the barcode\n for (var inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n if (input.get(inputX, inputY) === 1) {\n var svgRectElement = this.createSvgRectElement(outputX, outputY, multiple, multiple);\n svgElement.appendChild(svgRectElement);\n }\n }\n }\n return svgElement;\n };\n /**\n * Creates a SVG element.\n *\n * @param w SVG's width attribute\n * @param h SVG's height attribute\n */\n BrowserQRCodeSvgWriter.prototype.createSVGElement = function (w, h) {\n var svgElement = document.createElementNS(BrowserQRCodeSvgWriter.SVG_NS, 'svg');\n svgElement.setAttributeNS(null, 'height', w.toString());\n svgElement.setAttributeNS(null, 'width', h.toString());\n return svgElement;\n };\n /**\n * Creates a SVG rect element.\n *\n * @param x Element's x coordinate\n * @param y Element's y coordinate\n * @param w Element's width attribute\n * @param h Element's height attribute\n */\n BrowserQRCodeSvgWriter.prototype.createSvgRectElement = function (x, y, w, h) {\n var rect = document.createElementNS(BrowserQRCodeSvgWriter.SVG_NS, 'rect');\n rect.setAttributeNS(null, 'x', x.toString());\n rect.setAttributeNS(null, 'y', y.toString());\n rect.setAttributeNS(null, 'height', w.toString());\n rect.setAttributeNS(null, 'width', h.toString());\n rect.setAttributeNS(null, 'fill', '#000000');\n return rect;\n };\n BrowserQRCodeSvgWriter.QUIET_ZONE_SIZE = 4;\n /**\n * SVG markup NameSpace\n */\n BrowserQRCodeSvgWriter.SVG_NS = 'http://www.w3.org/2000/svg';\n return BrowserQRCodeSvgWriter;\n}());\nexport { BrowserQRCodeSvgWriter };\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*namespace com.google.zxing.qrcode {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport EncodeHintType from '../EncodeHintType';\nimport BitMatrix from '../common/BitMatrix';\nimport ErrorCorrectionLevel from './decoder/ErrorCorrectionLevel';\nimport Encoder from './encoder/Encoder';\nimport IllegalArgumentException from '../IllegalArgumentException';\nimport IllegalStateException from '../IllegalStateException';\n/*import java.util.Map;*/\n/**\n * This object renders a QR Code as a BitMatrix 2D array of greyscale values.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n */\nvar QRCodeWriter = /** @class */ (function () {\n function QRCodeWriter() {\n }\n /*@Override*/\n // public encode(contents: string, format: BarcodeFormat, width: number /*int*/, height: number /*int*/): BitMatrix\n // /*throws WriterException */ {\n // return encode(contents, format, width, height, null)\n // }\n /*@Override*/\n QRCodeWriter.prototype.encode = function (contents, format, width /*int*/, height /*int*/, hints) {\n if (contents.length === 0) {\n throw new IllegalArgumentException('Found empty contents');\n }\n if (format !== BarcodeFormat.QR_CODE) {\n throw new IllegalArgumentException('Can only encode QR_CODE, but got ' + format);\n }\n if (width < 0 || height < 0) {\n throw new IllegalArgumentException(\"Requested dimensions are too small: \" + width + \"x\" + height);\n }\n var errorCorrectionLevel = ErrorCorrectionLevel.L;\n var quietZone = QRCodeWriter.QUIET_ZONE_SIZE;\n if (hints !== null) {\n if (undefined !== hints.get(EncodeHintType.ERROR_CORRECTION)) {\n errorCorrectionLevel = ErrorCorrectionLevel.fromString(hints.get(EncodeHintType.ERROR_CORRECTION).toString());\n }\n if (undefined !== hints.get(EncodeHintType.MARGIN)) {\n quietZone = Number.parseInt(hints.get(EncodeHintType.MARGIN).toString(), 10);\n }\n }\n var code = Encoder.encode(contents, errorCorrectionLevel, hints);\n return QRCodeWriter.renderResult(code, width, height, quietZone);\n };\n // Note that the input matrix uses 0 == white, 1 == black, while the output matrix uses\n // 0 == black, 255 == white (i.e. an 8 bit greyscale bitmap).\n QRCodeWriter.renderResult = function (code, width /*int*/, height /*int*/, quietZone /*int*/) {\n var input = code.getMatrix();\n if (input === null) {\n throw new IllegalStateException();\n }\n var inputWidth = input.getWidth();\n var inputHeight = input.getHeight();\n var qrWidth = inputWidth + (quietZone * 2);\n var qrHeight = inputHeight + (quietZone * 2);\n var outputWidth = Math.max(width, qrWidth);\n var outputHeight = Math.max(height, qrHeight);\n var multiple = Math.min(Math.floor(outputWidth / qrWidth), Math.floor(outputHeight / qrHeight));\n // Padding includes both the quiet zone and the extra white pixels to accommodate the requested\n // dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone.\n // If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will\n // handle all the padding from 100x100 (the actual QR) up to 200x160.\n var leftPadding = Math.floor((outputWidth - (inputWidth * multiple)) / 2);\n var topPadding = Math.floor((outputHeight - (inputHeight * multiple)) / 2);\n var output = new BitMatrix(outputWidth, outputHeight);\n for (var inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n // Write the contents of this row of the barcode\n for (var inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n if (input.get(inputX, inputY) === 1) {\n output.setRegion(outputX, outputY, multiple, multiple);\n }\n }\n }\n return output;\n };\n QRCodeWriter.QUIET_ZONE_SIZE = 4;\n return QRCodeWriter;\n}());\nexport default QRCodeWriter;\n","/*\n * Copyright 2008 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// import DataMatrixWriter from './datamatrix/DataMatrixWriter'\n// import CodaBarWriter from './oned/CodaBarWriter'\n// import Code128Writer from './oned/Code128Writer'\n// import Code39Writer from './oned/Code39Writer'\n// import Code93Writer from './oned/Code93Writer'\n// import EAN13Writer from './oned/EAN13Writer'\n// import EAN8Writer from './oned/EAN8Writer'\n// import ITFWriter from './oned/ITFWriter'\n// import UPCAWriter from './oned/UPCAWriter'\n// import UPCEWriter from './oned/UPCEWriter'\n// import PDF417Writer from './pdf417/PDF417Writer'\nimport QRCodeWriter from './qrcode/QRCodeWriter';\nimport BarcodeFormat from './BarcodeFormat';\nimport IllegalArgumentException from './IllegalArgumentException';\n/*import java.util.Map;*/\n/**\n * This is a factory class which finds the appropriate Writer subclass for the BarcodeFormat\n * requested and encodes the barcode with the supplied contents.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n */\nvar MultiFormatWriter = /** @class */ (function () {\n function MultiFormatWriter() {\n }\n /*@Override*/\n // public encode(contents: string,\n // format: BarcodeFormat,\n // width: number /*int*/,\n // height: number /*int*/): BitMatrix /*throws WriterException */ {\n // return encode(contents, format, width, height, null)\n // }\n /*@Override*/\n MultiFormatWriter.prototype.encode = function (contents, format, width /*int*/, height /*int*/, hints) {\n var writer;\n switch (format) {\n // case BarcodeFormat.EAN_8:\n // writer = new EAN8Writer()\n // break\n // case BarcodeFormat.UPC_E:\n // writer = new UPCEWriter()\n // break\n // case BarcodeFormat.EAN_13:\n // writer = new EAN13Writer()\n // break\n // case BarcodeFormat.UPC_A:\n // writer = new UPCAWriter()\n // break\n case BarcodeFormat.QR_CODE:\n writer = new QRCodeWriter();\n break;\n // case BarcodeFormat.CODE_39:\n // writer = new Code39Writer()\n // break\n // case BarcodeFormat.CODE_93:\n // writer = new Code93Writer()\n // break\n // case BarcodeFormat.CODE_128:\n // writer = new Code128Writer()\n // break\n // case BarcodeFormat.ITF:\n // writer = new ITFWriter()\n // break\n // case BarcodeFormat.PDF_417:\n // writer = new PDF417Writer()\n // break\n // case BarcodeFormat.CODABAR:\n // writer = new CodaBarWriter()\n // break\n // case BarcodeFormat.DATA_MATRIX:\n // writer = new DataMatrixWriter()\n // break\n // case BarcodeFormat.AZTEC:\n // writer = new AztecWriter()\n // break\n default:\n throw new IllegalArgumentException('No encoder available for format ' + format);\n }\n return writer.encode(contents, format, width, height, hints);\n };\n return MultiFormatWriter;\n}());\nexport default MultiFormatWriter;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/*namespace com.google.zxing {*/\nimport System from './util/System';\nimport LuminanceSource from './LuminanceSource';\nimport InvertedLuminanceSource from './InvertedLuminanceSource';\nimport IllegalArgumentException from './IllegalArgumentException';\n/**\n * This object extends LuminanceSource around an array of YUV data returned from the camera driver,\n * with the option to crop to a rectangle within the full data. This can be used to exclude\n * superfluous pixels around the perimeter and speed up decoding.\n *\n * It works for any pixel format where the Y channel is planar and appears first, including\n * YCbCr_420_SP and YCbCr_422_SP.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n */\nvar PlanarYUVLuminanceSource = /** @class */ (function (_super) {\n __extends(PlanarYUVLuminanceSource, _super);\n function PlanarYUVLuminanceSource(yuvData, dataWidth /*int*/, dataHeight /*int*/, left /*int*/, top /*int*/, width /*int*/, height /*int*/, reverseHorizontal) {\n var _this = _super.call(this, width, height) || this;\n _this.yuvData = yuvData;\n _this.dataWidth = dataWidth;\n _this.dataHeight = dataHeight;\n _this.left = left;\n _this.top = top;\n if (left + width > dataWidth || top + height > dataHeight) {\n throw new IllegalArgumentException('Crop rectangle does not fit within image data.');\n }\n if (reverseHorizontal) {\n _this.reverseHorizontal(width, height);\n }\n return _this;\n }\n /*@Override*/\n PlanarYUVLuminanceSource.prototype.getRow = function (y /*int*/, row) {\n if (y < 0 || y >= this.getHeight()) {\n throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n }\n var width = this.getWidth();\n if (row === null || row === undefined || row.length < width) {\n row = new Uint8ClampedArray(width);\n }\n var offset = (y + this.top) * this.dataWidth + this.left;\n System.arraycopy(this.yuvData, offset, row, 0, width);\n return row;\n };\n /*@Override*/\n PlanarYUVLuminanceSource.prototype.getMatrix = function () {\n var width = this.getWidth();\n var height = this.getHeight();\n // If the caller asks for the entire underlying image, save the copy and give them the\n // original data. The docs specifically warn that result.length must be ignored.\n if (width === this.dataWidth && height === this.dataHeight) {\n return this.yuvData;\n }\n var area = width * height;\n var matrix = new Uint8ClampedArray(area);\n var inputOffset = this.top * this.dataWidth + this.left;\n // If the width matches the full width of the underlying data, perform a single copy.\n if (width === this.dataWidth) {\n System.arraycopy(this.yuvData, inputOffset, matrix, 0, area);\n return matrix;\n }\n // Otherwise copy one cropped row at a time.\n for (var y = 0; y < height; y++) {\n var outputOffset = y * width;\n System.arraycopy(this.yuvData, inputOffset, matrix, outputOffset, width);\n inputOffset += this.dataWidth;\n }\n return matrix;\n };\n /*@Override*/\n PlanarYUVLuminanceSource.prototype.isCropSupported = function () {\n return true;\n };\n /*@Override*/\n PlanarYUVLuminanceSource.prototype.crop = function (left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n return new PlanarYUVLuminanceSource(this.yuvData, this.dataWidth, this.dataHeight, this.left + left, this.top + top, width, height, false);\n };\n PlanarYUVLuminanceSource.prototype.renderThumbnail = function () {\n var width = this.getWidth() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n var height = this.getHeight() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n var pixels = new Int32Array(width * height);\n var yuv = this.yuvData;\n var inputOffset = this.top * this.dataWidth + this.left;\n for (var y = 0; y < height; y++) {\n var outputOffset = y * width;\n for (var x = 0; x < width; x++) {\n var grey = yuv[inputOffset + x * PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR] & 0xff;\n pixels[outputOffset + x] = 0xFF000000 | (grey * 0x00010101);\n }\n inputOffset += this.dataWidth * PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n }\n return pixels;\n };\n /**\n * @return width of image from {@link #renderThumbnail()}\n */\n PlanarYUVLuminanceSource.prototype.getThumbnailWidth = function () {\n return this.getWidth() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n };\n /**\n * @return height of image from {@link #renderThumbnail()}\n */\n PlanarYUVLuminanceSource.prototype.getThumbnailHeight = function () {\n return this.getHeight() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n };\n PlanarYUVLuminanceSource.prototype.reverseHorizontal = function (width /*int*/, height /*int*/) {\n var yuvData = this.yuvData;\n for (var y = 0, rowStart = this.top * this.dataWidth + this.left; y < height; y++, rowStart += this.dataWidth) {\n var middle = rowStart + width / 2;\n for (var x1 = rowStart, x2 = rowStart + width - 1; x1 < middle; x1++, x2--) {\n var temp = yuvData[x1];\n yuvData[x1] = yuvData[x2];\n yuvData[x2] = temp;\n }\n }\n };\n PlanarYUVLuminanceSource.prototype.invert = function () {\n return new InvertedLuminanceSource(this);\n };\n PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR = 2;\n return PlanarYUVLuminanceSource;\n}(LuminanceSource));\nexport default PlanarYUVLuminanceSource;\n","/*\n * Copyright 2009 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/*namespace com.google.zxing {*/\nimport './InvertedLuminanceSource'; // required because of circular dependencies between LuminanceSource and InvertedLuminanceSource\nimport InvertedLuminanceSource from './InvertedLuminanceSource';\nimport LuminanceSource from './LuminanceSource';\nimport System from './util/System';\nimport IllegalArgumentException from './IllegalArgumentException';\n/**\n * This class is used to help decode images from files which arrive as RGB data from\n * an ARGB pixel array. It does not support rotation.\n *\n * @author dswitkin@google.com (Daniel Switkin)\n * @author Betaminos\n */\nvar RGBLuminanceSource = /** @class */ (function (_super) {\n __extends(RGBLuminanceSource, _super);\n function RGBLuminanceSource(luminances, width /*int*/, height /*int*/, dataWidth /*int*/, dataHeight /*int*/, left /*int*/, top /*int*/) {\n var _this = _super.call(this, width, height) || this;\n _this.dataWidth = dataWidth;\n _this.dataHeight = dataHeight;\n _this.left = left;\n _this.top = top;\n if (luminances.BYTES_PER_ELEMENT === 4) { // Int32Array\n var size = width * height;\n var luminancesUint8Array = new Uint8ClampedArray(size);\n for (var offset = 0; offset < size; offset++) {\n var pixel = luminances[offset];\n var r = (pixel >> 16) & 0xff; // red\n var g2 = (pixel >> 7) & 0x1fe; // 2 * green\n var b = pixel & 0xff; // blue\n // Calculate green-favouring average cheaply\n luminancesUint8Array[offset] = /*(byte) */ ((r + g2 + b) / 4) & 0xFF;\n }\n _this.luminances = luminancesUint8Array;\n }\n else {\n _this.luminances = luminances;\n }\n if (undefined === dataWidth) {\n _this.dataWidth = width;\n }\n if (undefined === dataHeight) {\n _this.dataHeight = height;\n }\n if (undefined === left) {\n _this.left = 0;\n }\n if (undefined === top) {\n _this.top = 0;\n }\n if (_this.left + width > _this.dataWidth || _this.top + height > _this.dataHeight) {\n throw new IllegalArgumentException('Crop rectangle does not fit within image data.');\n }\n return _this;\n }\n /*@Override*/\n RGBLuminanceSource.prototype.getRow = function (y /*int*/, row) {\n if (y < 0 || y >= this.getHeight()) {\n throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n }\n var width = this.getWidth();\n if (row === null || row === undefined || row.length < width) {\n row = new Uint8ClampedArray(width);\n }\n var offset = (y + this.top) * this.dataWidth + this.left;\n System.arraycopy(this.luminances, offset, row, 0, width);\n return row;\n };\n /*@Override*/\n RGBLuminanceSource.prototype.getMatrix = function () {\n var width = this.getWidth();\n var height = this.getHeight();\n // If the caller asks for the entire underlying image, save the copy and give them the\n // original data. The docs specifically warn that result.length must be ignored.\n if (width === this.dataWidth && height === this.dataHeight) {\n return this.luminances;\n }\n var area = width * height;\n var matrix = new Uint8ClampedArray(area);\n var inputOffset = this.top * this.dataWidth + this.left;\n // If the width matches the full width of the underlying data, perform a single copy.\n if (width === this.dataWidth) {\n System.arraycopy(this.luminances, inputOffset, matrix, 0, area);\n return matrix;\n }\n // Otherwise copy one cropped row at a time.\n for (var y = 0; y < height; y++) {\n var outputOffset = y * width;\n System.arraycopy(this.luminances, inputOffset, matrix, outputOffset, width);\n inputOffset += this.dataWidth;\n }\n return matrix;\n };\n /*@Override*/\n RGBLuminanceSource.prototype.isCropSupported = function () {\n return true;\n };\n /*@Override*/\n RGBLuminanceSource.prototype.crop = function (left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n return new RGBLuminanceSource(this.luminances, width, height, this.dataWidth, this.dataHeight, this.left + left, this.top + top);\n };\n RGBLuminanceSource.prototype.invert = function () {\n return new InvertedLuminanceSource(this);\n };\n return RGBLuminanceSource;\n}(LuminanceSource));\nexport default RGBLuminanceSource;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport CharacterSetECI from '../common/CharacterSetECI';\n/**\n * Just to make a shortcut between Java code and TS code.\n */\nvar Charset = /** @class */ (function (_super) {\n __extends(Charset, _super);\n function Charset() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Charset.forName = function (name) {\n return this.getCharacterSetECIByName(name);\n };\n return Charset;\n}(CharacterSetECI));\nexport default Charset;\n","import CharacterSetECI from '../common/CharacterSetECI';\n/**\n * Just to make a shortcut between Java code and TS code.\n */\nvar StandardCharsets = /** @class */ (function () {\n function StandardCharsets() {\n }\n StandardCharsets.ISO_8859_1 = CharacterSetECI.ISO8859_1;\n return StandardCharsets;\n}());\nexport default StandardCharsets;\n","import Arrays from '../../util/Arrays';\n/**\n * Symbol Character Placement Program. Adapted from Annex M.1 in ISO/IEC 16022:2000(E).\n */\nvar DefaultPlacement = /** @class */ (function () {\n /**\n * Main constructor\n *\n * @param codewords the codewords to place\n * @param numcols the number of columns\n * @param numrows the number of rows\n */\n function DefaultPlacement(codewords, numcols, numrows) {\n this.codewords = codewords;\n this.numcols = numcols;\n this.numrows = numrows;\n this.bits = new Uint8Array(numcols * numrows);\n Arrays.fill(this.bits, 2); // Initialize with \"not set\" value\n }\n DefaultPlacement.prototype.getNumrows = function () {\n return this.numrows;\n };\n DefaultPlacement.prototype.getNumcols = function () {\n return this.numcols;\n };\n DefaultPlacement.prototype.getBits = function () {\n return this.bits;\n };\n DefaultPlacement.prototype.getBit = function (col, row) {\n return this.bits[row * this.numcols + col] === 1;\n };\n DefaultPlacement.prototype.setBit = function (col, row, bit) {\n this.bits[row * this.numcols + col] = bit ? 1 : 0;\n };\n DefaultPlacement.prototype.noBit = function (col, row) {\n return this.bits[row * this.numcols + col] === 2;\n };\n DefaultPlacement.prototype.place = function () {\n var pos = 0;\n var row = 4;\n var col = 0;\n do {\n // repeatedly first check for one of the special corner cases, then...\n if (row === this.numrows && col === 0) {\n this.corner1(pos++);\n }\n if (row === this.numrows - 2 && col === 0 && this.numcols % 4 !== 0) {\n this.corner2(pos++);\n }\n if (row === this.numrows - 2 && col === 0 && this.numcols % 8 === 4) {\n this.corner3(pos++);\n }\n if (row === this.numrows + 4 && col === 2 && this.numcols % 8 === 0) {\n this.corner4(pos++);\n }\n // sweep upward diagonally, inserting successive characters...\n do {\n if (row < this.numrows && col >= 0 && this.noBit(col, row)) {\n this.utah(row, col, pos++);\n }\n row -= 2;\n col += 2;\n } while (row >= 0 && col < this.numcols);\n row++;\n col += 3;\n // and then sweep downward diagonally, inserting successive characters, ...\n do {\n if (row >= 0 && col < this.numcols && this.noBit(col, row)) {\n this.utah(row, col, pos++);\n }\n row += 2;\n col -= 2;\n } while (row < this.numrows && col >= 0);\n row += 3;\n col++;\n // ...until the entire array is scanned\n } while (row < this.numrows || col < this.numcols);\n // Lastly, if the lower right-hand corner is untouched, fill in fixed pattern\n if (this.noBit(this.numcols - 1, this.numrows - 1)) {\n this.setBit(this.numcols - 1, this.numrows - 1, true);\n this.setBit(this.numcols - 2, this.numrows - 2, true);\n }\n };\n DefaultPlacement.prototype.module = function (row, col, pos, bit) {\n if (row < 0) {\n row += this.numrows;\n col += 4 - ((this.numrows + 4) % 8);\n }\n if (col < 0) {\n col += this.numcols;\n row += 4 - ((this.numcols + 4) % 8);\n }\n // Note the conversion:\n var v = this.codewords.charCodeAt(pos);\n v &= 1 << (8 - bit);\n this.setBit(col, row, v !== 0);\n };\n /**\n * Places the 8 bits of a utah-shaped symbol character in ECC200.\n *\n * @param row the row\n * @param col the column\n * @param pos character position\n */\n DefaultPlacement.prototype.utah = function (row, col, pos) {\n this.module(row - 2, col - 2, pos, 1);\n this.module(row - 2, col - 1, pos, 2);\n this.module(row - 1, col - 2, pos, 3);\n this.module(row - 1, col - 1, pos, 4);\n this.module(row - 1, col, pos, 5);\n this.module(row, col - 2, pos, 6);\n this.module(row, col - 1, pos, 7);\n this.module(row, col, pos, 8);\n };\n DefaultPlacement.prototype.corner1 = function (pos) {\n this.module(this.numrows - 1, 0, pos, 1);\n this.module(this.numrows - 1, 1, pos, 2);\n this.module(this.numrows - 1, 2, pos, 3);\n this.module(0, this.numcols - 2, pos, 4);\n this.module(0, this.numcols - 1, pos, 5);\n this.module(1, this.numcols - 1, pos, 6);\n this.module(2, this.numcols - 1, pos, 7);\n this.module(3, this.numcols - 1, pos, 8);\n };\n DefaultPlacement.prototype.corner2 = function (pos) {\n this.module(this.numrows - 3, 0, pos, 1);\n this.module(this.numrows - 2, 0, pos, 2);\n this.module(this.numrows - 1, 0, pos, 3);\n this.module(0, this.numcols - 4, pos, 4);\n this.module(0, this.numcols - 3, pos, 5);\n this.module(0, this.numcols - 2, pos, 6);\n this.module(0, this.numcols - 1, pos, 7);\n this.module(1, this.numcols - 1, pos, 8);\n };\n DefaultPlacement.prototype.corner3 = function (pos) {\n this.module(this.numrows - 3, 0, pos, 1);\n this.module(this.numrows - 2, 0, pos, 2);\n this.module(this.numrows - 1, 0, pos, 3);\n this.module(0, this.numcols - 2, pos, 4);\n this.module(0, this.numcols - 1, pos, 5);\n this.module(1, this.numcols - 1, pos, 6);\n this.module(2, this.numcols - 1, pos, 7);\n this.module(3, this.numcols - 1, pos, 8);\n };\n DefaultPlacement.prototype.corner4 = function (pos) {\n this.module(this.numrows - 1, 0, pos, 1);\n this.module(this.numrows - 1, this.numcols - 1, pos, 2);\n this.module(0, this.numcols - 3, pos, 3);\n this.module(0, this.numcols - 2, pos, 4);\n this.module(0, this.numcols - 1, pos, 5);\n this.module(1, this.numcols - 3, pos, 6);\n this.module(1, this.numcols - 2, pos, 7);\n this.module(1, this.numcols - 1, pos, 8);\n };\n return DefaultPlacement;\n}());\nexport default DefaultPlacement;\n","var _a;\n/**\n * Lookup table which factors to use for which number of error correction codewords.\n * See FACTORS.\n */\nexport var FACTOR_SETS = [\n 5, 7, 10, 11, 12, 14, 18, 20, 24, 28, 36, 42, 48, 56, 62, 68,\n];\n/**\n * Precomputed polynomial factors for ECC 200.\n */\nexport var FACTORS = [\n [228, 48, 15, 111, 62],\n [23, 68, 144, 134, 240, 92, 254],\n [28, 24, 185, 166, 223, 248, 116, 255, 110, 61],\n [175, 138, 205, 12, 194, 168, 39, 245, 60, 97, 120],\n [41, 153, 158, 91, 61, 42, 142, 213, 97, 178, 100, 242],\n [156, 97, 192, 252, 95, 9, 157, 119, 138, 45, 18, 186, 83, 185],\n [\n 83, 195, 100, 39, 188, 75, 66, 61, 241, 213, 109, 129, 94, 254, 225, 48, 90,\n 188,\n ],\n [\n 15, 195, 244, 9, 233, 71, 168, 2, 188, 160, 153, 145, 253, 79, 108, 82, 27,\n 174, 186, 172,\n ],\n [\n 52, 190, 88, 205, 109, 39, 176, 21, 155, 197, 251, 223, 155, 21, 5, 172,\n 254, 124, 12, 181, 184, 96, 50, 193,\n ],\n [\n 211, 231, 43, 97, 71, 96, 103, 174, 37, 151, 170, 53, 75, 34, 249, 121, 17,\n 138, 110, 213, 141, 136, 120, 151, 233, 168, 93, 255,\n ],\n [\n 245, 127, 242, 218, 130, 250, 162, 181, 102, 120, 84, 179, 220, 251, 80,\n 182, 229, 18, 2, 4, 68, 33, 101, 137, 95, 119, 115, 44, 175, 184, 59, 25,\n 225, 98, 81, 112,\n ],\n [\n 77, 193, 137, 31, 19, 38, 22, 153, 247, 105, 122, 2, 245, 133, 242, 8, 175,\n 95, 100, 9, 167, 105, 214, 111, 57, 121, 21, 1, 253, 57, 54, 101, 248, 202,\n 69, 50, 150, 177, 226, 5, 9, 5,\n ],\n [\n 245, 132, 172, 223, 96, 32, 117, 22, 238, 133, 238, 231, 205, 188, 237, 87,\n 191, 106, 16, 147, 118, 23, 37, 90, 170, 205, 131, 88, 120, 100, 66, 138,\n 186, 240, 82, 44, 176, 87, 187, 147, 160, 175, 69, 213, 92, 253, 225, 19,\n ],\n [\n 175, 9, 223, 238, 12, 17, 220, 208, 100, 29, 175, 170, 230, 192, 215, 235,\n 150, 159, 36, 223, 38, 200, 132, 54, 228, 146, 218, 234, 117, 203, 29, 232,\n 144, 238, 22, 150, 201, 117, 62, 207, 164, 13, 137, 245, 127, 67, 247, 28,\n 155, 43, 203, 107, 233, 53, 143, 46,\n ],\n [\n 242, 93, 169, 50, 144, 210, 39, 118, 202, 188, 201, 189, 143, 108, 196, 37,\n 185, 112, 134, 230, 245, 63, 197, 190, 250, 106, 185, 221, 175, 64, 114, 71,\n 161, 44, 147, 6, 27, 218, 51, 63, 87, 10, 40, 130, 188, 17, 163, 31, 176,\n 170, 4, 107, 232, 7, 94, 166, 224, 124, 86, 47, 11, 204,\n ],\n [\n 220, 228, 173, 89, 251, 149, 159, 56, 89, 33, 147, 244, 154, 36, 73, 127,\n 213, 136, 248, 180, 234, 197, 158, 177, 68, 122, 93, 213, 15, 160, 227, 236,\n 66, 139, 153, 185, 202, 167, 179, 25, 220, 232, 96, 210, 231, 136, 223, 239,\n 181, 241, 59, 52, 172, 25, 49, 232, 211, 189, 64, 54, 108, 153, 132, 63, 96,\n 103, 82, 186,\n ],\n];\nexport var /*final*/ MODULO_VALUE = 0x12d;\nvar static_LOG = function (LOG, ALOG) {\n var p = 1;\n for (var i = 0; i < 255; i++) {\n ALOG[i] = p;\n LOG[p] = i;\n p *= 2;\n if (p >= 256) {\n p ^= MODULO_VALUE;\n }\n }\n return {\n LOG: LOG,\n ALOG: ALOG,\n };\n};\nexport var LOG = (_a = static_LOG([], []), _a.LOG), ALOG = _a.ALOG;\nexport var SymbolShapeHint;\n(function (SymbolShapeHint) {\n SymbolShapeHint[SymbolShapeHint[\"FORCE_NONE\"] = 0] = \"FORCE_NONE\";\n SymbolShapeHint[SymbolShapeHint[\"FORCE_SQUARE\"] = 1] = \"FORCE_SQUARE\";\n SymbolShapeHint[SymbolShapeHint[\"FORCE_RECTANGLE\"] = 2] = \"FORCE_RECTANGLE\";\n})(SymbolShapeHint || (SymbolShapeHint = {}));\n/**\n * Padding character\n */\nexport var PAD = 129;\n/**\n * mode latch to C40 encodation mode\n */\nexport var LATCH_TO_C40 = 230;\n/**\n * mode latch to Base 256 encodation mode\n */\nexport var LATCH_TO_BASE256 = 231;\n/**\n * FNC1 Codeword\n */\n// private static FNC1 = 232;\n/**\n * Structured Append Codeword\n */\n// private static STRUCTURED_APPEND = 233;\n/**\n * Reader Programming\n */\n// private static READER_PROGRAMMING = 234;\n/**\n * Upper Shift\n */\nexport var UPPER_SHIFT = 235;\n/**\n * 05 Macro\n */\nexport var MACRO_05 = 236;\n/**\n * 06 Macro\n */\nexport var MACRO_06 = 237;\n/**\n * mode latch to ANSI X.12 encodation mode\n */\nexport var LATCH_TO_ANSIX12 = 238;\n/**\n * mode latch to Text encodation mode\n */\nexport var LATCH_TO_TEXT = 239;\n/**\n * mode latch to EDIFACT encodation mode\n */\nexport var LATCH_TO_EDIFACT = 240;\n/**\n * ECI character (Extended Channel Interpretation)\n */\n// private export const ECI = 241;\n/**\n * Unlatch from C40 encodation\n */\nexport var C40_UNLATCH = 254;\n/**\n * Unlatch from X12 encodation\n */\nexport var X12_UNLATCH = 254;\n/**\n * 05 Macro header\n */\nexport var MACRO_05_HEADER = '[)>\\u001E05\\u001D';\n/**\n * 06 Macro header\n */\nexport var MACRO_06_HEADER = '[)>\\u001E06\\u001D';\n/**\n * Macro trailer\n */\nexport var MACRO_TRAILER = '\\u001E\\u0004';\nexport var ASCII_ENCODATION = 0;\nexport var C40_ENCODATION = 1;\nexport var TEXT_ENCODATION = 2;\nexport var X12_ENCODATION = 3;\nexport var EDIFACT_ENCODATION = 4;\nexport var BASE256_ENCODATION = 5;\n","import StringBuilder from '../../util/StringBuilder';\nimport { ALOG, FACTORS, FACTOR_SETS, LOG } from './constants';\n/**\n * Error Correction Code for ECC200.\n */\nvar ErrorCorrection = /** @class */ (function () {\n function ErrorCorrection() {\n }\n /**\n * Creates the ECC200 error correction for an encoded message.\n *\n * @param codewords the codewords\n * @param symbolInfo information about the symbol to be encoded\n * @return the codewords with interleaved error correction.\n */\n ErrorCorrection.encodeECC200 = function (codewords, symbolInfo) {\n if (codewords.length !== symbolInfo.getDataCapacity()) {\n throw new Error('The number of codewords does not match the selected symbol');\n }\n var sb = new StringBuilder();\n sb.append(codewords);\n var blockCount = symbolInfo.getInterleavedBlockCount();\n if (blockCount === 1) {\n var ecc = this.createECCBlock(codewords, symbolInfo.getErrorCodewords());\n sb.append(ecc);\n }\n else {\n // sb.setLength(sb.capacity());\n var dataSizes = [];\n var errorSizes = [];\n for (var i = 0; i < blockCount; i++) {\n dataSizes[i] = symbolInfo.getDataLengthForInterleavedBlock(i + 1);\n errorSizes[i] = symbolInfo.getErrorLengthForInterleavedBlock(i + 1);\n }\n for (var block = 0; block < blockCount; block++) {\n var temp = new StringBuilder();\n for (var d = block; d < symbolInfo.getDataCapacity(); d += blockCount) {\n temp.append(codewords.charAt(d));\n }\n var ecc = this.createECCBlock(temp.toString(), errorSizes[block]);\n var pos = 0;\n for (var e = block; e < errorSizes[block] * blockCount; e += blockCount) {\n sb.setCharAt(symbolInfo.getDataCapacity() + e, ecc.charAt(pos++));\n }\n }\n }\n return sb.toString();\n };\n ErrorCorrection.createECCBlock = function (codewords, numECWords) {\n var table = -1;\n for (var i = 0; i < FACTOR_SETS.length; i++) {\n if (FACTOR_SETS[i] === numECWords) {\n table = i;\n break;\n }\n }\n if (table < 0) {\n throw new Error('Illegal number of error correction codewords specified: ' + numECWords);\n }\n var poly = FACTORS[table];\n var ecc = [];\n for (var i = 0; i < numECWords; i++) {\n ecc[i] = 0;\n }\n for (var i = 0; i < codewords.length; i++) {\n var m = ecc[numECWords - 1] ^ codewords.charAt(i).charCodeAt(0);\n for (var k = numECWords - 1; k > 0; k--) {\n if (m !== 0 && poly[k] !== 0) {\n ecc[k] = ecc[k - 1] ^ ALOG[(LOG[m] + LOG[poly[k]]) % 255];\n }\n else {\n ecc[k] = ecc[k - 1];\n }\n }\n if (m !== 0 && poly[0] !== 0) {\n ecc[0] = ALOG[(LOG[m] + LOG[poly[0]]) % 255];\n }\n else {\n ecc[0] = 0;\n }\n }\n var eccReversed = [];\n for (var i = 0; i < numECWords; i++) {\n eccReversed[i] = ecc[numECWords - i - 1];\n }\n return eccReversed.map(function (c) { return String.fromCharCode(c); }).join('');\n };\n return ErrorCorrection;\n}());\nexport default ErrorCorrection;\n","import { ASCII_ENCODATION, BASE256_ENCODATION, C40_ENCODATION, EDIFACT_ENCODATION, LATCH_TO_ANSIX12, LATCH_TO_BASE256, LATCH_TO_C40, LATCH_TO_EDIFACT, LATCH_TO_TEXT, TEXT_ENCODATION, UPPER_SHIFT, X12_ENCODATION, } from './constants';\n// tslint:disable-next-line:no-circular-imports\nimport HighLevelEncoder from './HighLevelEncoder';\nvar ASCIIEncoder = /** @class */ (function () {\n function ASCIIEncoder() {\n }\n ASCIIEncoder.prototype.getEncodingMode = function () {\n return ASCII_ENCODATION;\n };\n ASCIIEncoder.prototype.encode = function (context) {\n // step B\n var n = HighLevelEncoder.determineConsecutiveDigitCount(context.getMessage(), context.pos);\n if (n >= 2) {\n context.writeCodeword(this.encodeASCIIDigits(context.getMessage().charCodeAt(context.pos), context.getMessage().charCodeAt(context.pos + 1)));\n context.pos += 2;\n }\n else {\n var c = context.getCurrentChar();\n var newMode = HighLevelEncoder.lookAheadTest(context.getMessage(), context.pos, this.getEncodingMode());\n if (newMode !== this.getEncodingMode()) {\n switch (newMode) {\n case BASE256_ENCODATION:\n context.writeCodeword(LATCH_TO_BASE256);\n context.signalEncoderChange(BASE256_ENCODATION);\n return;\n case C40_ENCODATION:\n context.writeCodeword(LATCH_TO_C40);\n context.signalEncoderChange(C40_ENCODATION);\n return;\n case X12_ENCODATION:\n context.writeCodeword(LATCH_TO_ANSIX12);\n context.signalEncoderChange(X12_ENCODATION);\n break;\n case TEXT_ENCODATION:\n context.writeCodeword(LATCH_TO_TEXT);\n context.signalEncoderChange(TEXT_ENCODATION);\n break;\n case EDIFACT_ENCODATION:\n context.writeCodeword(LATCH_TO_EDIFACT);\n context.signalEncoderChange(EDIFACT_ENCODATION);\n break;\n default:\n throw new Error('Illegal mode: ' + newMode);\n }\n }\n else if (HighLevelEncoder.isExtendedASCII(c)) {\n context.writeCodeword(UPPER_SHIFT);\n context.writeCodeword(c - 128 + 1);\n context.pos++;\n }\n else {\n context.writeCodeword(c + 1);\n context.pos++;\n }\n }\n };\n ASCIIEncoder.prototype.encodeASCIIDigits = function (digit1, digit2) {\n if (HighLevelEncoder.isDigit(digit1) && HighLevelEncoder.isDigit(digit2)) {\n var num = (digit1 - 48) * 10 + (digit2 - 48);\n return num + 130;\n }\n throw new Error('not digits: ' + digit1 + digit2);\n };\n return ASCIIEncoder;\n}());\nexport { ASCIIEncoder };\n","import StringUtils from '../../common/StringUtils';\nimport StringBuilder from '../../util/StringBuilder';\nimport HighLevelEncoder from './HighLevelEncoder';\nimport { BASE256_ENCODATION, ASCII_ENCODATION } from './constants';\nvar Base256Encoder = /** @class */ (function () {\n function Base256Encoder() {\n }\n Base256Encoder.prototype.getEncodingMode = function () {\n return BASE256_ENCODATION;\n };\n Base256Encoder.prototype.encode = function (context) {\n var buffer = new StringBuilder();\n buffer.append(0); // Initialize length field\n while (context.hasMoreCharacters()) {\n var c = context.getCurrentChar();\n buffer.append(c);\n context.pos++;\n var newMode = HighLevelEncoder.lookAheadTest(context.getMessage(), context.pos, this.getEncodingMode());\n if (newMode !== this.getEncodingMode()) {\n // Return to ASCII encodation, which will actually handle latch to new mode\n context.signalEncoderChange(ASCII_ENCODATION);\n break;\n }\n }\n var dataCount = buffer.length() - 1;\n var lengthFieldSize = 1;\n var currentSize = context.getCodewordCount() + dataCount + lengthFieldSize;\n context.updateSymbolInfo(currentSize);\n var mustPad = context.getSymbolInfo().getDataCapacity() - currentSize > 0;\n if (context.hasMoreCharacters() || mustPad) {\n if (dataCount <= 249) {\n buffer.setCharAt(0, StringUtils.getCharAt(dataCount));\n }\n else if (dataCount <= 1555) {\n buffer.setCharAt(0, StringUtils.getCharAt(Math.floor(dataCount / 250) + 249));\n buffer.insert(1, StringUtils.getCharAt(dataCount % 250));\n }\n else {\n throw new Error('Message length not in valid ranges: ' + dataCount);\n }\n }\n for (var i = 0, c = buffer.length(); i < c; i++) {\n context.writeCodeword(this.randomize255State(buffer.charAt(i).charCodeAt(0), context.getCodewordCount() + 1));\n }\n };\n Base256Encoder.prototype.randomize255State = function (ch, codewordPosition) {\n var pseudoRandom = ((149 * codewordPosition) % 255) + 1;\n var tempVariable = ch + pseudoRandom;\n if (tempVariable <= 255) {\n return tempVariable;\n }\n else {\n return tempVariable - 256;\n }\n };\n return Base256Encoder;\n}());\nexport { Base256Encoder };\n","import StringBuilder from '../../util/StringBuilder';\nimport HighLevelEncoder from './HighLevelEncoder';\nimport { C40_ENCODATION, LATCH_TO_C40, ASCII_ENCODATION, C40_UNLATCH, } from './constants';\nvar C40Encoder = /** @class */ (function () {\n function C40Encoder() {\n }\n C40Encoder.prototype.getEncodingMode = function () {\n return C40_ENCODATION;\n };\n C40Encoder.prototype.encodeMaximal = function (context) {\n var buffer = new StringBuilder();\n var lastCharSize = 0;\n var backtrackStartPosition = context.pos;\n var backtrackBufferLength = 0;\n while (context.hasMoreCharacters()) {\n var c = context.getCurrentChar();\n context.pos++;\n lastCharSize = this.encodeChar(c, buffer);\n if (buffer.length() % 3 === 0) {\n backtrackStartPosition = context.pos;\n backtrackBufferLength = buffer.length();\n }\n }\n if (backtrackBufferLength !== buffer.length()) {\n var unwritten = Math.floor((buffer.length() / 3) * 2);\n var curCodewordCount = Math.floor(context.getCodewordCount() + unwritten + 1); // +1 for the latch to C40\n context.updateSymbolInfo(curCodewordCount);\n var available = context.getSymbolInfo().getDataCapacity() - curCodewordCount;\n var rest = Math.floor(buffer.length() % 3);\n if ((rest === 2 && available !== 2) ||\n (rest === 1 && (lastCharSize > 3 || available !== 1))) {\n // buffer.setLength(backtrackBufferLength);\n context.pos = backtrackStartPosition;\n }\n }\n if (buffer.length() > 0) {\n context.writeCodeword(LATCH_TO_C40);\n }\n this.handleEOD(context, buffer);\n };\n C40Encoder.prototype.encode = function (context) {\n // step C\n var buffer = new StringBuilder();\n while (context.hasMoreCharacters()) {\n var c = context.getCurrentChar();\n context.pos++;\n var lastCharSize = this.encodeChar(c, buffer);\n var unwritten = Math.floor(buffer.length() / 3) * 2;\n var curCodewordCount = context.getCodewordCount() + unwritten;\n context.updateSymbolInfo(curCodewordCount);\n var available = context.getSymbolInfo().getDataCapacity() - curCodewordCount;\n if (!context.hasMoreCharacters()) {\n // Avoid having a single C40 value in the last triplet\n var removed = new StringBuilder();\n if (buffer.length() % 3 === 2 && available !== 2) {\n lastCharSize = this.backtrackOneCharacter(context, buffer, removed, lastCharSize);\n }\n while (buffer.length() % 3 === 1 &&\n (lastCharSize > 3 || available !== 1)) {\n lastCharSize = this.backtrackOneCharacter(context, buffer, removed, lastCharSize);\n }\n break;\n }\n var count = buffer.length();\n if (count % 3 === 0) {\n var newMode = HighLevelEncoder.lookAheadTest(context.getMessage(), context.pos, this.getEncodingMode());\n if (newMode !== this.getEncodingMode()) {\n // Return to ASCII encodation, which will actually handle latch to new mode\n context.signalEncoderChange(ASCII_ENCODATION);\n break;\n }\n }\n }\n this.handleEOD(context, buffer);\n };\n C40Encoder.prototype.backtrackOneCharacter = function (context, buffer, removed, lastCharSize) {\n var count = buffer.length();\n var test = buffer.toString().substring(0, count - lastCharSize);\n buffer.setLengthToZero();\n buffer.append(test);\n // buffer.delete(count - lastCharSize, count);\n /*for (let i = count - lastCharSize; i < count; i++) {\n buffer.deleteCharAt(i);\n }*/\n context.pos--;\n var c = context.getCurrentChar();\n lastCharSize = this.encodeChar(c, removed);\n context.resetSymbolInfo(); // Deal with possible reduction in symbol size\n return lastCharSize;\n };\n C40Encoder.prototype.writeNextTriplet = function (context, buffer) {\n context.writeCodewords(this.encodeToCodewords(buffer.toString()));\n var test = buffer.toString().substring(3);\n buffer.setLengthToZero();\n buffer.append(test);\n // buffer.delete(0, 3);\n /*for (let i = 0; i < 3; i++) {\n buffer.deleteCharAt(i);\n }*/\n };\n /**\n * Handle \"end of data\" situations\n *\n * @param context the encoder context\n * @param buffer the buffer with the remaining encoded characters\n */\n C40Encoder.prototype.handleEOD = function (context, buffer) {\n var unwritten = Math.floor((buffer.length() / 3) * 2);\n var rest = buffer.length() % 3;\n var curCodewordCount = context.getCodewordCount() + unwritten;\n context.updateSymbolInfo(curCodewordCount);\n var available = context.getSymbolInfo().getDataCapacity() - curCodewordCount;\n if (rest === 2) {\n buffer.append('\\0'); // Shift 1\n while (buffer.length() >= 3) {\n this.writeNextTriplet(context, buffer);\n }\n if (context.hasMoreCharacters()) {\n context.writeCodeword(C40_UNLATCH);\n }\n }\n else if (available === 1 && rest === 1) {\n while (buffer.length() >= 3) {\n this.writeNextTriplet(context, buffer);\n }\n if (context.hasMoreCharacters()) {\n context.writeCodeword(C40_UNLATCH);\n }\n // else no unlatch\n context.pos--;\n }\n else if (rest === 0) {\n while (buffer.length() >= 3) {\n this.writeNextTriplet(context, buffer);\n }\n if (available > 0 || context.hasMoreCharacters()) {\n context.writeCodeword(C40_UNLATCH);\n }\n }\n else {\n throw new Error('Unexpected case. Please report!');\n }\n context.signalEncoderChange(ASCII_ENCODATION);\n };\n C40Encoder.prototype.encodeChar = function (c, sb) {\n if (c === ' '.charCodeAt(0)) {\n sb.append(3);\n return 1;\n }\n if (c >= '0'.charCodeAt(0) && c <= '9'.charCodeAt(0)) {\n sb.append(c - 48 + 4);\n return 1;\n }\n if (c >= 'A'.charCodeAt(0) && c <= 'Z'.charCodeAt(0)) {\n sb.append(c - 65 + 14);\n return 1;\n }\n if (c < ' '.charCodeAt(0)) {\n sb.append(0); // Shift 1 Set\n sb.append(c);\n return 2;\n }\n if (c <= '/'.charCodeAt(0)) {\n sb.append(1); // Shift 2 Set\n sb.append(c - 33);\n return 2;\n }\n if (c <= '@'.charCodeAt(0)) {\n sb.append(1); // Shift 2 Set\n sb.append(c - 58 + 15);\n return 2;\n }\n if (c <= '_'.charCodeAt(0)) {\n sb.append(1); // Shift 2 Set\n sb.append(c - 91 + 22);\n return 2;\n }\n if (c <= 127) {\n sb.append(2); // Shift 3 Set\n sb.append(c - 96);\n return 2;\n }\n sb.append(1 + \"\\u001E\"); // Shift 2, Upper Shift\n var len = 2;\n len += this.encodeChar(c - 128, sb);\n return len;\n };\n C40Encoder.prototype.encodeToCodewords = function (sb) {\n var v = 1600 * sb.charCodeAt(0) + 40 * sb.charCodeAt(1) + sb.charCodeAt(2) + 1;\n var cw1 = v / 256;\n var cw2 = v % 256;\n var result = new StringBuilder();\n result.append(cw1);\n result.append(cw2);\n return result.toString();\n };\n return C40Encoder;\n}());\nexport { C40Encoder };\n","import StringUtils from '../../common/StringUtils';\nimport StringBuilder from '../../util/StringBuilder';\nimport { EDIFACT_ENCODATION, ASCII_ENCODATION } from './constants';\nimport HighLevelEncoder from './HighLevelEncoder';\nvar EdifactEncoder = /** @class */ (function () {\n function EdifactEncoder() {\n }\n EdifactEncoder.prototype.getEncodingMode = function () {\n return EDIFACT_ENCODATION;\n };\n EdifactEncoder.prototype.encode = function (context) {\n // step F\n var buffer = new StringBuilder();\n while (context.hasMoreCharacters()) {\n var c = context.getCurrentChar();\n this.encodeChar(c, buffer);\n context.pos++;\n var count = buffer.length();\n if (count >= 4) {\n context.writeCodewords(this.encodeToCodewords(buffer.toString()));\n var test_1 = buffer.toString().substring(4);\n buffer.setLengthToZero();\n buffer.append(test_1);\n // buffer.delete(0, 4);\n // for (let i = 0; i < 4; i++) {\n // buffer.deleteCharAt(i);\n // }\n var newMode = HighLevelEncoder.lookAheadTest(context.getMessage(), context.pos, this.getEncodingMode());\n if (newMode !== this.getEncodingMode()) {\n // Return to ASCII encodation, which will actually handle latch to new mode\n context.signalEncoderChange(ASCII_ENCODATION);\n break;\n }\n }\n }\n buffer.append(StringUtils.getCharAt(31)); // Unlatch\n this.handleEOD(context, buffer);\n };\n /**\n * Handle \"end of data\" situations\n *\n * @param context the encoder context\n * @param buffer the buffer with the remaining encoded characters\n */\n EdifactEncoder.prototype.handleEOD = function (context, buffer) {\n try {\n var count = buffer.length();\n if (count === 0) {\n return; // Already finished\n }\n if (count === 1) {\n // Only an unlatch at the end\n context.updateSymbolInfo();\n var available = context.getSymbolInfo().getDataCapacity() -\n context.getCodewordCount();\n var remaining = context.getRemainingCharacters();\n // The following two lines are a hack inspired by the 'fix' from https://sourceforge.net/p/barcode4j/svn/221/\n if (remaining > available) {\n context.updateSymbolInfo(context.getCodewordCount() + 1);\n available =\n context.getSymbolInfo().getDataCapacity() -\n context.getCodewordCount();\n }\n if (remaining <= available && available <= 2) {\n return; // No unlatch\n }\n }\n if (count > 4) {\n throw new Error('Count must not exceed 4');\n }\n var restChars = count - 1;\n var encoded = this.encodeToCodewords(buffer.toString());\n var endOfSymbolReached = !context.hasMoreCharacters();\n var restInAscii = endOfSymbolReached && restChars <= 2;\n if (restChars <= 2) {\n context.updateSymbolInfo(context.getCodewordCount() + restChars);\n var available = context.getSymbolInfo().getDataCapacity() -\n context.getCodewordCount();\n if (available >= 3) {\n restInAscii = false;\n context.updateSymbolInfo(context.getCodewordCount() + encoded.length);\n // available = context.symbolInfo.dataCapacity - context.getCodewordCount();\n }\n }\n if (restInAscii) {\n context.resetSymbolInfo();\n context.pos -= restChars;\n }\n else {\n context.writeCodewords(encoded);\n }\n }\n finally {\n context.signalEncoderChange(ASCII_ENCODATION);\n }\n };\n EdifactEncoder.prototype.encodeChar = function (c, sb) {\n if (c >= ' '.charCodeAt(0) && c <= '?'.charCodeAt(0)) {\n sb.append(c);\n }\n else if (c >= '@'.charCodeAt(0) && c <= '^'.charCodeAt(0)) {\n sb.append(StringUtils.getCharAt(c - 64));\n }\n else {\n HighLevelEncoder.illegalCharacter(StringUtils.getCharAt(c));\n }\n };\n EdifactEncoder.prototype.encodeToCodewords = function (sb) {\n var len = sb.length;\n if (len === 0) {\n throw new Error('StringBuilder must not be empty');\n }\n var c1 = sb.charAt(0).charCodeAt(0);\n var c2 = len >= 2 ? sb.charAt(1).charCodeAt(0) : 0;\n var c3 = len >= 3 ? sb.charAt(2).charCodeAt(0) : 0;\n var c4 = len >= 4 ? sb.charAt(3).charCodeAt(0) : 0;\n var v = (c1 << 18) + (c2 << 12) + (c3 << 6) + c4;\n var cw1 = (v >> 16) & 255;\n var cw2 = (v >> 8) & 255;\n var cw3 = v & 255;\n var res = new StringBuilder();\n res.append(cw1);\n if (len >= 2) {\n res.append(cw2);\n }\n if (len >= 3) {\n res.append(cw3);\n }\n return res.toString();\n };\n return EdifactEncoder;\n}());\nexport { EdifactEncoder };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/**\n * Symbol info table for DataMatrix.\n */\nvar SymbolInfo = /** @class */ (function () {\n function SymbolInfo(rectangular, dataCapacity, errorCodewords, matrixWidth, matrixHeight, dataRegions, rsBlockData, rsBlockError) {\n if (rsBlockData === void 0) { rsBlockData = 0; }\n if (rsBlockError === void 0) { rsBlockError = 0; }\n this.rectangular = rectangular;\n this.dataCapacity = dataCapacity;\n this.errorCodewords = errorCodewords;\n this.matrixWidth = matrixWidth;\n this.matrixHeight = matrixHeight;\n this.dataRegions = dataRegions;\n this.rsBlockData = rsBlockData;\n this.rsBlockError = rsBlockError;\n }\n SymbolInfo.lookup = function (dataCodewords, shape, minSize, maxSize, fail) {\n var e_1, _a;\n if (shape === void 0) { shape = 0 /* FORCE_NONE */; }\n if (minSize === void 0) { minSize = null; }\n if (maxSize === void 0) { maxSize = null; }\n if (fail === void 0) { fail = true; }\n try {\n for (var PROD_SYMBOLS_1 = __values(PROD_SYMBOLS), PROD_SYMBOLS_1_1 = PROD_SYMBOLS_1.next(); !PROD_SYMBOLS_1_1.done; PROD_SYMBOLS_1_1 = PROD_SYMBOLS_1.next()) {\n var symbol = PROD_SYMBOLS_1_1.value;\n if (shape === 1 /* FORCE_SQUARE */ && symbol.rectangular) {\n continue;\n }\n if (shape === 2 /* FORCE_RECTANGLE */ && !symbol.rectangular) {\n continue;\n }\n if (minSize != null &&\n (symbol.getSymbolWidth() < minSize.getWidth() ||\n symbol.getSymbolHeight() < minSize.getHeight())) {\n continue;\n }\n if (maxSize != null &&\n (symbol.getSymbolWidth() > maxSize.getWidth() ||\n symbol.getSymbolHeight() > maxSize.getHeight())) {\n continue;\n }\n if (dataCodewords <= symbol.dataCapacity) {\n return symbol;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (PROD_SYMBOLS_1_1 && !PROD_SYMBOLS_1_1.done && (_a = PROD_SYMBOLS_1.return)) _a.call(PROD_SYMBOLS_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (fail) {\n throw new Error(\"Can't find a symbol arrangement that matches the message. Data codewords: \" +\n dataCodewords);\n }\n return null;\n };\n SymbolInfo.prototype.getHorizontalDataRegions = function () {\n switch (this.dataRegions) {\n case 1:\n return 1;\n case 2:\n case 4:\n return 2;\n case 16:\n return 4;\n case 36:\n return 6;\n default:\n throw new Error('Cannot handle this number of data regions');\n }\n };\n SymbolInfo.prototype.getVerticalDataRegions = function () {\n switch (this.dataRegions) {\n case 1:\n case 2:\n return 1;\n case 4:\n return 2;\n case 16:\n return 4;\n case 36:\n return 6;\n default:\n throw new Error('Cannot handle this number of data regions');\n }\n };\n SymbolInfo.prototype.getSymbolDataWidth = function () {\n return this.getHorizontalDataRegions() * this.matrixWidth;\n };\n SymbolInfo.prototype.getSymbolDataHeight = function () {\n return this.getVerticalDataRegions() * this.matrixHeight;\n };\n SymbolInfo.prototype.getSymbolWidth = function () {\n return this.getSymbolDataWidth() + this.getHorizontalDataRegions() * 2;\n };\n SymbolInfo.prototype.getSymbolHeight = function () {\n return this.getSymbolDataHeight() + this.getVerticalDataRegions() * 2;\n };\n SymbolInfo.prototype.getCodewordCount = function () {\n return this.dataCapacity + this.errorCodewords;\n };\n SymbolInfo.prototype.getInterleavedBlockCount = function () {\n if (!this.rsBlockData)\n return 1;\n return this.dataCapacity / this.rsBlockData;\n };\n SymbolInfo.prototype.getDataCapacity = function () {\n return this.dataCapacity;\n };\n SymbolInfo.prototype.getErrorCodewords = function () {\n return this.errorCodewords;\n };\n SymbolInfo.prototype.getDataLengthForInterleavedBlock = function (index) {\n return this.rsBlockData;\n };\n SymbolInfo.prototype.getErrorLengthForInterleavedBlock = function (index) {\n return this.rsBlockError;\n };\n return SymbolInfo;\n}());\nexport default SymbolInfo;\nvar DataMatrixSymbolInfo144 = /** @class */ (function (_super) {\n __extends(DataMatrixSymbolInfo144, _super);\n function DataMatrixSymbolInfo144() {\n return _super.call(this, false, 1558, 620, 22, 22, 36, -1, 62) || this;\n }\n DataMatrixSymbolInfo144.prototype.getInterleavedBlockCount = function () {\n return 10;\n };\n DataMatrixSymbolInfo144.prototype.getDataLengthForInterleavedBlock = function (index) {\n return index <= 8 ? 156 : 155;\n };\n return DataMatrixSymbolInfo144;\n}(SymbolInfo));\nexport var PROD_SYMBOLS = [\n new SymbolInfo(false, 3, 5, 8, 8, 1),\n new SymbolInfo(false, 5, 7, 10, 10, 1),\n /*rect*/ new SymbolInfo(true, 5, 7, 16, 6, 1),\n new SymbolInfo(false, 8, 10, 12, 12, 1),\n /*rect*/ new SymbolInfo(true, 10, 11, 14, 6, 2),\n new SymbolInfo(false, 12, 12, 14, 14, 1),\n /*rect*/ new SymbolInfo(true, 16, 14, 24, 10, 1),\n new SymbolInfo(false, 18, 14, 16, 16, 1),\n new SymbolInfo(false, 22, 18, 18, 18, 1),\n /*rect*/ new SymbolInfo(true, 22, 18, 16, 10, 2),\n new SymbolInfo(false, 30, 20, 20, 20, 1),\n /*rect*/ new SymbolInfo(true, 32, 24, 16, 14, 2),\n new SymbolInfo(false, 36, 24, 22, 22, 1),\n new SymbolInfo(false, 44, 28, 24, 24, 1),\n /*rect*/ new SymbolInfo(true, 49, 28, 22, 14, 2),\n new SymbolInfo(false, 62, 36, 14, 14, 4),\n new SymbolInfo(false, 86, 42, 16, 16, 4),\n new SymbolInfo(false, 114, 48, 18, 18, 4),\n new SymbolInfo(false, 144, 56, 20, 20, 4),\n new SymbolInfo(false, 174, 68, 22, 22, 4),\n new SymbolInfo(false, 204, 84, 24, 24, 4, 102, 42),\n new SymbolInfo(false, 280, 112, 14, 14, 16, 140, 56),\n new SymbolInfo(false, 368, 144, 16, 16, 16, 92, 36),\n new SymbolInfo(false, 456, 192, 18, 18, 16, 114, 48),\n new SymbolInfo(false, 576, 224, 20, 20, 16, 144, 56),\n new SymbolInfo(false, 696, 272, 22, 22, 16, 174, 68),\n new SymbolInfo(false, 816, 336, 24, 24, 16, 136, 56),\n new SymbolInfo(false, 1050, 408, 18, 18, 36, 175, 68),\n new SymbolInfo(false, 1304, 496, 20, 20, 36, 163, 62),\n new DataMatrixSymbolInfo144(),\n];\n","import StringBuilder from '../../util/StringBuilder';\nimport SymbolInfo from './SymbolInfo';\nvar EncoderContext = /** @class */ (function () {\n function EncoderContext(msg) {\n this.msg = msg;\n this.pos = 0;\n this.skipAtEnd = 0;\n // From this point on Strings are not Unicode anymore!\n var msgBinary = msg.split('').map(function (c) { return c.charCodeAt(0); });\n var sb = new StringBuilder();\n for (var i = 0, c = msgBinary.length; i < c; i++) {\n var ch = String.fromCharCode(msgBinary[i] & 0xff);\n if (ch === '?' && msg.charAt(i) !== '?') {\n throw new Error('Message contains characters outside ISO-8859-1 encoding.');\n }\n sb.append(ch);\n }\n this.msg = sb.toString(); // Not Unicode here!\n this.shape = 0 /* FORCE_NONE */;\n this.codewords = new StringBuilder();\n this.newEncoding = -1;\n }\n EncoderContext.prototype.setSymbolShape = function (shape) {\n this.shape = shape;\n };\n EncoderContext.prototype.setSizeConstraints = function (minSize, maxSize) {\n this.minSize = minSize;\n this.maxSize = maxSize;\n };\n EncoderContext.prototype.getMessage = function () {\n return this.msg;\n };\n EncoderContext.prototype.setSkipAtEnd = function (count) {\n this.skipAtEnd = count;\n };\n EncoderContext.prototype.getCurrentChar = function () {\n return this.msg.charCodeAt(this.pos);\n };\n EncoderContext.prototype.getCurrent = function () {\n return this.msg.charCodeAt(this.pos);\n };\n EncoderContext.prototype.getCodewords = function () {\n return this.codewords;\n };\n EncoderContext.prototype.writeCodewords = function (codewords) {\n this.codewords.append(codewords);\n };\n EncoderContext.prototype.writeCodeword = function (codeword) {\n this.codewords.append(codeword);\n };\n EncoderContext.prototype.getCodewordCount = function () {\n return this.codewords.length();\n };\n EncoderContext.prototype.getNewEncoding = function () {\n return this.newEncoding;\n };\n EncoderContext.prototype.signalEncoderChange = function (encoding) {\n this.newEncoding = encoding;\n };\n EncoderContext.prototype.resetEncoderSignal = function () {\n this.newEncoding = -1;\n };\n EncoderContext.prototype.hasMoreCharacters = function () {\n return this.pos < this.getTotalMessageCharCount();\n };\n EncoderContext.prototype.getTotalMessageCharCount = function () {\n return this.msg.length - this.skipAtEnd;\n };\n EncoderContext.prototype.getRemainingCharacters = function () {\n return this.getTotalMessageCharCount() - this.pos;\n };\n EncoderContext.prototype.getSymbolInfo = function () {\n return this.symbolInfo;\n };\n EncoderContext.prototype.updateSymbolInfo = function (len) {\n if (len === void 0) { len = this.getCodewordCount(); }\n if (this.symbolInfo == null || len > this.symbolInfo.getDataCapacity()) {\n this.symbolInfo = SymbolInfo.lookup(len, this.shape, this.minSize, this.maxSize, true);\n }\n };\n EncoderContext.prototype.resetSymbolInfo = function () {\n this.symbolInfo = null;\n };\n return EncoderContext;\n}());\nexport { EncoderContext };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport StringUtils from '../../common/StringUtils';\nimport StringBuilder from '../../util/StringBuilder';\nimport { C40Encoder } from './C40Encoder';\nimport HighLevelEncoder from './HighLevelEncoder';\nimport { X12_ENCODATION, ASCII_ENCODATION, X12_UNLATCH } from './constants';\nvar X12Encoder = /** @class */ (function (_super) {\n __extends(X12Encoder, _super);\n function X12Encoder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n X12Encoder.prototype.getEncodingMode = function () {\n return X12_ENCODATION;\n };\n X12Encoder.prototype.encode = function (context) {\n // step C\n var buffer = new StringBuilder();\n while (context.hasMoreCharacters()) {\n var c = context.getCurrentChar();\n context.pos++;\n this.encodeChar(c, buffer);\n var count = buffer.length();\n if (count % 3 === 0) {\n this.writeNextTriplet(context, buffer);\n var newMode = HighLevelEncoder.lookAheadTest(context.getMessage(), context.pos, this.getEncodingMode());\n if (newMode !== this.getEncodingMode()) {\n // Return to ASCII encodation, which will actually handle latch to new mode\n context.signalEncoderChange(ASCII_ENCODATION);\n break;\n }\n }\n }\n this.handleEOD(context, buffer);\n };\n X12Encoder.prototype.encodeChar = function (c, sb) {\n switch (c) {\n case 13: // CR (Carriage return)\n sb.append(0);\n break;\n case '*'.charCodeAt(0):\n sb.append(1);\n break;\n case '>'.charCodeAt(0):\n sb.append(2);\n break;\n case ' '.charCodeAt(0):\n sb.append(3);\n break;\n default:\n if (c >= '0'.charCodeAt(0) && c <= '9'.charCodeAt(0)) {\n sb.append(c - 48 + 4);\n }\n else if (c >= 'A'.charCodeAt(0) && c <= 'Z'.charCodeAt(0)) {\n sb.append(c - 65 + 14);\n }\n else {\n HighLevelEncoder.illegalCharacter(StringUtils.getCharAt(c));\n }\n break;\n }\n return 1;\n };\n X12Encoder.prototype.handleEOD = function (context, buffer) {\n context.updateSymbolInfo();\n var available = context.getSymbolInfo().getDataCapacity() - context.getCodewordCount();\n var count = buffer.length();\n context.pos -= count;\n if (context.getRemainingCharacters() > 1 ||\n available > 1 ||\n context.getRemainingCharacters() !== available) {\n context.writeCodeword(X12_UNLATCH);\n }\n if (context.getNewEncoding() < 0) {\n context.signalEncoderChange(ASCII_ENCODATION);\n }\n };\n return X12Encoder;\n}(C40Encoder));\nexport { X12Encoder };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { C40Encoder } from './C40Encoder';\nimport { TEXT_ENCODATION } from './constants';\nvar TextEncoder = /** @class */ (function (_super) {\n __extends(TextEncoder, _super);\n function TextEncoder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n TextEncoder.prototype.getEncodingMode = function () {\n return TEXT_ENCODATION;\n };\n TextEncoder.prototype.encodeChar = function (c, sb) {\n if (c === ' '.charCodeAt(0)) {\n sb.append(3);\n return 1;\n }\n if (c >= '0'.charCodeAt(0) && c <= '9'.charCodeAt(0)) {\n sb.append(c - 48 + 4);\n return 1;\n }\n if (c >= 'a'.charCodeAt(0) && c <= 'z'.charCodeAt(0)) {\n sb.append(c - 97 + 14);\n return 1;\n }\n if (c < ' '.charCodeAt(0)) {\n sb.append(0); // Shift 1 Set\n sb.append(c);\n return 2;\n }\n if (c <= '/'.charCodeAt(0)) {\n sb.append(1); // Shift 2 Set\n sb.append(c - 33);\n return 2;\n }\n if (c <= '@'.charCodeAt(0)) {\n sb.append(1); // Shift 2 Set\n sb.append(c - 58 + 15);\n return 2;\n }\n if (c >= '['.charCodeAt(0) && c <= '_'.charCodeAt(0)) {\n sb.append(1); // Shift 2 Set\n sb.append(c - 91 + 22);\n return 2;\n }\n if (c === '`'.charCodeAt(0)) {\n sb.append(2); // Shift 3 Set\n sb.append(0); // '`' - 96 == 0\n return 2;\n }\n if (c <= 'Z'.charCodeAt(0)) {\n sb.append(2); // Shift 3 Set\n sb.append(c - 65 + 1);\n return 2;\n }\n if (c <= 127) {\n sb.append(2); // Shift 3 Set\n sb.append(c - 123 + 27);\n return 2;\n }\n sb.append(1 + \"\\u001E\"); // Shift 2, Upper Shift\n var len = 2;\n len += this.encodeChar(c - 128, sb);\n return len;\n };\n return TextEncoder;\n}(C40Encoder));\nexport { TextEncoder };\n","// tslint:disable-next-line:no-circular-imports\nimport { ASCIIEncoder } from './ASCIIEncoder';\n// tslint:disable-next-line:no-circular-imports\nimport { Base256Encoder } from './Base256Encoder';\n// tslint:disable-next-line:no-circular-imports\nimport { C40Encoder } from './C40Encoder';\nimport { ASCII_ENCODATION, BASE256_ENCODATION, C40_ENCODATION, EDIFACT_ENCODATION, MACRO_05, MACRO_05_HEADER, MACRO_06, MACRO_06_HEADER, MACRO_TRAILER, PAD, TEXT_ENCODATION, X12_ENCODATION, } from './constants';\n// tslint:disable-next-line:no-circular-imports\nimport { EdifactEncoder } from './EdifactEncoder';\nimport { EncoderContext } from './EncoderContext';\n// tslint:disable-next-line:no-circular-imports\nimport { X12Encoder } from './X12Encoder';\n// tslint:disable-next-line:no-circular-imports\nimport { TextEncoder } from './TextEncoder';\nimport Arrays from '../../util/Arrays';\nimport Integer from '../../util/Integer';\n/**\n * DataMatrix ECC 200 data encoder following the algorithm described in ISO/IEC 16022:200(E) in\n * annex S.\n */\nvar HighLevelEncoder = /** @class */ (function () {\n function HighLevelEncoder() {\n }\n HighLevelEncoder.randomize253State = function (codewordPosition) {\n var pseudoRandom = ((149 * codewordPosition) % 253) + 1;\n var tempVariable = PAD + pseudoRandom;\n return tempVariable <= 254 ? tempVariable : tempVariable - 254;\n };\n /**\n * Performs message encoding of a DataMatrix message using the algorithm described in annex P\n * of ISO/IEC 16022:2000(E).\n *\n * @param msg the message\n * @param shape requested shape. May be {@code SymbolShapeHint.FORCE_NONE},\n * {@code SymbolShapeHint.FORCE_SQUARE} or {@code SymbolShapeHint.FORCE_RECTANGLE}.\n * @param minSize the minimum symbol size constraint or null for no constraint\n * @param maxSize the maximum symbol size constraint or null for no constraint\n * @param forceC40 enforce C40 encoding\n * @return the encoded message (the char values range from 0 to 255)\n */\n HighLevelEncoder.encodeHighLevel = function (msg, shape, minSize, maxSize, forceC40) {\n if (shape === void 0) { shape = 0 /* FORCE_NONE */; }\n if (minSize === void 0) { minSize = null; }\n if (maxSize === void 0) { maxSize = null; }\n if (forceC40 === void 0) { forceC40 = false; }\n // the codewords 0..255 are encoded as Unicode characters\n var c40Encoder = new C40Encoder();\n var encoders = [\n new ASCIIEncoder(),\n c40Encoder,\n new TextEncoder(),\n new X12Encoder(),\n new EdifactEncoder(),\n new Base256Encoder(),\n ];\n var context = new EncoderContext(msg);\n context.setSymbolShape(shape);\n context.setSizeConstraints(minSize, maxSize);\n if (msg.startsWith(MACRO_05_HEADER) && msg.endsWith(MACRO_TRAILER)) {\n context.writeCodeword(MACRO_05);\n context.setSkipAtEnd(2);\n context.pos += MACRO_05_HEADER.length;\n }\n else if (msg.startsWith(MACRO_06_HEADER) && msg.endsWith(MACRO_TRAILER)) {\n context.writeCodeword(MACRO_06);\n context.setSkipAtEnd(2);\n context.pos += MACRO_06_HEADER.length;\n }\n var encodingMode = ASCII_ENCODATION; // Default mode\n if (forceC40) {\n c40Encoder.encodeMaximal(context);\n encodingMode = context.getNewEncoding();\n context.resetEncoderSignal();\n }\n while (context.hasMoreCharacters()) {\n encoders[encodingMode].encode(context);\n if (context.getNewEncoding() >= 0) {\n encodingMode = context.getNewEncoding();\n context.resetEncoderSignal();\n }\n }\n var len = context.getCodewordCount();\n context.updateSymbolInfo();\n var capacity = context.getSymbolInfo().getDataCapacity();\n if (len < capacity &&\n encodingMode !== ASCII_ENCODATION &&\n encodingMode !== BASE256_ENCODATION &&\n encodingMode !== EDIFACT_ENCODATION) {\n context.writeCodeword('\\u00fe'); // Unlatch (254)\n }\n // Padding\n var codewords = context.getCodewords();\n if (codewords.length() < capacity) {\n codewords.append(PAD);\n }\n while (codewords.length() < capacity) {\n codewords.append(this.randomize253State(codewords.length() + 1));\n }\n return context.getCodewords().toString();\n };\n HighLevelEncoder.lookAheadTest = function (msg, startpos, currentMode) {\n var newMode = this.lookAheadTestIntern(msg, startpos, currentMode);\n if (currentMode === X12_ENCODATION && newMode === X12_ENCODATION) {\n var endpos = Math.min(startpos + 3, msg.length);\n for (var i = startpos; i < endpos; i++) {\n if (!this.isNativeX12(msg.charCodeAt(i))) {\n return ASCII_ENCODATION;\n }\n }\n }\n else if (currentMode === EDIFACT_ENCODATION &&\n newMode === EDIFACT_ENCODATION) {\n var endpos = Math.min(startpos + 4, msg.length);\n for (var i = startpos; i < endpos; i++) {\n if (!this.isNativeEDIFACT(msg.charCodeAt(i))) {\n return ASCII_ENCODATION;\n }\n }\n }\n return newMode;\n };\n HighLevelEncoder.lookAheadTestIntern = function (msg, startpos, currentMode) {\n if (startpos >= msg.length) {\n return currentMode;\n }\n var charCounts;\n // step J\n if (currentMode === ASCII_ENCODATION) {\n charCounts = [0, 1, 1, 1, 1, 1.25];\n }\n else {\n charCounts = [1, 2, 2, 2, 2, 2.25];\n charCounts[currentMode] = 0;\n }\n var charsProcessed = 0;\n var mins = new Uint8Array(6);\n var intCharCounts = [];\n while (true) {\n // step K\n if (startpos + charsProcessed === msg.length) {\n Arrays.fill(mins, 0);\n Arrays.fill(intCharCounts, 0);\n var min = this.findMinimums(charCounts, intCharCounts, Integer.MAX_VALUE, mins);\n var minCount = this.getMinimumCount(mins);\n if (intCharCounts[ASCII_ENCODATION] === min) {\n return ASCII_ENCODATION;\n }\n if (minCount === 1) {\n if (mins[BASE256_ENCODATION] > 0) {\n return BASE256_ENCODATION;\n }\n if (mins[EDIFACT_ENCODATION] > 0) {\n return EDIFACT_ENCODATION;\n }\n if (mins[TEXT_ENCODATION] > 0) {\n return TEXT_ENCODATION;\n }\n if (mins[X12_ENCODATION] > 0) {\n return X12_ENCODATION;\n }\n }\n return C40_ENCODATION;\n }\n var c = msg.charCodeAt(startpos + charsProcessed);\n charsProcessed++;\n // step L\n if (this.isDigit(c)) {\n charCounts[ASCII_ENCODATION] += 0.5;\n }\n else if (this.isExtendedASCII(c)) {\n charCounts[ASCII_ENCODATION] = Math.ceil(charCounts[ASCII_ENCODATION]);\n charCounts[ASCII_ENCODATION] += 2.0;\n }\n else {\n charCounts[ASCII_ENCODATION] = Math.ceil(charCounts[ASCII_ENCODATION]);\n charCounts[ASCII_ENCODATION]++;\n }\n // step M\n if (this.isNativeC40(c)) {\n charCounts[C40_ENCODATION] += 2.0 / 3.0;\n }\n else if (this.isExtendedASCII(c)) {\n charCounts[C40_ENCODATION] += 8.0 / 3.0;\n }\n else {\n charCounts[C40_ENCODATION] += 4.0 / 3.0;\n }\n // step N\n if (this.isNativeText(c)) {\n charCounts[TEXT_ENCODATION] += 2.0 / 3.0;\n }\n else if (this.isExtendedASCII(c)) {\n charCounts[TEXT_ENCODATION] += 8.0 / 3.0;\n }\n else {\n charCounts[TEXT_ENCODATION] += 4.0 / 3.0;\n }\n // step O\n if (this.isNativeX12(c)) {\n charCounts[X12_ENCODATION] += 2.0 / 3.0;\n }\n else if (this.isExtendedASCII(c)) {\n charCounts[X12_ENCODATION] += 13.0 / 3.0;\n }\n else {\n charCounts[X12_ENCODATION] += 10.0 / 3.0;\n }\n // step P\n if (this.isNativeEDIFACT(c)) {\n charCounts[EDIFACT_ENCODATION] += 3.0 / 4.0;\n }\n else if (this.isExtendedASCII(c)) {\n charCounts[EDIFACT_ENCODATION] += 17.0 / 4.0;\n }\n else {\n charCounts[EDIFACT_ENCODATION] += 13.0 / 4.0;\n }\n // step Q\n if (this.isSpecialB256(c)) {\n charCounts[BASE256_ENCODATION] += 4.0;\n }\n else {\n charCounts[BASE256_ENCODATION]++;\n }\n // step R\n if (charsProcessed >= 4) {\n Arrays.fill(mins, 0);\n Arrays.fill(intCharCounts, 0);\n this.findMinimums(charCounts, intCharCounts, Integer.MAX_VALUE, mins);\n if (intCharCounts[ASCII_ENCODATION] <\n this.min(intCharCounts[BASE256_ENCODATION], intCharCounts[C40_ENCODATION], intCharCounts[TEXT_ENCODATION], intCharCounts[X12_ENCODATION], intCharCounts[EDIFACT_ENCODATION])) {\n return ASCII_ENCODATION;\n }\n if (intCharCounts[BASE256_ENCODATION] < intCharCounts[ASCII_ENCODATION] ||\n intCharCounts[BASE256_ENCODATION] + 1 <\n this.min(intCharCounts[C40_ENCODATION], intCharCounts[TEXT_ENCODATION], intCharCounts[X12_ENCODATION], intCharCounts[EDIFACT_ENCODATION])) {\n return BASE256_ENCODATION;\n }\n if (intCharCounts[EDIFACT_ENCODATION] + 1 <\n this.min(intCharCounts[BASE256_ENCODATION], intCharCounts[C40_ENCODATION], intCharCounts[TEXT_ENCODATION], intCharCounts[X12_ENCODATION], intCharCounts[ASCII_ENCODATION])) {\n return EDIFACT_ENCODATION;\n }\n if (intCharCounts[TEXT_ENCODATION] + 1 <\n this.min(intCharCounts[BASE256_ENCODATION], intCharCounts[C40_ENCODATION], intCharCounts[EDIFACT_ENCODATION], intCharCounts[X12_ENCODATION], intCharCounts[ASCII_ENCODATION])) {\n return TEXT_ENCODATION;\n }\n if (intCharCounts[X12_ENCODATION] + 1 <\n this.min(intCharCounts[BASE256_ENCODATION], intCharCounts[C40_ENCODATION], intCharCounts[EDIFACT_ENCODATION], intCharCounts[TEXT_ENCODATION], intCharCounts[ASCII_ENCODATION])) {\n return X12_ENCODATION;\n }\n if (intCharCounts[C40_ENCODATION] + 1 <\n this.min(intCharCounts[ASCII_ENCODATION], intCharCounts[BASE256_ENCODATION], intCharCounts[EDIFACT_ENCODATION], intCharCounts[TEXT_ENCODATION])) {\n if (intCharCounts[C40_ENCODATION] < intCharCounts[X12_ENCODATION]) {\n return C40_ENCODATION;\n }\n if (intCharCounts[C40_ENCODATION] === intCharCounts[X12_ENCODATION]) {\n var p = startpos + charsProcessed + 1;\n while (p < msg.length) {\n var tc = msg.charCodeAt(p);\n if (this.isX12TermSep(tc)) {\n return X12_ENCODATION;\n }\n if (!this.isNativeX12(tc)) {\n break;\n }\n p++;\n }\n return C40_ENCODATION;\n }\n }\n }\n }\n };\n HighLevelEncoder.min = function (f1, f2, f3, f4, f5) {\n var val = Math.min(f1, Math.min(f2, Math.min(f3, f4)));\n if (f5 === undefined) {\n return val;\n }\n else {\n return Math.min(val, f5);\n }\n };\n HighLevelEncoder.findMinimums = function (charCounts, intCharCounts, min, mins) {\n for (var i = 0; i < 6; i++) {\n var current = (intCharCounts[i] = Math.ceil(charCounts[i]));\n if (min > current) {\n min = current;\n Arrays.fill(mins, 0);\n }\n if (min === current) {\n mins[i] = mins[i] + 1;\n }\n }\n return min;\n };\n HighLevelEncoder.getMinimumCount = function (mins) {\n var minCount = 0;\n for (var i = 0; i < 6; i++) {\n minCount += mins[i];\n }\n return minCount || 0;\n };\n HighLevelEncoder.isDigit = function (ch) {\n return ch >= '0'.charCodeAt(0) && ch <= '9'.charCodeAt(0);\n };\n HighLevelEncoder.isExtendedASCII = function (ch) {\n return ch >= 128 && ch <= 255;\n };\n HighLevelEncoder.isNativeC40 = function (ch) {\n return (ch === ' '.charCodeAt(0) ||\n (ch >= '0'.charCodeAt(0) && ch <= '9'.charCodeAt(0)) ||\n (ch >= 'A'.charCodeAt(0) && ch <= 'Z'.charCodeAt(0)));\n };\n HighLevelEncoder.isNativeText = function (ch) {\n return (ch === ' '.charCodeAt(0) ||\n (ch >= '0'.charCodeAt(0) && ch <= '9'.charCodeAt(0)) ||\n (ch >= 'a'.charCodeAt(0) && ch <= 'z'.charCodeAt(0)));\n };\n HighLevelEncoder.isNativeX12 = function (ch) {\n return (this.isX12TermSep(ch) ||\n ch === ' '.charCodeAt(0) ||\n (ch >= '0'.charCodeAt(0) && ch <= '9'.charCodeAt(0)) ||\n (ch >= 'A'.charCodeAt(0) && ch <= 'Z'.charCodeAt(0)));\n };\n HighLevelEncoder.isX12TermSep = function (ch) {\n return (ch === 13 || // CR\n ch === '*'.charCodeAt(0) ||\n ch === '>'.charCodeAt(0));\n };\n HighLevelEncoder.isNativeEDIFACT = function (ch) {\n return ch >= ' '.charCodeAt(0) && ch <= '^'.charCodeAt(0);\n };\n HighLevelEncoder.isSpecialB256 = function (ch) {\n return false; // TODO NOT IMPLEMENTED YET!!!\n };\n /**\n * Determines the number of consecutive characters that are encodable using numeric compaction.\n *\n * @param msg the message\n * @param startpos the start position within the message\n * @return the requested character count\n */\n HighLevelEncoder.determineConsecutiveDigitCount = function (msg, startpos) {\n if (startpos === void 0) { startpos = 0; }\n var len = msg.length;\n var idx = startpos;\n while (idx < len && this.isDigit(msg.charCodeAt(idx))) {\n idx++;\n }\n return idx - startpos;\n };\n HighLevelEncoder.illegalCharacter = function (singleCharacter) {\n var hex = Integer.toHexString(singleCharacter.charCodeAt(0));\n hex = '0000'.substring(0, 4 - hex.length) + hex;\n throw new Error('Illegal character: ' + singleCharacter + ' (0x' + hex + ')');\n };\n return HighLevelEncoder;\n}());\nexport default HighLevelEncoder;\n","/**\n * Set of CharsetEncoders for a given input string\n *\n * Invariants:\n * - The list contains only encoders from CharacterSetECI (list is shorter then the list of encoders available on\n * the platform for which ECI values are defined).\n * - The list contains encoders at least one encoder for every character in the input.\n * - The first encoder in the list is always the ISO-8859-1 encoder even of no character in the input can be encoded\n * by it.\n * - If the input contains a character that is not in ISO-8859-1 then the last two entries in the list will be the\n * UTF-8 encoder and the UTF-16BE encoder.\n *\n * @author Alex Geller\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport Charset from '../util/Charset';\nimport StandardCharsets from '../util/StandardCharsets';\nimport StringEncoding from '../util/StringEncoding';\nimport StringUtils from './StringUtils';\nvar CharsetEncoder = /** @class */ (function () {\n function CharsetEncoder(charset) {\n this.charset = charset;\n this.name = charset.name;\n }\n CharsetEncoder.prototype.canEncode = function (c) {\n try {\n return StringEncoding.encode(c, this.charset) != null;\n }\n catch (ex) {\n return false;\n }\n };\n return CharsetEncoder;\n}());\nvar ECIEncoderSet = /** @class */ (function () {\n /**\n * Constructs an encoder set\n *\n * @param stringToEncode the string that needs to be encoded\n * @param priorityCharset The preferred {@link Charset} or null.\n * @param fnc1 fnc1 denotes the character in the input that represents the FNC1 character or -1 for a non-GS1 bar\n * code. When specified, it is considered an error to pass it as argument to the methods canEncode() or encode().\n */\n function ECIEncoderSet(stringToEncode, priorityCharset, fnc1) {\n var e_1, _a, e_2, _b, e_3, _c;\n this.ENCODERS = [\n 'IBM437',\n 'ISO-8859-2',\n 'ISO-8859-3',\n 'ISO-8859-4',\n 'ISO-8859-5',\n 'ISO-8859-6',\n 'ISO-8859-7',\n 'ISO-8859-8',\n 'ISO-8859-9',\n 'ISO-8859-10',\n 'ISO-8859-11',\n 'ISO-8859-13',\n 'ISO-8859-14',\n 'ISO-8859-15',\n 'ISO-8859-16',\n 'windows-1250',\n 'windows-1251',\n 'windows-1252',\n 'windows-1256',\n 'Shift_JIS',\n ].map(function (name) { return new CharsetEncoder(Charset.forName(name)); });\n this.encoders = [];\n var neededEncoders = [];\n // we always need the ISO-8859-1 encoder. It is the default encoding\n neededEncoders.push(new CharsetEncoder(StandardCharsets.ISO_8859_1));\n var needUnicodeEncoder = priorityCharset != null && priorityCharset.name.startsWith('UTF');\n // Walk over the input string and see if all characters can be encoded with the list of encoders\n for (var i = 0; i < stringToEncode.length; i++) {\n var canEncode = false;\n try {\n for (var neededEncoders_1 = (e_1 = void 0, __values(neededEncoders)), neededEncoders_1_1 = neededEncoders_1.next(); !neededEncoders_1_1.done; neededEncoders_1_1 = neededEncoders_1.next()) {\n var encoder = neededEncoders_1_1.value;\n var singleCharacter = stringToEncode.charAt(i);\n var c = singleCharacter.charCodeAt(0);\n if (c === fnc1 || encoder.canEncode(singleCharacter)) {\n canEncode = true;\n break;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (neededEncoders_1_1 && !neededEncoders_1_1.done && (_a = neededEncoders_1.return)) _a.call(neededEncoders_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (!canEncode) {\n try {\n // for the character at position i we don't yet have an encoder in the list\n for (var _d = (e_2 = void 0, __values(this.ENCODERS)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var encoder = _e.value;\n if (encoder.canEncode(stringToEncode.charAt(i))) {\n // Good, we found an encoder that can encode the character. We add him to the list and continue scanning\n // the input\n neededEncoders.push(encoder);\n canEncode = true;\n break;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_b = _d.return)) _b.call(_d);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (!canEncode) {\n // The character is not encodeable by any of the single byte encoders so we remember that we will need a\n // Unicode encoder.\n needUnicodeEncoder = true;\n }\n }\n if (neededEncoders.length === 1 && !needUnicodeEncoder) {\n // the entire input can be encoded by the ISO-8859-1 encoder\n this.encoders = [neededEncoders[0]];\n }\n else {\n // we need more than one single byte encoder or we need a Unicode encoder.\n // In this case we append a UTF-8 and UTF-16 encoder to the list\n this.encoders = [];\n var index = 0;\n try {\n for (var neededEncoders_2 = __values(neededEncoders), neededEncoders_2_1 = neededEncoders_2.next(); !neededEncoders_2_1.done; neededEncoders_2_1 = neededEncoders_2.next()) {\n var encoder = neededEncoders_2_1.value;\n this.encoders[index++] = encoder;\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (neededEncoders_2_1 && !neededEncoders_2_1.done && (_c = neededEncoders_2.return)) _c.call(neededEncoders_2);\n }\n finally { if (e_3) throw e_3.error; }\n }\n // this.encoders[index] = new CharsetEncoder(StandardCharsets.UTF_8);\n // this.encoders[index + 1] = new CharsetEncoder(StandardCharsets.UTF_16BE);\n }\n // Compute priorityEncoderIndex by looking up priorityCharset in encoders\n var priorityEncoderIndexValue = -1;\n if (priorityCharset != null) {\n for (var i = 0; i < this.encoders.length; i++) {\n if (this.encoders[i] != null &&\n priorityCharset.name === this.encoders[i].name) {\n priorityEncoderIndexValue = i;\n break;\n }\n }\n }\n this.priorityEncoderIndex = priorityEncoderIndexValue;\n // invariants\n // if(this?.encoders?.[0].name !== StandardCharsets.ISO_8859_1)){\n // throw new Error(\"ISO-8859-1 must be the first encoder\");\n // }\n }\n ECIEncoderSet.prototype.length = function () {\n return this.encoders.length;\n };\n ECIEncoderSet.prototype.getCharsetName = function (index) {\n if (!(index < this.length())) {\n throw new Error('index must be less than length');\n }\n return this.encoders[index].name;\n };\n ECIEncoderSet.prototype.getCharset = function (index) {\n if (!(index < this.length())) {\n throw new Error('index must be less than length');\n }\n return this.encoders[index].charset;\n };\n ECIEncoderSet.prototype.getECIValue = function (encoderIndex) {\n return this.encoders[encoderIndex].charset.getValueIdentifier();\n };\n /*\n * returns -1 if no priority charset was defined\n */\n ECIEncoderSet.prototype.getPriorityEncoderIndex = function () {\n return this.priorityEncoderIndex;\n };\n ECIEncoderSet.prototype.canEncode = function (c, encoderIndex) {\n if (!(encoderIndex < this.length())) {\n throw new Error('index must be less than length');\n }\n return true;\n };\n ECIEncoderSet.prototype.encode = function (c, encoderIndex) {\n if (!(encoderIndex < this.length())) {\n throw new Error('index must be less than length');\n }\n return StringEncoding.encode(StringUtils.getCharAt(c), this.encoders[encoderIndex].name);\n };\n return ECIEncoderSet;\n}());\nexport { ECIEncoderSet };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { MACRO_05_HEADER, MACRO_06_HEADER, MACRO_TRAILER, } from './constants';\nimport HighLevelEncoder from './HighLevelEncoder';\nimport { MinimalECIInput } from '../../common/MinimalECIInput';\nimport Integer from '../../util/Integer';\nvar Mode;\n(function (Mode) {\n Mode[Mode[\"ASCII\"] = 0] = \"ASCII\";\n Mode[Mode[\"C40\"] = 1] = \"C40\";\n Mode[Mode[\"TEXT\"] = 2] = \"TEXT\";\n Mode[Mode[\"X12\"] = 3] = \"X12\";\n Mode[Mode[\"EDF\"] = 4] = \"EDF\";\n Mode[Mode[\"B256\"] = 5] = \"B256\";\n})(Mode || (Mode = {}));\nvar C40_SHIFT2_CHARS = [\n '!',\n '\"',\n '#',\n '$',\n '%',\n '&',\n \"'\",\n '(',\n ')',\n '*',\n '+',\n ',',\n '-',\n '.',\n '/',\n ':',\n ';',\n '<',\n '=',\n '>',\n '?',\n '@',\n '[',\n '\\\\',\n ']',\n '^',\n '_',\n];\nvar MinimalEncoder = /** @class */ (function () {\n function MinimalEncoder() {\n }\n MinimalEncoder.isExtendedASCII = function (ch, fnc1) {\n return ch !== fnc1 && ch >= 128 && ch <= 255;\n };\n MinimalEncoder.isInC40Shift1Set = function (ch) {\n return ch <= 31;\n };\n MinimalEncoder.isInC40Shift2Set = function (ch, fnc1) {\n var e_1, _a;\n try {\n for (var C40_SHIFT2_CHARS_1 = __values(C40_SHIFT2_CHARS), C40_SHIFT2_CHARS_1_1 = C40_SHIFT2_CHARS_1.next(); !C40_SHIFT2_CHARS_1_1.done; C40_SHIFT2_CHARS_1_1 = C40_SHIFT2_CHARS_1.next()) {\n var c40Shift2Char = C40_SHIFT2_CHARS_1_1.value;\n if (c40Shift2Char.charCodeAt(0) === ch) {\n return true;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (C40_SHIFT2_CHARS_1_1 && !C40_SHIFT2_CHARS_1_1.done && (_a = C40_SHIFT2_CHARS_1.return)) _a.call(C40_SHIFT2_CHARS_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return ch === fnc1;\n };\n MinimalEncoder.isInTextShift1Set = function (ch) {\n return this.isInC40Shift1Set(ch);\n };\n MinimalEncoder.isInTextShift2Set = function (ch, fnc1) {\n return this.isInC40Shift2Set(ch, fnc1);\n };\n /**\n * Performs message encoding of a DataMatrix message\n *\n * @param msg the message\n * @param priorityCharset The preferred {@link Charset}. When the value of the argument is null, the algorithm\n * chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority\n * charset to encode any character in the input that can be encoded by it if the charset is among the\n * supported charsets.\n * @param fnc1 denotes the character in the input that represents the FNC1 character or -1 if this is not a GS1\n * bar code. If the value is not -1 then a FNC1 is also prepended.\n * @param shape requested shape.\n * @return the encoded message (the char values range from 0 to 255)\n */\n MinimalEncoder.encodeHighLevel = function (msg, priorityCharset, fnc1, shape) {\n if (priorityCharset === void 0) { priorityCharset = null; }\n if (fnc1 === void 0) { fnc1 = -1; }\n if (shape === void 0) { shape = 0 /* FORCE_NONE */; }\n var macroId = 0;\n if (msg.startsWith(MACRO_05_HEADER) && msg.endsWith(MACRO_TRAILER)) {\n macroId = 5;\n msg = msg.substring(MACRO_05_HEADER.length, msg.length - 2);\n }\n else if (msg.startsWith(MACRO_06_HEADER) && msg.endsWith(MACRO_TRAILER)) {\n macroId = 6;\n msg = msg.substring(MACRO_06_HEADER.length, msg.length - 2);\n }\n return decodeURIComponent(escape(String.fromCharCode.apply(String, __spread(this.encode(msg, priorityCharset, fnc1, shape, macroId)))));\n };\n /**\n * Encodes input minimally and returns an array of the codewords\n *\n * @param input The string to encode\n * @param priorityCharset The preferred {@link Charset}. When the value of the argument is null, the algorithm\n * chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority\n * charset to encode any character in the input that can be encoded by it if the charset is among the\n * supported charsets.\n * @param fnc1 denotes the character in the input that represents the FNC1 character or -1 if this is not a GS1\n * bar code. If the value is not -1 then a FNC1 is also prepended.\n * @param shape requested shape.\n * @param macroId Prepends the specified macro function in case that a value of 5 or 6 is specified.\n * @return An array of bytes representing the codewords of a minimal encoding.\n */\n MinimalEncoder.encode = function (input, priorityCharset, fnc1, shape, macroId) {\n return this.encodeMinimally(new Input(input, priorityCharset, fnc1, shape, macroId)).getBytes();\n };\n MinimalEncoder.addEdge = function (edges, edge) {\n var vertexIndex = edge.fromPosition + edge.characterLength;\n if (edges[vertexIndex][edge.getEndMode()] === null ||\n edges[vertexIndex][edge.getEndMode()].cachedTotalSize >\n edge.cachedTotalSize) {\n edges[vertexIndex][edge.getEndMode()] = edge;\n }\n };\n /** @return the number of words in which the string starting at from can be encoded in c40 or text mode.\n * The number of characters encoded is returned in characterLength.\n * The number of characters encoded is also minimal in the sense that the algorithm stops as soon\n * as a character encoding fills a C40 word competely (three C40 values). An exception is at the\n * end of the string where two C40 values are allowed (according to the spec the third c40 value\n * is filled with 0 (Shift 1) in this case).\n */\n MinimalEncoder.getNumberOfC40Words = function (input, from, c40, characterLength) {\n var thirdsCount = 0;\n for (var i = from; i < input.length(); i++) {\n if (input.isECI(i)) {\n characterLength[0] = 0;\n return 0;\n }\n var ci = input.charAt(i);\n if ((c40 && HighLevelEncoder.isNativeC40(ci)) ||\n (!c40 && HighLevelEncoder.isNativeText(ci))) {\n thirdsCount++; // native\n }\n else if (!MinimalEncoder.isExtendedASCII(ci, input.getFNC1Character())) {\n thirdsCount += 2; // shift\n }\n else {\n var asciiValue = ci & 0xff;\n if (asciiValue >= 128 &&\n ((c40 && HighLevelEncoder.isNativeC40(asciiValue - 128)) ||\n (!c40 && HighLevelEncoder.isNativeText(asciiValue - 128)))) {\n thirdsCount += 3; // shift, Upper shift\n }\n else {\n thirdsCount += 4; // shift, Upper shift, shift\n }\n }\n if (thirdsCount % 3 === 0 ||\n ((thirdsCount - 2) % 3 === 0 && i + 1 === input.length())) {\n characterLength[0] = i - from + 1;\n return Math.ceil(thirdsCount / 3.0);\n }\n }\n characterLength[0] = 0;\n return 0;\n };\n MinimalEncoder.addEdges = function (input, edges, from, previous) {\n var e_2, _a;\n if (input.isECI(from)) {\n this.addEdge(edges, new Edge(input, Mode.ASCII, from, 1, previous));\n return;\n }\n var ch = input.charAt(from);\n if (previous === null || previous.getEndMode() !== Mode.EDF) {\n // not possible to unlatch a full EDF edge to something\n // else\n if (HighLevelEncoder.isDigit(ch) &&\n input.haveNCharacters(from, 2) &&\n HighLevelEncoder.isDigit(input.charAt(from + 1))) {\n // two digits ASCII encoded\n this.addEdge(edges, new Edge(input, Mode.ASCII, from, 2, previous));\n }\n else {\n // one ASCII encoded character or an extended character via Upper Shift\n this.addEdge(edges, new Edge(input, Mode.ASCII, from, 1, previous));\n }\n var modes = [Mode.C40, Mode.TEXT];\n try {\n for (var modes_1 = __values(modes), modes_1_1 = modes_1.next(); !modes_1_1.done; modes_1_1 = modes_1.next()) {\n var mode = modes_1_1.value;\n var characterLength = [];\n if (MinimalEncoder.getNumberOfC40Words(input, from, mode === Mode.C40, characterLength) > 0) {\n this.addEdge(edges, new Edge(input, mode, from, characterLength[0], previous));\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (modes_1_1 && !modes_1_1.done && (_a = modes_1.return)) _a.call(modes_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (input.haveNCharacters(from, 3) &&\n HighLevelEncoder.isNativeX12(input.charAt(from)) &&\n HighLevelEncoder.isNativeX12(input.charAt(from + 1)) &&\n HighLevelEncoder.isNativeX12(input.charAt(from + 2))) {\n this.addEdge(edges, new Edge(input, Mode.X12, from, 3, previous));\n }\n this.addEdge(edges, new Edge(input, Mode.B256, from, 1, previous));\n }\n // We create 4 EDF edges, with 1, 2 3 or 4 characters length. The fourth normally doesn't have a latch to ASCII\n // unless it is 2 characters away from the end of the input.\n var i;\n for (i = 0; i < 3; i++) {\n var pos = from + i;\n if (input.haveNCharacters(pos, 1) &&\n HighLevelEncoder.isNativeEDIFACT(input.charAt(pos))) {\n this.addEdge(edges, new Edge(input, Mode.EDF, from, i + 1, previous));\n }\n else {\n break;\n }\n }\n if (i === 3 &&\n input.haveNCharacters(from, 4) &&\n HighLevelEncoder.isNativeEDIFACT(input.charAt(from + 3))) {\n this.addEdge(edges, new Edge(input, Mode.EDF, from, 4, previous));\n }\n };\n MinimalEncoder.encodeMinimally = function (input) {\n /* The minimal encoding is computed by Dijkstra. The acyclic graph is modeled as follows:\n * A vertex represents a combination of a position in the input and an encoding mode where position 0\n * denotes the position left of the first character, 1 the position left of the second character and so on.\n * Likewise the end vertices are located after the last character at position input.length().\n * For any position there might be up to six vertices, one for each of the encoding types ASCII, C40, TEXT, X12,\n * EDF and B256.\n *\n * As an example consider the input string \"ABC123\" then at position 0 there is only one vertex with the default\n * ASCII encodation. At position 3 there might be vertices for the types ASCII, C40, X12, EDF and B256.\n *\n * An edge leading to such a vertex encodes one or more of the characters left of the position that the vertex\n * represents. It encodes the characters in the encoding mode of the vertex that it ends on. In other words,\n * all edges leading to a particular vertex encode the same characters (the length of the suffix can vary) using the same\n * encoding mode.\n * As an example consider the input string \"ABC123\" and the vertex (4,EDF). Possible edges leading to this vertex\n * are:\n * (0,ASCII) --EDF(ABC1)--> (4,EDF)\n * (1,ASCII) --EDF(BC1)--> (4,EDF)\n * (1,B256) --EDF(BC1)--> (4,EDF)\n * (1,EDF) --EDF(BC1)--> (4,EDF)\n * (2,ASCII) --EDF(C1)--> (4,EDF)\n * (2,B256) --EDF(C1)--> (4,EDF)\n * (2,EDF) --EDF(C1)--> (4,EDF)\n * (3,ASCII) --EDF(1)--> (4,EDF)\n * (3,B256) --EDF(1)--> (4,EDF)\n * (3,EDF) --EDF(1)--> (4,EDF)\n * (3,C40) --EDF(1)--> (4,EDF)\n * (3,X12) --EDF(1)--> (4,EDF)\n *\n * The edges leading to a vertex are stored in such a way that there is a fast way to enumerate the edges ending\n * on a particular vertex.\n *\n * The algorithm processes the vertices in order of their position thereby performing the following:\n *\n * For every vertex at position i the algorithm enumerates the edges ending on the vertex and removes all but the\n * shortest from that list.\n * Then it processes the vertices for the position i+1. If i+1 == input.length() then the algorithm ends\n * and chooses the the edge with the smallest size from any of the edges leading to vertices at this position.\n * Otherwise the algorithm computes all possible outgoing edges for the vertices at the position i+1\n *\n * Examples:\n * The process is illustrated by showing the graph (edges) after each iteration from left to right over the input:\n * An edge is drawn as follows \"(\" + fromVertex + \") -- \" + encodingMode + \"(\" + encodedInput + \") (\" +\n * accumulatedSize + \") --> (\" + toVertex + \")\"\n *\n * Example 1 encoding the string \"ABCDEFG\":\n *\n *\n * Situation after adding edges to the start vertex (0,ASCII)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII)\n * (0,ASCII) B256(A) (3) --> (1,B256)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF)\n * (0,ASCII) C40(ABC) (3) --> (3,C40)\n * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)\n * (0,ASCII) X12(ABC) (3) --> (3,X12)\n * (0,ASCII) EDF(ABC) (4) --> (3,EDF)\n * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)\n *\n * Situation after adding edges to vertices at position 1\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII)\n * (0,ASCII) B256(A) (3) --> (1,B256)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF)\n * (0,ASCII) C40(ABC) (3) --> (3,C40)\n * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)\n * (0,ASCII) X12(ABC) (3) --> (3,X12)\n * (0,ASCII) EDF(ABC) (4) --> (3,EDF)\n * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) B256(B) (4) --> (2,B256)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BC) (5) --> (3,EDF)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) TEXT(BCD) (6) --> (4,TEXT)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCD) (5) --> (4,EDF)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCDE) (5) --> (5,EDF)\n * (0,ASCII) B256(A) (3) --> (1,B256) ASCII(B) (4) --> (2,ASCII)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256)\n * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BC) (6) --> (3,EDF)\n * (0,ASCII) B256(A) (3) --> (1,B256) C40(BCD) (5) --> (4,C40)\n * (0,ASCII) B256(A) (3) --> (1,B256) TEXT(BCD) (7) --> (4,TEXT)\n * (0,ASCII) B256(A) (3) --> (1,B256) X12(BCD) (5) --> (4,X12)\n * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCD) (6) --> (4,EDF)\n * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCDE) (6) --> (5,EDF)\n *\n * Edge \"(1,ASCII) ASCII(B) (2) --> (2,ASCII)\" is minimal for the vertex (2,ASCII) so that edge \"(1,B256) ASCII(B) (4) --> (2,ASCII)\" is removed.\n * Edge \"(1,B256) B256(B) (3) --> (2,B256)\" is minimal for the vertext (2,B256) so that the edge \"(1,ASCII) B256(B) (4) --> (2,B256)\" is removed.\n *\n * Situation after adding edges to vertices at position 2\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII)\n * (0,ASCII) B256(A) (3) --> (1,B256)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF)\n * (0,ASCII) C40(ABC) (3) --> (3,C40)\n * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)\n * (0,ASCII) X12(ABC) (3) --> (3,X12)\n * (0,ASCII) EDF(ABC) (4) --> (3,EDF)\n * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BC) (5) --> (3,EDF)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) TEXT(BCD) (6) --> (4,TEXT)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCD) (5) --> (4,EDF)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCDE) (5) --> (5,EDF)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256)\n * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BC) (6) --> (3,EDF)\n * (0,ASCII) B256(A) (3) --> (1,B256) C40(BCD) (5) --> (4,C40)\n * (0,ASCII) B256(A) (3) --> (1,B256) TEXT(BCD) (7) --> (4,TEXT)\n * (0,ASCII) B256(A) (3) --> (1,B256) X12(BCD) (5) --> (4,X12)\n * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCD) (6) --> (4,EDF)\n * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCDE) (6) --> (5,EDF)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF) ASCII(C) (5) --> (3,ASCII)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF) B256(C) (6) --> (3,B256)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF) EDF(CD) (7) --> (4,EDF)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF) C40(CDE) (6) --> (5,C40)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF) TEXT(CDE) (8) --> (5,TEXT)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF) X12(CDE) (6) --> (5,X12)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF) EDF(CDE) (7) --> (5,EDF)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF) EDF(CDEF) (7) --> (6,EDF)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) B256(C) (5) --> (3,B256)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CD) (6) --> (4,EDF)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) C40(CDE) (5) --> (5,C40)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) TEXT(CDE) (7) --> (5,TEXT)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) X12(CDE) (5) --> (5,X12)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CDE) (6) --> (5,EDF)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CDEF) (6) --> (6,EDF)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) ASCII(C) (4) --> (3,ASCII)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) EDF(CD) (6) --> (4,EDF)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) C40(CDE) (5) --> (5,C40)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) TEXT(CDE) (7) --> (5,TEXT)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) X12(CDE) (5) --> (5,X12)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) EDF(CDE) (6) --> (5,EDF)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) EDF(CDEF) (6) --> (6,EDF)\n *\n * Edge \"(2,ASCII) ASCII(C) (3) --> (3,ASCII)\" is minimal for the vertex (3,ASCII) so that edges \"(2,EDF) ASCII(C) (5) --> (3,ASCII)\"\n * and \"(2,B256) ASCII(C) (4) --> (3,ASCII)\" can be removed.\n * Edge \"(0,ASCII) EDF(ABC) (4) --> (3,EDF)\" is minimal for the vertex (3,EDF) so that edges \"(1,ASCII) EDF(BC) (5) --> (3,EDF)\"\n * and \"(1,B256) EDF(BC) (6) --> (3,EDF)\" can be removed.\n * Edge \"(2,B256) B256(C) (4) --> (3,B256)\" is minimal for the vertex (3,B256) so that edges \"(2,ASCII) B256(C) (5) --> (3,B256)\"\n * and \"(2,EDF) B256(C) (6) --> (3,B256)\" can be removed.\n *\n * This continues for vertices 3 thru 7\n *\n * Situation after adding edges to vertices at position 7\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII)\n * (0,ASCII) B256(A) (3) --> (1,B256)\n * (0,ASCII) EDF(AB) (4) --> (2,EDF)\n * (0,ASCII) C40(ABC) (3) --> (3,C40)\n * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)\n * (0,ASCII) X12(ABC) (3) --> (3,X12)\n * (0,ASCII) EDF(ABC) (4) --> (3,EDF)\n * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) TEXT(BCD) (6) --> (4,TEXT)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCDE) (5) --> (5,EDF)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256)\n * (0,ASCII) C40(ABC) (3) --> (3,C40) C40(DEF) (5) --> (6,C40)\n * (0,ASCII) X12(ABC) (3) --> (3,X12) X12(DEF) (5) --> (6,X12)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) C40(CDE) (5) --> (5,C40)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) TEXT(CDE) (7) --> (5,TEXT)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) X12(CDE) (5) --> (5,X12)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CDEF) (6) --> (6,EDF)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40) C40(EFG) (6) --> (7,C40) //Solution 1\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12) X12(EFG) (6) --> (7,X12) //Solution 2\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) TEXT(DEF) (8) --> (6,TEXT)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) EDF(DEFG) (7) --> (7,EDF)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) ASCII(E) (5) --> (5,ASCII)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) TEXT(EFG) (9) --> (7,TEXT)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256) B256(E) (6) --> (5,B256)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) ASCII(E) (5) --> (5,ASCII) ASCII(F) (6) --> (6,ASCII)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256) B256(E) (6) --> (5,B256) B256(F) (7) --> (6,B256)\n * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) ASCII(E) (5) --> (5,ASCII) ASCII(F) (6) --> (6,ASCII) ASCII(G) (7) --> (7,ASCII)\n * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256) B256(E) (6) --> (5,B256) B256(F) (7) --> (6,B256) B256(G) (8) --> (7,B256)\n *\n * Hence a minimal encoding of \"ABCDEFG\" is either ASCII(A),C40(BCDEFG) or ASCII(A), X12(BCDEFG) with a size of 5 bytes.\n */\n var inputLength = input.length();\n // Array that represents vertices. There is a vertex for every character and mode.\n // The last dimension in the array below encodes the 6 modes ASCII, C40, TEXT, X12, EDF and B256\n var edges = Array(inputLength + 1)\n .fill(null)\n .map(function () { return Array(6).fill(0); });\n this.addEdges(input, edges, 0, null);\n for (var i = 1; i <= inputLength; i++) {\n for (var j = 0; j < 6; j++) {\n if (edges[i][j] !== null && i < inputLength) {\n this.addEdges(input, edges, i, edges[i][j]);\n }\n }\n // optimize memory by removing edges that have been passed.\n for (var j = 0; j < 6; j++) {\n edges[i - 1][j] = null;\n }\n }\n var minimalJ = -1;\n var minimalSize = Integer.MAX_VALUE;\n for (var j = 0; j < 6; j++) {\n if (edges[inputLength][j] !== null) {\n var edge = edges[inputLength][j];\n var size = j >= 1 && j <= 3 ? edge.cachedTotalSize + 1 : edge.cachedTotalSize; // C40, TEXT and X12 need an\n // extra unlatch at the end\n if (size < minimalSize) {\n minimalSize = size;\n minimalJ = j;\n }\n }\n }\n if (minimalJ < 0) {\n throw new Error('Failed to encode \"' + input + '\"');\n }\n return new Result(edges[inputLength][minimalJ]);\n };\n return MinimalEncoder;\n}());\nexport { MinimalEncoder };\nvar Result = /** @class */ (function () {\n function Result(solution) {\n var input = solution.input;\n var size = 0;\n var bytesAL = [];\n var randomizePostfixLength = [];\n var randomizeLengths = [];\n if ((solution.mode === Mode.C40 ||\n solution.mode === Mode.TEXT ||\n solution.mode === Mode.X12) &&\n solution.getEndMode() !== Mode.ASCII) {\n size += this.prepend(Edge.getBytes(254), bytesAL);\n }\n var current = solution;\n while (current !== null) {\n size += this.prepend(current.getDataBytes(), bytesAL);\n if (current.previous === null ||\n current.getPreviousStartMode() !== current.getMode()) {\n if (current.getMode() === Mode.B256) {\n if (size <= 249) {\n bytesAL.unshift(size);\n size++;\n }\n else {\n bytesAL.unshift(size % 250);\n bytesAL.unshift(size / 250 + 249);\n size += 2;\n }\n randomizePostfixLength.push(bytesAL.length);\n randomizeLengths.push(size);\n }\n this.prepend(current.getLatchBytes(), bytesAL);\n size = 0;\n }\n current = current.previous;\n }\n if (input.getMacroId() === 5) {\n size += this.prepend(Edge.getBytes(236), bytesAL);\n }\n else if (input.getMacroId() === 6) {\n size += this.prepend(Edge.getBytes(237), bytesAL);\n }\n if (input.getFNC1Character() > 0) {\n size += this.prepend(Edge.getBytes(232), bytesAL);\n }\n for (var i = 0; i < randomizePostfixLength.length; i++) {\n this.applyRandomPattern(bytesAL, bytesAL.length - randomizePostfixLength[i], randomizeLengths[i]);\n }\n // add padding\n var capacity = solution.getMinSymbolSize(bytesAL.length);\n if (bytesAL.length < capacity) {\n bytesAL.push(129);\n }\n while (bytesAL.length < capacity) {\n bytesAL.push(this.randomize253State(bytesAL.length + 1));\n }\n this.bytes = new Uint8Array(bytesAL.length);\n for (var i = 0; i < this.bytes.length; i++) {\n this.bytes[i] = bytesAL[i];\n }\n }\n Result.prototype.prepend = function (bytes, into) {\n for (var i = bytes.length - 1; i >= 0; i--) {\n into.unshift(bytes[i]);\n }\n return bytes.length;\n };\n Result.prototype.randomize253State = function (codewordPosition) {\n var pseudoRandom = ((149 * codewordPosition) % 253) + 1;\n var tempVariable = 129 + pseudoRandom;\n return tempVariable <= 254 ? tempVariable : tempVariable - 254;\n };\n Result.prototype.applyRandomPattern = function (bytesAL, startPosition, length) {\n for (var i = 0; i < length; i++) {\n // See \"B.1 253-state algorithm\n var Pad_codeword_position = startPosition + i;\n var Pad_codeword_value = bytesAL[Pad_codeword_position] & 0xff;\n var pseudo_random_number = ((149 * (Pad_codeword_position + 1)) % 255) + 1;\n var temp_variable = Pad_codeword_value + pseudo_random_number;\n bytesAL[Pad_codeword_position] =\n temp_variable <= 255 ? temp_variable : temp_variable - 256;\n }\n };\n Result.prototype.getBytes = function () {\n return this.bytes;\n };\n return Result;\n}());\nvar Edge = /** @class */ (function () {\n function Edge(input, mode, fromPosition, characterLength, previous) {\n this.input = input;\n this.mode = mode;\n this.fromPosition = fromPosition;\n this.characterLength = characterLength;\n this.previous = previous;\n this.allCodewordCapacities = [\n 3, 5, 8, 10, 12, 16, 18, 22, 30, 32, 36, 44, 49, 62, 86, 114, 144, 174, 204,\n 280, 368, 456, 576, 696, 816, 1050, 1304, 1558,\n ];\n this.squareCodewordCapacities = [\n 3, 5, 8, 12, 18, 22, 30, 36, 44, 62, 86, 114, 144, 174, 204, 280, 368, 456,\n 576, 696, 816, 1050, 1304, 1558,\n ];\n this.rectangularCodewordCapacities = [5, 10, 16, 33, 32, 49];\n if (!(fromPosition + characterLength <= input.length())) {\n throw new Error('Invalid edge');\n }\n var size = previous !== null ? previous.cachedTotalSize : 0;\n var previousMode = this.getPreviousMode();\n /*\n * Switching modes\n * ASCII -> C40: latch 230\n * ASCII -> TEXT: latch 239\n * ASCII -> X12: latch 238\n * ASCII -> EDF: latch 240\n * ASCII -> B256: latch 231\n * C40 -> ASCII: word(c1,c2,c3), 254\n * TEXT -> ASCII: word(c1,c2,c3), 254\n * X12 -> ASCII: word(c1,c2,c3), 254\n * EDIFACT -> ASCII: Unlatch character,0,0,0 or c1,Unlatch character,0,0 or c1,c2,Unlatch character,0 or\n * c1,c2,c3,Unlatch character\n * B256 -> ASCII: without latch after n bytes\n */\n switch (mode) {\n case Mode.ASCII:\n size++;\n if (input.isECI(fromPosition) ||\n MinimalEncoder.isExtendedASCII(input.charAt(fromPosition), input.getFNC1Character())) {\n size++;\n }\n if (previousMode === Mode.C40 ||\n previousMode === Mode.TEXT ||\n previousMode === Mode.X12) {\n size++; // unlatch 254 to ASCII\n }\n break;\n case Mode.B256:\n size++;\n if (previousMode !== Mode.B256) {\n size++; // byte count\n }\n else if (this.getB256Size() === 250) {\n size++; // extra byte count\n }\n if (previousMode === Mode.ASCII) {\n size++; // latch to B256\n }\n else if (previousMode === Mode.C40 ||\n previousMode === Mode.TEXT ||\n previousMode === Mode.X12) {\n size += 2; // unlatch to ASCII, latch to B256\n }\n break;\n case Mode.C40:\n case Mode.TEXT:\n case Mode.X12:\n if (mode === Mode.X12) {\n size += 2;\n }\n else {\n var charLen = [];\n size +=\n MinimalEncoder.getNumberOfC40Words(input, fromPosition, mode === Mode.C40, charLen) * 2;\n }\n if (previousMode === Mode.ASCII || previousMode === Mode.B256) {\n size++; // additional byte for latch from ASCII to this mode\n }\n else if (previousMode !== mode &&\n (previousMode === Mode.C40 ||\n previousMode === Mode.TEXT ||\n previousMode === Mode.X12)) {\n size += 2; // unlatch 254 to ASCII followed by latch to this mode\n }\n break;\n case Mode.EDF:\n size += 3;\n if (previousMode === Mode.ASCII || previousMode === Mode.B256) {\n size++; // additional byte for latch from ASCII to this mode\n }\n else if (previousMode === Mode.C40 ||\n previousMode === Mode.TEXT ||\n previousMode === Mode.X12) {\n size += 2; // unlatch 254 to ASCII followed by latch to this mode\n }\n break;\n }\n this.cachedTotalSize = size;\n }\n // does not count beyond 250\n Edge.prototype.getB256Size = function () {\n var cnt = 0;\n var current = this;\n while (current !== null && current.mode === Mode.B256 && cnt <= 250) {\n cnt++;\n current = current.previous;\n }\n return cnt;\n };\n Edge.prototype.getPreviousStartMode = function () {\n return this.previous === null ? Mode.ASCII : this.previous.mode;\n };\n Edge.prototype.getPreviousMode = function () {\n return this.previous === null ? Mode.ASCII : this.previous.getEndMode();\n };\n /** Returns Mode.ASCII in case that:\n * - Mode is EDIFACT and characterLength is less than 4 or the remaining characters can be encoded in at most 2\n * ASCII bytes.\n * - Mode is C40, TEXT or X12 and the remaining characters can be encoded in at most 1 ASCII byte.\n * Returns mode in all other cases.\n * */\n Edge.prototype.getEndMode = function () {\n if (this.mode === Mode.EDF) {\n if (this.characterLength < 4) {\n return Mode.ASCII;\n }\n var lastASCII = this.getLastASCII(); // see 5.2.8.2 EDIFACT encodation Rules\n if (lastASCII > 0 &&\n this.getCodewordsRemaining(this.cachedTotalSize + lastASCII) <=\n 2 - lastASCII) {\n return Mode.ASCII;\n }\n }\n if (this.mode === Mode.C40 ||\n this.mode === Mode.TEXT ||\n this.mode === Mode.X12) {\n // see 5.2.5.2 C40 encodation rules and 5.2.7.2 ANSI X12 encodation rules\n if (this.fromPosition + this.characterLength >= this.input.length() &&\n this.getCodewordsRemaining(this.cachedTotalSize) === 0) {\n return Mode.ASCII;\n }\n var lastASCII = this.getLastASCII();\n if (lastASCII === 1 &&\n this.getCodewordsRemaining(this.cachedTotalSize + 1) === 0) {\n return Mode.ASCII;\n }\n }\n return this.mode;\n };\n Edge.prototype.getMode = function () {\n return this.mode;\n };\n /** Peeks ahead and returns 1 if the postfix consists of exactly two digits, 2 if the postfix consists of exactly\n * two consecutive digits and a non extended character or of 4 digits.\n * Returns 0 in any other case\n **/\n Edge.prototype.getLastASCII = function () {\n var length = this.input.length();\n var from = this.fromPosition + this.characterLength;\n if (length - from > 4 || from >= length) {\n return 0;\n }\n if (length - from === 1) {\n if (MinimalEncoder.isExtendedASCII(this.input.charAt(from), this.input.getFNC1Character())) {\n return 0;\n }\n return 1;\n }\n if (length - from === 2) {\n if (MinimalEncoder.isExtendedASCII(this.input.charAt(from), this.input.getFNC1Character()) ||\n MinimalEncoder.isExtendedASCII(this.input.charAt(from + 1), this.input.getFNC1Character())) {\n return 0;\n }\n if (HighLevelEncoder.isDigit(this.input.charAt(from)) &&\n HighLevelEncoder.isDigit(this.input.charAt(from + 1))) {\n return 1;\n }\n return 2;\n }\n if (length - from === 3) {\n if (HighLevelEncoder.isDigit(this.input.charAt(from)) &&\n HighLevelEncoder.isDigit(this.input.charAt(from + 1)) &&\n !MinimalEncoder.isExtendedASCII(this.input.charAt(from + 2), this.input.getFNC1Character())) {\n return 2;\n }\n if (HighLevelEncoder.isDigit(this.input.charAt(from + 1)) &&\n HighLevelEncoder.isDigit(this.input.charAt(from + 2)) &&\n !MinimalEncoder.isExtendedASCII(this.input.charAt(from), this.input.getFNC1Character())) {\n return 2;\n }\n return 0;\n }\n if (HighLevelEncoder.isDigit(this.input.charAt(from)) &&\n HighLevelEncoder.isDigit(this.input.charAt(from + 1)) &&\n HighLevelEncoder.isDigit(this.input.charAt(from + 2)) &&\n HighLevelEncoder.isDigit(this.input.charAt(from + 3))) {\n return 2;\n }\n return 0;\n };\n /** Returns the capacity in codewords of the smallest symbol that has enough capacity to fit the given minimal\n * number of codewords.\n **/\n Edge.prototype.getMinSymbolSize = function (minimum) {\n var e_3, _a, e_4, _b, e_5, _c;\n switch (this.input.getShapeHint()) {\n case 1 /* FORCE_SQUARE */:\n try {\n for (var _d = __values(this.squareCodewordCapacities), _e = _d.next(); !_e.done; _e = _d.next()) {\n var capacity = _e.value;\n if (capacity >= minimum) {\n return capacity;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_3) throw e_3.error; }\n }\n break;\n case 2 /* FORCE_RECTANGLE */:\n try {\n for (var _f = __values(this.rectangularCodewordCapacities), _g = _f.next(); !_g.done; _g = _f.next()) {\n var capacity = _g.value;\n if (capacity >= minimum) {\n return capacity;\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\n }\n finally { if (e_4) throw e_4.error; }\n }\n break;\n }\n try {\n for (var _h = __values(this.allCodewordCapacities), _j = _h.next(); !_j.done; _j = _h.next()) {\n var capacity = _j.value;\n if (capacity >= minimum) {\n return capacity;\n }\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (_j && !_j.done && (_c = _h.return)) _c.call(_h);\n }\n finally { if (e_5) throw e_5.error; }\n }\n return this.allCodewordCapacities[this.allCodewordCapacities.length - 1];\n };\n /** Returns the remaining capacity in codewords of the smallest symbol that has enough capacity to fit the given\n * minimal number of codewords.\n **/\n Edge.prototype.getCodewordsRemaining = function (minimum) {\n return this.getMinSymbolSize(minimum) - minimum;\n };\n Edge.getBytes = function (c1, c2) {\n var result = new Uint8Array(c2 ? 2 : 1);\n result[0] = c1;\n if (c2) {\n result[1] = c2;\n }\n return result;\n };\n Edge.prototype.setC40Word = function (bytes, offset, c1, c2, c3) {\n var val16 = 1600 * (c1 & 0xff) + 40 * (c2 & 0xff) + (c3 & 0xff) + 1;\n bytes[offset] = val16 / 256;\n bytes[offset + 1] = val16 % 256;\n };\n Edge.prototype.getX12Value = function (c) {\n return c === 13\n ? 0\n : c === 42\n ? 1\n : c === 62\n ? 2\n : c === 32\n ? 3\n : c >= 48 && c <= 57\n ? c - 44\n : c >= 65 && c <= 90\n ? c - 51\n : c;\n };\n Edge.prototype.getX12Words = function () {\n if (!(this.characterLength % 3 === 0)) {\n throw new Error('X12 words must be a multiple of 3');\n }\n var result = new Uint8Array((this.characterLength / 3) * 2);\n for (var i = 0; i < result.length; i += 2) {\n this.setC40Word(result, i, this.getX12Value(this.input.charAt(this.fromPosition + (i / 2) * 3)), this.getX12Value(this.input.charAt(this.fromPosition + (i / 2) * 3 + 1)), this.getX12Value(this.input.charAt(this.fromPosition + (i / 2) * 3 + 2)));\n }\n return result;\n };\n Edge.prototype.getShiftValue = function (c, c40, fnc1) {\n return (c40 && MinimalEncoder.isInC40Shift1Set(c)) ||\n (!c40 && MinimalEncoder.isInTextShift1Set(c))\n ? 0\n : (c40 && MinimalEncoder.isInC40Shift2Set(c, fnc1)) ||\n (!c40 && MinimalEncoder.isInTextShift2Set(c, fnc1))\n ? 1\n : 2;\n };\n Edge.prototype.getC40Value = function (c40, setIndex, c, fnc1) {\n if (c === fnc1) {\n if (!(setIndex === 2)) {\n throw new Error('FNC1 cannot be used in C40 shift 2');\n }\n return 27;\n }\n if (c40) {\n return c <= 31\n ? c\n : c === 32\n ? 3\n : c <= 47\n ? c - 33\n : c <= 57\n ? c - 44\n : c <= 64\n ? c - 43\n : c <= 90\n ? c - 51\n : c <= 95\n ? c - 69\n : c <= 127\n ? c - 96\n : c;\n }\n else {\n return c === 0\n ? 0\n : setIndex === 0 && c <= 3\n ? c - 1 // is this a bug in the spec?\n : setIndex === 1 && c <= 31\n ? c\n : c === 32\n ? 3\n : c >= 33 && c <= 47\n ? c - 33\n : c >= 48 && c <= 57\n ? c - 44\n : c >= 58 && c <= 64\n ? c - 43\n : c >= 65 && c <= 90\n ? c - 64\n : c >= 91 && c <= 95\n ? c - 69\n : c === 96\n ? 0\n : c >= 97 && c <= 122\n ? c - 83\n : c >= 123 && c <= 127\n ? c - 96\n : c;\n }\n };\n Edge.prototype.getC40Words = function (c40, fnc1) {\n var c40Values = [];\n for (var i = 0; i < this.characterLength; i++) {\n var ci = this.input.charAt(this.fromPosition + i);\n if ((c40 && HighLevelEncoder.isNativeC40(ci)) ||\n (!c40 && HighLevelEncoder.isNativeText(ci))) {\n c40Values.push(this.getC40Value(c40, 0, ci, fnc1));\n }\n else if (!MinimalEncoder.isExtendedASCII(ci, fnc1)) {\n var shiftValue = this.getShiftValue(ci, c40, fnc1);\n c40Values.push(shiftValue); // Shift[123]\n c40Values.push(this.getC40Value(c40, shiftValue, ci, fnc1));\n }\n else {\n var asciiValue = (ci & 0xff) - 128;\n if ((c40 && HighLevelEncoder.isNativeC40(asciiValue)) ||\n (!c40 && HighLevelEncoder.isNativeText(asciiValue))) {\n c40Values.push(1); // Shift 2\n c40Values.push(30); // Upper Shift\n c40Values.push(this.getC40Value(c40, 0, asciiValue, fnc1));\n }\n else {\n c40Values.push(1); // Shift 2\n c40Values.push(30); // Upper Shift\n var shiftValue = this.getShiftValue(asciiValue, c40, fnc1);\n c40Values.push(shiftValue); // Shift[123]\n c40Values.push(this.getC40Value(c40, shiftValue, asciiValue, fnc1));\n }\n }\n }\n if (c40Values.length % 3 !== 0) {\n if (!((c40Values.length - 2) % 3 === 0 &&\n this.fromPosition + this.characterLength === this.input.length())) {\n throw new Error('C40 words must be a multiple of 3');\n }\n c40Values.push(0); // pad with 0 (Shift 1)\n }\n var result = new Uint8Array((c40Values.length / 3) * 2);\n var byteIndex = 0;\n for (var i = 0; i < c40Values.length; i += 3) {\n this.setC40Word(result, byteIndex, c40Values[i] & 0xff, c40Values[i + 1] & 0xff, c40Values[i + 2] & 0xff);\n byteIndex += 2;\n }\n return result;\n };\n Edge.prototype.getEDFBytes = function () {\n var numberOfThirds = Math.ceil(this.characterLength / 4.0);\n var result = new Uint8Array(numberOfThirds * 3);\n var pos = this.fromPosition;\n var endPos = Math.min(this.fromPosition + this.characterLength - 1, this.input.length() - 1);\n for (var i = 0; i < numberOfThirds; i += 3) {\n var edfValues = [];\n for (var j = 0; j < 4; j++) {\n if (pos <= endPos) {\n edfValues[j] = this.input.charAt(pos++) & 0x3f;\n }\n else {\n edfValues[j] = pos === endPos + 1 ? 0x1f : 0;\n }\n }\n var val24 = edfValues[0] << 18;\n val24 |= edfValues[1] << 12;\n val24 |= edfValues[2] << 6;\n val24 |= edfValues[3];\n result[i] = (val24 >> 16) & 0xff;\n result[i + 1] = (val24 >> 8) & 0xff;\n result[i + 2] = val24 & 0xff;\n }\n return result;\n };\n Edge.prototype.getLatchBytes = function () {\n switch (this.getPreviousMode()) {\n case Mode.ASCII:\n case Mode.B256: // after B256 ends (via length) we are back to ASCII\n switch (this.mode) {\n case Mode.B256:\n return Edge.getBytes(231);\n case Mode.C40:\n return Edge.getBytes(230);\n case Mode.TEXT:\n return Edge.getBytes(239);\n case Mode.X12:\n return Edge.getBytes(238);\n case Mode.EDF:\n return Edge.getBytes(240);\n }\n break;\n case Mode.C40:\n case Mode.TEXT:\n case Mode.X12:\n if (this.mode !== this.getPreviousMode()) {\n switch (this.mode) {\n case Mode.ASCII:\n return Edge.getBytes(254);\n case Mode.B256:\n return Edge.getBytes(254, 231);\n case Mode.C40:\n return Edge.getBytes(254, 230);\n case Mode.TEXT:\n return Edge.getBytes(254, 239);\n case Mode.X12:\n return Edge.getBytes(254, 238);\n case Mode.EDF:\n return Edge.getBytes(254, 240);\n }\n }\n break;\n case Mode.EDF:\n // The rightmost EDIFACT edge always contains an unlatch character\n if (this.mode !== Mode.EDF) {\n throw new Error('Cannot switch from EDF to ' + this.mode);\n }\n break;\n }\n return new Uint8Array(0);\n };\n // Important: The function does not return the length bytes (one or two) in case of B256 encoding\n Edge.prototype.getDataBytes = function () {\n switch (this.mode) {\n case Mode.ASCII:\n if (this.input.isECI(this.fromPosition)) {\n return Edge.getBytes(241, this.input.getECIValue(this.fromPosition) + 1);\n }\n else if (MinimalEncoder.isExtendedASCII(this.input.charAt(this.fromPosition), this.input.getFNC1Character())) {\n return Edge.getBytes(235, this.input.charAt(this.fromPosition) - 127);\n }\n else if (this.characterLength === 2) {\n return Edge.getBytes(this.input.charAt(this.fromPosition) * 10 +\n this.input.charAt(this.fromPosition + 1) +\n 130);\n }\n else if (this.input.isFNC1(this.fromPosition)) {\n return Edge.getBytes(232);\n }\n else {\n return Edge.getBytes(this.input.charAt(this.fromPosition) + 1);\n }\n case Mode.B256:\n return Edge.getBytes(this.input.charAt(this.fromPosition));\n case Mode.C40:\n return this.getC40Words(true, this.input.getFNC1Character());\n case Mode.TEXT:\n return this.getC40Words(false, this.input.getFNC1Character());\n case Mode.X12:\n return this.getX12Words();\n case Mode.EDF:\n return this.getEDFBytes();\n }\n };\n return Edge;\n}());\nvar Input = /** @class */ (function (_super) {\n __extends(Input, _super);\n function Input(stringToEncode, priorityCharset, fnc1, shape, macroId) {\n var _this = _super.call(this, stringToEncode, priorityCharset, fnc1) || this;\n _this.shape = shape;\n _this.macroId = macroId;\n return _this;\n }\n Input.prototype.getMacroId = function () {\n return this.macroId;\n };\n Input.prototype.getShapeHint = function () {\n return this.shape;\n };\n return Input;\n}(MinimalECIInput));\n","import { ECIEncoderSet } from './ECIEncoderSet';\nimport Integer from '../util/Integer';\nimport StringBuilder from '../util/StringBuilder';\nvar COST_PER_ECI = 3; // approximated (latch + 2 codewords)\nvar MinimalECIInput = /** @class */ (function () {\n /**\n * Constructs a minimal input\n *\n * @param stringToEncode the character string to encode\n * @param priorityCharset The preferred {@link Charset}. When the value of the argument is null, the algorithm\n * chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority\n * charset to encode any character in the input that can be encoded by it if the charset is among the\n * supported charsets.\n * @param fnc1 denotes the character in the input that represents the FNC1 character or -1 if this is not GS1\n * input.\n */\n function MinimalECIInput(stringToEncode, priorityCharset, fnc1) {\n this.fnc1 = fnc1;\n var encoderSet = new ECIEncoderSet(stringToEncode, priorityCharset, fnc1);\n if (encoderSet.length() === 1) {\n // optimization for the case when all can be encoded without ECI in ISO-8859-1\n for (var i = 0; i < this.bytes.length; i++) {\n var c = stringToEncode.charAt(i).charCodeAt(0);\n this.bytes[i] = c === fnc1 ? 1000 : c;\n }\n }\n else {\n this.bytes = this.encodeMinimally(stringToEncode, encoderSet, fnc1);\n }\n }\n MinimalECIInput.prototype.getFNC1Character = function () {\n return this.fnc1;\n };\n /**\n * Returns the length of this input. The length is the number\n * of {@code byte}s, FNC1 characters or ECIs in the sequence.\n *\n * @return the number of {@code char}s in this sequence\n */\n MinimalECIInput.prototype.length = function () {\n return this.bytes.length;\n };\n MinimalECIInput.prototype.haveNCharacters = function (index, n) {\n if (index + n - 1 >= this.bytes.length) {\n return false;\n }\n for (var i = 0; i < n; i++) {\n if (this.isECI(index + i)) {\n return false;\n }\n }\n return true;\n };\n /**\n * Returns the {@code byte} value at the specified index. An index ranges from zero\n * to {@code length() - 1}. The first {@code byte} value of the sequence is at\n * index zero, the next at index one, and so on, as for array\n * indexing.\n *\n * @param index the index of the {@code byte} value to be returned\n *\n * @return the specified {@code byte} value as character or the FNC1 character\n *\n * @throws IndexOutOfBoundsException\n * if the {@code index} argument is negative or not less than\n * {@code length()}\n * @throws IllegalArgumentException\n * if the value at the {@code index} argument is an ECI (@see #isECI)\n */\n MinimalECIInput.prototype.charAt = function (index) {\n if (index < 0 || index >= this.length()) {\n throw new Error('' + index);\n }\n if (this.isECI(index)) {\n throw new Error('value at ' + index + ' is not a character but an ECI');\n }\n return this.isFNC1(index) ? this.fnc1 : this.bytes[index];\n };\n /**\n * Returns a {@code CharSequence} that is a subsequence of this sequence.\n * The subsequence starts with the {@code char} value at the specified index and\n * ends with the {@code char} value at index {@code end - 1}. The length\n * (in {@code char}s) of the\n * returned sequence is {@code end - start}, so if {@code start == end}\n * then an empty sequence is returned.\n *\n * @param start the start index, inclusive\n * @param end the end index, exclusive\n *\n * @return the specified subsequence\n *\n * @throws IndexOutOfBoundsException\n * if {@code start} or {@code end} are negative,\n * if {@code end} is greater than {@code length()},\n * or if {@code start} is greater than {@code end}\n * @throws IllegalArgumentException\n * if a value in the range {@code start}-{@code end} is an ECI (@see #isECI)\n */\n MinimalECIInput.prototype.subSequence = function (start, end) {\n if (start < 0 || start > end || end > this.length()) {\n throw new Error('' + start);\n }\n var result = new StringBuilder();\n for (var i = start; i < end; i++) {\n if (this.isECI(i)) {\n throw new Error('value at ' + i + ' is not a character but an ECI');\n }\n result.append(this.charAt(i));\n }\n return result.toString();\n };\n /**\n * Determines if a value is an ECI\n *\n * @param index the index of the value\n *\n * @return true if the value at position {@code index} is an ECI\n *\n * @throws IndexOutOfBoundsException\n * if the {@code index} argument is negative or not less than\n * {@code length()}\n */\n MinimalECIInput.prototype.isECI = function (index) {\n if (index < 0 || index >= this.length()) {\n throw new Error('' + index);\n }\n return this.bytes[index] > 255 && this.bytes[index] <= 999;\n };\n /**\n * Determines if a value is the FNC1 character\n *\n * @param index the index of the value\n *\n * @return true if the value at position {@code index} is the FNC1 character\n *\n * @throws IndexOutOfBoundsException\n * if the {@code index} argument is negative or not less than\n * {@code length()}\n */\n MinimalECIInput.prototype.isFNC1 = function (index) {\n if (index < 0 || index >= this.length()) {\n throw new Error('' + index);\n }\n return this.bytes[index] === 1000;\n };\n /**\n * Returns the {@code int} ECI value at the specified index. An index ranges from zero\n * to {@code length() - 1}. The first {@code byte} value of the sequence is at\n * index zero, the next at index one, and so on, as for array\n * indexing.\n *\n * @param index the index of the {@code int} value to be returned\n *\n * @return the specified {@code int} ECI value.\n * The ECI specified the encoding of all bytes with a higher index until the\n * next ECI or until the end of the input if no other ECI follows.\n *\n * @throws IndexOutOfBoundsException\n * if the {@code index} argument is negative or not less than\n * {@code length()}\n * @throws IllegalArgumentException\n * if the value at the {@code index} argument is not an ECI (@see #isECI)\n */\n MinimalECIInput.prototype.getECIValue = function (index) {\n if (index < 0 || index >= this.length()) {\n throw new Error('' + index);\n }\n if (!this.isECI(index)) {\n throw new Error('value at ' + index + ' is not an ECI but a character');\n }\n return this.bytes[index] - 256;\n };\n MinimalECIInput.prototype.addEdge = function (edges, to, edge) {\n if (edges[to][edge.encoderIndex] == null ||\n edges[to][edge.encoderIndex].cachedTotalSize > edge.cachedTotalSize) {\n edges[to][edge.encoderIndex] = edge;\n }\n };\n MinimalECIInput.prototype.addEdges = function (stringToEncode, encoderSet, edges, from, previous, fnc1) {\n var ch = stringToEncode.charAt(from).charCodeAt(0);\n var start = 0;\n var end = encoderSet.length();\n if (encoderSet.getPriorityEncoderIndex() >= 0 &&\n (ch === fnc1 ||\n encoderSet.canEncode(ch, encoderSet.getPriorityEncoderIndex()))) {\n start = encoderSet.getPriorityEncoderIndex();\n end = start + 1;\n }\n for (var i = start; i < end; i++) {\n if (ch === fnc1 || encoderSet.canEncode(ch, i)) {\n this.addEdge(edges, from + 1, new InputEdge(ch, encoderSet, i, previous, fnc1));\n }\n }\n };\n MinimalECIInput.prototype.encodeMinimally = function (stringToEncode, encoderSet, fnc1) {\n var inputLength = stringToEncode.length;\n // Array that represents vertices. There is a vertex for every character and encoding.\n var edges = new InputEdge[inputLength + 1][encoderSet.length()]();\n this.addEdges(stringToEncode, encoderSet, edges, 0, null, fnc1);\n for (var i = 1; i <= inputLength; i++) {\n for (var j = 0; j < encoderSet.length(); j++) {\n if (edges[i][j] != null && i < inputLength) {\n this.addEdges(stringToEncode, encoderSet, edges, i, edges[i][j], fnc1);\n }\n }\n // optimize memory by removing edges that have been passed.\n for (var j = 0; j < encoderSet.length(); j++) {\n edges[i - 1][j] = null;\n }\n }\n var minimalJ = -1;\n var minimalSize = Integer.MAX_VALUE;\n for (var j = 0; j < encoderSet.length(); j++) {\n if (edges[inputLength][j] != null) {\n var edge = edges[inputLength][j];\n if (edge.cachedTotalSize < minimalSize) {\n minimalSize = edge.cachedTotalSize;\n minimalJ = j;\n }\n }\n }\n if (minimalJ < 0) {\n throw new Error('Failed to encode \"' + stringToEncode + '\"');\n }\n var intsAL = [];\n var current = edges[inputLength][minimalJ];\n while (current != null) {\n if (current.isFNC1()) {\n intsAL.unshift(1000);\n }\n else {\n var bytes = encoderSet.encode(current.c, current.encoderIndex);\n for (var i = bytes.length - 1; i >= 0; i--) {\n intsAL.unshift(bytes[i] & 0xff);\n }\n }\n var previousEncoderIndex = current.previous === null ? 0 : current.previous.encoderIndex;\n if (previousEncoderIndex !== current.encoderIndex) {\n intsAL.unshift(256 + encoderSet.getECIValue(current.encoderIndex));\n }\n current = current.previous;\n }\n var ints = [];\n for (var i = 0; i < ints.length; i++) {\n ints[i] = intsAL[i];\n }\n return ints;\n };\n return MinimalECIInput;\n}());\nexport { MinimalECIInput };\nvar InputEdge = /** @class */ (function () {\n function InputEdge(c, encoderSet, encoderIndex, previous, fnc1) {\n this.c = c;\n this.encoderSet = encoderSet;\n this.encoderIndex = encoderIndex;\n this.previous = previous;\n this.fnc1 = fnc1;\n this.c = c === fnc1 ? 1000 : c;\n var size = this.isFNC1() ? 1 : encoderSet.encode(c, encoderIndex).length;\n var previousEncoderIndex = previous === null ? 0 : previous.encoderIndex;\n if (previousEncoderIndex !== encoderIndex) {\n size += COST_PER_ECI;\n }\n if (previous != null) {\n size += previous.cachedTotalSize;\n }\n this.cachedTotalSize = size;\n }\n InputEdge.prototype.isFNC1 = function () {\n return this.c === 1000;\n };\n return InputEdge;\n}());\n","import BarcodeFormat from '../BarcodeFormat';\nimport BitMatrix from '../common/BitMatrix';\nimport EncodeHintType from '../EncodeHintType';\nimport ByteMatrix from '../qrcode/encoder/ByteMatrix';\nimport Charset from '../util/Charset';\nimport { DefaultPlacement, ErrorCorrection, HighLevelEncoder, MinimalEncoder, SymbolInfo, } from './encoder';\nvar DataMatrixWriter = /** @class */ (function () {\n function DataMatrixWriter() {\n }\n DataMatrixWriter.prototype.encode = function (contents, format, width, height, hints) {\n if (hints === void 0) { hints = null; }\n if (contents.trim() === '') {\n throw new Error('Found empty contents');\n }\n if (format !== BarcodeFormat.DATA_MATRIX) {\n throw new Error('Can only encode DATA_MATRIX, but got ' + format);\n }\n if (width < 0 || height < 0) {\n throw new Error('Requested dimensions can\\'t be negative: ' + width + 'x' + height);\n }\n // Try to get force shape & min / max size\n var shape = 0 /* FORCE_NONE */;\n var minSize = null;\n var maxSize = null;\n if (hints != null) {\n var requestedShape = hints.get(EncodeHintType.DATA_MATRIX_SHAPE);\n if (requestedShape != null) {\n shape = requestedShape;\n }\n var requestedMinSize = hints.get(EncodeHintType.MIN_SIZE);\n if (requestedMinSize != null) {\n minSize = requestedMinSize;\n }\n var requestedMaxSize = hints.get(EncodeHintType.MAX_SIZE);\n if (requestedMaxSize != null) {\n maxSize = requestedMaxSize;\n }\n }\n // 1. step: Data encodation\n var encoded;\n var hasCompactionHint = hints != null &&\n hints.has(EncodeHintType.DATA_MATRIX_COMPACT) &&\n Boolean(hints.get(EncodeHintType.DATA_MATRIX_COMPACT).toString());\n if (hasCompactionHint) {\n var hasGS1FormatHint = hints.has(EncodeHintType.GS1_FORMAT) &&\n Boolean(hints.get(EncodeHintType.GS1_FORMAT).toString());\n var charset = null;\n var hasEncodingHint = hints.has(EncodeHintType.CHARACTER_SET);\n if (hasEncodingHint) {\n charset = Charset.forName(hints.get(EncodeHintType.CHARACTER_SET).toString());\n }\n encoded = MinimalEncoder.encodeHighLevel(contents, charset, hasGS1FormatHint ? 0x1d : -1, shape);\n }\n else {\n var hasForceC40Hint = hints != null &&\n hints.has(EncodeHintType.FORCE_C40) &&\n Boolean(hints.get(EncodeHintType.FORCE_C40).toString());\n encoded = HighLevelEncoder.encodeHighLevel(contents, shape, minSize, maxSize, hasForceC40Hint);\n }\n var symbolInfo = SymbolInfo.lookup(encoded.length, shape, minSize, maxSize, true);\n // 2. step: ECC generation\n var codewords = ErrorCorrection.encodeECC200(encoded, symbolInfo);\n // 3. step: Module placement in Matrix\n var placement = new DefaultPlacement(codewords, symbolInfo.getSymbolDataWidth(), symbolInfo.getSymbolDataHeight());\n placement.place();\n // 4. step: low-level encoding\n return this.encodeLowLevel(placement, symbolInfo, width, height);\n };\n /**\n * Encode the given symbol info to a bit matrix.\n *\n * @param placement The DataMatrix placement.\n * @param symbolInfo The symbol info to encode.\n * @return The bit matrix generated.\n */\n DataMatrixWriter.prototype.encodeLowLevel = function (placement, symbolInfo, width, height) {\n var symbolWidth = symbolInfo.getSymbolDataWidth();\n var symbolHeight = symbolInfo.getSymbolDataHeight();\n var matrix = new ByteMatrix(symbolInfo.getSymbolWidth(), symbolInfo.getSymbolHeight());\n var matrixY = 0;\n for (var y = 0; y < symbolHeight; y++) {\n // Fill the top edge with alternate 0 / 1\n var matrixX = void 0;\n if (y % symbolInfo.matrixHeight === 0) {\n matrixX = 0;\n for (var x = 0; x < symbolInfo.getSymbolWidth(); x++) {\n matrix.setBoolean(matrixX, matrixY, x % 2 === 0);\n matrixX++;\n }\n matrixY++;\n }\n matrixX = 0;\n for (var x = 0; x < symbolWidth; x++) {\n // Fill the right edge with full 1\n if (x % symbolInfo.matrixWidth === 0) {\n matrix.setBoolean(matrixX, matrixY, true);\n matrixX++;\n }\n matrix.setBoolean(matrixX, matrixY, placement.getBit(x, y));\n matrixX++;\n // Fill the right edge with alternate 0 / 1\n if (x % symbolInfo.matrixWidth === symbolInfo.matrixWidth - 1) {\n matrix.setBoolean(matrixX, matrixY, y % 2 === 0);\n matrixX++;\n }\n }\n matrixY++;\n // Fill the bottom edge with full 1\n if (y % symbolInfo.matrixHeight === symbolInfo.matrixHeight - 1) {\n matrixX = 0;\n for (var x = 0; x < symbolInfo.getSymbolWidth(); x++) {\n matrix.setBoolean(matrixX, matrixY, true);\n matrixX++;\n }\n matrixY++;\n }\n }\n return this.convertByteMatrixToBitMatrix(matrix, width, height);\n };\n /**\n * Convert the ByteMatrix to BitMatrix.\n *\n * @param reqHeight The requested height of the image (in pixels) with the Datamatrix code\n * @param reqWidth The requested width of the image (in pixels) with the Datamatrix code\n * @param matrix The input matrix.\n * @return The output matrix.\n */\n DataMatrixWriter.prototype.convertByteMatrixToBitMatrix = function (matrix, reqWidth, reqHeight) {\n var matrixWidth = matrix.getWidth();\n var matrixHeight = matrix.getHeight();\n var outputWidth = Math.max(reqWidth, matrixWidth);\n var outputHeight = Math.max(reqHeight, matrixHeight);\n var multiple = Math.min(outputWidth / matrixWidth, outputHeight / matrixHeight);\n var leftPadding = (outputWidth - matrixWidth * multiple) / 2;\n var topPadding = (outputHeight - matrixHeight * multiple) / 2;\n var output;\n // remove padding if requested width and height are too small\n if (reqHeight < matrixHeight || reqWidth < matrixWidth) {\n leftPadding = 0;\n topPadding = 0;\n output = new BitMatrix(matrixWidth, matrixHeight);\n }\n else {\n output = new BitMatrix(reqWidth, reqHeight);\n }\n output.clear();\n for (var inputY = 0, outputY = topPadding; inputY < matrixHeight; inputY++, outputY += multiple) {\n // Write the contents of this row of the bytematrix\n for (var inputX = 0, outputX = leftPadding; inputX < matrixWidth; inputX++, outputX += multiple) {\n if (matrix.get(inputX, inputY) === 1) {\n output.setRegion(outputX, outputY, multiple, multiple);\n }\n }\n }\n return output;\n };\n return DataMatrixWriter;\n}());\nexport default DataMatrixWriter;\n","/*\n* Copyright 2013 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n/**\n * Aztec 2D code representation\n *\n * @author Rustam Abdullaev\n */\nvar AztecCode = /** @class */ (function () {\n function AztecCode() {\n }\n /**\n * @return {@code true} if compact instead of full mode\n */\n AztecCode.prototype.isCompact = function () {\n return this.compact;\n };\n AztecCode.prototype.setCompact = function (compact) {\n this.compact = compact;\n };\n /**\n * @return size in pixels (width and height)\n */\n AztecCode.prototype.getSize = function () {\n return this.size;\n };\n AztecCode.prototype.setSize = function (size) {\n this.size = size;\n };\n /**\n * @return number of levels\n */\n AztecCode.prototype.getLayers = function () {\n return this.layers;\n };\n AztecCode.prototype.setLayers = function (layers) {\n this.layers = layers;\n };\n /**\n * @return number of data codewords\n */\n AztecCode.prototype.getCodeWords = function () {\n return this.codeWords;\n };\n AztecCode.prototype.setCodeWords = function (codeWords) {\n this.codeWords = codeWords;\n };\n /**\n * @return the symbol image\n */\n AztecCode.prototype.getMatrix = function () {\n return this.matrix;\n };\n AztecCode.prototype.setMatrix = function (matrix) {\n this.matrix = matrix;\n };\n return AztecCode;\n}());\nexport default AztecCode;\n","var Collections = /** @class */ (function () {\n function Collections() {\n }\n /**\n * The singletonList(T) method is used to return an immutable list containing only the specified object.\n */\n Collections.singletonList = function (item) {\n return [item];\n };\n /**\n * The min(Collection, Comparator) method is used to return the minimum element of the given collection, according to the order induced by the specified comparator.\n */\n Collections.min = function (collection, comparator) {\n return collection.sort(comparator)[0];\n };\n return Collections;\n}());\nexport default Collections;\n","/*\n* Copyright 2013 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\nvar Token = /** @class */ (function () {\n function Token(previous) {\n this.previous = previous;\n }\n Token.prototype.getPrevious = function () {\n return this.previous;\n };\n return Token;\n}());\nexport default Token;\n","/*\n* Copyright 2013 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Token from './Token';\nimport Integer from '../../util/Integer';\nvar SimpleToken = /** @class */ (function (_super) {\n __extends(SimpleToken, _super);\n function SimpleToken(previous, value, bitCount) {\n var _this = _super.call(this, previous) || this;\n _this.value = value;\n _this.bitCount = bitCount;\n return _this;\n }\n /**\n * @Override\n */\n SimpleToken.prototype.appendTo = function (bitArray, text) {\n bitArray.appendBits(this.value, this.bitCount);\n };\n SimpleToken.prototype.add = function (value, bitCount) {\n return new SimpleToken(this, value, bitCount);\n };\n SimpleToken.prototype.addBinaryShift = function (start, byteCount) {\n // no-op can't binary shift a simple token\n console.warn('addBinaryShift on SimpleToken, this simply returns a copy of this token');\n return new SimpleToken(this, start, byteCount);\n };\n /**\n * @Override\n */\n SimpleToken.prototype.toString = function () {\n var value = this.value & ((1 << this.bitCount) - 1);\n value |= 1 << this.bitCount;\n return '<' + Integer.toBinaryString(value | (1 << this.bitCount)).substring(1) + '>';\n };\n return SimpleToken;\n}(Token));\nexport default SimpleToken;\n","/*\n* Copyright 2013 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport SimpleToken from './SimpleToken';\nvar BinaryShiftToken = /** @class */ (function (_super) {\n __extends(BinaryShiftToken, _super);\n function BinaryShiftToken(previous, binaryShiftStart, binaryShiftByteCount) {\n var _this = _super.call(this, previous, 0, 0) || this;\n _this.binaryShiftStart = binaryShiftStart;\n _this.binaryShiftByteCount = binaryShiftByteCount;\n return _this;\n }\n /**\n * @Override\n */\n BinaryShiftToken.prototype.appendTo = function (bitArray, text) {\n for (var i = 0; i < this.binaryShiftByteCount; i++) {\n if (i === 0 || (i === 31 && this.binaryShiftByteCount <= 62)) {\n // We need a header before the first character, and before\n // character 31 when the total byte code is <= 62\n bitArray.appendBits(31, 5); // BINARY_SHIFT\n if (this.binaryShiftByteCount > 62) {\n bitArray.appendBits(this.binaryShiftByteCount - 31, 16);\n }\n else if (i === 0) {\n // 1 <= binaryShiftByteCode <= 62\n bitArray.appendBits(Math.min(this.binaryShiftByteCount, 31), 5);\n }\n else {\n // 32 <= binaryShiftCount <= 62 and i == 31\n bitArray.appendBits(this.binaryShiftByteCount - 31, 5);\n }\n }\n bitArray.appendBits(text[this.binaryShiftStart + i], 8);\n }\n };\n BinaryShiftToken.prototype.addBinaryShift = function (start, byteCount) {\n // int bitCount = (byteCount * 8) + (byteCount <= 31 ? 10 : byteCount <= 62 ? 20 : 21);\n return new BinaryShiftToken(this, start, byteCount);\n };\n /**\n * @Override\n */\n BinaryShiftToken.prototype.toString = function () {\n return '<' + this.binaryShiftStart + '::' + (this.binaryShiftStart + this.binaryShiftByteCount - 1) + '>';\n };\n return BinaryShiftToken;\n}(SimpleToken));\nexport default BinaryShiftToken;\n","import SimpleToken from './SimpleToken';\nimport BinaryShiftToken from './BinaryShiftToken';\nexport function addBinaryShift(token, start, byteCount) {\n // int bitCount = (byteCount * 8) + (byteCount <= 31 ? 10 : byteCount <= 62 ? 20 : 21);\n return new BinaryShiftToken(token, start, byteCount);\n}\nexport function add(token, value, bitCount) {\n return new SimpleToken(token, value, bitCount);\n}\n","import SimpleToken from './SimpleToken';\nexport var /*final*/ MODE_NAMES = [\n 'UPPER',\n 'LOWER',\n 'DIGIT',\n 'MIXED',\n 'PUNCT'\n];\nexport var /*final*/ MODE_UPPER = 0; // 5 bits\nexport var /*final*/ MODE_LOWER = 1; // 5 bits\nexport var /*final*/ MODE_DIGIT = 2; // 4 bits\nexport var /*final*/ MODE_MIXED = 3; // 5 bits\nexport var /*final*/ MODE_PUNCT = 4; // 5 bits\nexport var EMPTY_TOKEN = new SimpleToken(null, 0, 0);\n","// The Latch Table shows, for each pair of Modes, the optimal method for\n// getting from one mode to another. In the worst possible case, this can\n// be up to 14 bits. In the best possible case, we are already there!\n// The high half-word of each entry gives the number of bits.\n// The low half-word of each entry are the actual bits necessary to change\nexport var LATCH_TABLE = [\n Int32Array.from([\n 0,\n (5 << 16) + 28,\n (5 << 16) + 30,\n (5 << 16) + 29,\n (10 << 16) + (29 << 5) + 30 // UPPER -> MIXED -> PUNCT\n ]),\n Int32Array.from([\n (9 << 16) + (30 << 4) + 14,\n 0,\n (5 << 16) + 30,\n (5 << 16) + 29,\n (10 << 16) + (29 << 5) + 30 // LOWER -> MIXED -> PUNCT\n ]),\n Int32Array.from([\n (4 << 16) + 14,\n (9 << 16) + (14 << 5) + 28,\n 0,\n (9 << 16) + (14 << 5) + 29,\n (14 << 16) + (14 << 10) + (29 << 5) + 30\n // DIGIT -> UPPER -> MIXED -> PUNCT\n ]),\n Int32Array.from([\n (5 << 16) + 29,\n (5 << 16) + 28,\n (10 << 16) + (29 << 5) + 30,\n 0,\n (5 << 16) + 30 // MIXED -> PUNCT\n ]),\n Int32Array.from([\n (5 << 16) + 31,\n (10 << 16) + (31 << 5) + 28,\n (10 << 16) + (31 << 5) + 30,\n (10 << 16) + (31 << 5) + 29,\n 0\n ])\n];\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport Arrays from '../../util/Arrays';\nimport * as C from './EncoderConstants';\nexport function static_SHIFT_TABLE(SHIFT_TABLE) {\n var e_1, _a;\n try {\n for (var SHIFT_TABLE_1 = __values(SHIFT_TABLE), SHIFT_TABLE_1_1 = SHIFT_TABLE_1.next(); !SHIFT_TABLE_1_1.done; SHIFT_TABLE_1_1 = SHIFT_TABLE_1.next()) {\n var table = SHIFT_TABLE_1_1.value /*Int32Array*/;\n Arrays.fill(table, -1);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (SHIFT_TABLE_1_1 && !SHIFT_TABLE_1_1.done && (_a = SHIFT_TABLE_1.return)) _a.call(SHIFT_TABLE_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n SHIFT_TABLE[C.MODE_UPPER][C.MODE_PUNCT] = 0;\n SHIFT_TABLE[C.MODE_LOWER][C.MODE_PUNCT] = 0;\n SHIFT_TABLE[C.MODE_LOWER][C.MODE_UPPER] = 28;\n SHIFT_TABLE[C.MODE_MIXED][C.MODE_PUNCT] = 0;\n SHIFT_TABLE[C.MODE_DIGIT][C.MODE_PUNCT] = 0;\n SHIFT_TABLE[C.MODE_DIGIT][C.MODE_UPPER] = 15;\n return SHIFT_TABLE;\n}\nexport var /*final*/ SHIFT_TABLE = static_SHIFT_TABLE(Arrays.createInt32Array(6, 6)); // mode shift codes, per table\n","/*\n * Copyright 2013 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.aztec.encoder;\n// import java.util.Deque;\n// import java.util.LinkedList;\n// import com.google.zxing.common.BitArray;\nimport BitArray from '../../common/BitArray';\nimport * as TokenHelpers from './TokenHelpers';\nimport * as C from './EncoderConstants';\nimport * as LatchTable from './LatchTable';\nimport * as ShiftTable from './ShiftTable';\nimport StringUtils from '../../common/StringUtils';\n/**\n * State represents all information about a sequence necessary to generate the current output.\n * Note that a state is immutable.\n */\nvar State = /** @class */ (function () {\n function State(token, mode, binaryBytes, bitCount) {\n this.token = token;\n this.mode = mode;\n this.binaryShiftByteCount = binaryBytes;\n this.bitCount = bitCount;\n // Make sure we match the token\n // int binaryShiftBitCount = (binaryShiftByteCount * 8) +\n // (binaryShiftByteCount === 0 ? 0 :\n // binaryShiftByteCount <= 31 ? 10 :\n // binaryShiftByteCount <= 62 ? 20 : 21);\n // assert this.bitCount === token.getTotalBitCount() + binaryShiftBitCount;\n }\n State.prototype.getMode = function () {\n return this.mode;\n };\n State.prototype.getToken = function () {\n return this.token;\n };\n State.prototype.getBinaryShiftByteCount = function () {\n return this.binaryShiftByteCount;\n };\n State.prototype.getBitCount = function () {\n return this.bitCount;\n };\n // Create a new state representing this state with a latch to a (not\n // necessary different) mode, and then a code.\n State.prototype.latchAndAppend = function (mode, value) {\n // assert binaryShiftByteCount === 0;\n var bitCount = this.bitCount;\n var token = this.token;\n if (mode !== this.mode) {\n var latch = LatchTable.LATCH_TABLE[this.mode][mode];\n token = TokenHelpers.add(token, latch & 0xffff, latch >> 16);\n bitCount += latch >> 16;\n }\n var latchModeBitCount = mode === C.MODE_DIGIT ? 4 : 5;\n token = TokenHelpers.add(token, value, latchModeBitCount);\n return new State(token, mode, 0, bitCount + latchModeBitCount);\n };\n // Create a new state representing this state, with a temporary shift\n // to a different mode to output a single value.\n State.prototype.shiftAndAppend = function (mode, value) {\n // assert binaryShiftByteCount === 0 && this.mode !== mode;\n var token = this.token;\n var thisModeBitCount = this.mode === C.MODE_DIGIT ? 4 : 5;\n // Shifts exist only to UPPER and PUNCT, both with tokens size 5.\n token = TokenHelpers.add(token, ShiftTable.SHIFT_TABLE[this.mode][mode], thisModeBitCount);\n token = TokenHelpers.add(token, value, 5);\n return new State(token, this.mode, 0, this.bitCount + thisModeBitCount + 5);\n };\n // Create a new state representing this state, but an additional character\n // output in Binary Shift mode.\n State.prototype.addBinaryShiftChar = function (index) {\n var token = this.token;\n var mode = this.mode;\n var bitCount = this.bitCount;\n if (this.mode === C.MODE_PUNCT || this.mode === C.MODE_DIGIT) {\n // assert binaryShiftByteCount === 0;\n var latch = LatchTable.LATCH_TABLE[mode][C.MODE_UPPER];\n token = TokenHelpers.add(token, latch & 0xffff, latch >> 16);\n bitCount += latch >> 16;\n mode = C.MODE_UPPER;\n }\n var deltaBitCount = this.binaryShiftByteCount === 0 || this.binaryShiftByteCount === 31\n ? 18\n : this.binaryShiftByteCount === 62\n ? 9\n : 8;\n var result = new State(token, mode, this.binaryShiftByteCount + 1, bitCount + deltaBitCount);\n if (result.binaryShiftByteCount === 2047 + 31) {\n // The string is as long as it's allowed to be. We should end it.\n result = result.endBinaryShift(index + 1);\n }\n return result;\n };\n // Create the state identical to this one, but we are no longer in\n // Binary Shift mode.\n State.prototype.endBinaryShift = function (index) {\n if (this.binaryShiftByteCount === 0) {\n return this;\n }\n var token = this.token;\n token = TokenHelpers.addBinaryShift(token, index - this.binaryShiftByteCount, this.binaryShiftByteCount);\n // assert token.getTotalBitCount() === this.bitCount;\n return new State(token, this.mode, 0, this.bitCount);\n };\n // Returns true if \"this\" state is better (equal: or) to be in than \"that\"\n // state under all possible circumstances.\n State.prototype.isBetterThanOrEqualTo = function (other) {\n var newModeBitCount = this.bitCount + (LatchTable.LATCH_TABLE[this.mode][other.mode] >> 16);\n if (this.binaryShiftByteCount < other.binaryShiftByteCount) {\n // add additional B/S encoding cost of other, if any\n newModeBitCount +=\n State.calculateBinaryShiftCost(other) -\n State.calculateBinaryShiftCost(this);\n }\n else if (this.binaryShiftByteCount > other.binaryShiftByteCount &&\n other.binaryShiftByteCount > 0) {\n // maximum possible additional cost (it: h)\n newModeBitCount += 10;\n }\n return newModeBitCount <= other.bitCount;\n };\n State.prototype.toBitArray = function (text) {\n var e_1, _a;\n // Reverse the tokens, so that they are in the order that they should\n // be output\n var symbols = [];\n for (var token = this.endBinaryShift(text.length).token; token !== null; token = token.getPrevious()) {\n symbols.unshift(token);\n }\n var bitArray = new BitArray();\n try {\n // Add each token to the result.\n for (var symbols_1 = __values(symbols), symbols_1_1 = symbols_1.next(); !symbols_1_1.done; symbols_1_1 = symbols_1.next()) {\n var symbol = symbols_1_1.value;\n symbol.appendTo(bitArray, text);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (symbols_1_1 && !symbols_1_1.done && (_a = symbols_1.return)) _a.call(symbols_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // assert bitArray.getSize() === this.bitCount;\n return bitArray;\n };\n /**\n * @Override\n */\n State.prototype.toString = function () {\n return StringUtils.format('%s bits=%d bytes=%d', C.MODE_NAMES[this.mode], this.bitCount, this.binaryShiftByteCount);\n };\n State.calculateBinaryShiftCost = function (state) {\n if (state.binaryShiftByteCount > 62) {\n return 21; // B/S with extended length\n }\n if (state.binaryShiftByteCount > 31) {\n return 20; // two B/S\n }\n if (state.binaryShiftByteCount > 0) {\n return 10; // one B/S\n }\n return 0;\n };\n State.INITIAL_STATE = new State(C.EMPTY_TOKEN, C.MODE_UPPER, 0, 0);\n return State;\n}());\nexport default State;\n","import * as C from './EncoderConstants';\nimport Arrays from '../../util/Arrays';\nimport StringUtils from '../../common/StringUtils';\nexport function static_CHAR_MAP(CHAR_MAP) {\n var spaceCharCode = StringUtils.getCharCode(' ');\n var pointCharCode = StringUtils.getCharCode('.');\n var commaCharCode = StringUtils.getCharCode(',');\n CHAR_MAP[C.MODE_UPPER][spaceCharCode] = 1;\n var zUpperCharCode = StringUtils.getCharCode('Z');\n var aUpperCharCode = StringUtils.getCharCode('A');\n for (var c = aUpperCharCode; c <= zUpperCharCode; c++) {\n CHAR_MAP[C.MODE_UPPER][c] = c - aUpperCharCode + 2;\n }\n CHAR_MAP[C.MODE_LOWER][spaceCharCode] = 1;\n var zLowerCharCode = StringUtils.getCharCode('z');\n var aLowerCharCode = StringUtils.getCharCode('a');\n for (var c = aLowerCharCode; c <= zLowerCharCode; c++) {\n CHAR_MAP[C.MODE_LOWER][c] = c - aLowerCharCode + 2;\n }\n CHAR_MAP[C.MODE_DIGIT][spaceCharCode] = 1;\n var nineCharCode = StringUtils.getCharCode('9');\n var zeroCharCode = StringUtils.getCharCode('0');\n for (var c = zeroCharCode; c <= nineCharCode; c++) {\n CHAR_MAP[C.MODE_DIGIT][c] = c - zeroCharCode + 2;\n }\n CHAR_MAP[C.MODE_DIGIT][commaCharCode] = 12;\n CHAR_MAP[C.MODE_DIGIT][pointCharCode] = 13;\n var mixedTable = [\n '\\x00',\n ' ',\n '\\x01',\n '\\x02',\n '\\x03',\n '\\x04',\n '\\x05',\n '\\x06',\n '\\x07',\n '\\b',\n '\\t',\n '\\n',\n '\\x0b',\n '\\f',\n '\\r',\n '\\x1b',\n '\\x1c',\n '\\x1d',\n '\\x1e',\n '\\x1f',\n '@',\n '\\\\',\n '^',\n '_',\n '`',\n '|',\n '~',\n '\\x7f'\n ];\n for (var i = 0; i < mixedTable.length; i++) {\n CHAR_MAP[C.MODE_MIXED][StringUtils.getCharCode(mixedTable[i])] = i;\n }\n var punctTable = [\n '\\x00',\n '\\r',\n '\\x00',\n '\\x00',\n '\\x00',\n '\\x00',\n '!',\n '\\'',\n '#',\n '$',\n '%',\n '&',\n '\\'',\n '(',\n ')',\n '*',\n '+',\n ',',\n '-',\n '.',\n '/',\n ':',\n ';',\n '<',\n '=',\n '>',\n '?',\n '[',\n ']',\n '{',\n '}'\n ];\n for (var i = 0; i < punctTable.length; i++) {\n if (StringUtils.getCharCode(punctTable[i]) > 0) {\n CHAR_MAP[C.MODE_PUNCT][StringUtils.getCharCode(punctTable[i])] = i;\n }\n }\n return CHAR_MAP;\n}\nexport var CHAR_MAP = static_CHAR_MAP(Arrays.createInt32Array(5, 256));\n","/*\n * Copyright 2013 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// import java.util.Collection;\n// import java.util.Collections;\nimport Collections from '../../util/Collections';\n// import java.util.Comparator;\n// import java.util.Iterator;\n// import java.util.LinkedList;\nimport State from './State';\nimport * as C from './EncoderConstants';\nimport * as CharMap from './CharMap';\nimport * as ShiftTable from './ShiftTable';\nimport StringUtils from '../../common/StringUtils';\n/**\n * This produces nearly optimal encodings of text into the first-level of\n * encoding used by Aztec code.\n *\n * It uses a dynamic algorithm. For each prefix of the string, it determines\n * a set of encodings that could lead to this prefix. We repeatedly add a\n * character and generate a new set of optimal encodings until we have read\n * through the entire input.\n *\n * @author Frank Yellin\n * @author Rustam Abdullaev\n */\nvar HighLevelEncoder = /** @class */ (function () {\n function HighLevelEncoder(text) {\n this.text = text;\n }\n /**\n * @return text represented by this encoder encoded as a {@link BitArray}\n */\n HighLevelEncoder.prototype.encode = function () {\n var spaceCharCode = StringUtils.getCharCode(' ');\n var lineBreakCharCode = StringUtils.getCharCode('\\n');\n var states = Collections.singletonList(State.INITIAL_STATE);\n for (var index = 0; index < this.text.length; index++) {\n var pairCode = void 0;\n var nextChar = index + 1 < this.text.length ? this.text[index + 1] : 0;\n switch (this.text[index]) {\n case StringUtils.getCharCode('\\r'):\n pairCode = nextChar === lineBreakCharCode ? 2 : 0;\n break;\n case StringUtils.getCharCode('.'):\n pairCode = nextChar === spaceCharCode ? 3 : 0;\n break;\n case StringUtils.getCharCode(','):\n pairCode = nextChar === spaceCharCode ? 4 : 0;\n break;\n case StringUtils.getCharCode(':'):\n pairCode = nextChar === spaceCharCode ? 5 : 0;\n break;\n default:\n pairCode = 0;\n }\n if (pairCode > 0) {\n // We have one of the four special PUNCT pairs. Treat them specially.\n // Get a new set of states for the two new characters.\n states = HighLevelEncoder.updateStateListForPair(states, index, pairCode);\n index++;\n }\n else {\n // Get a new set of states for the new character.\n states = this.updateStateListForChar(states, index);\n }\n }\n // We are left with a set of states. Find the shortest one.\n var minState = Collections.min(states, function (a, b) {\n return a.getBitCount() - b.getBitCount();\n });\n // Convert it to a bit array, and return.\n return minState.toBitArray(this.text);\n };\n // We update a set of states for a new character by updating each state\n // for the new character, merging the results, and then removing the\n // non-optimal states.\n HighLevelEncoder.prototype.updateStateListForChar = function (states, index) {\n var e_1, _a;\n var result = [];\n try {\n for (var states_1 = __values(states), states_1_1 = states_1.next(); !states_1_1.done; states_1_1 = states_1.next()) {\n var state = states_1_1.value /*State*/;\n this.updateStateForChar(state, index, result);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (states_1_1 && !states_1_1.done && (_a = states_1.return)) _a.call(states_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return HighLevelEncoder.simplifyStates(result);\n };\n // Return a set of states that represent the possible ways of updating this\n // state for the next character. The resulting set of states are added to\n // the \"result\" list.\n HighLevelEncoder.prototype.updateStateForChar = function (state, index, result) {\n var ch = (this.text[index] & 0xff);\n var charInCurrentTable = CharMap.CHAR_MAP[state.getMode()][ch] > 0;\n var stateNoBinary = null;\n for (var mode /*int*/ = 0; mode <= C.MODE_PUNCT; mode++) {\n var charInMode = CharMap.CHAR_MAP[mode][ch];\n if (charInMode > 0) {\n if (stateNoBinary == null) {\n // Only create stateNoBinary the first time it's required.\n stateNoBinary = state.endBinaryShift(index);\n }\n // Try generating the character by latching to its mode\n if (!charInCurrentTable ||\n mode === state.getMode() ||\n mode === C.MODE_DIGIT) {\n // If the character is in the current table, we don't want to latch to\n // any other mode except possibly digit (which uses only 4 bits). Any\n // other latch would be equally successful *after* this character, and\n // so wouldn't save any bits.\n var latchState = stateNoBinary.latchAndAppend(mode, charInMode);\n result.push(latchState);\n }\n // Try generating the character by switching to its mode.\n if (!charInCurrentTable &&\n ShiftTable.SHIFT_TABLE[state.getMode()][mode] >= 0) {\n // It never makes sense to temporarily shift to another mode if the\n // character exists in the current mode. That can never save bits.\n var shiftState = stateNoBinary.shiftAndAppend(mode, charInMode);\n result.push(shiftState);\n }\n }\n }\n if (state.getBinaryShiftByteCount() > 0 ||\n CharMap.CHAR_MAP[state.getMode()][ch] === 0) {\n // It's never worthwhile to go into binary shift mode if you're not already\n // in binary shift mode, and the character exists in your current mode.\n // That can never save bits over just outputting the char in the current mode.\n var binaryState = state.addBinaryShiftChar(index);\n result.push(binaryState);\n }\n };\n HighLevelEncoder.updateStateListForPair = function (states, index, pairCode) {\n var e_2, _a;\n var result = [];\n try {\n for (var states_2 = __values(states), states_2_1 = states_2.next(); !states_2_1.done; states_2_1 = states_2.next()) {\n var state = states_2_1.value /*State*/;\n this.updateStateForPair(state, index, pairCode, result);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (states_2_1 && !states_2_1.done && (_a = states_2.return)) _a.call(states_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return this.simplifyStates(result);\n };\n HighLevelEncoder.updateStateForPair = function (state, index, pairCode, result) {\n var stateNoBinary = state.endBinaryShift(index);\n // Possibility 1. Latch to C.MODE_PUNCT, and then append this code\n result.push(stateNoBinary.latchAndAppend(C.MODE_PUNCT, pairCode));\n if (state.getMode() !== C.MODE_PUNCT) {\n // Possibility 2. Shift to C.MODE_PUNCT, and then append this code.\n // Every state except C.MODE_PUNCT (handled above) can shift\n result.push(stateNoBinary.shiftAndAppend(C.MODE_PUNCT, pairCode));\n }\n if (pairCode === 3 || pairCode === 4) {\n // both characters are in DIGITS. Sometimes better to just add two digits\n var digitState = stateNoBinary\n .latchAndAppend(C.MODE_DIGIT, 16 - pairCode) // period or comma in DIGIT\n .latchAndAppend(C.MODE_DIGIT, 1); // space in DIGIT\n result.push(digitState);\n }\n if (state.getBinaryShiftByteCount() > 0) {\n // It only makes sense to do the characters as binary if we're already\n // in binary mode.\n var binaryState = state\n .addBinaryShiftChar(index)\n .addBinaryShiftChar(index + 1);\n result.push(binaryState);\n }\n };\n HighLevelEncoder.simplifyStates = function (states) {\n var e_3, _a, e_4, _b;\n var result = [];\n try {\n for (var states_3 = __values(states), states_3_1 = states_3.next(); !states_3_1.done; states_3_1 = states_3.next()) {\n var newState = states_3_1.value;\n var add = true;\n var _loop_1 = function (oldState) {\n if (oldState.isBetterThanOrEqualTo(newState)) {\n add = false;\n return \"break\";\n }\n if (newState.isBetterThanOrEqualTo(oldState)) {\n // iterator.remove();\n result = result.filter(function (x) { return x !== oldState; }); // remove old state\n }\n };\n try {\n for (var result_1 = (e_4 = void 0, __values(result)), result_1_1 = result_1.next(); !result_1_1.done; result_1_1 = result_1.next()) {\n var oldState = result_1_1.value;\n var state_1 = _loop_1(oldState);\n if (state_1 === \"break\")\n break;\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (result_1_1 && !result_1_1.done && (_b = result_1.return)) _b.call(result_1);\n }\n finally { if (e_4) throw e_4.error; }\n }\n if (add) {\n result.push(newState);\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (states_3_1 && !states_3_1.done && (_a = states_3.return)) _a.call(states_3);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return result;\n };\n return HighLevelEncoder;\n}());\nexport default HighLevelEncoder;\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BitArray from '../../common/BitArray';\nimport IllegalArgumentException from '../../IllegalArgumentException';\nimport StringUtils from '../../common/StringUtils';\nimport BitMatrix from '../../common/BitMatrix';\nimport AztecCode from './AztecCode';\nimport ReedSolomonEncoder from '../../common/reedsolomon/ReedSolomonEncoder';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport HighLevelEncoder from './HighLevelEncoder';\nimport Integer from '../../util/Integer';\n/*\n * Copyright 2013 ZXing authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// package com.google.zxing.aztec.encoder;\n// import com.google.zxing.common.BitArray;\n// import com.google.zxing.common.BitMatrix;\n// import com.google.zxing.common.reedsolomon.GenericGF;\n// import com.google.zxing.common.reedsolomon.ReedSolomonEncoder;\n/**\n * Generates Aztec 2D barcodes.\n *\n * @author Rustam Abdullaev\n */\nvar Encoder = /** @class */ (function () {\n function Encoder() {\n }\n /**\n * Encodes the given binary content as an Aztec symbol\n *\n * @param data input data string\n * @return Aztec symbol matrix with metadata\n */\n Encoder.encodeBytes = function (data) {\n return Encoder.encode(data, Encoder.DEFAULT_EC_PERCENT, Encoder.DEFAULT_AZTEC_LAYERS);\n };\n /**\n * Encodes the given binary content as an Aztec symbol\n *\n * @param data input data string\n * @param minECCPercent minimal percentage of error check words (According to ISO/IEC 24778:2008,\n * a minimum of 23% + 3 words is recommended)\n * @param userSpecifiedLayers if non-zero, a user-specified value for the number of layers\n * @return Aztec symbol matrix with metadata\n */\n Encoder.encode = function (data, minECCPercent, userSpecifiedLayers) {\n // High-level encode\n var bits = new HighLevelEncoder(data).encode();\n // stuff bits and choose symbol size\n var eccBits = Integer.truncDivision((bits.getSize() * minECCPercent), 100) + 11;\n var totalSizeBits = bits.getSize() + eccBits;\n var compact;\n var layers;\n var totalBitsInLayer;\n var wordSize;\n var stuffedBits;\n if (userSpecifiedLayers !== Encoder.DEFAULT_AZTEC_LAYERS) {\n compact = userSpecifiedLayers < 0;\n layers = Math.abs(userSpecifiedLayers);\n if (layers > (compact ? Encoder.MAX_NB_BITS_COMPACT : Encoder.MAX_NB_BITS)) {\n throw new IllegalArgumentException(StringUtils.format('Illegal value %s for layers', userSpecifiedLayers));\n }\n totalBitsInLayer = Encoder.totalBitsInLayer(layers, compact);\n wordSize = Encoder.WORD_SIZE[layers];\n var usableBitsInLayers = totalBitsInLayer - (totalBitsInLayer % wordSize);\n stuffedBits = Encoder.stuffBits(bits, wordSize);\n if (stuffedBits.getSize() + eccBits > usableBitsInLayers) {\n throw new IllegalArgumentException('Data to large for user specified layer');\n }\n if (compact && stuffedBits.getSize() > wordSize * 64) {\n // Compact format only allows 64 data words, though C4 can hold more words than that\n throw new IllegalArgumentException('Data to large for user specified layer');\n }\n }\n else {\n wordSize = 0;\n stuffedBits = null;\n // We look at the possible table sizes in the order Compact1, Compact2, Compact3,\n // Compact4, Normal4,... Normal(i) for i < 4 isn't typically used since Compact(i+1)\n // is the same size, but has more data.\n for (var i /*int*/ = 0;; i++) {\n if (i > Encoder.MAX_NB_BITS) {\n throw new IllegalArgumentException('Data too large for an Aztec code');\n }\n compact = i <= 3;\n layers = compact ? i + 1 : i;\n totalBitsInLayer = Encoder.totalBitsInLayer(layers, compact);\n if (totalSizeBits > totalBitsInLayer) {\n continue;\n }\n // [Re]stuff the bits if this is the first opportunity, or if the\n // wordSize has changed\n if (stuffedBits == null || wordSize !== Encoder.WORD_SIZE[layers]) {\n wordSize = Encoder.WORD_SIZE[layers];\n stuffedBits = Encoder.stuffBits(bits, wordSize);\n }\n var usableBitsInLayers = totalBitsInLayer - (totalBitsInLayer % wordSize);\n if (compact && stuffedBits.getSize() > wordSize * 64) {\n // Compact format only allows 64 data words, though C4 can hold more words than that\n continue;\n }\n if (stuffedBits.getSize() + eccBits <= usableBitsInLayers) {\n break;\n }\n }\n }\n var messageBits = Encoder.generateCheckWords(stuffedBits, totalBitsInLayer, wordSize);\n // generate mode message\n var messageSizeInWords = stuffedBits.getSize() / wordSize;\n var modeMessage = Encoder.generateModeMessage(compact, layers, messageSizeInWords);\n // allocate symbol\n var baseMatrixSize = (compact ? 11 : 14) + layers * 4; // not including alignment lines\n var alignmentMap = new Int32Array(baseMatrixSize);\n var matrixSize;\n if (compact) {\n // no alignment marks in compact mode, alignmentMap is a no-op\n matrixSize = baseMatrixSize;\n for (var i /*int*/ = 0; i < alignmentMap.length; i++) {\n alignmentMap[i] = i;\n }\n }\n else {\n matrixSize = baseMatrixSize + 1 + 2 * Integer.truncDivision((Integer.truncDivision(baseMatrixSize, 2) - 1), 15);\n var origCenter = Integer.truncDivision(baseMatrixSize, 2);\n var center = Integer.truncDivision(matrixSize, 2);\n for (var i /*int*/ = 0; i < origCenter; i++) {\n var newOffset = i + Integer.truncDivision(i, 15);\n alignmentMap[origCenter - i - 1] = center - newOffset - 1;\n alignmentMap[origCenter + i] = center + newOffset + 1;\n }\n }\n var matrix = new BitMatrix(matrixSize);\n // draw data bits\n for (var i /*int*/ = 0, rowOffset = 0; i < layers; i++) {\n var rowSize = (layers - i) * 4 + (compact ? 9 : 12);\n for (var j /*int*/ = 0; j < rowSize; j++) {\n var columnOffset = j * 2;\n for (var k /*int*/ = 0; k < 2; k++) {\n if (messageBits.get(rowOffset + columnOffset + k)) {\n matrix.set(alignmentMap[i * 2 + k], alignmentMap[i * 2 + j]);\n }\n if (messageBits.get(rowOffset + rowSize * 2 + columnOffset + k)) {\n matrix.set(alignmentMap[i * 2 + j], alignmentMap[baseMatrixSize - 1 - i * 2 - k]);\n }\n if (messageBits.get(rowOffset + rowSize * 4 + columnOffset + k)) {\n matrix.set(alignmentMap[baseMatrixSize - 1 - i * 2 - k], alignmentMap[baseMatrixSize - 1 - i * 2 - j]);\n }\n if (messageBits.get(rowOffset + rowSize * 6 + columnOffset + k)) {\n matrix.set(alignmentMap[baseMatrixSize - 1 - i * 2 - j], alignmentMap[i * 2 + k]);\n }\n }\n }\n rowOffset += rowSize * 8;\n }\n // draw mode message\n Encoder.drawModeMessage(matrix, compact, matrixSize, modeMessage);\n // draw alignment marks\n if (compact) {\n Encoder.drawBullsEye(matrix, Integer.truncDivision(matrixSize, 2), 5);\n }\n else {\n Encoder.drawBullsEye(matrix, Integer.truncDivision(matrixSize, 2), 7);\n for (var i /*int*/ = 0, j = 0; i < Integer.truncDivision(baseMatrixSize, 2) - 1; i += 15, j += 16) {\n for (var k /*int*/ = Integer.truncDivision(matrixSize, 2) & 1; k < matrixSize; k += 2) {\n matrix.set(Integer.truncDivision(matrixSize, 2) - j, k);\n matrix.set(Integer.truncDivision(matrixSize, 2) + j, k);\n matrix.set(k, Integer.truncDivision(matrixSize, 2) - j);\n matrix.set(k, Integer.truncDivision(matrixSize, 2) + j);\n }\n }\n }\n var aztec = new AztecCode();\n aztec.setCompact(compact);\n aztec.setSize(matrixSize);\n aztec.setLayers(layers);\n aztec.setCodeWords(messageSizeInWords);\n aztec.setMatrix(matrix);\n return aztec;\n };\n Encoder.drawBullsEye = function (matrix, center, size) {\n for (var i /*int*/ = 0; i < size; i += 2) {\n for (var j /*int*/ = center - i; j <= center + i; j++) {\n matrix.set(j, center - i);\n matrix.set(j, center + i);\n matrix.set(center - i, j);\n matrix.set(center + i, j);\n }\n }\n matrix.set(center - size, center - size);\n matrix.set(center - size + 1, center - size);\n matrix.set(center - size, center - size + 1);\n matrix.set(center + size, center - size);\n matrix.set(center + size, center - size + 1);\n matrix.set(center + size, center + size - 1);\n };\n Encoder.generateModeMessage = function (compact, layers, messageSizeInWords) {\n var modeMessage = new BitArray();\n if (compact) {\n modeMessage.appendBits(layers - 1, 2);\n modeMessage.appendBits(messageSizeInWords - 1, 6);\n modeMessage = Encoder.generateCheckWords(modeMessage, 28, 4);\n }\n else {\n modeMessage.appendBits(layers - 1, 5);\n modeMessage.appendBits(messageSizeInWords - 1, 11);\n modeMessage = Encoder.generateCheckWords(modeMessage, 40, 4);\n }\n return modeMessage;\n };\n Encoder.drawModeMessage = function (matrix, compact, matrixSize, modeMessage) {\n var center = Integer.truncDivision(matrixSize, 2);\n if (compact) {\n for (var i /*int*/ = 0; i < 7; i++) {\n var offset = center - 3 + i;\n if (modeMessage.get(i)) {\n matrix.set(offset, center - 5);\n }\n if (modeMessage.get(i + 7)) {\n matrix.set(center + 5, offset);\n }\n if (modeMessage.get(20 - i)) {\n matrix.set(offset, center + 5);\n }\n if (modeMessage.get(27 - i)) {\n matrix.set(center - 5, offset);\n }\n }\n }\n else {\n for (var i /*int*/ = 0; i < 10; i++) {\n var offset = center - 5 + i + Integer.truncDivision(i, 5);\n if (modeMessage.get(i)) {\n matrix.set(offset, center - 7);\n }\n if (modeMessage.get(i + 10)) {\n matrix.set(center + 7, offset);\n }\n if (modeMessage.get(29 - i)) {\n matrix.set(offset, center + 7);\n }\n if (modeMessage.get(39 - i)) {\n matrix.set(center - 7, offset);\n }\n }\n }\n };\n Encoder.generateCheckWords = function (bitArray, totalBits, wordSize) {\n var e_1, _a;\n // bitArray is guaranteed to be a multiple of the wordSize, so no padding needed\n var messageSizeInWords = bitArray.getSize() / wordSize;\n var rs = new ReedSolomonEncoder(Encoder.getGF(wordSize));\n var totalWords = Integer.truncDivision(totalBits, wordSize);\n var messageWords = Encoder.bitsToWords(bitArray, wordSize, totalWords);\n rs.encode(messageWords, totalWords - messageSizeInWords);\n var startPad = totalBits % wordSize;\n var messageBits = new BitArray();\n messageBits.appendBits(0, startPad);\n try {\n for (var _b = __values(Array.from(messageWords)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var messageWord = _c.value /*: int*/;\n messageBits.appendBits(messageWord, wordSize);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return messageBits;\n };\n Encoder.bitsToWords = function (stuffedBits, wordSize, totalWords) {\n var message = new Int32Array(totalWords);\n var i;\n var n;\n for (i = 0, n = stuffedBits.getSize() / wordSize; i < n; i++) {\n var value = 0;\n for (var j /*int*/ = 0; j < wordSize; j++) {\n value |= stuffedBits.get(i * wordSize + j) ? (1 << wordSize - j - 1) : 0;\n }\n message[i] = value;\n }\n return message;\n };\n Encoder.getGF = function (wordSize) {\n switch (wordSize) {\n case 4:\n return GenericGF.AZTEC_PARAM;\n case 6:\n return GenericGF.AZTEC_DATA_6;\n case 8:\n return GenericGF.AZTEC_DATA_8;\n case 10:\n return GenericGF.AZTEC_DATA_10;\n case 12:\n return GenericGF.AZTEC_DATA_12;\n default:\n throw new IllegalArgumentException('Unsupported word size ' + wordSize);\n }\n };\n Encoder.stuffBits = function (bits, wordSize) {\n var out = new BitArray();\n var n = bits.getSize();\n var mask = (1 << wordSize) - 2;\n for (var i /*int*/ = 0; i < n; i += wordSize) {\n var word = 0;\n for (var j /*int*/ = 0; j < wordSize; j++) {\n if (i + j >= n || bits.get(i + j)) {\n word |= 1 << (wordSize - 1 - j);\n }\n }\n if ((word & mask) === mask) {\n out.appendBits(word & mask, wordSize);\n i--;\n }\n else if ((word & mask) === 0) {\n out.appendBits(word | 1, wordSize);\n i--;\n }\n else {\n out.appendBits(word, wordSize);\n }\n }\n return out;\n };\n Encoder.totalBitsInLayer = function (layers, compact) {\n return ((compact ? 88 : 112) + 16 * layers) * layers;\n };\n Encoder.DEFAULT_EC_PERCENT = 33; // default minimal percentage of error check words\n Encoder.DEFAULT_AZTEC_LAYERS = 0;\n Encoder.MAX_NB_BITS = 32;\n Encoder.MAX_NB_BITS_COMPACT = 4;\n Encoder.WORD_SIZE = Int32Array.from([\n 4, 6, 6, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,\n 12, 12, 12, 12, 12, 12, 12, 12, 12, 12\n ]);\n return Encoder;\n}());\nexport default Encoder;\n","/*\n* Copyright 2013 ZXing authors\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n// package com.google.zxing.aztec;\n// import com.google.zxing.BarcodeFormat;\nimport BarcodeFormat from '../BarcodeFormat';\n// import com.google.zxing.EncodeHintType;\nimport EncodeHintType from '../EncodeHintType';\n// import com.google.zxing.aztec.encoder.Encoder;\nimport Encoder from './encoder/Encoder';\n// import com.google.zxing.common.BitMatrix;\nimport BitMatrix from '../common/BitMatrix';\n// import java.nio.charset.Charset;\nimport Charset from '../util/Charset';\n// import java.nio.charset.StandardCharsets;\nimport StandardCharsets from '../util/StandardCharsets';\n// import java.util.Map;\nimport Integer from '../util/Integer';\nimport IllegalStateException from '../IllegalStateException';\nimport IllegalArgumentException from '../IllegalArgumentException';\nimport StringUtils from '../common/StringUtils';\n/**\n * Renders an Aztec code as a {@link BitMatrix}.\n */\nvar AztecWriter = /** @class */ (function () {\n function AztecWriter() {\n }\n // @Override\n AztecWriter.prototype.encode = function (contents, format, width, height) {\n return this.encodeWithHints(contents, format, width, height, null);\n };\n // @Override\n AztecWriter.prototype.encodeWithHints = function (contents, format, width, height, hints) {\n var charset = StandardCharsets.ISO_8859_1;\n var eccPercent = Encoder.DEFAULT_EC_PERCENT;\n var layers = Encoder.DEFAULT_AZTEC_LAYERS;\n if (hints != null) {\n if (hints.has(EncodeHintType.CHARACTER_SET)) {\n charset = Charset.forName(hints.get(EncodeHintType.CHARACTER_SET).toString());\n }\n if (hints.has(EncodeHintType.ERROR_CORRECTION)) {\n eccPercent = Integer.parseInt(hints.get(EncodeHintType.ERROR_CORRECTION).toString());\n }\n if (hints.has(EncodeHintType.AZTEC_LAYERS)) {\n layers = Integer.parseInt(hints.get(EncodeHintType.AZTEC_LAYERS).toString());\n }\n }\n return AztecWriter.encodeLayers(contents, format, width, height, charset, eccPercent, layers);\n };\n AztecWriter.encodeLayers = function (contents, format, width, height, charset, eccPercent, layers) {\n if (format !== BarcodeFormat.AZTEC) {\n throw new IllegalArgumentException('Can only encode AZTEC, but got ' + format);\n }\n var aztec = Encoder.encode(StringUtils.getBytes(contents, charset), eccPercent, layers);\n return AztecWriter.renderResult(aztec, width, height);\n };\n AztecWriter.renderResult = function (code, width, height) {\n var input = code.getMatrix();\n if (input == null) {\n throw new IllegalStateException();\n }\n var inputWidth = input.getWidth();\n var inputHeight = input.getHeight();\n var outputWidth = Math.max(width, inputWidth);\n var outputHeight = Math.max(height, inputHeight);\n var multiple = Math.min(outputWidth / inputWidth, outputHeight / inputHeight);\n var leftPadding = (outputWidth - (inputWidth * multiple)) / 2;\n var topPadding = (outputHeight - (inputHeight * multiple)) / 2;\n var output = new BitMatrix(outputWidth, outputHeight);\n for (var inputY /*int*/ = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n // Write the contents of this row of the barcode\n for (var inputX /*int*/ = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n if (input.get(inputX, inputY)) {\n output.setRegion(outputX, outputY, multiple, multiple);\n }\n }\n }\n return output;\n };\n return AztecWriter;\n}());\nexport default AztecWriter;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { IllegalArgumentException, InvertedLuminanceSource, LuminanceSource, } from '@zxing/library';\n/**/\nvar HTMLCanvasElementLuminanceSource = /** @class */ (function (_super) {\n __extends(HTMLCanvasElementLuminanceSource, _super);\n function HTMLCanvasElementLuminanceSource(canvas) {\n var _this = _super.call(this, canvas.width, canvas.height) || this;\n _this.canvas = canvas;\n _this.tempCanvasElement = null;\n _this.buffer = HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData(canvas);\n return _this;\n }\n HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData = function (canvas) {\n var canvasCtx;\n try {\n canvasCtx = canvas.getContext('2d', { willReadFrequently: true });\n }\n catch (e) {\n canvasCtx = canvas.getContext('2d');\n }\n if (!canvasCtx) {\n throw new Error('Couldn\\'t get canvas context.');\n }\n var imageData = canvasCtx.getImageData(0, 0, canvas.width, canvas.height);\n return HTMLCanvasElementLuminanceSource.toGrayscaleBuffer(imageData.data, canvas.width, canvas.height);\n };\n HTMLCanvasElementLuminanceSource.toGrayscaleBuffer = function (imageBuffer, width, height) {\n var grayscaleBuffer = new Uint8ClampedArray(width * height);\n for (var i = 0, j = 0, length_1 = imageBuffer.length; i < length_1; i += 4, j++) {\n var gray = void 0;\n var alpha = imageBuffer[i + 3];\n // The color of fully-transparent pixels is irrelevant. They are often, technically, fully-transparent\n // black (0 alpha, and then 0 RGB). They are often used, of course as the \"white\" area in a\n // barcode image. Force any such pixel to be white:\n if (alpha === 0) {\n gray = 0xFF;\n }\n else {\n var pixelR = imageBuffer[i];\n var pixelG = imageBuffer[i + 1];\n var pixelB = imageBuffer[i + 2];\n // .299R + 0.587G + 0.114B (YUV/YIQ for PAL and NTSC),\n // (306*R) >> 10 is approximately equal to R*0.299, and so on.\n // 0x200 >> 10 is 0.5, it implements rounding.\n // tslint:disable-next-line:no-bitwise\n gray = (306 * pixelR + 601 * pixelG + 117 * pixelB + 0x200) >> 10;\n }\n grayscaleBuffer[j] = gray;\n }\n return grayscaleBuffer;\n };\n HTMLCanvasElementLuminanceSource.prototype.getRow = function (y /*int*/, row) {\n if (y < 0 || y >= this.getHeight()) {\n throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n }\n var width = this.getWidth();\n var start = y * width;\n if (row === null) {\n row = this.buffer.slice(start, start + width);\n }\n else {\n if (row.length < width) {\n row = new Uint8ClampedArray(width);\n }\n // The underlying raster of image consists of bytes with the luminance values\n // TODO: can avoid set/slice?\n row.set(this.buffer.slice(start, start + width));\n }\n return row;\n };\n HTMLCanvasElementLuminanceSource.prototype.getMatrix = function () {\n return this.buffer;\n };\n HTMLCanvasElementLuminanceSource.prototype.isCropSupported = function () {\n return true;\n };\n HTMLCanvasElementLuminanceSource.prototype.crop = function (left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n _super.prototype.crop.call(this, left, top, width, height);\n return this;\n };\n /**\n * This is always true, since the image is a gray-scale image.\n *\n * @return true\n */\n HTMLCanvasElementLuminanceSource.prototype.isRotateSupported = function () {\n return true;\n };\n HTMLCanvasElementLuminanceSource.prototype.rotateCounterClockwise = function () {\n this.rotate(-90);\n return this;\n };\n HTMLCanvasElementLuminanceSource.prototype.rotateCounterClockwise45 = function () {\n this.rotate(-45);\n return this;\n };\n HTMLCanvasElementLuminanceSource.prototype.invert = function () {\n return new InvertedLuminanceSource(this);\n };\n HTMLCanvasElementLuminanceSource.prototype.getTempCanvasElement = function () {\n if (null === this.tempCanvasElement) {\n var tempCanvasElement = this.canvas.ownerDocument.createElement('canvas');\n tempCanvasElement.width = this.canvas.width;\n tempCanvasElement.height = this.canvas.height;\n this.tempCanvasElement = tempCanvasElement;\n }\n return this.tempCanvasElement;\n };\n HTMLCanvasElementLuminanceSource.prototype.rotate = function (angle) {\n var tempCanvasElement = this.getTempCanvasElement();\n if (!tempCanvasElement) {\n throw new Error('Could not create a Canvas element.');\n }\n var angleRadians = angle * HTMLCanvasElementLuminanceSource.DEGREE_TO_RADIANS;\n // Calculate and set new dimensions for temp canvas\n var width = this.canvas.width;\n var height = this.canvas.height;\n var newWidth = Math.ceil(Math.abs(Math.cos(angleRadians)) * width + Math.abs(Math.sin(angleRadians)) * height);\n var newHeight = Math.ceil(Math.abs(Math.sin(angleRadians)) * width + Math.abs(Math.cos(angleRadians)) * height);\n tempCanvasElement.width = newWidth;\n tempCanvasElement.height = newHeight;\n var tempContext = tempCanvasElement.getContext('2d');\n if (!tempContext) {\n throw new Error('Could not create a Canvas Context element.');\n }\n // Draw at center of temp canvas to prevent clipping of image data\n tempContext.translate(newWidth / 2, newHeight / 2);\n tempContext.rotate(angleRadians);\n tempContext.drawImage(this.canvas, width / -2, height / -2);\n this.buffer = HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData(tempCanvasElement);\n return this;\n };\n HTMLCanvasElementLuminanceSource.DEGREE_TO_RADIANS = Math.PI / 180;\n return HTMLCanvasElementLuminanceSource;\n}(LuminanceSource));\nexport { HTMLCanvasElementLuminanceSource };\n","/**\n * If navigator is present.\n */\nexport function hasNavigator() {\n return typeof navigator !== 'undefined';\n}\n/**\n * If mediaDevices under navigator is supported.\n */\nfunction isMediaDevicesSupported() {\n return hasNavigator() && !!navigator.mediaDevices;\n}\n/**\n * If enumerateDevices under navigator is supported.\n */\nexport function canEnumerateDevices() {\n return !!(isMediaDevicesSupported() && navigator.mediaDevices.enumerateDevices);\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { ArgumentException, BinaryBitmap, ChecksumException, DecodeHintType, FormatException, HybridBinarizer, NotFoundException, } from '@zxing/library';\nimport { HTMLCanvasElementLuminanceSource } from '../common/HTMLCanvasElementLuminanceSource';\nimport { canEnumerateDevices, hasNavigator } from '../common/navigator-utils';\nvar defaultOptions = {\n delayBetweenScanAttempts: 500,\n delayBetweenScanSuccess: 500,\n tryPlayVideoTimeout: 5000,\n};\n/**\n * Base class for browser code reader.\n */\nvar BrowserCodeReader = /** @class */ (function () {\n /**\n * Creates an instance of BrowserCodeReader.\n * @param {Reader} reader The reader instance to decode the barcode\n * @param hints Holds the hints the user sets for the Reader.\n */\n function BrowserCodeReader(reader, hints, options) {\n if (hints === void 0) { hints = new Map(); }\n if (options === void 0) { options = {}; }\n this.reader = reader;\n this.hints = hints;\n this.options = __assign(__assign({}, defaultOptions), options);\n }\n Object.defineProperty(BrowserCodeReader.prototype, \"possibleFormats\", {\n /**\n * Allows to change the possible formats the decoder should\n * search for while scanning some image. Useful for changing\n * the possible formats during BrowserCodeReader::scan.\n */\n set: function (formats) {\n this.hints.set(DecodeHintType.POSSIBLE_FORMATS, formats);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Defines what the videoElement src will be.\n *\n * @param videoElement\n * @param stream The stream to be added as a source.\n */\n BrowserCodeReader.addVideoSource = function (videoElement, stream) {\n // Older browsers may not have `srcObject`\n try {\n // @note Throws Exception if interrupted by a new loaded request\n videoElement.srcObject = stream;\n }\n catch (err) {\n console.error(\"got interrupted by new loading request\");\n }\n };\n /**\n * Enables or disables the torch in a media stream.\n *\n * @experimental This doesn't work across all browsers and is still a Draft.\n */\n BrowserCodeReader.mediaStreamSetTorch = function (track, onOff) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, track.applyConstraints({\n advanced: [{\n fillLightMode: onOff ? 'flash' : 'off',\n torch: onOff ? true : false,\n }],\n })];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Checks if the stream has torch support.\n */\n BrowserCodeReader.mediaStreamIsTorchCompatible = function (params) {\n var e_1, _a;\n var tracks = params.getVideoTracks();\n try {\n for (var tracks_1 = __values(tracks), tracks_1_1 = tracks_1.next(); !tracks_1_1.done; tracks_1_1 = tracks_1.next()) {\n var track = tracks_1_1.value;\n if (BrowserCodeReader.mediaStreamIsTorchCompatibleTrack(track)) {\n return true;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (tracks_1_1 && !tracks_1_1.done && (_a = tracks_1.return)) _a.call(tracks_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n };\n /**\n *\n * @param track The media stream track that will be checked for compatibility.\n */\n BrowserCodeReader.mediaStreamIsTorchCompatibleTrack = function (track) {\n try {\n var capabilities = track.getCapabilities();\n return 'torch' in capabilities;\n }\n catch (err) {\n // some browsers may not be compatible with ImageCapture\n // so we are ignoring this for now.\n // tslint:disable-next-line:no-console\n console.error(err);\n // tslint:disable-next-line:no-console\n console.warn('Your browser may be not fully compatible with WebRTC and/or ImageCapture specs. Torch will not be available.');\n return false;\n }\n };\n /**\n * Checks if the given video element is currently playing.\n */\n BrowserCodeReader.isVideoPlaying = function (video) {\n return video.currentTime > 0 && !video.paused && video.readyState > 2;\n };\n /**\n * Searches and validates a media element.\n */\n BrowserCodeReader.getMediaElement = function (mediaElementId, type) {\n var mediaElement = document.getElementById(mediaElementId);\n if (!mediaElement) {\n throw new ArgumentException(\"element with id '\".concat(mediaElementId, \"' not found\"));\n }\n if (mediaElement.nodeName.toLowerCase() !== type.toLowerCase()) {\n throw new ArgumentException(\"element with id '\".concat(mediaElementId, \"' must be an \").concat(type, \" element\"));\n }\n return mediaElement;\n };\n /**\n * Receives a source and makes sure to return a Video Element from it or fail.\n */\n BrowserCodeReader.createVideoElement = function (videoThingy) {\n if (videoThingy instanceof HTMLVideoElement) {\n return videoThingy;\n }\n if (typeof videoThingy === 'string') {\n return BrowserCodeReader.getMediaElement(videoThingy, 'video');\n }\n if (!videoThingy && typeof document !== 'undefined') {\n var videoElement = document.createElement('video');\n videoElement.width = 200;\n videoElement.height = 200;\n return videoElement;\n }\n throw new Error('Couldn\\'t get videoElement from videoSource!');\n };\n /**\n * Receives a source and makes sure to return an Image Element from it or fail.\n */\n BrowserCodeReader.prepareImageElement = function (imageSource) {\n if (imageSource instanceof HTMLImageElement) {\n return imageSource;\n }\n if (typeof imageSource === 'string') {\n return BrowserCodeReader.getMediaElement(imageSource, 'img');\n }\n if (typeof imageSource === 'undefined') {\n var imageElement = document.createElement('img');\n imageElement.width = 200;\n imageElement.height = 200;\n return imageElement;\n }\n throw new Error('Couldn\\'t get imageElement from imageSource!');\n };\n /**\n * Sets a HTMLVideoElement for scanning or creates a new one.\n *\n * @param videoElem The HTMLVideoElement to be set.\n */\n BrowserCodeReader.prepareVideoElement = function (videoElem) {\n var videoElement = BrowserCodeReader.createVideoElement(videoElem);\n // @todo the following lines should not always be done this way, should conditionally\n // change according were we created the element or not\n // Needed for iOS 11\n videoElement.setAttribute('autoplay', 'true');\n videoElement.setAttribute('muted', 'true');\n videoElement.setAttribute('playsinline', 'true');\n return videoElement;\n };\n /**\n * Checks if and HTML image is loaded.\n */\n BrowserCodeReader.isImageLoaded = function (img) {\n // During the onload event, IE correctly identifies any images that\n // weren't downloaded as not complete. Others should too. Gecko-based\n // browsers act like NS4 in that they report this incorrectly.\n if (!img.complete) {\n return false;\n }\n // However, they do have two very useful properties: naturalWidth and\n // naturalHeight. These give the true size of the image. If it failed\n // to load, either of these should be zero.\n if (img.naturalWidth === 0) {\n return false;\n }\n // No other way of checking: assume it’s ok.\n return true;\n };\n /**\n * Creates a binaryBitmap based in a canvas.\n *\n * @param canvas HTML canvas element containing the image source draw.\n */\n BrowserCodeReader.createBinaryBitmapFromCanvas = function (canvas) {\n var luminanceSource = new HTMLCanvasElementLuminanceSource(canvas);\n var hybridBinarizer = new HybridBinarizer(luminanceSource);\n return new BinaryBitmap(hybridBinarizer);\n };\n /**\n * Overwriting this allows you to manipulate the snapshot image in anyway you want before decode.\n */\n BrowserCodeReader.drawImageOnCanvas = function (canvasElementContext, srcElement) {\n canvasElementContext.drawImage(srcElement, 0, 0);\n };\n BrowserCodeReader.getMediaElementDimensions = function (mediaElement) {\n if (mediaElement instanceof HTMLVideoElement) {\n return {\n height: mediaElement.videoHeight,\n width: mediaElement.videoWidth,\n };\n }\n if (mediaElement instanceof HTMLImageElement) {\n return {\n height: mediaElement.naturalHeight || mediaElement.height,\n width: mediaElement.naturalWidth || mediaElement.width,\n };\n }\n throw new Error('Couldn\\'t find the Source\\'s dimensions!');\n };\n /**\n * 🖌 Prepares the canvas for capture and scan frames.\n */\n BrowserCodeReader.createCaptureCanvas = function (mediaElement) {\n if (!mediaElement) {\n throw new ArgumentException('Cannot create a capture canvas without a media element.');\n }\n if (typeof document === 'undefined') {\n throw new Error('The page \"Document\" is undefined, make sure you\\'re running in a browser.');\n }\n var canvasElement = document.createElement('canvas');\n var _a = BrowserCodeReader.getMediaElementDimensions(mediaElement), width = _a.width, height = _a.height;\n canvasElement.style.width = width + 'px';\n canvasElement.style.height = height + 'px';\n canvasElement.width = width;\n canvasElement.height = height;\n return canvasElement;\n };\n /**\n * Just tries to play the video and logs any errors.\n * The play call is only made is the video is not already playing.\n */\n BrowserCodeReader.tryPlayVideo = function (videoElement) {\n return __awaiter(this, void 0, void 0, function () {\n var error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (videoElement === null || videoElement === void 0 ? void 0 : videoElement.ended) {\n // tslint:disable-next-line:no-console\n console.error('Trying to play video that has ended.');\n return [2 /*return*/, false];\n }\n if (BrowserCodeReader.isVideoPlaying(videoElement)) {\n // tslint:disable-next-line:no-console\n console.warn('Trying to play video that is already playing.');\n return [2 /*return*/, true];\n }\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, videoElement.play()];\n case 2:\n _a.sent();\n return [2 /*return*/, true];\n case 3:\n error_1 = _a.sent();\n // tslint:disable-next-line:no-console\n console.warn('It was not possible to play the video.', error_1);\n return [2 /*return*/, false];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a canvas and draws the current image frame from the media element on it.\n *\n * @param mediaElement HTML media element to extract an image frame from.\n */\n BrowserCodeReader.createCanvasFromMediaElement = function (mediaElement) {\n var canvas = BrowserCodeReader.createCaptureCanvas(mediaElement);\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Couldn\\'t find Canvas 2D Context.');\n }\n BrowserCodeReader.drawImageOnCanvas(ctx, mediaElement);\n return canvas;\n };\n /**\n * Creates a binaryBitmap based in some image source.\n *\n * @param mediaElement HTML element containing drawable image source.\n */\n BrowserCodeReader.createBinaryBitmapFromMediaElem = function (mediaElement) {\n var canvas = BrowserCodeReader.createCanvasFromMediaElement(mediaElement);\n return BrowserCodeReader.createBinaryBitmapFromCanvas(canvas);\n };\n BrowserCodeReader.destroyImageElement = function (imageElement) {\n imageElement.src = '';\n imageElement.removeAttribute('src');\n imageElement = undefined;\n };\n /**\n * Lists all the available video input devices.\n */\n BrowserCodeReader.listVideoInputDevices = function () {\n return __awaiter(this, void 0, void 0, function () {\n var devices, videoDevices, devices_1, devices_1_1, device, kind, deviceId, label, groupId, videoDevice;\n var e_2, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!hasNavigator()) {\n throw new Error('Can\\'t enumerate devices, navigator is not present.');\n }\n if (!canEnumerateDevices()) {\n throw new Error('Can\\'t enumerate devices, method not supported.');\n }\n return [4 /*yield*/, navigator.mediaDevices.enumerateDevices()];\n case 1:\n devices = _b.sent();\n videoDevices = [];\n try {\n for (devices_1 = __values(devices), devices_1_1 = devices_1.next(); !devices_1_1.done; devices_1_1 = devices_1.next()) {\n device = devices_1_1.value;\n kind = device.kind === 'video' ? 'videoinput' : device.kind;\n if (kind !== 'videoinput') {\n continue;\n }\n deviceId = device.deviceId || device.id;\n label = device.label || \"Video device \".concat(videoDevices.length + 1);\n groupId = device.groupId;\n videoDevice = { deviceId: deviceId, label: label, kind: kind, groupId: groupId };\n videoDevices.push(videoDevice);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (devices_1_1 && !devices_1_1.done && (_a = devices_1.return)) _a.call(devices_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return [2 /*return*/, videoDevices];\n }\n });\n });\n };\n /**\n * Let's you find a device using it's Id.\n */\n BrowserCodeReader.findDeviceById = function (deviceId) {\n return __awaiter(this, void 0, void 0, function () {\n var devices;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, BrowserCodeReader.listVideoInputDevices()];\n case 1:\n devices = _a.sent();\n if (!devices) {\n return [2 /*return*/];\n }\n return [2 /*return*/, devices.find(function (x) { return x.deviceId === deviceId; })];\n }\n });\n });\n };\n /**\n * Unbinds a HTML video src property.\n */\n BrowserCodeReader.cleanVideoSource = function (videoElement) {\n if (!videoElement) {\n return;\n }\n // forgets about that element 😢\n try {\n videoElement.srcObject = null;\n }\n catch (err) {\n videoElement.src = '';\n }\n if (videoElement) {\n videoElement.removeAttribute('src');\n }\n };\n /**\n * Stops all media streams that are created.\n */\n BrowserCodeReader.releaseAllStreams = function () {\n if (BrowserCodeReader.streamTracker.length !== 0) {\n // tslint:disable-next-line:no-console\n BrowserCodeReader.streamTracker.forEach(function (mediaStream) {\n mediaStream.getTracks().forEach(function (track) { return track.stop(); });\n });\n }\n BrowserCodeReader.streamTracker = [];\n };\n /**\n * Waits for a video to load and then hits play on it.\n * To accomplish that, it binds listeners and callbacks to the video element.\n *\n * @param element The video element.\n * @param callbackFn Callback invoked when the video is played.\n */\n BrowserCodeReader.playVideoOnLoadAsync = function (element, timeout) {\n return __awaiter(this, void 0, void 0, function () {\n var isPlaying;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, BrowserCodeReader.tryPlayVideo(element)];\n case 1:\n isPlaying = _a.sent();\n if (isPlaying) {\n return [2 /*return*/, true];\n }\n return [2 /*return*/, new Promise(function (resolve, reject) {\n // waits 3 seconds or rejects.\n var timeoutId = setTimeout(function () {\n if (BrowserCodeReader.isVideoPlaying(element)) {\n // if video is playing then we had success, just ignore\n return;\n }\n reject(false);\n element.removeEventListener('canplay', videoCanPlayListener);\n }, timeout);\n /**\n * Should contain the current registered listener for video loaded-metadata,\n * used to unregister that listener when needed.\n */\n var videoCanPlayListener = function () {\n BrowserCodeReader.tryPlayVideo(element).then(function (hasPlayed) {\n clearTimeout(timeoutId);\n element.removeEventListener('canplay', videoCanPlayListener);\n resolve(hasPlayed);\n });\n };\n // both should be unregistered after called\n element.addEventListener('canplay', videoCanPlayListener);\n })];\n }\n });\n });\n };\n /**\n * Sets the new stream and request a new decoding-with-delay.\n *\n * @param stream The stream to be shown in the video element.\n * @param decodeFn A callback for the decode method.\n */\n BrowserCodeReader.attachStreamToVideo = function (stream, preview, previewPlayTimeout) {\n if (previewPlayTimeout === void 0) { previewPlayTimeout = 5000; }\n return __awaiter(this, void 0, void 0, function () {\n var videoElement;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n videoElement = BrowserCodeReader.prepareVideoElement(preview);\n BrowserCodeReader.addVideoSource(videoElement, stream);\n return [4 /*yield*/, BrowserCodeReader.playVideoOnLoadAsync(videoElement, previewPlayTimeout)];\n case 1:\n _a.sent();\n return [2 /*return*/, videoElement];\n }\n });\n });\n };\n /**\n * Returns a Promise that resolves when the given image element loads.\n */\n BrowserCodeReader._waitImageLoad = function (element) {\n return new Promise(function (resolve, reject) {\n var timeout = 10000;\n // waits 10 seconds or rejects.\n var timeoutId = setTimeout(function () {\n if (BrowserCodeReader.isImageLoaded(element)) {\n // if video is playing then we had success, just ignore\n return;\n }\n // removes the listener\n element.removeEventListener('load', imageLoadedListener);\n // rejects the load\n reject();\n }, timeout);\n var imageLoadedListener = function () {\n clearTimeout(timeoutId);\n // removes the listener\n element.removeEventListener('load', imageLoadedListener);\n // resolves the load\n resolve();\n };\n element.addEventListener('load', imageLoadedListener);\n });\n };\n /**\n * Checks if the `callbackFn` is defined, otherwise throws.\n */\n BrowserCodeReader.checkCallbackFnOrThrow = function (callbackFn) {\n if (!callbackFn) {\n throw new ArgumentException('`callbackFn` is a required parameter, you cannot capture results without it.');\n }\n };\n /**\n * Standard method to dispose a media stream object.\n */\n BrowserCodeReader.disposeMediaStream = function (stream) {\n stream.getVideoTracks().forEach(function (x) { return x.stop(); });\n stream = undefined;\n };\n /**\n * Gets the BinaryBitmap for ya! (and decodes it)\n */\n BrowserCodeReader.prototype.decode = function (element) {\n // get binary bitmap for decode function\n var canvas = BrowserCodeReader.createCanvasFromMediaElement(element);\n return this.decodeFromCanvas(canvas);\n };\n /**\n * Call the encapsulated readers decode\n */\n BrowserCodeReader.prototype.decodeBitmap = function (binaryBitmap) {\n return this.reader.decode(binaryBitmap, this.hints);\n };\n /**\n * Decodes some barcode from a canvas!\n */\n BrowserCodeReader.prototype.decodeFromCanvas = function (canvas) {\n var binaryBitmap = BrowserCodeReader.createBinaryBitmapFromCanvas(canvas);\n return this.decodeBitmap(binaryBitmap);\n };\n /**\n * Decodes something from an image HTML element.\n */\n BrowserCodeReader.prototype.decodeFromImageElement = function (source) {\n return __awaiter(this, void 0, void 0, function () {\n var element;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!source) {\n throw new ArgumentException('An image element must be provided.');\n }\n element = BrowserCodeReader.prepareImageElement(source);\n return [4 /*yield*/, this._decodeOnLoadImage(element)];\n case 1: \n // onLoad will remove it's callback once done\n // we do not need to dispose or destroy the image\n // since it came from the user\n return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * Decodes an image from a URL.\n */\n BrowserCodeReader.prototype.decodeFromImageUrl = function (url) {\n return __awaiter(this, void 0, void 0, function () {\n var element;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!url) {\n throw new ArgumentException('An URL must be provided.');\n }\n element = BrowserCodeReader.prepareImageElement();\n // loads the image.\n element.src = url;\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 3, 4]);\n return [4 /*yield*/, this.decodeFromImageElement(element)];\n case 2: \n // it waits the task so we can destroy the created image after\n return [2 /*return*/, _a.sent()];\n case 3:\n // we created this element, so we destroy it\n BrowserCodeReader.destroyImageElement(element);\n return [7 /*endfinally*/];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Continuously tries to decode the barcode from a stream obtained from the given constraints\n * while showing the video in the specified video element.\n *\n * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n * @param {string|HTMLVideoElement} [previewElem] the video element in page where to show the video while\n * decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in\n * which case no video will be shown.\n */\n BrowserCodeReader.prototype.decodeFromConstraints = function (constraints, previewElem, callbackFn) {\n return __awaiter(this, void 0, void 0, function () {\n var stream, error_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n BrowserCodeReader.checkCallbackFnOrThrow(callbackFn);\n return [4 /*yield*/, this.getUserMedia(constraints)];\n case 1:\n stream = _a.sent();\n _a.label = 2;\n case 2:\n _a.trys.push([2, 4, , 5]);\n return [4 /*yield*/, this.decodeFromStream(stream, previewElem, callbackFn)];\n case 3: return [2 /*return*/, _a.sent()];\n case 4:\n error_2 = _a.sent();\n BrowserCodeReader.disposeMediaStream(stream);\n throw error_2;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * In one attempt, tries to decode the barcode from a stream obtained from the given constraints\n * while showing the video in the specified video element.\n *\n * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n * @param {string|HTMLVideoElement} [preview] the video element in page where to show the video\n * while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined,\n * in which case no video will be shown.\n */\n BrowserCodeReader.prototype.decodeFromStream = function (stream, preview, callbackFn) {\n return __awaiter(this, void 0, void 0, function () {\n var timeout, video, finalizeCallback, originalControls, videoTracks, controls, isTorchAvailable, torchTrack_1, switchTorch_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n BrowserCodeReader.checkCallbackFnOrThrow(callbackFn);\n timeout = this.options.tryPlayVideoTimeout;\n return [4 /*yield*/, BrowserCodeReader.attachStreamToVideo(stream, preview, timeout)];\n case 1:\n video = _a.sent();\n finalizeCallback = function () {\n // stops video tracks and releases the stream reference\n BrowserCodeReader.disposeMediaStream(stream);\n // this video was just a preview, so in order\n // to release the stream we gotta stop showing\n // it (the stream) in the video element\n BrowserCodeReader.cleanVideoSource(video);\n };\n originalControls = this.scan(video, callbackFn, finalizeCallback);\n videoTracks = stream.getVideoTracks();\n controls = __assign(__assign({}, originalControls), { stop: function () {\n originalControls.stop();\n }, streamVideoConstraintsApply: function (constraints, trackFilter) {\n return __awaiter(this, void 0, void 0, function () {\n var tracks, tracks_2, tracks_2_1, track, e_3_1;\n var e_3, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n tracks = trackFilter ? videoTracks.filter(trackFilter) : videoTracks;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 6, 7, 8]);\n tracks_2 = __values(tracks), tracks_2_1 = tracks_2.next();\n _b.label = 2;\n case 2:\n if (!!tracks_2_1.done) return [3 /*break*/, 5];\n track = tracks_2_1.value;\n return [4 /*yield*/, track.applyConstraints(constraints)];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4:\n tracks_2_1 = tracks_2.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_3_1 = _b.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (tracks_2_1 && !tracks_2_1.done && (_a = tracks_2.return)) _a.call(tracks_2);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n }, streamVideoConstraintsGet: function (trackFilter) {\n return videoTracks.find(trackFilter).getConstraints();\n }, streamVideoSettingsGet: function (trackFilter) {\n return videoTracks.find(trackFilter).getSettings();\n }, streamVideoCapabilitiesGet: function (trackFilter) {\n return videoTracks.find(trackFilter).getCapabilities();\n } });\n isTorchAvailable = BrowserCodeReader.mediaStreamIsTorchCompatible(stream);\n if (isTorchAvailable) {\n torchTrack_1 = videoTracks === null || videoTracks === void 0 ? void 0 : videoTracks.find(function (t) { return BrowserCodeReader.mediaStreamIsTorchCompatibleTrack(t); });\n switchTorch_1 = function (onOff) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, BrowserCodeReader.mediaStreamSetTorch(torchTrack_1, onOff)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n }); };\n controls.switchTorch = switchTorch_1;\n controls.stop = function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n originalControls.stop();\n return [4 /*yield*/, switchTorch_1(false)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n }); };\n }\n return [2 /*return*/, controls];\n }\n });\n });\n };\n /**\n * Continuously tries to decode the barcode from the device specified by device while showing\n * the video in the specified video element.\n *\n * @param {string|null} [deviceId] the id of one of the devices obtained after calling\n * getVideoInputDevices. Can be undefined, in this case it will decode from one of the\n * available devices, preferring the main camera (environment facing) if available.\n * @param {string|HTMLVideoElement|null} [video] the video element in page where to show the video\n * while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined,\n * in which case no video will be shown.\n */\n BrowserCodeReader.prototype.decodeFromVideoDevice = function (deviceId, previewElem, callbackFn) {\n return __awaiter(this, void 0, void 0, function () {\n var videoConstraints, constraints;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n BrowserCodeReader.checkCallbackFnOrThrow(callbackFn);\n if (!deviceId) {\n videoConstraints = { facingMode: 'environment' };\n }\n else {\n videoConstraints = { deviceId: { exact: deviceId } };\n }\n constraints = { video: videoConstraints };\n return [4 /*yield*/, this.decodeFromConstraints(constraints, previewElem, callbackFn)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * Decodes something from an image HTML element.\n */\n BrowserCodeReader.prototype.decodeFromVideoElement = function (source, callbackFn) {\n return __awaiter(this, void 0, void 0, function () {\n var element, timeout;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n BrowserCodeReader.checkCallbackFnOrThrow(callbackFn);\n if (!source) {\n throw new ArgumentException('A video element must be provided.');\n }\n element = BrowserCodeReader.prepareVideoElement(source);\n timeout = this.options.tryPlayVideoTimeout;\n // plays the video\n return [4 /*yield*/, BrowserCodeReader.playVideoOnLoadAsync(element, timeout)];\n case 1:\n // plays the video\n _a.sent();\n // starts decoding after played the video\n return [2 /*return*/, this.scan(element, callbackFn)];\n }\n });\n });\n };\n /**\n * Decodes a video from a URL until it ends.\n */\n BrowserCodeReader.prototype.decodeFromVideoUrl = function (url, callbackFn) {\n return __awaiter(this, void 0, void 0, function () {\n var element, finalizeCallback, timeout, controls;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n BrowserCodeReader.checkCallbackFnOrThrow(callbackFn);\n if (!url) {\n throw new ArgumentException('An URL must be provided.');\n }\n element = BrowserCodeReader.prepareVideoElement();\n // starts loading the video\n element.src = url;\n finalizeCallback = function () {\n // dispose created video element\n BrowserCodeReader.cleanVideoSource(element);\n };\n timeout = this.options.tryPlayVideoTimeout;\n // plays the video\n return [4 /*yield*/, BrowserCodeReader.playVideoOnLoadAsync(element, timeout)];\n case 1:\n // plays the video\n _a.sent();\n controls = this.scan(element, callbackFn, finalizeCallback);\n return [2 /*return*/, controls];\n }\n });\n });\n };\n /**\n * In one attempt, tries to decode the barcode from a stream obtained from the given\n * constraints while showing the video in the specified video element.\n *\n * @param constraints the media stream constraints to get s valid media stream to decode from\n * @param videoSource the video element in page where to show the video while decoding.\n * Can be either an element id or directly an HTMLVideoElement. Can be undefined,\n * in which case no video will be shown.\n * The decoding result.\n */\n BrowserCodeReader.prototype.decodeOnceFromConstraints = function (constraints, videoSource) {\n return __awaiter(this, void 0, void 0, function () {\n var stream;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getUserMedia(constraints)];\n case 1:\n stream = _a.sent();\n return [4 /*yield*/, this.decodeOnceFromStream(stream, videoSource)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * In one attempt, tries to decode the barcode from a stream obtained from the given\n * constraints while showing the video in the specified video element.\n *\n * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n * @param {string|HTMLVideoElement} [video] the video element in page where to show the video while decoding.\n * Can be either an element id or directly an HTMLVideoElement. Can be undefined,\n * in which case no video will be shown.\n */\n BrowserCodeReader.prototype.decodeOnceFromStream = function (stream, preview) {\n return __awaiter(this, void 0, void 0, function () {\n var receivedPreview, video, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n receivedPreview = Boolean(preview);\n return [4 /*yield*/, BrowserCodeReader.attachStreamToVideo(stream, preview)];\n case 1:\n video = _a.sent();\n _a.label = 2;\n case 2:\n _a.trys.push([2, , 4, 5]);\n return [4 /*yield*/, this.scanOneResult(video)];\n case 3:\n result = _a.sent();\n return [2 /*return*/, result];\n case 4:\n if (!receivedPreview) {\n BrowserCodeReader.cleanVideoSource(video);\n }\n return [7 /*endfinally*/];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * In one attempt, tries to decode the barcode from the device specified by deviceId\n * while showing the video in the specified video element.\n *\n * @param deviceId the id of one of the devices obtained after calling getVideoInputDevices.\n * Can be undefined, in this case it will decode from one of the available devices,\n * preferring the main camera (environment facing) if available.\n * @param videoSource the video element in page where to show the video while decoding.\n * Can be either an element id or directly an HTMLVideoElement. Can be undefined,\n * in which case no video will be shown.\n */\n BrowserCodeReader.prototype.decodeOnceFromVideoDevice = function (deviceId, videoSource) {\n return __awaiter(this, void 0, void 0, function () {\n var videoConstraints, constraints;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!deviceId) {\n videoConstraints = { facingMode: 'environment' };\n }\n else {\n videoConstraints = { deviceId: { exact: deviceId } };\n }\n constraints = { video: videoConstraints };\n return [4 /*yield*/, this.decodeOnceFromConstraints(constraints, videoSource)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * Decodes something from an image HTML element.\n */\n BrowserCodeReader.prototype.decodeOnceFromVideoElement = function (source) {\n return __awaiter(this, void 0, void 0, function () {\n var element, timeout;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!source) {\n throw new ArgumentException('A video element must be provided.');\n }\n element = BrowserCodeReader.prepareVideoElement(source);\n timeout = this.options.tryPlayVideoTimeout;\n // plays the video\n return [4 /*yield*/, BrowserCodeReader.playVideoOnLoadAsync(element, timeout)];\n case 1:\n // plays the video\n _a.sent();\n return [4 /*yield*/, this.scanOneResult(element)];\n case 2: \n // starts decoding after played the video\n return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * Decodes a video from a URL.\n */\n BrowserCodeReader.prototype.decodeOnceFromVideoUrl = function (url) {\n return __awaiter(this, void 0, void 0, function () {\n var element, task;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!url) {\n throw new ArgumentException('An URL must be provided.');\n }\n element = BrowserCodeReader.prepareVideoElement();\n // starts loading the video\n element.src = url;\n task = this.decodeOnceFromVideoElement(element);\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 3, 4]);\n return [4 /*yield*/, task];\n case 2: \n // it waits the task so we can destroy the created image after\n return [2 /*return*/, _a.sent()];\n case 3:\n // we created this element, so we destroy it\n BrowserCodeReader.cleanVideoSource(element);\n return [7 /*endfinally*/];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Tries to decode from the video input until it finds some value.\n */\n BrowserCodeReader.prototype.scanOneResult = function (element, retryIfNotFound, retryIfChecksumError, retryIfFormatError) {\n var _this = this;\n if (retryIfNotFound === void 0) { retryIfNotFound = true; }\n if (retryIfChecksumError === void 0) { retryIfChecksumError = true; }\n if (retryIfFormatError === void 0) { retryIfFormatError = true; }\n return new Promise(function (resolve, reject) {\n // reuses the scan API, but returns at the first successful result\n _this.scan(element, function (result, error, controls) {\n if (result) {\n // good result, returning\n resolve(result);\n controls.stop();\n return;\n }\n if (error) {\n // checks if it should retry\n if (error instanceof NotFoundException && retryIfNotFound) {\n return;\n }\n if (error instanceof ChecksumException && retryIfChecksumError) {\n return;\n }\n if (error instanceof FormatException && retryIfFormatError) {\n return;\n }\n // not re-trying\n controls.stop(); // stops scan loop\n reject(error); // returns the error\n }\n });\n });\n };\n /**\n * Continuously decodes from video input.\n *\n * @param element HTML element to scan/decode from. It will not be disposed or destroyed.\n * @param callbackFn Called after every scan attempt, being it successful or errored.\n * @param finalizeCallback Called after scan process reaches the end or stop is called.\n */\n BrowserCodeReader.prototype.scan = function (element, callbackFn, finalizeCallback) {\n var _this = this;\n BrowserCodeReader.checkCallbackFnOrThrow(callbackFn);\n /**\n * The HTML canvas element, used to draw the video or image's frame for decoding.\n */\n var captureCanvas = BrowserCodeReader.createCaptureCanvas(element);\n /**\n * The HTML canvas element context.\n */\n var captureCanvasContext;\n try {\n captureCanvasContext = captureCanvas.getContext('2d', { willReadFrequently: true });\n }\n catch (e) {\n captureCanvasContext = captureCanvas.getContext('2d');\n }\n // cannot proceed w/o this\n if (!captureCanvasContext) {\n throw new Error('Couldn\\'t create canvas for visual element scan.');\n }\n var disposeCanvas = function () {\n captureCanvasContext = undefined;\n captureCanvas = undefined;\n };\n var stopScan = false;\n var lastTimeoutId;\n // can be called to break the scan loop\n var stop = function () {\n stopScan = true;\n clearTimeout(lastTimeoutId);\n disposeCanvas();\n if (finalizeCallback) {\n finalizeCallback();\n }\n };\n // created for extensibility\n var controls = { stop: stop };\n // this async loop allows infinite (or almost? maybe) scans\n var loop = function () {\n if (stopScan) {\n // no need to clear timeouts as none was create yet in this scope.\n return;\n }\n try {\n BrowserCodeReader.drawImageOnCanvas(captureCanvasContext, element);\n var result = _this.decodeFromCanvas(captureCanvas);\n callbackFn(result, undefined, controls);\n lastTimeoutId = setTimeout(loop, _this.options.delayBetweenScanSuccess);\n }\n catch (error) {\n callbackFn(undefined, error, controls);\n var isChecksumError = error instanceof ChecksumException;\n var isFormatError = error instanceof FormatException;\n var isNotFound = error instanceof NotFoundException;\n if (isChecksumError || isFormatError || isNotFound) {\n // trying again\n lastTimeoutId = setTimeout(loop, _this.options.delayBetweenScanAttempts);\n return;\n }\n // not trying again\n disposeCanvas();\n if (finalizeCallback) {\n finalizeCallback(error);\n }\n }\n };\n // starts the async loop\n loop();\n return controls;\n };\n /**\n * Waits for the image to load and then tries to decode it.\n */\n BrowserCodeReader.prototype._decodeOnLoadImage = function (element) {\n return __awaiter(this, void 0, void 0, function () {\n var isImageLoaded;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isImageLoaded = BrowserCodeReader.isImageLoaded(element);\n if (!!isImageLoaded) return [3 /*break*/, 2];\n return [4 /*yield*/, BrowserCodeReader._waitImageLoad(element)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/, this.decode(element)];\n }\n });\n });\n };\n /**\n * Get MediaStream from browser to be used.\n * @param constraints constraints the media stream constraints to get s valid media stream to decode from.\n * @private For private use.\n */\n BrowserCodeReader.prototype.getUserMedia = function (constraints) {\n return __awaiter(this, void 0, void 0, function () {\n var stream;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, navigator.mediaDevices.getUserMedia(constraints)];\n case 1:\n stream = _a.sent();\n BrowserCodeReader.streamTracker.push(stream);\n return [2 /*return*/, stream];\n }\n });\n });\n };\n /**\n * Keeps track to created media streams.\n * @private there is no need this array to be accessible from outside.\n */\n BrowserCodeReader.streamTracker = [];\n return BrowserCodeReader;\n}());\nexport { BrowserCodeReader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { AztecCodeReader } from '@zxing/library';\nimport { BrowserCodeReader } from './BrowserCodeReader';\n/**\n * Aztec Code reader to use from browser.\n *\n * @class BrowserAztecCodeReader\n * @extends {BrowserCodeReader}\n */\nvar BrowserAztecCodeReader = /** @class */ (function (_super) {\n __extends(BrowserAztecCodeReader, _super);\n /**\n * Creates an instance of BrowserAztecCodeReader.\n */\n function BrowserAztecCodeReader(hints, options) {\n return _super.call(this, new AztecCodeReader(), hints, options) || this;\n }\n return BrowserAztecCodeReader;\n}(BrowserCodeReader));\nexport { BrowserAztecCodeReader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { MultiFormatOneDReader } from '@zxing/library';\nimport { BrowserCodeReader } from './BrowserCodeReader';\n/**\n * Reader to be used for any One Dimension type barcode.\n */\nvar BrowserMultiFormatOneDReader = /** @class */ (function (_super) {\n __extends(BrowserMultiFormatOneDReader, _super);\n /**\n * Creates an instance of BrowserBarcodeReader.\n * @param {Map} hints?\n * @param options\n */\n function BrowserMultiFormatOneDReader(hints, options) {\n return _super.call(this, new MultiFormatOneDReader(hints), hints, options) || this;\n }\n return BrowserMultiFormatOneDReader;\n}(BrowserCodeReader));\nexport { BrowserMultiFormatOneDReader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DataMatrixReader } from '@zxing/library';\nimport { BrowserCodeReader } from './BrowserCodeReader';\n/**\n * QR Code reader to use from browser.\n */\nvar BrowserDatamatrixCodeReader = /** @class */ (function (_super) {\n __extends(BrowserDatamatrixCodeReader, _super);\n /**\n * Creates an instance of BrowserQRCodeReader.\n */\n function BrowserDatamatrixCodeReader(hints, options) {\n return _super.call(this, new DataMatrixReader(), hints, options) || this;\n }\n return BrowserDatamatrixCodeReader;\n}(BrowserCodeReader));\nexport { BrowserDatamatrixCodeReader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DecodeHintType, MultiFormatReader, } from '@zxing/library';\nimport { BrowserCodeReader } from './BrowserCodeReader';\nvar BrowserMultiFormatReader = /** @class */ (function (_super) {\n __extends(BrowserMultiFormatReader, _super);\n function BrowserMultiFormatReader(hints, options) {\n var _this = this;\n var reader = new MultiFormatReader();\n reader.setHints(hints);\n _this = _super.call(this, reader, hints, options) || this;\n _this.reader = reader;\n return _this;\n }\n Object.defineProperty(BrowserMultiFormatReader.prototype, \"possibleFormats\", {\n set: function (formats) {\n this.hints.set(DecodeHintType.POSSIBLE_FORMATS, formats);\n this.reader.setHints(this.hints);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Overwrite decodeBitmap to call decodeWithState, which will pay\n * attention to the hints set in the constructor function\n */\n BrowserMultiFormatReader.prototype.decodeBitmap = function (binaryBitmap) {\n return this.reader.decodeWithState(binaryBitmap);\n };\n /**\n * Allows to change hints in runtime.\n */\n BrowserMultiFormatReader.prototype.setHints = function (hints) {\n this.hints = hints;\n this.reader.setHints(this.hints);\n };\n return BrowserMultiFormatReader;\n}(BrowserCodeReader));\nexport { BrowserMultiFormatReader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PDF417Reader } from '@zxing/library';\nimport { BrowserCodeReader } from './BrowserCodeReader';\n/**\n * QR Code reader to use from browser.\n */\nvar BrowserPDF417Reader = /** @class */ (function (_super) {\n __extends(BrowserPDF417Reader, _super);\n /**\n * Creates an instance of BrowserPDF417Reader.\n */\n function BrowserPDF417Reader(hints, options) {\n return _super.call(this, new PDF417Reader(), hints, options) || this;\n }\n return BrowserPDF417Reader;\n}(BrowserCodeReader));\nexport { BrowserPDF417Reader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { QRCodeReader } from '@zxing/library';\nimport { BrowserCodeReader } from './BrowserCodeReader';\n/**\n * QR Code reader to use from browser.\n */\nvar BrowserQRCodeReader = /** @class */ (function (_super) {\n __extends(BrowserQRCodeReader, _super);\n /**\n * Creates an instance of BrowserQRCodeReader.\n */\n function BrowserQRCodeReader(hints, options) {\n return _super.call(this, new QRCodeReader(), hints, options) || this;\n }\n return BrowserQRCodeReader;\n}(BrowserCodeReader));\nexport { BrowserQRCodeReader };\n","import { EncodeHintType, IllegalArgumentException, IllegalStateException, QRCodeDecoderErrorCorrectionLevel, QRCodeEncoder, } from '@zxing/library';\nvar svgNs = 'http://www.w3.org/2000/svg';\n/**/\nvar BrowserCodeSvgWriter = /** @class */ (function () {\n /**\n * Constructs. 😉\n */\n function BrowserCodeSvgWriter(containerElement) {\n if (typeof containerElement === 'string') {\n var container = document.getElementById(containerElement);\n if (!container) {\n throw new Error(\"Could not find a Container element with '\".concat(containerElement, \"'.\"));\n }\n this.containerElement = container;\n }\n else {\n this.containerElement = containerElement;\n }\n }\n /**\n * Writes the QR code to a SVG and renders it in the container.\n */\n BrowserCodeSvgWriter.prototype.write = function (contents, width, height, hints) {\n if (contents.length === 0) {\n throw new IllegalArgumentException('Found empty contents');\n }\n if (width < 0 || height < 0) {\n throw new IllegalArgumentException('Requested dimensions are too small: ' + width + 'x' + height);\n }\n var quietZone = hints && hints.get(EncodeHintType.MARGIN) !== undefined\n ? Number.parseInt(hints.get(EncodeHintType.MARGIN).toString(), 10)\n : BrowserCodeSvgWriter.QUIET_ZONE_SIZE;\n var code = this.encode(hints, contents);\n return this.renderResult(code, width, height, quietZone);\n };\n /**\n * Creates a SVG element.\n */\n BrowserCodeSvgWriter.prototype.createSVGElement = function (w, h) {\n var el = document.createElementNS(BrowserCodeSvgWriter.SVG_NS, 'svg');\n el.setAttributeNS(svgNs, 'width', h.toString());\n el.setAttributeNS(svgNs, 'height', w.toString());\n return el;\n };\n /**\n * Creates a SVG rect.\n */\n BrowserCodeSvgWriter.prototype.createSvgPathPlaceholderElement = function (w, h) {\n var el = document.createElementNS(BrowserCodeSvgWriter.SVG_NS, 'path');\n el.setAttributeNS(svgNs, 'd', \"M0 0h\".concat(w, \"v\").concat(h, \"H0z\"));\n el.setAttributeNS(svgNs, 'fill', 'none');\n return el;\n };\n /**\n * Creates a SVG rect.\n */\n BrowserCodeSvgWriter.prototype.createSvgRectElement = function (x, y, w, h) {\n var el = document.createElementNS(BrowserCodeSvgWriter.SVG_NS, 'rect');\n el.setAttributeNS(svgNs, 'x', x.toString());\n el.setAttributeNS(svgNs, 'y', y.toString());\n el.setAttributeNS(svgNs, 'height', w.toString());\n el.setAttributeNS(svgNs, 'width', h.toString());\n el.setAttributeNS(svgNs, 'fill', '#000000');\n return el;\n };\n /**\n * Encodes the content to a Barcode type.\n */\n BrowserCodeSvgWriter.prototype.encode = function (hints, contents) {\n var errorCorrectionLevel = QRCodeDecoderErrorCorrectionLevel.L;\n if (hints && hints.get(EncodeHintType.ERROR_CORRECTION) !== undefined) {\n var correctionStr = hints.get(EncodeHintType.ERROR_CORRECTION).toString();\n errorCorrectionLevel = QRCodeDecoderErrorCorrectionLevel.fromString(correctionStr);\n }\n var code = QRCodeEncoder.encode(contents, errorCorrectionLevel, hints);\n return code;\n };\n /**\n * Renders the SVG in the container.\n *\n * @note the input matrix uses 0 == white, 1 == black. The output matrix\n * uses 0 == black, 255 == white (i.e. an 8 bit greyscale bitmap).\n */\n BrowserCodeSvgWriter.prototype.renderResult = function (code, width /*int*/, height /*int*/, quietZone /*int*/) {\n // if (this.format && format != this.format) {\n // throw new IllegalArgumentException(\"Can only encode QR_CODE, but got \" + format)\n // }\n var input = code.getMatrix();\n if (input === null) {\n throw new IllegalStateException();\n }\n var inputWidth = input.getWidth();\n var inputHeight = input.getHeight();\n var qrWidth = inputWidth + (quietZone * 2);\n var qrHeight = inputHeight + (quietZone * 2);\n var outputWidth = Math.max(width, qrWidth);\n var outputHeight = Math.max(height, qrHeight);\n var multiple = Math.min(Math.floor(outputWidth / qrWidth), Math.floor(outputHeight / qrHeight));\n // Padding includes both the quiet zone and the extra white pixels to accommodate the requested\n // dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone.\n // If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will\n // handle all the padding from 100x100 (the actual QR) up to 200x160.\n var leftPadding = Math.floor((outputWidth - (inputWidth * multiple)) / 2);\n var topPadding = Math.floor((outputHeight - (inputHeight * multiple)) / 2);\n var svgElement = this.createSVGElement(outputWidth, outputHeight);\n var placeholder = this.createSvgPathPlaceholderElement(width, height);\n svgElement.appendChild(placeholder);\n this.containerElement.appendChild(svgElement);\n // 2D loop\n for (var inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n // Write the contents of this row of the barcode\n for (var inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n if (input.get(inputX, inputY) === 1) {\n var svgRectElement = this.createSvgRectElement(outputX, outputY, multiple, multiple);\n svgElement.appendChild(svgRectElement);\n }\n }\n }\n return svgElement;\n };\n /**\n * Default quiet zone in pixels.\n */\n BrowserCodeSvgWriter.QUIET_ZONE_SIZE = 4;\n /**\n * SVG markup NameSpace\n */\n BrowserCodeSvgWriter.SVG_NS = 'http://www.w3.org/2000/svg';\n return BrowserCodeSvgWriter;\n}());\nexport { BrowserCodeSvgWriter };\n","import { EncodeHintType, IllegalArgumentException, IllegalStateException, QRCodeDecoderErrorCorrectionLevel, QRCodeEncoder, } from '@zxing/library';\nvar svgNs = 'http://www.w3.org/2000/svg';\n/**/\nvar BrowserQRCodeSvgWriter = /** @class */ (function () {\n function BrowserQRCodeSvgWriter() {\n }\n /**\n * Writes and renders a QRCode SVG element.\n *\n * @param contents\n * @param width\n * @param height\n * @param hints\n */\n BrowserQRCodeSvgWriter.prototype.write = function (contents, width, height, hints) {\n if (contents.length === 0) {\n throw new IllegalArgumentException('Found empty contents');\n }\n // if (format != BarcodeFormat.QR_CODE) {\n // throw new IllegalArgumentException(\"Can only encode QR_CODE, but got \" + format)\n // }\n if (width < 0 || height < 0) {\n throw new IllegalArgumentException('Requested dimensions are too small: ' + width + 'x' + height);\n }\n var errorCorrectionLevel = QRCodeDecoderErrorCorrectionLevel.L;\n var quietZone = BrowserQRCodeSvgWriter.QUIET_ZONE_SIZE;\n if (hints) {\n if (undefined !== hints.get(EncodeHintType.ERROR_CORRECTION)) {\n var correctionStr = hints.get(EncodeHintType.ERROR_CORRECTION).toString();\n errorCorrectionLevel = QRCodeDecoderErrorCorrectionLevel.fromString(correctionStr);\n }\n if (undefined !== hints.get(EncodeHintType.MARGIN)) {\n quietZone = Number.parseInt(hints.get(EncodeHintType.MARGIN).toString(), 10);\n }\n }\n var code = QRCodeEncoder.encode(contents, errorCorrectionLevel, hints);\n return this.renderResult(code, width, height, quietZone);\n };\n /**\n * Renders the result and then appends it to the DOM.\n */\n BrowserQRCodeSvgWriter.prototype.writeToDom = function (containerElement, contents, width, height, hints) {\n if (typeof containerElement === 'string') {\n var targetEl = document.querySelector(containerElement);\n if (!targetEl) {\n throw new Error('Could no find the target HTML element.');\n }\n containerElement = targetEl;\n }\n var svgElement = this.write(contents, width, height, hints);\n if (containerElement instanceof HTMLElement) {\n containerElement.appendChild(svgElement);\n }\n };\n /**\n * Note that the input matrix uses 0 == white, 1 == black.\n * The output matrix uses 0 == black, 255 == white (i.e. an 8 bit greyscale bitmap).\n */\n BrowserQRCodeSvgWriter.prototype.renderResult = function (code, width /*int*/, height /*int*/, quietZone /*int*/) {\n var input = code.getMatrix();\n if (input === null) {\n throw new IllegalStateException();\n }\n var inputWidth = input.getWidth();\n var inputHeight = input.getHeight();\n var qrWidth = inputWidth + (quietZone * 2);\n var qrHeight = inputHeight + (quietZone * 2);\n var outputWidth = Math.max(width, qrWidth);\n var outputHeight = Math.max(height, qrHeight);\n var multiple = Math.min(Math.floor(outputWidth / qrWidth), Math.floor(outputHeight / qrHeight));\n // Padding includes both the quiet zone and the extra white pixels to accommodate the requested\n // dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone.\n // If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will\n // handle all the padding from 100x100 (the actual QR) up to 200x160.\n var leftPadding = Math.floor((outputWidth - (inputWidth * multiple)) / 2);\n var topPadding = Math.floor((outputHeight - (inputHeight * multiple)) / 2);\n var svgElement = this.createSVGElement(outputWidth, outputHeight);\n for (var inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n // Write the contents of this row of the barcode\n for (var inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n if (input.get(inputX, inputY) === 1) {\n var svgRectElement = this.createSvgRectElement(outputX, outputY, multiple, multiple);\n svgElement.appendChild(svgRectElement);\n }\n }\n }\n return svgElement;\n };\n /**\n * Creates a SVG element.\n *\n * @param w SVG's width attribute\n * @param h SVG's height attribute\n */\n BrowserQRCodeSvgWriter.prototype.createSVGElement = function (w, h) {\n var svgElement = document.createElementNS(svgNs, 'svg');\n var width = w.toString();\n var height = h.toString();\n svgElement.setAttribute('height', height);\n svgElement.setAttribute('width', width);\n svgElement.setAttribute('viewBox', \"0 0 \" + width + \" \" + height);\n return svgElement;\n };\n /**\n * Creates a SVG rect element.\n *\n * @param x Element's x coordinate\n * @param y Element's y coordinate\n * @param w Element's width attribute\n * @param h Element's height attribute\n */\n BrowserQRCodeSvgWriter.prototype.createSvgRectElement = function (x, y, w, h) {\n var rect = document.createElementNS(svgNs, 'rect');\n rect.setAttribute('x', x.toString());\n rect.setAttribute('y', y.toString());\n rect.setAttribute('height', w.toString());\n rect.setAttribute('width', h.toString());\n rect.setAttribute('fill', '#000000');\n return rect;\n };\n BrowserQRCodeSvgWriter.QUIET_ZONE_SIZE = 4;\n return BrowserQRCodeSvgWriter;\n}());\nexport { BrowserQRCodeSvgWriter };\n","import { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { EventEmitter, Component, ChangeDetectionStrategy, ViewChild, Input, Output, NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserMultiFormatReader, BrowserCodeReader } from '@zxing/browser';\nimport { NotFoundException, ChecksumException, FormatException, DecodeHintType, BarcodeFormat } from '@zxing/library';\nimport { BehaviorSubject } from 'rxjs';\n\n/**\n * Based on zxing-typescript BrowserCodeReader\n */\nclass BrowserMultiFormatContinuousReader extends BrowserMultiFormatReader {\n /**\n * Returns the code reader scanner controls.\n */\n getScannerControls() {\n if (!this.scannerControls) {\n throw new Error('No scanning is running at the time.');\n }\n return this.scannerControls;\n }\n /**\n * Starts the decoding from the current or a new video element.\n *\n * @param deviceId The device's to be used Id\n * @param previewEl A new video element\n */\n async scanFromDeviceObservable(deviceId, previewEl) {\n const scan$ = new BehaviorSubject({});\n let ctrls;\n try {\n ctrls = await this.decodeFromVideoDevice(deviceId, previewEl, (result, error) => {\n if (!error) {\n scan$.next({ result });\n return;\n }\n const errorName = error.name;\n // stream cannot stop on fails.\n if (\n // scan Failure - found nothing, no error\n errorName === NotFoundException.name ||\n // scan Error - found the QR but got error on decoding\n errorName === ChecksumException.name ||\n errorName === FormatException.name ||\n error.message.includes('No MultiFormat Readers were able to detect the code.')) {\n scan$.next({ error });\n return;\n }\n // probably fatal error\n scan$.error(error);\n this.scannerControls.stop();\n this.scannerControls = undefined;\n return;\n });\n this.scannerControls = {\n ...ctrls,\n stop() {\n ctrls.stop();\n scan$.complete();\n },\n };\n }\n catch (e) {\n scan$.error(e);\n this.scannerControls?.stop();\n this.scannerControls = undefined;\n }\n return scan$.asObservable();\n }\n}\n\nclass ZXingScannerComponent {\n /**\n * Exposes the current code reader, so the user can use it's APIs.\n */\n get codeReader() {\n return this._codeReader;\n }\n /**\n * User device input\n */\n set device(device) {\n if (!this._ready) {\n this._devicePreStart = device;\n // let's ignore silently, users don't like logs\n return;\n }\n if (this.isAutostarting) {\n // do not allow setting devices during auto-start, since it will set one and emit it.\n console.warn('Avoid setting a device during auto-start.');\n return;\n }\n if (this.isCurrentDevice(device)) {\n console.warn('Setting the same device is not allowed.');\n return;\n }\n if (!this.hasPermission) {\n console.warn('Permissions not set yet, waiting for them to be set to apply device change.');\n // this.permissionResponse\n // .pipe(\n // take(1),\n // tap(() => console.log(`Permissions set, applying device change${device ? ` (${device.deviceId})` : ''}.`))\n // )\n // .subscribe(() => this.device = device);\n return;\n }\n this.setDevice(device);\n }\n /**\n * User device accessor.\n */\n get device() {\n return this._device;\n }\n /**\n * Returns all the registered formats.\n */\n get formats() {\n return this.hints.get(DecodeHintType.POSSIBLE_FORMATS);\n }\n /**\n * Registers formats the scanner should support.\n *\n * @param input BarcodeFormat or case-insensitive string array.\n */\n set formats(input) {\n if (typeof input === 'string') {\n throw new Error('Invalid formats, make sure the [formats] input is a binding.');\n }\n // formats may be set from html template as BarcodeFormat or string array\n const formats = input.map(f => this.getBarcodeFormatOrFail(f));\n const hints = this.hints;\n // updates the hints\n hints.set(DecodeHintType.POSSIBLE_FORMATS, formats);\n // handles updating the codeReader\n this.hints = hints;\n }\n /**\n * Returns all the registered hints.\n */\n get hints() {\n return this._hints;\n }\n /**\n * Does what it takes to set the hints.\n */\n set hints(hints) {\n this._hints = hints;\n // new instance with new hints.\n this.codeReader?.setHints(this._hints);\n }\n /**\n * Sets the desired constraints in all video tracks.\n * @experimental\n */\n set videoConstraints(constraints) {\n // new instance with new hints.\n const controls = this.codeReader?.getScannerControls();\n if (!controls) {\n // fails silently\n return;\n }\n controls?.streamVideoConstraintsApply(constraints);\n }\n /**\n *\n */\n set isAutostarting(state) {\n this._isAutostarting = state;\n this.autostarting.next(state);\n }\n /**\n *\n */\n get isAutostarting() {\n return this._isAutostarting;\n }\n /**\n * Can turn on/off the device flashlight.\n *\n * @experimental Torch/Flash APIs are not stable in all browsers, it may be buggy!\n */\n set torch(onOff) {\n try {\n const controls = this.getCodeReader().getScannerControls();\n controls.switchTorch(onOff);\n }\n catch (error) {\n // ignore error\n }\n }\n /**\n * Starts and Stops the scanning.\n */\n set enable(enabled) {\n if (this._enabled === Boolean(enabled)) {\n return;\n }\n this._enabled = Boolean(enabled);\n if (!this._enabled) {\n this.reset();\n BrowserMultiFormatContinuousReader.releaseAllStreams();\n }\n else {\n if (this.device) {\n this.scanFromDevice(this.device.deviceId);\n }\n else {\n this.init();\n }\n }\n }\n /**\n * Tells if the scanner is enabled or not.\n */\n get enabled() {\n return this._enabled;\n }\n /**\n * If is `tryHarder` enabled.\n */\n get tryHarder() {\n return this.hints.get(DecodeHintType.TRY_HARDER);\n }\n /**\n * Enable/disable tryHarder hint.\n */\n set tryHarder(enable) {\n const hints = this.hints;\n if (enable) {\n hints.set(DecodeHintType.TRY_HARDER, true);\n }\n else {\n hints.delete(DecodeHintType.TRY_HARDER);\n }\n this.hints = hints;\n }\n /**\n * Constructor to build the object and do some DI.\n */\n constructor() {\n /**\n * Delay between attempts to decode (default is 500ms)\n */\n this.timeBetweenScans = 500;\n /**\n * Delay between successful decode (default is 500ms)\n */\n this.delayBetweenScanSuccess = 500;\n /**\n * How the preview element should be fit inside the :host container.\n */\n this.previewFitMode = 'cover';\n /**\n * Url of the HTML video poster\n */\n this.poster = '';\n this._ready = false;\n // instance based emitters\n this.autostarted = new EventEmitter();\n this.autostarting = new EventEmitter();\n this.torchCompatible = new EventEmitter(false);\n this.scanSuccess = new EventEmitter();\n this.scanFailure = new EventEmitter();\n this.scanError = new EventEmitter();\n this.scanComplete = new EventEmitter();\n this.camerasFound = new EventEmitter();\n this.camerasNotFound = new EventEmitter();\n this.permissionResponse = new EventEmitter(true);\n this.hasDevices = new EventEmitter();\n this.deviceChange = new EventEmitter();\n this._enabled = true;\n this._hints = new Map();\n this.autofocusEnabled = true;\n this.autostart = true;\n this.formats = [BarcodeFormat.QR_CODE];\n // computed data\n this.hasNavigator = typeof navigator !== 'undefined';\n this.isMediaDevicesSupported = this.hasNavigator && !!navigator.mediaDevices;\n }\n /**\n * Gets and registers all cameras.\n */\n async askForPermission() {\n if (!this.hasNavigator) {\n console.error('@zxing/ngx-scanner', 'Can\\'t ask permission, navigator is not present.');\n this.setPermission(null);\n return this.hasPermission;\n }\n if (!this.isMediaDevicesSupported) {\n console.error('@zxing/ngx-scanner', 'Can\\'t get user media, this is not supported.');\n this.setPermission(null);\n return this.hasPermission;\n }\n let stream;\n let permission;\n try {\n // Will try to ask for permission\n stream = await this.getAnyVideoDevice();\n permission = !!stream;\n }\n catch (err) {\n return this.handlePermissionException(err);\n }\n finally {\n this.terminateStream(stream);\n }\n this.setPermission(permission);\n // Returns the permission\n return permission;\n }\n /**\n *\n */\n getAnyVideoDevice() {\n return navigator.mediaDevices.getUserMedia({ video: true });\n }\n /**\n * Terminates a stream and it's tracks.\n */\n terminateStream(stream) {\n if (stream) {\n stream.getTracks().forEach(t => t.stop());\n }\n stream = undefined;\n }\n async init() {\n if (!this.autostart) {\n console.warn('Feature \\'autostart\\' disabled. Permissions and devices recovery has to be run manually.');\n // does the necessary configuration without autostarting\n this.initAutostartOff();\n this._ready = true;\n return;\n }\n // configures the component and starts the scanner\n await this.initAutostartOn();\n this._ready = true;\n }\n /**\n * Initializes the component without starting the scanner.\n */\n initAutostartOff() {\n // do not ask for permission when autostart is off\n this.isAutostarting = false;\n // just update devices information\n this.updateVideoInputDevices();\n if (this._device && this._devicePreStart) {\n this.setDevice(this._devicePreStart);\n }\n }\n /**\n * Initializes the component and starts the scanner.\n * Permissions are asked to accomplish that.\n */\n async initAutostartOn() {\n this.isAutostarting = true;\n let hasPermission;\n try {\n // Asks for permission before enumerating devices so it can get all the device's info\n hasPermission = await this.askForPermission();\n }\n catch (e) {\n console.error('Exception occurred while asking for permission:', e);\n return;\n }\n // from this point, things gonna need permissions\n if (hasPermission) {\n const devices = await this.updateVideoInputDevices();\n await this.autostartScanner([...devices]);\n }\n this.isAutostarting = false;\n this.autostarted.next();\n }\n /**\n * Checks if the given device is the current defined one.\n */\n isCurrentDevice(device) {\n return device?.deviceId === this._device?.deviceId;\n }\n /**\n * Executes some actions before destroy the component.\n */\n ngOnDestroy() {\n this.reset();\n BrowserCodeReader.cleanVideoSource(this.previewElemRef.nativeElement);\n BrowserMultiFormatContinuousReader.releaseAllStreams();\n }\n /**\n *\n */\n ngOnInit() {\n this.init();\n }\n /**\n * Stops the scanning, if any.\n */\n scanStop() {\n if (this._scanSubscription) {\n this.codeReader?.getScannerControls().stop();\n this._scanSubscription?.unsubscribe();\n this._scanSubscription = undefined;\n }\n this.torchCompatible.next(false);\n }\n /**\n * Stops the scanning, if any.\n */\n scanStart() {\n if (this._scanSubscription) {\n throw new Error('There is already a scan process running.');\n }\n if (!this._device) {\n throw new Error('No device defined, cannot start scan, please define a device.');\n }\n this.scanFromDevice(this._device.deviceId);\n }\n /**\n * Stops old `codeReader` and starts scanning in a new one.\n */\n restart() {\n // note only necessary for now because of the Torch\n this._codeReader = undefined;\n const prevDevice = this._reset();\n if (!prevDevice) {\n return;\n }\n this.device = prevDevice;\n }\n /**\n * Discovers and updates known video input devices.\n */\n async updateVideoInputDevices() {\n // permissions aren't needed to get devices, but to access them and their info\n const devices = await BrowserCodeReader.listVideoInputDevices() || [];\n const hasDevices = devices && devices.length > 0;\n // stores discovered devices and updates information\n this.hasDevices.next(hasDevices);\n this.camerasFound.next([...devices]);\n if (!hasDevices) {\n this.camerasNotFound.next(null);\n }\n return devices;\n }\n /**\n * Starts the scanner with the back camera otherwise take the last\n * available device.\n */\n async autostartScanner(devices) {\n const matcher = ({ label }) => /back|trás|rear|traseira|environment|ambiente/gi.test(label);\n // select the rear camera by default, otherwise take the last camera.\n const device = devices.find(matcher) || devices.pop();\n if (!device) {\n throw new Error('Impossible to autostart, no input devices available.');\n }\n await this.setDevice(device);\n this.deviceChange.next(device);\n }\n /**\n * Dispatches the scan success event.\n *\n * @param result the scan result.\n */\n dispatchScanSuccess(result) {\n this.scanSuccess.next(result.getText());\n }\n /**\n * Dispatches the scan failure event.\n */\n dispatchScanFailure(reason) {\n this.scanFailure.next(reason);\n }\n /**\n * Dispatches the scan error event.\n *\n * @param error the error thing.\n */\n dispatchScanError(error) {\n if (!this.scanError.observed) {\n console.error(`zxing scanner component: ${error.name}`, error);\n console.warn('Use the `(scanError)` property to handle errors like this!');\n }\n this.scanError.next(error);\n }\n /**\n * Dispatches the scan event.\n *\n * @param result the scan result.\n */\n dispatchScanComplete(result) {\n this.scanComplete.next(result);\n }\n /**\n * Returns the filtered permission.\n */\n handlePermissionException(err) {\n // failed to grant permission to video input\n console.error('@zxing/ngx-scanner', 'Error when asking for permission.', err);\n let permission;\n switch (err.name) {\n // usually caused by not secure origins\n case 'NotSupportedError':\n console.warn('@zxing/ngx-scanner', err.message);\n // could not claim\n permission = null;\n // can't check devices\n this.hasDevices.next(null);\n break;\n // user denied permission\n case 'NotAllowedError':\n console.warn('@zxing/ngx-scanner', err.message);\n // claimed and denied permission\n permission = false;\n // this means that input devices exists\n this.hasDevices.next(true);\n break;\n // the device has no attached input devices\n case 'NotFoundError':\n console.warn('@zxing/ngx-scanner', err.message);\n // no permissions claimed\n permission = null;\n // because there was no devices\n this.hasDevices.next(false);\n // tells the listener about the error\n this.camerasNotFound.next(err);\n break;\n case 'NotReadableError':\n console.warn('@zxing/ngx-scanner', 'Couldn\\'t read the device(s)\\'s stream, it\\'s probably in use by another app.');\n // no permissions claimed\n permission = null;\n // there are devices, which I couldn't use\n this.hasDevices.next(false);\n // tells the listener about the error\n this.camerasNotFound.next(err);\n break;\n default:\n console.warn('@zxing/ngx-scanner', 'I was not able to define if I have permissions for camera or not.', err);\n // unknown\n permission = null;\n // this.hasDevices.next(undefined;\n break;\n }\n this.setPermission(permission);\n // tells the listener about the error\n this.permissionResponse.error(err);\n return permission;\n }\n /**\n * Returns a valid BarcodeFormat or fails.\n */\n getBarcodeFormatOrFail(format) {\n return typeof format === 'string'\n ? BarcodeFormat[format.trim().toUpperCase()]\n : format;\n }\n /**\n * Return a code reader, create one if non exist\n */\n getCodeReader() {\n if (!this._codeReader) {\n const options = {\n delayBetweenScanAttempts: this.timeBetweenScans,\n delayBetweenScanSuccess: this.delayBetweenScanSuccess\n };\n this._codeReader = new BrowserMultiFormatContinuousReader(this.hints, options);\n }\n return this._codeReader;\n }\n /**\n * Starts the continuous scanning for the given device.\n *\n * @param deviceId The deviceId from the device.\n */\n async scanFromDevice(deviceId) {\n const videoElement = this.previewElemRef.nativeElement;\n const codeReader = this.getCodeReader();\n const scanStream = await codeReader.scanFromDeviceObservable(deviceId, videoElement);\n if (!scanStream) {\n throw new Error('Undefined decoding stream, aborting.');\n }\n const next = (x) => this._onDecodeResult(x.result, x.error);\n const error = (err) => this._onDecodeError(err);\n const complete = () => {\n };\n this._scanSubscription = scanStream.subscribe(next, error, complete);\n if (this._scanSubscription.closed) {\n return;\n }\n const controls = codeReader.getScannerControls();\n const hasTorchControl = typeof controls.switchTorch !== 'undefined';\n this.torchCompatible.next(hasTorchControl);\n }\n /**\n * Handles decode errors.\n */\n _onDecodeError(err) {\n this.dispatchScanError(err);\n // this.reset();\n }\n /**\n * Handles decode results.\n */\n _onDecodeResult(result, error) {\n if (result) {\n this.dispatchScanSuccess(result);\n }\n else {\n this.dispatchScanFailure(error);\n }\n this.dispatchScanComplete(result);\n }\n /**\n * Stops the code reader and returns the previous selected device.\n */\n _reset() {\n if (!this._codeReader) {\n return;\n }\n this.scanStop();\n try {\n const videoElement = this.previewElemRef.nativeElement;\n BrowserCodeReader.cleanVideoSource(videoElement);\n }\n catch (err) {\n }\n try {\n BrowserCodeReader.releaseAllStreams();\n }\n catch (err) {\n }\n // clearing codeReader first to prevent setOptions error appearing in several Chromium versions\n this._codeReader = undefined;\n const device = this._device;\n // do not set this.device inside this method, it would create a recursive loop\n this.device = undefined;\n return device;\n }\n /**\n * Resets the scanner and emits device change.\n */\n reset() {\n this._reset();\n this.deviceChange.emit(null);\n }\n /**\n * Sets the current device.\n */\n async setDevice(device) {\n // instantly stops the scan before changing devices\n this.scanStop();\n // correctly sets the new (or none) device\n this._device = device || undefined;\n if (!this._device) {\n // cleans the video because user removed the device\n BrowserCodeReader.cleanVideoSource(this.previewElemRef.nativeElement);\n }\n // if enabled, starts scanning\n if (this._enabled && device) {\n await this.scanFromDevice(device.deviceId);\n }\n }\n /**\n * Sets the permission value and emits the event.\n */\n setPermission(hasPermission) {\n this.hasPermission = hasPermission;\n this.permissionResponse.next(hasPermission);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.3.9\", ngImport: i0, type: ZXingScannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.3.9\", type: ZXingScannerComponent, selector: \"zxing-scanner\", inputs: { autofocusEnabled: \"autofocusEnabled\", timeBetweenScans: \"timeBetweenScans\", delayBetweenScanSuccess: \"delayBetweenScanSuccess\", autostart: \"autostart\", previewFitMode: \"previewFitMode\", poster: \"poster\", device: \"device\", formats: \"formats\", videoConstraints: \"videoConstraints\", torch: \"torch\", enable: \"enable\", tryHarder: \"tryHarder\" }, outputs: { autostarted: \"autostarted\", autostarting: \"autostarting\", torchCompatible: \"torchCompatible\", scanSuccess: \"scanSuccess\", scanFailure: \"scanFailure\", scanError: \"scanError\", scanComplete: \"scanComplete\", camerasFound: \"camerasFound\", camerasNotFound: \"camerasNotFound\", permissionResponse: \"permissionResponse\", hasDevices: \"hasDevices\", deviceChange: \"deviceChange\" }, viewQueries: [{ propertyName: \"previewElemRef\", first: true, predicate: [\"preview\"], descendants: true, static: true }], ngImport: i0, template: \"\\n\", styles: [\":host{display:block}video{width:100%;height:auto;object-fit:contain}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.3.9\", ngImport: i0, type: ZXingScannerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'zxing-scanner', changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n\", styles: [\":host{display:block}video{width:100%;height:auto;object-fit:contain}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { previewElemRef: [{\n type: ViewChild,\n args: ['preview', { static: true }]\n }], autofocusEnabled: [{\n type: Input\n }], timeBetweenScans: [{\n type: Input\n }], delayBetweenScanSuccess: [{\n type: Input\n }], autostarted: [{\n type: Output\n }], autostarting: [{\n type: Output\n }], autostart: [{\n type: Input\n }], previewFitMode: [{\n type: Input\n }], poster: [{\n type: Input\n }], torchCompatible: [{\n type: Output\n }], scanSuccess: [{\n type: Output\n }], scanFailure: [{\n type: Output\n }], scanError: [{\n type: Output\n }], scanComplete: [{\n type: Output\n }], camerasFound: [{\n type: Output\n }], camerasNotFound: [{\n type: Output\n }], permissionResponse: [{\n type: Output\n }], hasDevices: [{\n type: Output\n }], device: [{\n type: Input\n }], deviceChange: [{\n type: Output\n }], formats: [{\n type: Input\n }], videoConstraints: [{\n type: Input\n }], torch: [{\n type: Input\n }], enable: [{\n type: Input\n }], tryHarder: [{\n type: Input\n }] } });\n\nclass ZXingScannerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.3.9\", ngImport: i0, type: ZXingScannerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.3.9\", ngImport: i0, type: ZXingScannerModule, declarations: [ZXingScannerComponent], imports: [CommonModule,\n FormsModule], exports: [ZXingScannerComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.3.9\", ngImport: i0, type: ZXingScannerModule, imports: [CommonModule,\n FormsModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.3.9\", ngImport: i0, type: ZXingScannerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n FormsModule\n ],\n declarations: [ZXingScannerComponent],\n exports: [ZXingScannerComponent],\n }]\n }] });\n\n/*\n * Public API Surface of zxing-scanner\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ZXingScannerComponent, ZXingScannerModule };\n","
\n \n \n\n
\n
\n \n {{ 'general.actions.cancel' | translate }}\n \n
\n
\n\n
\n \n cancel\n \n
\n\n
\n\n
\n \n \n
\n \n
\n \n\n\n \n
\n
\n \n \n {{ 'general.actions.scan' | translate }}\n \n \n
\n
\n
\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { environment } from 'src/environments/environment';\n\n@Component({\n selector: 'app-qr-code-scan',\n templateUrl: './qr-code-scan.component.html',\n styleUrls: ['./qr-code-scan.component.scss']\n\n})\nexport class QrCodeScanComponent {\n\n qrResultString: string;\n isVerificate = true;\n\n constructor(private router: Router) { }\n\n onCodeResult(resultString: string) {\n this.qrResultString = resultString;\n\n if (this.verificationUrl(this.qrResultString)) {\n location.href = this.qrResultString;\n } else if(this.qrResultString.includes(environment.urlExterna)){\n const urlArray = this.qrResultString.split('/')\n const arrayId = urlArray [urlArray.length -1].split('=')\n const id = arrayId [arrayId.length -1]\n this.router.navigate([`/track/${id}`])\n }\n }\n\n private verificationUrl(url: string): boolean {\n if (url.includes(environment.urlBase)){\n return true;\n } else {\n return false;\n }\n }\n\n back(): void {\n this.router.navigate(['/home'])\n }\n\n backToScan(): void {\n this.router.navigate(['/qrcode-scan'])\n this.isVerificate = true;\n }\n}\n","import { Provider } from './provider.model';\nimport { Location } from './location.model';\nimport { Service } from './service.model';\n\nexport interface Terminal {\n id: number;\n name: string;\n providerLogoUrl: string;\n headerBackgroundColor: string;\n timezoneId: string;\n provider: Provider;\n location: Location;\n services: Service[];\n showOptionsBasedOnSessions: boolean;\n optionsDisplay: TerminalOptionsDisplay;\n allowPriority: boolean;\n}\n\nexport enum TerminalOptionsDisplay {\n LIST,\n CATEGORY\n}\n","// Force a hex value to have 2 characters\nfunction pad2(c: string) {\n return c.length === 1 ? '0' + c : '' + c;\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n return [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16))\n ].join('');\n}\n\nexport function hexToRgb(hex: string): number[] {\n if (hex.length > 6) {\n hex = hex.substr(1, hex.length - 1);\n }\n\n const match = hex.match(/.{1,2}/g);\n\n return [\n parseInt(match[0], 16),\n parseInt(match[1], 16),\n parseInt(match[2], 16),\n ];\n}\n\nexport function brighten(color: string, amount: number): string {\n amount = (amount === 0) ? 0 : (amount || 10);\n\n const rgb = hexToRgb(color);\n\n rgb[0] = Math.max(0, Math.min(255, rgb[0] - Math.round(255 * - (amount / 100))));\n rgb[1] = Math.max(0, Math.min(255, rgb[1] - Math.round(255 * - (amount / 100))));\n rgb[2] = Math.max(0, Math.min(255, rgb[2] - Math.round(255 * - (amount / 100))));\n\n return rgbToHex(rgb[0], rgb[1], rgb[2]);\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-priority-modal',\n templateUrl: './priority-modal.component.html',\n styleUrls: ['./priority-modal.component.scss']\n})\nexport class PriorityModalComponent {}\n","

\n {{ 'general.pages.schedule.form.priorityModal.title' | translate }}\n

\n\n

\n {{ 'general.pages.schedule.form.priorityModal.content' | translate }}\n

\n

\n {{ 'general.pages.schedule.form.priorityModal.subtitle' | translate }}\n

\n
\n\n \n \n\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","
\n

{{ button.text }}

\n
\n
\n {{ 'general.pages.schedule.orientation' | translate }}\n
\n
\n

\n {{ button.serviceOrientation }}\n

\n
\n
\n \n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CollapsableButton } from 'src/app/shared/models';\nimport { brighten } from '../../shared/utils/colors';\n\nimport { Terminal } from '../../shared/models';\nimport { StorageService } from '../../shared/services';\n\n@Component({\n selector: 'app-collapsable-option-button',\n templateUrl: './collapsable-option-button.component.html',\n styleUrls: ['./collapsable-option-button.component.scss']\n})\nexport class CollapsableOptionButtonComponent {\n isActive = false;\n terminal: Terminal;\n\n @Input() button: CollapsableButton;\n @Output() buttonClick = new EventEmitter();\n collapse() {\n this.isActive = !this.isActive;\n }\n\n constructor(\n private storageService: StorageService,\n ) {\n this.terminal = this.storageService.currentTerminal;\n }\n\n onClick() {\n this.buttonClick.next(this.button.type === 'category' ? this.button.text : this.button.serviceId);\n }\n\n brighten(color: string, amount: number): string {\n return '#' + brighten(color, amount);\n }\n}\n","
\n
\n
\n
\n
\n

{{ 'general.pages.schedule.options' | translate }}

\n
\n
\n \n
\n
\n
\n
\n
\n
\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-service-list-wrapper',\n templateUrl: './service-list-wrapper.component.html',\n styleUrls: ['./service-list-wrapper.component.scss']\n})\nexport class ServiceListWrapperComponent implements OnInit {\n @Input() displayOptions: boolean;\n @Input() isLoadingEmit: boolean;\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, OnInit, Renderer2, Inject, Input } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Component({\n selector: 'app-embed-chat',\n template: '',\n})\nexport class EmbedChatComponent implements OnInit {\n @Input() embedChat: string;\n\n constructor(\n @Inject(DOCUMENT) private document: Document,\n private renderer2: Renderer2,\n private domSanitizer: DomSanitizer\n ) {}\n\n ngOnInit(): void {\n this.loadScript();\n }\n\n loadScript() {\n if (!this.domSanitizer.bypassSecurityTrustScript(this.embedChat)) return;\n this.setInnerHtmlWithScripts(this.document.body, this.embedChat);\n }\n\n setInnerHtmlWithScripts(element: HTMLElement, htmlText: string) {\n const template = this.renderer2.createElement('template');\n template.innerHTML = htmlText;\n\n const htmlElements = template.content.querySelectorAll(':not(script)');\n element.append(...htmlElements);\n\n const scriptElements = Array.from(\n template.content.querySelectorAll('script')\n );\n\n scriptElements.forEach((currentScript) => {\n const newScript = this.renderer2.createElement('script');\n\n const currentScriptAttributes = Array.from(currentScript.attributes);\n currentScriptAttributes.forEach((attr) => {\n newScript.setAttribute(attr.name, attr.value);\n });\n\n const content = this.document.createTextNode(currentScript.innerHTML);\n newScript.appendChild(content);\n\n element.appendChild(newScript);\n });\n }\n}\n","import { AbstractControl, Validators, ValidatorFn } from '@angular/forms';\n\nexport class CustomFieldValidator {\n\n constructor() {}\n\n static isValidCpf(): ValidatorFn {\n return (control: AbstractControl): Validators => {\n const cpf = control.value;\n if (cpf) {\n let numbers;\n let digits;\n let sum;\n let i;\n let result;\n let equalDigits = 1;\n\n if (cpf.length < 11) {\n return null;\n }\n\n for (i = 0; i < cpf.length - 1; i++) {\n if (cpf.charAt(i) !== cpf.charAt(i + 1)) {\n equalDigits = 0;\n break;\n }\n }\n\n if (!equalDigits) {\n numbers = cpf.substring(0, 9);\n digits = cpf.substring(9);\n sum = 0;\n for (i = 10; i > 1; i--) {\n sum += numbers.charAt(10 - i) * i;\n }\n\n result = sum % 11 < 2 ? 0 : 11 - (sum % 11);\n\n if (result !== Number(digits.charAt(0))) {\n return { cpfNotValid: true };\n }\n numbers = cpf.substring(0, 10);\n sum = 0;\n\n for (i = 11; i > 1; i--) {\n sum += numbers.charAt(11 - i) * i;\n }\n result = sum % 11 < 2 ? 0 : 11 - (sum % 11);\n\n if (result !== Number(digits.charAt(1))) {\n return { cpfNotValid: true };\n }\n return null;\n } else {\n return { cpfNotValid: true };\n }\n }\n return null;\n };\n }\n\n static isValidCnpj(): ValidatorFn {\n return (control: AbstractControl): Validators => {\n const cnpj = control.value;\n\n if (!cnpj) {\n return { cnpjNotValid: true };\n }\n\n if (cnpj.length !== 14) {\n return { cnpjNotValid: true };\n }\n\n if (cnpj === '00000000000000' ||\n cnpj === '11111111111111' ||\n cnpj === '22222222222222' ||\n cnpj === '33333333333333' ||\n cnpj === '44444444444444' ||\n cnpj === '55555555555555' ||\n cnpj === '66666666666666' ||\n cnpj === '77777777777777' ||\n cnpj === '88888888888888' ||\n cnpj === '99999999999999'\n ) {\n return { cnpjNotValid: true };\n }\n\n let len = 12;\n let numbers = cnpj.substring(0, len);\n const digits = cnpj.substring(len);\n let sum = 0;\n let pos = len - 7;\n\n for (let i = len; i >= 1; i--) {\n sum += numbers.charAt(len - i) * pos--;\n\n if (pos < 2) {\n pos = 9;\n }\n }\n\n let result = sum % 11 < 2 ? 0 : 11 - sum % 11;\n\n if (result.toString() !== digits.charAt(0)) {\n return { cnpjNotValid: true };\n }\n\n len = len + 1;\n numbers = cnpj.substring(0, len);\n sum = 0;\n pos = len - 7;\n\n for (let i = len; i >= 1; i--) {\n sum += numbers.charAt(len - i) * pos--;\n\n if (pos < 2) {\n pos = 9;\n }\n }\n\n result = sum % 11 < 2 ? 0 : 11 - sum % 11;\n\n if (result.toString() !== digits.charAt(1)) {\n return { cnpjNotValid: true };\n }\n\n return null;\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { FieldBase } from './models/field-base.model';\nimport { CustomFieldValidator } from './validator/custom-field-validator';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FieldControlService {\n\n constructor() {\n }\n\n makeFormGroup(fields: FieldBase[]): UntypedFormGroup {\n const group: any = {};\n\n fields.forEach(field => {\n\n if (field.required) {\n if (field.type === 'cpf') {\n group[field.title] = new UntypedFormControl('',\n Validators.compose([\n Validators.required,\n Validators.minLength(11),\n CustomFieldValidator.isValidCpf()\n ])\n );\n } else if (field.type === 'select') {\n group[field.title] = new UntypedFormControl('',\n Validators.compose([\n Validators.required,\n ])\n );\n } else if (field.type === 'cnpj') {\n group[field.title] = new UntypedFormControl('',\n Validators.compose([\n Validators.required,\n Validators.minLength(14),\n CustomFieldValidator.isValidCnpj()\n ])\n );\n } else {\n group[field.title] = new UntypedFormControl('',\n Validators.compose([\n Validators.required,\n Validators.maxLength(field.maxLength)\n ])\n );\n }\n } else {\n if (field.type === 'cpf') {\n group[field.title] = new UntypedFormControl('',\n Validators.compose([\n CustomFieldValidator.isValidCpf()\n ])\n );\n } else if (field.type === 'cnpj') {\n group[field.title] = new UntypedFormControl('',\n Validators.compose([\n CustomFieldValidator.isValidCnpj()\n ])\n );\n } else if (field.type === 'select') {\n group[field.title] = new UntypedFormControl('', []);\n } else {\n group[field.title] = new UntypedFormControl('',\n Validators.compose([\n Validators.maxLength(field.maxLength)\n ])\n );\n }\n }\n });\n return new UntypedFormGroup(group);\n }\n}\n","import * as i0 from '@angular/core';\nimport { InjectionToken, EventEmitter, inject, Injectable, ElementRef, Renderer2, makeEnvironmentProviders, Directive, Input, Output, HostListener, Pipe } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';\n\nconst NGX_MASK_CONFIG = new InjectionToken('ngx-mask config');\nconst NEW_CONFIG = new InjectionToken('new ngx-mask config');\nconst INITIAL_CONFIG = new InjectionToken('initial ngx-mask config');\nconst initialConfig = {\n suffix: '',\n prefix: '',\n thousandSeparator: ' ',\n decimalMarker: ['.', ','],\n clearIfNotMatch: false,\n showTemplate: false,\n showMaskTyped: false,\n placeHolderCharacter: '_',\n dropSpecialCharacters: true,\n hiddenInput: undefined,\n shownMaskExpression: '',\n separatorLimit: '',\n allowNegativeNumbers: false,\n validation: true,\n // eslint-disable-next-line @typescript-eslint/quotes\n specialCharacters: ['-', '/', '(', ')', '.', ':', ' ', '+', ',', '@', '[', ']', '\"', \"'\"],\n leadZeroDateTime: false,\n apm: false,\n leadZero: false,\n keepCharacterPositions: false,\n triggerOnMaskChange: false,\n inputTransformFn: (value) => value,\n outputTransformFn: (value) => value,\n maskFilled: new EventEmitter(),\n patterns: {\n '0': {\n pattern: new RegExp('\\\\d'),\n },\n '9': {\n pattern: new RegExp('\\\\d'),\n optional: true,\n },\n X: {\n pattern: new RegExp('\\\\d'),\n symbol: '*',\n },\n A: {\n pattern: new RegExp('[a-zA-Z0-9]'),\n },\n S: {\n pattern: new RegExp('[a-zA-Z]'),\n },\n U: {\n pattern: new RegExp('[A-Z]'),\n },\n L: {\n pattern: new RegExp('[a-z]'),\n },\n d: {\n pattern: new RegExp('\\\\d'),\n },\n m: {\n pattern: new RegExp('\\\\d'),\n },\n M: {\n pattern: new RegExp('\\\\d'),\n },\n H: {\n pattern: new RegExp('\\\\d'),\n },\n h: {\n pattern: new RegExp('\\\\d'),\n },\n s: {\n pattern: new RegExp('\\\\d'),\n },\n },\n};\nconst timeMasks = [\n \"Hh:m0:s0\" /* MaskExpression.HOURS_MINUTES_SECONDS */,\n \"Hh:m0\" /* MaskExpression.HOURS_MINUTES */,\n \"m0:s0\" /* MaskExpression.MINUTES_SECONDS */,\n];\nconst withoutValidation = [\n \"percent\" /* MaskExpression.PERCENT */,\n \"Hh\" /* MaskExpression.HOURS_HOUR */,\n \"s0\" /* MaskExpression.SECONDS */,\n \"m0\" /* MaskExpression.MINUTES */,\n \"separator\" /* MaskExpression.SEPARATOR */,\n \"d0/M0/0000\" /* MaskExpression.DAYS_MONTHS_YEARS */,\n \"d0/M0\" /* MaskExpression.DAYS_MONTHS */,\n \"d0\" /* MaskExpression.DAYS */,\n \"M0\" /* MaskExpression.MONTHS */,\n];\n\nclass NgxMaskApplierService {\n constructor() {\n this._config = inject(NGX_MASK_CONFIG);\n this.dropSpecialCharacters = this._config.dropSpecialCharacters;\n this.hiddenInput = this._config.hiddenInput;\n this.clearIfNotMatch = this._config.clearIfNotMatch;\n this.specialCharacters = this._config.specialCharacters;\n this.patterns = this._config.patterns;\n this.prefix = this._config.prefix;\n this.suffix = this._config.suffix;\n this.thousandSeparator = this._config.thousandSeparator;\n this.decimalMarker = this._config.decimalMarker;\n this.showMaskTyped = this._config.showMaskTyped;\n this.placeHolderCharacter = this._config.placeHolderCharacter;\n this.validation = this._config.validation;\n this.separatorLimit = this._config.separatorLimit;\n this.allowNegativeNumbers = this._config.allowNegativeNumbers;\n this.leadZeroDateTime = this._config.leadZeroDateTime;\n this.leadZero = this._config.leadZero;\n this.apm = this._config.apm;\n this.inputTransformFn = this._config.inputTransformFn;\n this.outputTransformFn = this._config.outputTransformFn;\n this.keepCharacterPositions = this._config.keepCharacterPositions;\n this._shift = new Set();\n this.plusOnePosition = false;\n this.maskExpression = '';\n this.actualValue = '';\n this.showKeepCharacterExp = '';\n this.shownMaskExpression = '';\n this.deletedSpecialCharacter = false;\n this._formatWithSeparators = (str, thousandSeparatorChar, decimalChars, precision) => {\n let x = [];\n let decimalChar = '';\n if (Array.isArray(decimalChars)) {\n const regExp = new RegExp(decimalChars.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|'));\n x = str.split(regExp);\n decimalChar = str.match(regExp)?.[0] ?? \"\" /* MaskExpression.EMPTY_STRING */;\n }\n else {\n x = str.split(decimalChars);\n decimalChar = decimalChars;\n }\n const decimals = x.length > 1 ? `${decimalChar}${x[1]}` : \"\" /* MaskExpression.EMPTY_STRING */;\n let res = x[0] ?? \"\" /* MaskExpression.EMPTY_STRING */;\n const separatorLimit = this.separatorLimit.replace(/\\s/g, \"\" /* MaskExpression.EMPTY_STRING */);\n if (separatorLimit && +separatorLimit) {\n if (res[0] === \"-\" /* MaskExpression.MINUS */) {\n res = `-${res.slice(1, res.length).slice(0, separatorLimit.length)}`;\n }\n else {\n res = res.slice(0, separatorLimit.length);\n }\n }\n const rgx = /(\\d+)(\\d{3})/;\n while (thousandSeparatorChar && rgx.test(res)) {\n res = res.replace(rgx, '$1' + thousandSeparatorChar + '$2');\n }\n if (precision === undefined) {\n return res + decimals;\n }\n else if (precision === 0) {\n return res;\n }\n return res + decimals.substring(0, precision + 1);\n };\n this.percentage = (str) => {\n const sanitizedStr = str.replace(',', '.');\n const value = Number(sanitizedStr);\n return !isNaN(value) && value >= 0 && value <= 100;\n };\n this.getPrecision = (maskExpression) => {\n const x = maskExpression.split(\".\" /* MaskExpression.DOT */);\n if (x.length > 1) {\n return Number(x[x.length - 1]);\n }\n return Infinity;\n };\n this.checkAndRemoveSuffix = (inputValue) => {\n for (let i = this.suffix?.length - 1; i >= 0; i--) {\n const substr = this.suffix.substring(i, this.suffix?.length);\n if (inputValue.includes(substr) &&\n i !== this.suffix?.length - 1 &&\n (i - 1 < 0 ||\n !inputValue.includes(this.suffix.substring(i - 1, this.suffix?.length)))) {\n return inputValue.replace(substr, \"\" /* MaskExpression.EMPTY_STRING */);\n }\n }\n return inputValue;\n };\n this.checkInputPrecision = (inputValue, precision, decimalMarker) => {\n if (precision < Infinity) {\n // TODO need think about decimalMarker\n if (Array.isArray(decimalMarker)) {\n const marker = decimalMarker.find((dm) => dm !== this.thousandSeparator);\n // eslint-disable-next-line no-param-reassign\n decimalMarker = marker ? marker : decimalMarker[0];\n }\n const precisionRegEx = new RegExp(this._charToRegExpExpression(decimalMarker) + `\\\\d{${precision}}.*$`);\n const precisionMatch = inputValue.match(precisionRegEx);\n const precisionMatchLength = (precisionMatch && precisionMatch[0]?.length) ?? 0;\n if (precisionMatchLength - 1 > precision) {\n const diff = precisionMatchLength - 1 - precision;\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - diff);\n }\n if (precision === 0 &&\n this._compareOrIncludes(inputValue[inputValue.length - 1], decimalMarker, this.thousandSeparator)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n }\n return inputValue;\n };\n }\n applyMaskWithPattern(inputValue, maskAndPattern) {\n const [mask, customPattern] = maskAndPattern;\n this.customPattern = customPattern;\n return this.applyMask(inputValue, mask);\n }\n applyMask(inputValue, maskExpression, position = 0, justPasted = false, backspaced = false, \n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb = () => { }) {\n if (!maskExpression || typeof inputValue !== 'string') {\n return \"\" /* MaskExpression.EMPTY_STRING */;\n }\n let cursor = 0;\n let result = '';\n let multi = false;\n let backspaceShift = false;\n let shift = 1;\n let stepBack = false;\n if (inputValue.slice(0, this.prefix.length) === this.prefix) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.slice(this.prefix.length, inputValue.length);\n }\n if (!!this.suffix && inputValue?.length > 0) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkAndRemoveSuffix(inputValue);\n }\n if (inputValue === '(' && this.prefix) {\n // eslint-disable-next-line no-param-reassign\n inputValue = '';\n }\n const inputArray = inputValue.toString().split(\"\" /* MaskExpression.EMPTY_STRING */);\n if (this.allowNegativeNumbers &&\n inputValue.slice(cursor, cursor + 1) === \"-\" /* MaskExpression.MINUS */) {\n // eslint-disable-next-line no-param-reassign\n result += inputValue.slice(cursor, cursor + 1);\n }\n if (maskExpression === \"IP\" /* MaskExpression.IP */) {\n const valuesIP = inputValue.split(\".\" /* MaskExpression.DOT */);\n this.ipError = this._validIP(valuesIP);\n // eslint-disable-next-line no-param-reassign\n maskExpression = '099.099.099.099';\n }\n const arr = [];\n for (let i = 0; i < inputValue.length; i++) {\n if (inputValue[i]?.match('\\\\d')) {\n arr.push(inputValue[i] ?? \"\" /* MaskExpression.EMPTY_STRING */);\n }\n }\n if (maskExpression === \"CPF_CNPJ\" /* MaskExpression.CPF_CNPJ */) {\n this.cpfCnpjError = arr.length !== 11 && arr.length !== 14;\n if (arr.length > 11) {\n // eslint-disable-next-line no-param-reassign\n maskExpression = '00.000.000/0000-00';\n }\n else {\n // eslint-disable-next-line no-param-reassign\n maskExpression = '000.000.000-00';\n }\n }\n if (maskExpression.startsWith(\"percent\" /* MaskExpression.PERCENT */)) {\n if (inputValue.match('[a-z]|[A-Z]') ||\n // eslint-disable-next-line no-useless-escape\n (inputValue.match(/[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,\\/.]/) && !backspaced)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._stripToDecimal(inputValue);\n const precision = this.getPrecision(maskExpression);\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n }\n const decimalMarker = typeof this.decimalMarker === 'string' ? this.decimalMarker : \".\" /* MaskExpression.DOT */;\n if (inputValue.indexOf(decimalMarker) > 0 &&\n !this.percentage(inputValue.substring(0, inputValue.indexOf(decimalMarker)))) {\n let base = inputValue.substring(0, inputValue.indexOf(decimalMarker) - 1);\n if (this.allowNegativeNumbers &&\n inputValue.slice(cursor, cursor + 1) === \"-\" /* MaskExpression.MINUS */ &&\n !backspaced) {\n base = inputValue.substring(0, inputValue.indexOf(decimalMarker));\n }\n // eslint-disable-next-line no-param-reassign\n inputValue = `${base}${inputValue.substring(inputValue.indexOf(decimalMarker), inputValue.length)}`;\n }\n let value = '';\n this.allowNegativeNumbers &&\n inputValue.slice(cursor, cursor + 1) === \"-\" /* MaskExpression.MINUS */\n ? (value = inputValue.slice(cursor + 1, cursor + inputValue.length))\n : (value = inputValue);\n if (this.percentage(value)) {\n result = this._splitPercentZero(inputValue);\n }\n else {\n result = this._splitPercentZero(inputValue.substring(0, inputValue.length - 1));\n }\n }\n else if (maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */)) {\n if (inputValue.match('[wа-яА-Я]') ||\n inputValue.match('[ЁёА-я]') ||\n inputValue.match('[a-z]|[A-Z]') ||\n inputValue.match(/[-@#!$%\\\\^&*()_£¬'+|~=`{}\\]:\";<>.?/]/) ||\n inputValue.match('[^A-Za-z0-9,]')) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._stripToDecimal(inputValue);\n }\n const precision = this.getPrecision(maskExpression);\n const decimalMarker = Array.isArray(this.decimalMarker)\n ? \".\" /* MaskExpression.DOT */\n : this.decimalMarker;\n if (precision === 0) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.allowNegativeNumbers\n ? inputValue.length > 2 &&\n inputValue[0] === \"-\" /* MaskExpression.MINUS */ &&\n inputValue[1] === \"0\" /* MaskExpression.NUMBER_ZERO */ &&\n inputValue[2] !== this.thousandSeparator &&\n inputValue[2] !== \",\" /* MaskExpression.COMMA */ &&\n inputValue[2] !== \".\" /* MaskExpression.DOT */\n ? '-' + inputValue.slice(2, inputValue.length)\n : inputValue[0] === \"0\" /* MaskExpression.NUMBER_ZERO */ &&\n inputValue.length > 1 &&\n inputValue[1] !== this.thousandSeparator &&\n inputValue[1] !== \",\" /* MaskExpression.COMMA */ &&\n inputValue[1] !== \".\" /* MaskExpression.DOT */\n ? inputValue.slice(1, inputValue.length)\n : inputValue\n : inputValue.length > 1 &&\n inputValue[0] === \"0\" /* MaskExpression.NUMBER_ZERO */ &&\n inputValue[1] !== this.thousandSeparator &&\n inputValue[1] !== \",\" /* MaskExpression.COMMA */ &&\n inputValue[1] !== \".\" /* MaskExpression.DOT */\n ? inputValue.slice(1, inputValue.length)\n : inputValue;\n }\n else {\n // eslint-disable-next-line no-param-reassign\n if (inputValue[0] === decimalMarker && inputValue.length > 1) {\n // eslint-disable-next-line no-param-reassign\n inputValue =\n \"0\" /* MaskExpression.NUMBER_ZERO */ + inputValue.slice(0, inputValue.length + 1);\n this.plusOnePosition = true;\n }\n if (inputValue[0] === \"0\" /* MaskExpression.NUMBER_ZERO */ &&\n inputValue[1] !== decimalMarker &&\n inputValue[1] !== this.thousandSeparator) {\n // eslint-disable-next-line no-param-reassign\n inputValue =\n inputValue.length > 1\n ? inputValue.slice(0, 1) +\n decimalMarker +\n inputValue.slice(1, inputValue.length + 1)\n : inputValue;\n this.plusOnePosition = true;\n }\n if (this.allowNegativeNumbers &&\n inputValue[0] === \"-\" /* MaskExpression.MINUS */ &&\n (inputValue[1] === decimalMarker ||\n inputValue[1] === \"0\" /* MaskExpression.NUMBER_ZERO */)) {\n // eslint-disable-next-line no-param-reassign\n inputValue =\n inputValue[1] === decimalMarker && inputValue.length > 2\n ? inputValue.slice(0, 1) +\n \"0\" /* MaskExpression.NUMBER_ZERO */ +\n inputValue.slice(1, inputValue.length)\n : inputValue[1] === \"0\" /* MaskExpression.NUMBER_ZERO */ &&\n inputValue.length > 2 &&\n inputValue[2] !== decimalMarker\n ? inputValue.slice(0, 2) +\n decimalMarker +\n inputValue.slice(2, inputValue.length)\n : inputValue;\n this.plusOnePosition = true;\n }\n }\n if (backspaced) {\n if (inputValue[0] === \"0\" /* MaskExpression.NUMBER_ZERO */ &&\n inputValue[1] === this.decimalMarker &&\n (inputValue[position] === \"0\" /* MaskExpression.NUMBER_ZERO */ ||\n inputValue[position] === this.decimalMarker)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.slice(2, inputValue.length);\n }\n if (inputValue[0] === \"-\" /* MaskExpression.MINUS */ &&\n inputValue[1] === \"0\" /* MaskExpression.NUMBER_ZERO */ &&\n inputValue[2] === this.decimalMarker &&\n (inputValue[position] === \"0\" /* MaskExpression.NUMBER_ZERO */ ||\n inputValue[position] === this.decimalMarker)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = \"-\" /* MaskExpression.MINUS */ + inputValue.slice(3, inputValue.length);\n }\n // eslint-disable-next-line no-param-reassign\n inputValue = this._compareOrIncludes(inputValue[inputValue.length - 1], this.decimalMarker, this.thousandSeparator)\n ? inputValue.slice(0, inputValue.length - 1)\n : inputValue;\n }\n // TODO: we had different rexexps here for the different cases... but tests dont seam to bother - check this\n // separator: no COMMA, dot-sep: no SPACE, COMMA OK, comma-sep: no SPACE, COMMA OK\n const thousandSeparatorCharEscaped = this._charToRegExpExpression(this.thousandSeparator);\n let invalidChars = '@#!$%^&*()_+|~=`{}\\\\[\\\\]:\\\\s,\\\\.\";<>?\\\\/'.replace(thousandSeparatorCharEscaped, '');\n //.replace(decimalMarkerEscaped, '');\n if (Array.isArray(this.decimalMarker)) {\n for (const marker of this.decimalMarker) {\n invalidChars = invalidChars.replace(this._charToRegExpExpression(marker), \"\" /* MaskExpression.EMPTY_STRING */);\n }\n }\n else {\n invalidChars = invalidChars.replace(this._charToRegExpExpression(this.decimalMarker), '');\n }\n const invalidCharRegexp = new RegExp('[' + invalidChars + ']');\n if (inputValue.match(invalidCharRegexp)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n const strForSep = inputValue.replace(new RegExp(thousandSeparatorCharEscaped, 'g'), '');\n result = this._formatWithSeparators(strForSep, this.thousandSeparator, this.decimalMarker, precision);\n const commaShift = result.indexOf(\",\" /* MaskExpression.COMMA */) - inputValue.indexOf(\",\" /* MaskExpression.COMMA */);\n const shiftStep = result.length - inputValue.length;\n if (shiftStep > 0 && result[position] !== this.thousandSeparator) {\n backspaceShift = true;\n let _shift = 0;\n do {\n this._shift.add(position + _shift);\n _shift++;\n } while (_shift < shiftStep);\n }\n else if (result[position - 1] === this.decimalMarker ||\n shiftStep === -4 ||\n shiftStep === -3 ||\n result[position] === \",\" /* MaskExpression.COMMA */) {\n this._shift.clear();\n this._shift.add(position - 1);\n }\n else if ((commaShift !== 0 &&\n position > 0 &&\n !(result.indexOf(\",\" /* MaskExpression.COMMA */) >= position && position > 3)) ||\n (!(result.indexOf(\".\" /* MaskExpression.DOT */) >= position && position > 3) &&\n shiftStep <= 0)) {\n this._shift.clear();\n backspaceShift = true;\n shift = shiftStep;\n // eslint-disable-next-line no-param-reassign\n position += shiftStep;\n this._shift.add(position);\n }\n else {\n this._shift.clear();\n }\n }\n else {\n for (\n // eslint-disable-next-line\n let i = 0, inputSymbol = inputArray[0]; i < inputArray.length; i++, inputSymbol = inputArray[i] ?? \"\" /* MaskExpression.EMPTY_STRING */) {\n if (cursor === maskExpression.length) {\n break;\n }\n const symbolStarInPattern = \"*\" /* MaskExpression.SYMBOL_STAR */ in this.patterns;\n if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */) &&\n maskExpression[cursor + 1] === \"?\" /* MaskExpression.SYMBOL_QUESTION */) {\n result += inputSymbol;\n cursor += 2;\n }\n else if (maskExpression[cursor + 1] === \"*\" /* MaskExpression.SYMBOL_STAR */ &&\n multi &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? \"\" /* MaskExpression.EMPTY_STRING */)) {\n result += inputSymbol;\n cursor += 3;\n multi = false;\n }\n else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */) &&\n maskExpression[cursor + 1] === \"*\" /* MaskExpression.SYMBOL_STAR */ &&\n !symbolStarInPattern) {\n result += inputSymbol;\n multi = true;\n }\n else if (maskExpression[cursor + 1] === \"?\" /* MaskExpression.SYMBOL_QUESTION */ &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? \"\" /* MaskExpression.EMPTY_STRING */)) {\n result += inputSymbol;\n cursor += 3;\n }\n else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */)) {\n if (maskExpression[cursor] === \"H\" /* MaskExpression.HOURS */) {\n if (this.apm ? Number(inputSymbol) > 9 : Number(inputSymbol) > 2) {\n // eslint-disable-next-line no-param-reassign\n position = !this.leadZeroDateTime ? position + 1 : position;\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n if (maskExpression[cursor] === \"h\" /* MaskExpression.HOUR */) {\n if (this.apm\n ? (result.length === 1 && Number(result) > 1) ||\n (result === '1' && Number(inputSymbol) > 2) ||\n (inputValue.slice(cursor - 1, cursor).length === 1 &&\n Number(inputValue.slice(cursor - 1, cursor)) > 2) ||\n (inputValue.slice(cursor - 1, cursor) === '1' &&\n Number(inputSymbol) > 2)\n : (result === '2' && Number(inputSymbol) > 3) ||\n ((result.slice(cursor - 2, cursor) === '2' ||\n result.slice(cursor - 3, cursor) === '2' ||\n result.slice(cursor - 4, cursor) === '2' ||\n result.slice(cursor - 1, cursor) === '2') &&\n Number(inputSymbol) > 3 &&\n cursor > 10)) {\n // eslint-disable-next-line no-param-reassign\n position = position + 1;\n cursor += 1;\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === \"m\" /* MaskExpression.MINUTE */ ||\n maskExpression[cursor] === \"s\" /* MaskExpression.SECOND */) {\n if (Number(inputSymbol) > 5) {\n // eslint-disable-next-line no-param-reassign\n position = !this.leadZeroDateTime ? position + 1 : position;\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n const daysCount = 31;\n const inputValueCursor = inputValue[cursor];\n const inputValueCursorPlusOne = inputValue[cursor + 1];\n const inputValueCursorPlusTwo = inputValue[cursor + 2];\n const inputValueCursorMinusOne = inputValue[cursor - 1];\n const inputValueCursorMinusTwo = inputValue[cursor - 2];\n const inputValueCursorMinusThree = inputValue[cursor - 3];\n const inputValueSliceMinusThreeMinusOne = inputValue.slice(cursor - 3, cursor - 1);\n const inputValueSliceMinusOnePlusOne = inputValue.slice(cursor - 1, cursor + 1);\n const inputValueSliceCursorPlusTwo = inputValue.slice(cursor, cursor + 2);\n const inputValueSliceMinusTwoCursor = inputValue.slice(cursor - 2, cursor);\n if (maskExpression[cursor] === \"d\" /* MaskExpression.DAY */) {\n const maskStartWithMonth = maskExpression.slice(0, 2) === \"M0\" /* MaskExpression.MONTHS */;\n const startWithMonthInput = maskExpression.slice(0, 2) === \"M0\" /* MaskExpression.MONTHS */ &&\n this.specialCharacters.includes(inputValueCursorMinusTwo);\n if ((Number(inputSymbol) > 3 && this.leadZeroDateTime) ||\n (!maskStartWithMonth &&\n (Number(inputValueSliceCursorPlusTwo) > daysCount ||\n Number(inputValueSliceMinusOnePlusOne) > daysCount ||\n this.specialCharacters.includes(inputValueCursorPlusOne))) ||\n (startWithMonthInput\n ? Number(inputValueSliceMinusOnePlusOne) > daysCount ||\n (!this.specialCharacters.includes(inputValueCursor) &&\n this.specialCharacters.includes(inputValueCursorPlusTwo)) ||\n this.specialCharacters.includes(inputValueCursor)\n : Number(inputValueSliceCursorPlusTwo) > daysCount ||\n this.specialCharacters.includes(inputValueCursorPlusOne))) {\n // eslint-disable-next-line no-param-reassign\n position = !this.leadZeroDateTime ? position + 1 : position;\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n if (maskExpression[cursor] === \"M\" /* MaskExpression.MONTH */) {\n const monthsCount = 12;\n // mask without day\n const withoutDays = cursor === 0 &&\n (Number(inputSymbol) > 2 ||\n Number(inputValueSliceCursorPlusTwo) > monthsCount ||\n this.specialCharacters.includes(inputValueCursorPlusOne));\n // day<10 && month<12 for input\n const specialChart = maskExpression.slice(cursor + 2, cursor + 3);\n const day1monthInput = inputValueSliceMinusThreeMinusOne.includes(specialChart) &&\n ((this.specialCharacters.includes(inputValueCursorMinusTwo) &&\n Number(inputValueSliceMinusOnePlusOne) > monthsCount &&\n !this.specialCharacters.includes(inputValueCursor)) ||\n this.specialCharacters.includes(inputValueCursor) ||\n (this.specialCharacters.includes(inputValueCursorMinusThree) &&\n Number(inputValueSliceMinusTwoCursor) > monthsCount &&\n !this.specialCharacters.includes(inputValueCursorMinusOne)) ||\n this.specialCharacters.includes(inputValueCursorMinusOne));\n // month<12 && day<10 for input\n const day2monthInput = Number(inputValueSliceMinusThreeMinusOne) <= daysCount &&\n !this.specialCharacters.includes(inputValueSliceMinusThreeMinusOne) &&\n this.specialCharacters.includes(inputValueCursorMinusOne) &&\n (Number(inputValueSliceCursorPlusTwo) > monthsCount ||\n this.specialCharacters.includes(inputValueCursorPlusOne));\n // cursor === 5 && without days\n const day2monthInputDot = (Number(inputValueSliceCursorPlusTwo) > monthsCount && cursor === 5) ||\n (this.specialCharacters.includes(inputValueCursorPlusOne) &&\n cursor === 5);\n // // day<10 && month<12 for paste whole data\n const day1monthPaste = Number(inputValueSliceMinusThreeMinusOne) > daysCount &&\n !this.specialCharacters.includes(inputValueSliceMinusThreeMinusOne) &&\n !this.specialCharacters.includes(inputValueSliceMinusTwoCursor) &&\n Number(inputValueSliceMinusTwoCursor) > monthsCount;\n // 10 monthsCount;\n if ((Number(inputSymbol) > 1 && this.leadZeroDateTime) ||\n withoutDays ||\n day1monthInput ||\n day2monthPaste ||\n day1monthPaste ||\n day2monthInput ||\n (day2monthInputDot && !this.leadZeroDateTime)) {\n // eslint-disable-next-line no-param-reassign\n position = !this.leadZeroDateTime ? position + 1 : position;\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n result += inputSymbol;\n cursor++;\n }\n else if ((inputSymbol === \" \" /* MaskExpression.WHITE_SPACE */ &&\n maskExpression[cursor] === \" \" /* MaskExpression.WHITE_SPACE */) ||\n (inputSymbol === \"/\" /* MaskExpression.SLASH */ &&\n maskExpression[cursor] === \"/\" /* MaskExpression.SLASH */)) {\n result += inputSymbol;\n cursor++;\n }\n else if (this.specialCharacters.indexOf(maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */) !== -1) {\n result += maskExpression[cursor];\n cursor++;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n }\n else if (maskExpression[cursor] === \"9\" /* MaskExpression.NUMBER_NINE */ &&\n this.showMaskTyped) {\n this._shiftStep(maskExpression, cursor, inputArray.length);\n }\n else if (this.patterns[maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */] &&\n this.patterns[maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */]?.optional) {\n if (!!inputArray[cursor] &&\n maskExpression !== '099.099.099.099' &&\n maskExpression !== '000.000.000-00' &&\n maskExpression !== '00.000.000/0000-00' &&\n !maskExpression.match(/^9+\\.0+$/) &&\n !this.patterns[maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */]\n ?.optional) {\n result += inputArray[cursor];\n }\n if (maskExpression.includes(\"9\" /* MaskExpression.NUMBER_NINE */ + \"*\" /* MaskExpression.SYMBOL_STAR */) &&\n maskExpression.includes(\"0\" /* MaskExpression.NUMBER_ZERO */ + \"*\" /* MaskExpression.SYMBOL_STAR */)) {\n cursor++;\n }\n cursor++;\n i--;\n }\n else if (this.maskExpression[cursor + 1] === \"*\" /* MaskExpression.SYMBOL_STAR */ &&\n this._findSpecialChar(this.maskExpression[cursor + 2] ?? \"\" /* MaskExpression.EMPTY_STRING */) &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi) {\n cursor += 3;\n result += inputSymbol;\n }\n else if (this.maskExpression[cursor + 1] === \"?\" /* MaskExpression.SYMBOL_QUESTION */ &&\n this._findSpecialChar(this.maskExpression[cursor + 2] ?? \"\" /* MaskExpression.EMPTY_STRING */) &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi) {\n cursor += 3;\n result += inputSymbol;\n }\n else if (this.showMaskTyped &&\n this.specialCharacters.indexOf(inputSymbol) < 0 &&\n inputSymbol !== this.placeHolderCharacter &&\n this.placeHolderCharacter.length === 1) {\n stepBack = true;\n }\n }\n }\n if (result.length + 1 === maskExpression.length &&\n this.specialCharacters.indexOf(maskExpression[maskExpression.length - 1] ?? \"\" /* MaskExpression.EMPTY_STRING */) !== -1) {\n result += maskExpression[maskExpression.length - 1];\n }\n let newPosition = position + 1;\n while (this._shift.has(newPosition)) {\n shift++;\n newPosition++;\n }\n let actualShift = justPasted && !maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */)\n ? cursor\n : this._shift.has(position)\n ? shift\n : 0;\n if (stepBack) {\n actualShift--;\n }\n cb(actualShift, backspaceShift);\n if (shift < 0) {\n this._shift.clear();\n }\n let onlySpecial = false;\n if (backspaced) {\n onlySpecial = inputArray.every((char) => this.specialCharacters.includes(char));\n }\n let res = `${this.prefix}${onlySpecial ? \"\" /* MaskExpression.EMPTY_STRING */ : result}${this.showMaskTyped ? '' : this.suffix}`;\n if (result.length === 0) {\n res = !this.dropSpecialCharacters ? `${this.prefix}${result}` : `${result}`;\n }\n if (result.includes(\"-\" /* MaskExpression.MINUS */) && this.prefix && this.allowNegativeNumbers) {\n if (backspaced && result === \"-\" /* MaskExpression.MINUS */) {\n return '';\n }\n res = `${\"-\" /* MaskExpression.MINUS */}${this.prefix}${result\n .split(\"-\" /* MaskExpression.MINUS */)\n .join(\"\" /* MaskExpression.EMPTY_STRING */)}${this.suffix}`;\n }\n return res;\n }\n _findDropSpecialChar(inputSymbol) {\n if (Array.isArray(this.dropSpecialCharacters)) {\n return this.dropSpecialCharacters.find((val) => val === inputSymbol);\n }\n return this._findSpecialChar(inputSymbol);\n }\n _findSpecialChar(inputSymbol) {\n return this.specialCharacters.find((val) => val === inputSymbol);\n }\n _checkSymbolMask(inputSymbol, maskSymbol) {\n this.patterns = this.customPattern ? this.customPattern : this.patterns;\n return ((this.patterns[maskSymbol]?.pattern &&\n this.patterns[maskSymbol]?.pattern.test(inputSymbol)) ??\n false);\n }\n _stripToDecimal(str) {\n return str\n .split(\"\" /* MaskExpression.EMPTY_STRING */)\n .filter((i, idx) => {\n const isDecimalMarker = typeof this.decimalMarker === 'string'\n ? i === this.decimalMarker\n : // TODO (inepipenko) use utility type\n this.decimalMarker.includes(i);\n return (i.match('^-?\\\\d') ||\n i === this.thousandSeparator ||\n isDecimalMarker ||\n (i === \"-\" /* MaskExpression.MINUS */ && idx === 0 && this.allowNegativeNumbers));\n })\n .join(\"\" /* MaskExpression.EMPTY_STRING */);\n }\n _charToRegExpExpression(char) {\n // if (Array.isArray(char)) {\n // \treturn char.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|');\n // }\n if (char) {\n const charsToEscape = '[\\\\^$.|?*+()';\n return char === ' ' ? '\\\\s' : charsToEscape.indexOf(char) >= 0 ? `\\\\${char}` : char;\n }\n return char;\n }\n _shiftStep(maskExpression, cursor, inputLength) {\n const shiftStep = /[*?]/g.test(maskExpression.slice(0, cursor))\n ? inputLength\n : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n }\n _compareOrIncludes(value, comparedValue, excludedValue) {\n return Array.isArray(comparedValue)\n ? comparedValue.filter((v) => v !== excludedValue).includes(value)\n : value === comparedValue;\n }\n _validIP(valuesIP) {\n return !(valuesIP.length === 4 &&\n !valuesIP.some((value, index) => {\n if (valuesIP.length !== index + 1) {\n return value === \"\" /* MaskExpression.EMPTY_STRING */ || Number(value) > 255;\n }\n return value === \"\" /* MaskExpression.EMPTY_STRING */ || Number(value.substring(0, 3)) > 255;\n }));\n }\n _splitPercentZero(value) {\n const decimalIndex = typeof this.decimalMarker === 'string'\n ? value.indexOf(this.decimalMarker)\n : value.indexOf(\".\" /* MaskExpression.DOT */);\n if (decimalIndex === -1) {\n const parsedValue = parseInt(value, 10);\n return isNaN(parsedValue) ? \"\" /* MaskExpression.EMPTY_STRING */ : parsedValue.toString();\n }\n else {\n const integerPart = parseInt(value.substring(0, decimalIndex), 10);\n const decimalPart = value.substring(decimalIndex + 1);\n const integerString = isNaN(integerPart) ? '' : integerPart.toString();\n const decimal = typeof this.decimalMarker === 'string' ? this.decimalMarker : \".\" /* MaskExpression.DOT */;\n return integerString === \"\" /* MaskExpression.EMPTY_STRING */\n ? \"\" /* MaskExpression.EMPTY_STRING */\n : integerString + decimal + decimalPart;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.2.12\", ngImport: i0, type: NgxMaskApplierService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.2.12\", ngImport: i0, type: NgxMaskApplierService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.2.12\", ngImport: i0, type: NgxMaskApplierService, decorators: [{\n type: Injectable\n }] });\n\nclass NgxMaskService extends NgxMaskApplierService {\n constructor() {\n super(...arguments);\n this.isNumberValue = false;\n this.maskIsShown = '';\n this.selStart = null;\n this.selEnd = null;\n /**\n * Whether we are currently in writeValue function, in this case when applying the mask we don't want to trigger onChange function,\n * since writeValue should be a one way only process of writing the DOM value based on the Angular model value.\n */\n this.writingValue = false;\n this.maskChanged = false;\n this._maskExpressionArray = [];\n this.triggerOnMaskChange = false;\n this._previousValue = '';\n this._currentValue = '';\n this._emitValue = false;\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n this.onChange = (_) => { };\n this._elementRef = inject(ElementRef, { optional: true });\n this.document = inject(DOCUMENT);\n this._config = inject(NGX_MASK_CONFIG);\n this._renderer = inject(Renderer2, { optional: true });\n }\n // eslint-disable-next-line complexity\n applyMask(inputValue, maskExpression, position = 0, justPasted = false, backspaced = false, \n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb = () => { }) {\n if (!maskExpression) {\n return inputValue !== this.actualValue ? this.actualValue : inputValue;\n }\n this.maskIsShown = this.showMaskTyped\n ? this.showMaskInInput()\n : \"\" /* MaskExpression.EMPTY_STRING */;\n if (this.maskExpression === \"IP\" /* MaskExpression.IP */ && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || \"#\" /* MaskExpression.HASH */);\n }\n if (this.maskExpression === \"CPF_CNPJ\" /* MaskExpression.CPF_CNPJ */ && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || \"#\" /* MaskExpression.HASH */);\n }\n if (!inputValue && this.showMaskTyped) {\n this.formControlResult(this.prefix);\n return this.prefix + this.maskIsShown + this.suffix;\n }\n const getSymbol = !!inputValue && typeof this.selStart === 'number'\n ? inputValue[this.selStart] ?? \"\" /* MaskExpression.EMPTY_STRING */\n : \"\" /* MaskExpression.EMPTY_STRING */;\n let newInputValue = '';\n if (this.hiddenInput !== undefined && !this.writingValue) {\n let actualResult = inputValue && inputValue.length === 1\n ? inputValue.split(\"\" /* MaskExpression.EMPTY_STRING */)\n : this.actualValue.split(\"\" /* MaskExpression.EMPTY_STRING */);\n // eslint-disable @typescript-eslint/no-unused-expressions\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n if (typeof this.selStart === 'object' && typeof this.selEnd === 'object') {\n this.selStart = Number(this.selStart);\n this.selEnd = Number(this.selEnd);\n }\n else {\n inputValue !== \"\" /* MaskExpression.EMPTY_STRING */ && actualResult.length\n ? typeof this.selStart === 'number' && typeof this.selEnd === 'number'\n ? inputValue.length > actualResult.length\n ? actualResult.splice(this.selStart, 0, getSymbol)\n : inputValue.length < actualResult.length\n ? actualResult.length - inputValue.length === 1\n ? backspaced\n ? actualResult.splice(this.selStart - 1, 1)\n : actualResult.splice(inputValue.length - 1, 1)\n : actualResult.splice(this.selStart, this.selEnd - this.selStart)\n : null\n : null\n : (actualResult = []);\n }\n if (this.showMaskTyped) {\n if (!this.hiddenInput) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.removeMask(inputValue);\n }\n }\n // eslint-enable @typescript-eslint/no-unused-expressions\n newInputValue =\n this.actualValue.length && actualResult.length <= inputValue.length\n ? this.shiftTypedSymbols(actualResult.join(\"\" /* MaskExpression.EMPTY_STRING */))\n : inputValue;\n }\n if (justPasted && (this.hiddenInput || !this.hiddenInput)) {\n newInputValue = inputValue;\n }\n if (backspaced &&\n this.specialCharacters.indexOf(this.maskExpression[position] ?? \"\" /* MaskExpression.EMPTY_STRING */) !== -1 &&\n this.showMaskTyped) {\n newInputValue = this._currentValue;\n }\n if (this.deletedSpecialCharacter && position) {\n if (this.specialCharacters.includes(this.actualValue.slice(position, position + 1))) {\n // eslint-disable-next-line no-param-reassign\n position = position + 1;\n }\n else if (maskExpression.slice(position - 1, position + 1) !== \"M0\" /* MaskExpression.MONTHS */) {\n // eslint-disable-next-line no-param-reassign\n position = position - 2;\n }\n // eslint-disable-next-line no-param-reassign\n this.deletedSpecialCharacter = false;\n }\n if (this.showMaskTyped &&\n this.placeHolderCharacter.length === 1 &&\n !this.leadZeroDateTime) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.removeMask(inputValue);\n }\n if (this.maskChanged) {\n newInputValue = inputValue;\n }\n else {\n newInputValue =\n Boolean(newInputValue) && newInputValue.length ? newInputValue : inputValue;\n }\n if (this.showMaskTyped && this.keepCharacterPositions && this.actualValue && !justPasted) {\n const value = this.dropSpecialCharacters\n ? this.removeMask(this.actualValue)\n : this.actualValue;\n this.formControlResult(value);\n return this.actualValue\n ? this.actualValue\n : this.prefix + this.maskIsShown + this.suffix;\n }\n const result = super.applyMask(newInputValue, maskExpression, position, justPasted, backspaced, cb);\n this.actualValue = this.getActualValue(result);\n // handle some separator implications:\n // a.) adjust decimalMarker default (. -> ,) if thousandSeparator is a dot\n if (this.thousandSeparator === \".\" /* MaskExpression.DOT */ &&\n this.decimalMarker === \".\" /* MaskExpression.DOT */) {\n this.decimalMarker = \",\" /* MaskExpression.COMMA */;\n }\n // b) remove decimal marker from list of special characters to mask\n if (this.maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) &&\n this.dropSpecialCharacters === true) {\n this.specialCharacters = this.specialCharacters.filter((item) => !this._compareOrIncludes(item, this.decimalMarker, this.thousandSeparator) //item !== this.decimalMarker, // !\n );\n }\n if (result || result === '') {\n this._previousValue = this._currentValue;\n this._currentValue = result;\n this._emitValue =\n this._previousValue !== this._currentValue ||\n this.maskChanged ||\n (this._previousValue === this._currentValue && justPasted);\n }\n this._emitValue ? this.formControlResult(result) : '';\n if (!this.showMaskTyped || (this.showMaskTyped && this.hiddenInput)) {\n if (this.hiddenInput) {\n if (backspaced) {\n return this.hideInput(result, this.maskExpression);\n }\n return (this.hideInput(result, this.maskExpression) +\n this.maskIsShown.slice(result.length));\n }\n return result;\n }\n const resLen = result.length;\n const prefNmask = this.prefix + this.maskIsShown + this.suffix;\n if (this.maskExpression.includes(\"H\" /* MaskExpression.HOURS */)) {\n const countSkipedSymbol = this._numberSkipedSymbols(result);\n return result + prefNmask.slice(resLen + countSkipedSymbol);\n }\n else if (this.maskExpression === \"IP\" /* MaskExpression.IP */ ||\n this.maskExpression === \"CPF_CNPJ\" /* MaskExpression.CPF_CNPJ */) {\n return result + prefNmask;\n }\n return result + prefNmask.slice(resLen);\n }\n // get the number of characters that were shifted\n _numberSkipedSymbols(value) {\n const regex = /(^|\\D)(\\d\\D)/g;\n let match = regex.exec(value);\n let countSkipedSymbol = 0;\n while (match != null) {\n countSkipedSymbol += 1;\n match = regex.exec(value);\n }\n return countSkipedSymbol;\n }\n applyValueChanges(position, justPasted, backspaced, \n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb = () => { }) {\n const formElement = this._elementRef?.nativeElement;\n if (!formElement) {\n return;\n }\n formElement.value = this.applyMask(formElement.value, this.maskExpression, position, justPasted, backspaced, cb);\n if (formElement === this._getActiveElement()) {\n return;\n }\n this.clearIfNotMatchFn();\n }\n hideInput(inputValue, maskExpression) {\n return inputValue\n .split(\"\" /* MaskExpression.EMPTY_STRING */)\n .map((curr, index) => {\n if (this.patterns &&\n this.patterns[maskExpression[index] ?? \"\" /* MaskExpression.EMPTY_STRING */] &&\n this.patterns[maskExpression[index] ?? \"\" /* MaskExpression.EMPTY_STRING */]?.symbol) {\n return this.patterns[maskExpression[index] ?? \"\" /* MaskExpression.EMPTY_STRING */]\n ?.symbol;\n }\n return curr;\n })\n .join(\"\" /* MaskExpression.EMPTY_STRING */);\n }\n // this function is not necessary, it checks result against maskExpression\n getActualValue(res) {\n const compare = res\n .split(\"\" /* MaskExpression.EMPTY_STRING */)\n .filter((symbol, i) => {\n const maskChar = this.maskExpression[i] ?? \"\" /* MaskExpression.EMPTY_STRING */;\n return (this._checkSymbolMask(symbol, maskChar) ||\n (this.specialCharacters.includes(maskChar) && symbol === maskChar));\n });\n if (compare.join(\"\" /* MaskExpression.EMPTY_STRING */) === res) {\n return compare.join(\"\" /* MaskExpression.EMPTY_STRING */);\n }\n return res;\n }\n shiftTypedSymbols(inputValue) {\n let symbolToReplace = '';\n const newInputValue = (inputValue &&\n inputValue\n .split(\"\" /* MaskExpression.EMPTY_STRING */)\n .map((currSymbol, index) => {\n if (this.specialCharacters.includes(inputValue[index + 1] ?? \"\" /* MaskExpression.EMPTY_STRING */) &&\n inputValue[index + 1] !== this.maskExpression[index + 1]) {\n symbolToReplace = currSymbol;\n return inputValue[index + 1];\n }\n if (symbolToReplace.length) {\n const replaceSymbol = symbolToReplace;\n symbolToReplace = \"\" /* MaskExpression.EMPTY_STRING */;\n return replaceSymbol;\n }\n return currSymbol;\n })) ||\n [];\n return newInputValue.join(\"\" /* MaskExpression.EMPTY_STRING */);\n }\n /**\n * Convert number value to string\n * 3.1415 -> '3.1415'\n * 1e-7 -> '0.0000001'\n */\n numberToString(value) {\n if ((!value && value !== 0) ||\n (this.maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) &&\n (this.leadZero || !this.dropSpecialCharacters)) ||\n (this.maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) &&\n this.separatorLimit.length > 14 &&\n String(value).length > 14)) {\n return String(value);\n }\n return Number(value)\n .toLocaleString('fullwide', {\n useGrouping: false,\n maximumFractionDigits: 20,\n })\n .replace(`/${\"-\" /* MaskExpression.MINUS */}/`, \"-\" /* MaskExpression.MINUS */);\n }\n showMaskInInput(inputVal) {\n if (this.showMaskTyped && !!this.shownMaskExpression) {\n if (this.maskExpression.length !== this.shownMaskExpression.length) {\n throw new Error('Mask expression must match mask placeholder length');\n }\n else {\n return this.shownMaskExpression;\n }\n }\n else if (this.showMaskTyped) {\n if (inputVal) {\n if (this.maskExpression === \"IP\" /* MaskExpression.IP */) {\n return this._checkForIp(inputVal);\n }\n if (this.maskExpression === \"CPF_CNPJ\" /* MaskExpression.CPF_CNPJ */) {\n return this._checkForCpfCnpj(inputVal);\n }\n }\n if (this.placeHolderCharacter.length === this.maskExpression.length) {\n return this.placeHolderCharacter;\n }\n return this.maskExpression.replace(/\\w/g, this.placeHolderCharacter);\n }\n return '';\n }\n clearIfNotMatchFn() {\n const formElement = this._elementRef?.nativeElement;\n if (!formElement) {\n return;\n }\n if (this.clearIfNotMatch &&\n this.prefix.length + this.maskExpression.length + this.suffix.length !==\n formElement.value.replace(this.placeHolderCharacter, \"\" /* MaskExpression.EMPTY_STRING */)\n .length) {\n this.formElementProperty = ['value', \"\" /* MaskExpression.EMPTY_STRING */];\n this.applyMask('', this.maskExpression);\n }\n }\n set formElementProperty([name, value]) {\n if (!this._renderer || !this._elementRef) {\n return;\n }\n Promise.resolve().then(() => this._renderer?.setProperty(this._elementRef?.nativeElement, name, value));\n }\n checkDropSpecialCharAmount(mask) {\n const chars = mask\n .split(\"\" /* MaskExpression.EMPTY_STRING */)\n .filter((item) => this._findDropSpecialChar(item));\n return chars.length;\n }\n removeMask(inputValue) {\n return this._removeMask(this._removeSuffix(this._removePrefix(inputValue)), this.specialCharacters.concat('_').concat(this.placeHolderCharacter));\n }\n _checkForIp(inputVal) {\n if (inputVal === \"#\" /* MaskExpression.HASH */) {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n const arr = [];\n for (let i = 0; i < inputVal.length; i++) {\n const value = inputVal[i] ?? \"\" /* MaskExpression.EMPTY_STRING */;\n if (!value) {\n continue;\n }\n if (value.match('\\\\d')) {\n arr.push(value);\n }\n }\n if (arr.length <= 3) {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n if (arr.length > 3 && arr.length <= 6) {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n if (arr.length > 6 && arr.length <= 9) {\n return this.placeHolderCharacter;\n }\n if (arr.length > 9 && arr.length <= 12) {\n return '';\n }\n return '';\n }\n _checkForCpfCnpj(inputVal) {\n const cpf = `${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n const cnpj = `${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `/${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n if (inputVal === \"#\" /* MaskExpression.HASH */) {\n return cpf;\n }\n const arr = [];\n for (let i = 0; i < inputVal.length; i++) {\n const value = inputVal[i] ?? \"\" /* MaskExpression.EMPTY_STRING */;\n if (!value) {\n continue;\n }\n if (value.match('\\\\d')) {\n arr.push(value);\n }\n }\n if (arr.length <= 3) {\n return cpf.slice(arr.length, cpf.length);\n }\n if (arr.length > 3 && arr.length <= 6) {\n return cpf.slice(arr.length + 1, cpf.length);\n }\n if (arr.length > 6 && arr.length <= 9) {\n return cpf.slice(arr.length + 2, cpf.length);\n }\n if (arr.length > 9 && arr.length < 11) {\n return cpf.slice(arr.length + 3, cpf.length);\n }\n if (arr.length === 11) {\n return '';\n }\n if (arr.length === 12) {\n if (inputVal.length === 17) {\n return cnpj.slice(16, cnpj.length);\n }\n return cnpj.slice(15, cnpj.length);\n }\n if (arr.length > 12 && arr.length <= 14) {\n return cnpj.slice(arr.length + 4, cnpj.length);\n }\n return '';\n }\n /**\n * Recursively determine the current active element by navigating the Shadow DOM until the Active Element is found.\n */\n _getActiveElement(document = this.document) {\n const shadowRootEl = document?.activeElement?.shadowRoot;\n if (!shadowRootEl?.activeElement) {\n return document.activeElement;\n }\n else {\n return this._getActiveElement(shadowRootEl);\n }\n }\n /**\n * Propogates the input value back to the Angular model by triggering the onChange function. It won't do this if writingValue\n * is true. If that is true it means we are currently in the writeValue function, which is supposed to only update the actual\n * DOM element based on the Angular model value. It should be a one way process, i.e. writeValue should not be modifying the Angular\n * model value too. Therefore, we don't trigger onChange in this scenario.\n * @param inputValue the current form input value\n */\n formControlResult(inputValue) {\n if (this.writingValue || (!this.triggerOnMaskChange && this.maskChanged)) {\n this.maskChanged\n ? this.onChange(this.outputTransformFn(this._toNumber(this._checkSymbols(this._removeSuffix(this._removePrefix(inputValue))))))\n : '';\n this.maskChanged = false;\n return;\n }\n if (Array.isArray(this.dropSpecialCharacters)) {\n this.onChange(this.outputTransformFn(this._toNumber(this._checkSymbols(this._removeMask(this._removeSuffix(this._removePrefix(inputValue)), this.dropSpecialCharacters)))));\n }\n else if (this.dropSpecialCharacters ||\n (!this.dropSpecialCharacters && this.prefix === inputValue)) {\n this.onChange(this.outputTransformFn(this._toNumber(this._checkSymbols(this._removeSuffix(this._removePrefix(inputValue))))));\n }\n else {\n this.onChange(this.outputTransformFn(this._toNumber(inputValue)));\n }\n }\n _toNumber(value) {\n if (!this.isNumberValue || value === \"\" /* MaskExpression.EMPTY_STRING */) {\n return value;\n }\n if (this.maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) &&\n (this.leadZero || !this.dropSpecialCharacters)) {\n return value;\n }\n if (String(value).length > 16 && this.separatorLimit.length > 14) {\n return String(value);\n }\n const num = Number(value);\n if (this.maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) && Number.isNaN(num)) {\n const val = String(value).replace(',', '.');\n return Number(val);\n }\n return Number.isNaN(num) ? value : num;\n }\n _removeMask(value, specialCharactersForRemove) {\n if (this.maskExpression.startsWith(\"percent\" /* MaskExpression.PERCENT */) &&\n value.includes(\".\" /* MaskExpression.DOT */)) {\n return value;\n }\n return value\n ? value.replace(this._regExpForRemove(specialCharactersForRemove), \"\" /* MaskExpression.EMPTY_STRING */)\n : value;\n }\n _removePrefix(value) {\n if (!this.prefix) {\n return value;\n }\n return value ? value.replace(this.prefix, \"\" /* MaskExpression.EMPTY_STRING */) : value;\n }\n _removeSuffix(value) {\n if (!this.suffix) {\n return value;\n }\n return value ? value.replace(this.suffix, \"\" /* MaskExpression.EMPTY_STRING */) : value;\n }\n _retrieveSeparatorValue(result) {\n let specialCharacters = Array.isArray(this.dropSpecialCharacters)\n ? this.specialCharacters.filter((v) => {\n return this.dropSpecialCharacters.includes(v);\n })\n : this.specialCharacters;\n if (!this.deletedSpecialCharacter &&\n this._checkPatternForSpace() &&\n result.includes(\" \" /* MaskExpression.WHITE_SPACE */) &&\n this.maskExpression.includes(\"*\" /* MaskExpression.SYMBOL_STAR */)) {\n specialCharacters = specialCharacters.filter((char) => char !== \" \" /* MaskExpression.WHITE_SPACE */);\n }\n return this._removeMask(result, specialCharacters);\n }\n _regExpForRemove(specialCharactersForRemove) {\n return new RegExp(specialCharactersForRemove.map((item) => `\\\\${item}`).join('|'), 'gi');\n }\n _replaceDecimalMarkerToDot(value) {\n const markers = Array.isArray(this.decimalMarker)\n ? this.decimalMarker\n : [this.decimalMarker];\n return value.replace(this._regExpForRemove(markers), \".\" /* MaskExpression.DOT */);\n }\n _checkSymbols(result) {\n if (result === \"\" /* MaskExpression.EMPTY_STRING */) {\n return result;\n }\n if (this.maskExpression.startsWith(\"percent\" /* MaskExpression.PERCENT */) &&\n this.decimalMarker === \",\" /* MaskExpression.COMMA */) {\n // eslint-disable-next-line no-param-reassign\n result = result.replace(\",\" /* MaskExpression.COMMA */, \".\" /* MaskExpression.DOT */);\n }\n const separatorPrecision = this._retrieveSeparatorPrecision(this.maskExpression);\n const separatorValue = this._replaceDecimalMarkerToDot(this._retrieveSeparatorValue(result));\n if (!this.isNumberValue) {\n return separatorValue;\n }\n if (separatorPrecision) {\n if (result === this.decimalMarker) {\n return null;\n }\n if (this.separatorLimit.length > 14) {\n return String(separatorValue);\n }\n return this._checkPrecision(this.maskExpression, separatorValue);\n }\n else {\n return separatorValue;\n }\n }\n _checkPatternForSpace() {\n for (const key in this.patterns) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.patterns[key] && this.patterns[key]?.hasOwnProperty('pattern')) {\n const patternString = this.patterns[key]?.pattern.toString();\n const pattern = this.patterns[key]?.pattern;\n if (patternString?.includes(\" \" /* MaskExpression.WHITE_SPACE */) &&\n pattern?.test(this.maskExpression)) {\n return true;\n }\n }\n }\n return false;\n }\n // TODO should think about helpers or separting decimal precision to own property\n _retrieveSeparatorPrecision(maskExpretion) {\n const matcher = maskExpretion.match(new RegExp(`^separator\\\\.([^d]*)`));\n return matcher ? Number(matcher[1]) : null;\n }\n _checkPrecision(separatorExpression, separatorValue) {\n const separatorPrecision = separatorExpression.slice(10, 11);\n if (separatorExpression.indexOf('2') > 0 ||\n (this.leadZero && Number(separatorPrecision) > 1)) {\n if (this.decimalMarker === \",\" /* MaskExpression.COMMA */ && this.leadZero) {\n // eslint-disable-next-line no-param-reassign\n separatorValue = separatorValue.replace(',', '.');\n }\n return this.leadZero\n ? Number(separatorValue).toFixed(Number(separatorPrecision))\n : Number(separatorValue).toFixed(2);\n }\n return this.numberToString(separatorValue);\n }\n _repeatPatternSymbols(maskExp) {\n return ((maskExp.match(/{[0-9]+}/) &&\n maskExp\n .split(\"\" /* MaskExpression.EMPTY_STRING */)\n .reduce((accum, currVal, index) => {\n this._start =\n currVal === \"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */ ? index : this._start;\n if (currVal !== \"}\" /* MaskExpression.CURLY_BRACKETS_RIGHT */) {\n return this._findSpecialChar(currVal) ? accum + currVal : accum;\n }\n this._end = index;\n const repeatNumber = Number(maskExp.slice(this._start + 1, this._end));\n const replaceWith = new Array(repeatNumber + 1).join(maskExp[this._start - 1]);\n if (maskExp.slice(0, this._start).length > 1 &&\n maskExp.includes(\"S\" /* MaskExpression.LETTER_S */)) {\n const symbols = maskExp.slice(0, this._start - 1);\n return symbols.includes(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */)\n ? accum + replaceWith\n : symbols + accum + replaceWith;\n }\n else {\n return accum + replaceWith;\n }\n }, '')) ||\n maskExp);\n }\n currentLocaleDecimalMarker() {\n return (1.1).toLocaleString().substring(1, 2);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.2.12\", ngImport: i0, type: NgxMaskService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.2.12\", ngImport: i0, type: NgxMaskService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.2.12\", ngImport: i0, type: NgxMaskService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @internal\n */\nfunction _configFactory() {\n const initConfig = inject(INITIAL_CONFIG);\n const configValue = inject(NEW_CONFIG);\n return configValue instanceof Function\n ? { ...initConfig, ...configValue() }\n : { ...initConfig, ...configValue };\n}\nfunction provideNgxMask(configValue) {\n return [\n {\n provide: NEW_CONFIG,\n useValue: configValue,\n },\n {\n provide: INITIAL_CONFIG,\n useValue: initialConfig,\n },\n {\n provide: NGX_MASK_CONFIG,\n useFactory: _configFactory,\n },\n NgxMaskService,\n ];\n}\nfunction provideEnvironmentNgxMask(configValue) {\n return makeEnvironmentProviders(provideNgxMask(configValue));\n}\n\nclass NgxMaskDirective {\n constructor() {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n this.maskExpression = '';\n this.specialCharacters = [];\n this.patterns = {};\n this.prefix = '';\n this.suffix = '';\n this.thousandSeparator = ' ';\n this.decimalMarker = '.';\n this.dropSpecialCharacters = null;\n this.hiddenInput = null;\n this.showMaskTyped = null;\n this.placeHolderCharacter = null;\n this.shownMaskExpression = null;\n this.showTemplate = null;\n this.clearIfNotMatch = null;\n this.validation = null;\n this.separatorLimit = null;\n this.allowNegativeNumbers = null;\n this.leadZeroDateTime = null;\n this.leadZero = null;\n this.triggerOnMaskChange = null;\n this.apm = null;\n this.inputTransformFn = null;\n this.outputTransformFn = null;\n this.keepCharacterPositions = null;\n this.maskFilled = new EventEmitter();\n this._maskValue = '';\n this._position = null;\n this._maskExpressionArray = [];\n this._justPasted = false;\n this._isFocused = false;\n /**For IME composition event */\n this._isComposing = false;\n this.document = inject(DOCUMENT);\n this._maskService = inject(NgxMaskService, { self: true });\n this._config = inject(NGX_MASK_CONFIG);\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n this.onChange = (_) => { };\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n this.onTouch = () => { };\n }\n ngOnChanges(changes) {\n const { maskExpression, specialCharacters, patterns, prefix, suffix, thousandSeparator, decimalMarker, dropSpecialCharacters, hiddenInput, showMaskTyped, placeHolderCharacter, shownMaskExpression, showTemplate, clearIfNotMatch, validation, separatorLimit, allowNegativeNumbers, leadZeroDateTime, leadZero, triggerOnMaskChange, apm, inputTransformFn, outputTransformFn, keepCharacterPositions, } = changes;\n if (maskExpression) {\n if (maskExpression.currentValue !== maskExpression.previousValue &&\n !maskExpression.firstChange) {\n this._maskService.maskChanged = true;\n }\n if (maskExpression.currentValue &&\n maskExpression.currentValue.split(\"||\" /* MaskExpression.OR */).length > 1) {\n this._maskExpressionArray = maskExpression.currentValue\n .split(\"||\" /* MaskExpression.OR */)\n .sort((a, b) => {\n return a.length - b.length;\n });\n this._setMask();\n }\n else {\n this._maskExpressionArray = [];\n this._maskValue = maskExpression.currentValue || \"\" /* MaskExpression.EMPTY_STRING */;\n this._maskService.maskExpression = this._maskValue;\n }\n }\n if (specialCharacters) {\n if (!specialCharacters.currentValue || !Array.isArray(specialCharacters.currentValue)) {\n return;\n }\n else {\n this._maskService.specialCharacters = specialCharacters.currentValue || [];\n }\n }\n if (allowNegativeNumbers) {\n this._maskService.allowNegativeNumbers = allowNegativeNumbers.currentValue;\n if (this._maskService.allowNegativeNumbers) {\n this._maskService.specialCharacters = this._maskService.specialCharacters.filter((c) => c !== \"-\" /* MaskExpression.MINUS */);\n }\n }\n // Only overwrite the mask available patterns if a pattern has actually been passed in\n if (patterns && patterns.currentValue) {\n this._maskService.patterns = patterns.currentValue;\n }\n if (apm && apm.currentValue) {\n this._maskService.apm = apm.currentValue;\n }\n if (prefix) {\n this._maskService.prefix = prefix.currentValue;\n }\n if (suffix) {\n this._maskService.suffix = suffix.currentValue;\n }\n if (thousandSeparator) {\n this._maskService.thousandSeparator = thousandSeparator.currentValue;\n }\n if (decimalMarker) {\n this._maskService.decimalMarker = decimalMarker.currentValue;\n }\n if (dropSpecialCharacters) {\n this._maskService.dropSpecialCharacters = dropSpecialCharacters.currentValue;\n }\n if (hiddenInput) {\n this._maskService.hiddenInput = hiddenInput.currentValue;\n }\n if (showMaskTyped) {\n this._maskService.showMaskTyped = showMaskTyped.currentValue;\n if (showMaskTyped.previousValue === false &&\n showMaskTyped.currentValue === true &&\n this._isFocused) {\n requestAnimationFrame(() => {\n this._maskService._elementRef?.nativeElement.click();\n });\n }\n }\n if (placeHolderCharacter) {\n this._maskService.placeHolderCharacter = placeHolderCharacter.currentValue;\n }\n if (shownMaskExpression) {\n this._maskService.shownMaskExpression = shownMaskExpression.currentValue;\n }\n if (showTemplate) {\n this._maskService.showTemplate = showTemplate.currentValue;\n }\n if (clearIfNotMatch) {\n this._maskService.clearIfNotMatch = clearIfNotMatch.currentValue;\n }\n if (validation) {\n this._maskService.validation = validation.currentValue;\n }\n if (separatorLimit) {\n this._maskService.separatorLimit = separatorLimit.currentValue;\n }\n if (leadZeroDateTime) {\n this._maskService.leadZeroDateTime = leadZeroDateTime.currentValue;\n }\n if (leadZero) {\n this._maskService.leadZero = leadZero.currentValue;\n }\n if (triggerOnMaskChange) {\n this._maskService.triggerOnMaskChange = triggerOnMaskChange.currentValue;\n }\n if (inputTransformFn) {\n this._maskService.inputTransformFn = inputTransformFn.currentValue;\n }\n if (outputTransformFn) {\n this._maskService.outputTransformFn = outputTransformFn.currentValue;\n }\n if (keepCharacterPositions) {\n this._maskService.keepCharacterPositions = keepCharacterPositions.currentValue;\n }\n this._applyMask();\n }\n // eslint-disable-next-line complexity\n validate({ value }) {\n if (!this._maskService.validation || !this._maskValue) {\n return null;\n }\n if (this._maskService.ipError) {\n return this._createValidationError(value);\n }\n if (this._maskService.cpfCnpjError) {\n return this._createValidationError(value);\n }\n if (this._maskValue.startsWith(\"separator\" /* MaskExpression.SEPARATOR */)) {\n return null;\n }\n if (withoutValidation.includes(this._maskValue)) {\n return null;\n }\n if (this._maskService.clearIfNotMatch) {\n return null;\n }\n if (timeMasks.includes(this._maskValue)) {\n return this._validateTime(value);\n }\n if (value && value.toString().length >= 1) {\n let counterOfOpt = 0;\n if (this._maskValue.startsWith(\"percent\" /* MaskExpression.PERCENT */)) {\n return null;\n }\n for (const key in this._maskService.patterns) {\n if (this._maskService.patterns[key]?.optional) {\n if (this._maskValue.indexOf(key) !== this._maskValue.lastIndexOf(key)) {\n const opt = this._maskValue\n .split(\"\" /* MaskExpression.EMPTY_STRING */)\n .filter((i) => i === key)\n .join(\"\" /* MaskExpression.EMPTY_STRING */);\n counterOfOpt += opt.length;\n }\n else if (this._maskValue.indexOf(key) !== -1) {\n counterOfOpt++;\n }\n if (this._maskValue.indexOf(key) !== -1 &&\n value.toString().length >= this._maskValue.indexOf(key)) {\n return null;\n }\n if (counterOfOpt === this._maskValue.length) {\n return null;\n }\n }\n }\n if (this._maskValue.indexOf(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */) === 1 &&\n value.toString().length ===\n this._maskValue.length +\n Number((this._maskValue.split(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */)[1] ??\n \"\" /* MaskExpression.EMPTY_STRING */).split(\"}\" /* MaskExpression.CURLY_BRACKETS_RIGHT */)[0]) -\n 4) {\n return null;\n }\n else if ((this._maskValue.indexOf(\"*\" /* MaskExpression.SYMBOL_STAR */) > 1 &&\n value.toString().length <\n this._maskValue.indexOf(\"*\" /* MaskExpression.SYMBOL_STAR */)) ||\n (this._maskValue.indexOf(\"?\" /* MaskExpression.SYMBOL_QUESTION */) > 1 &&\n value.toString().length <\n this._maskValue.indexOf(\"?\" /* MaskExpression.SYMBOL_QUESTION */)) ||\n this._maskValue.indexOf(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */) === 1) {\n return this._createValidationError(value);\n }\n if (this._maskValue.indexOf(\"*\" /* MaskExpression.SYMBOL_STAR */) === -1 ||\n this._maskValue.indexOf(\"?\" /* MaskExpression.SYMBOL_QUESTION */) === -1) {\n // eslint-disable-next-line no-param-reassign\n value = typeof value === 'number' ? String(value) : value;\n const array = this._maskValue.split('*');\n const length = this._maskService.dropSpecialCharacters\n ? this._maskValue.length -\n this._maskService.checkDropSpecialCharAmount(this._maskValue) -\n counterOfOpt\n : this.prefix\n ? this._maskValue.length + this.prefix.length - counterOfOpt\n : this._maskValue.length - counterOfOpt;\n if (array.length === 1) {\n if (value.toString().length < length) {\n return this._createValidationError(value);\n }\n }\n if (array.length > 1) {\n const lastIndexArray = array[array.length - 1];\n if (lastIndexArray &&\n this._maskService.specialCharacters.includes(lastIndexArray[0]) &&\n String(value).includes(lastIndexArray[0] ?? '') &&\n !this.dropSpecialCharacters) {\n const special = value.split(lastIndexArray[0]);\n return special[special.length - 1].length === lastIndexArray.length - 1\n ? null\n : this._createValidationError(value);\n }\n else if (((lastIndexArray &&\n !this._maskService.specialCharacters.includes(lastIndexArray[0])) ||\n !lastIndexArray ||\n this._maskService.dropSpecialCharacters) &&\n value.length >= length - 1) {\n return null;\n }\n else {\n return this._createValidationError(value);\n }\n }\n }\n if (this._maskValue.indexOf(\"*\" /* MaskExpression.SYMBOL_STAR */) === 1 ||\n this._maskValue.indexOf(\"?\" /* MaskExpression.SYMBOL_QUESTION */) === 1) {\n return null;\n }\n }\n if (value) {\n this.maskFilled.emit();\n return null;\n }\n return null;\n }\n onPaste() {\n this._justPasted = true;\n }\n onFocus() {\n this._isFocused = true;\n }\n onModelChange(value) {\n // on form reset we need to update the actualValue\n if ((value === \"\" /* MaskExpression.EMPTY_STRING */ || value === null || value === undefined) &&\n this._maskService.actualValue) {\n this._maskService.actualValue = this._maskService.getActualValue(\"\" /* MaskExpression.EMPTY_STRING */);\n }\n }\n onInput(e) {\n // If IME is composing text, we wait for the composed text.\n if (this._isComposing)\n return;\n const el = e.target;\n const transformedValue = this._maskService.inputTransformFn(el.value);\n if (el.type !== 'number') {\n if (typeof transformedValue === 'string' || typeof transformedValue === 'number') {\n el.value = transformedValue.toString();\n this._inputValue = el.value;\n this._setMask();\n if (!this._maskValue) {\n this.onChange(el.value);\n return;\n }\n let position = el.selectionStart === 1\n ? el.selectionStart + this._maskService.prefix.length\n : el.selectionStart;\n if (this.showMaskTyped &&\n this.keepCharacterPositions &&\n this._maskService.placeHolderCharacter.length === 1) {\n const inputSymbol = el.value.slice(position - 1, position);\n const prefixLength = this.prefix.length;\n const checkSymbols = this._maskService._checkSymbolMask(inputSymbol, this._maskService.maskExpression[position - 1 - prefixLength] ??\n \"\" /* MaskExpression.EMPTY_STRING */);\n const checkSpecialCharacter = this._maskService._checkSymbolMask(inputSymbol, this._maskService.maskExpression[position + 1 - prefixLength] ??\n \"\" /* MaskExpression.EMPTY_STRING */);\n const selectRangeBackspace = this._maskService.selStart === this._maskService.selEnd;\n const selStart = Number(this._maskService.selStart) - prefixLength ?? '';\n const selEnd = Number(this._maskService.selEnd) - prefixLength ?? '';\n if (this._code === \"Backspace\" /* MaskExpression.BACKSPACE */) {\n if (!selectRangeBackspace) {\n if (this._maskService.selStart === prefixLength) {\n this._maskService.actualValue =\n this.prefix +\n this._maskService.maskIsShown.slice(0, selEnd) +\n this._inputValue.split(this.prefix).join('');\n }\n else if (this._maskService.selStart ===\n this._maskService.maskIsShown.length + prefixLength) {\n this._maskService.actualValue =\n this._inputValue +\n this._maskService.maskIsShown.slice(selStart, selEnd);\n }\n else {\n this._maskService.actualValue =\n this.prefix +\n this._inputValue\n .split(this.prefix)\n .join('')\n .slice(0, selStart) +\n this._maskService.maskIsShown.slice(selStart, selEnd) +\n this._maskService.actualValue.slice(selEnd + prefixLength, this._maskService.maskIsShown.length + prefixLength) +\n this.suffix;\n }\n }\n else if (!this._maskService.specialCharacters.includes(this._maskService.maskExpression.slice(position - this.prefix.length, position + 1 - this.prefix.length)) &&\n selectRangeBackspace) {\n if (selStart === 1 && this.prefix) {\n this._maskService.actualValue =\n this.prefix +\n this._maskService.placeHolderCharacter +\n el.value\n .split(this.prefix)\n .join('')\n .split(this.suffix)\n .join('') +\n this.suffix;\n position = position - 1;\n }\n else {\n const part1 = el.value.substring(0, position);\n const part2 = el.value.substring(position);\n this._maskService.actualValue =\n part1 + this._maskService.placeHolderCharacter + part2;\n }\n }\n }\n if (this._code !== \"Backspace\" /* MaskExpression.BACKSPACE */) {\n if (!checkSymbols && !checkSpecialCharacter && selectRangeBackspace) {\n position = Number(el.selectionStart) - 1;\n }\n else if (this._maskService.specialCharacters.includes(el.value.slice(position, position + 1)) &&\n checkSpecialCharacter &&\n !this._maskService.specialCharacters.includes(el.value.slice(position + 1, position + 2))) {\n this._maskService.actualValue =\n el.value.slice(0, position - 1) +\n el.value.slice(position, position + 1) +\n inputSymbol +\n el.value.slice(position + 2);\n position = position + 1;\n }\n else if (checkSymbols) {\n if (el.value.length === 1 && position === 1) {\n this._maskService.actualValue =\n this.prefix +\n inputSymbol +\n this._maskService.maskIsShown.slice(1, this._maskService.maskIsShown.length) +\n this.suffix;\n }\n else {\n this._maskService.actualValue =\n el.value.slice(0, position - 1) +\n inputSymbol +\n el.value\n .slice(position + 1)\n .split(this.suffix)\n .join('') +\n this.suffix;\n }\n }\n else if (this.prefix &&\n el.value.length === 1 &&\n position - prefixLength === 1 &&\n this._maskService._checkSymbolMask(el.value, this._maskService.maskExpression[position - 1 - prefixLength] ??\n \"\" /* MaskExpression.EMPTY_STRING */)) {\n this._maskService.actualValue =\n this.prefix +\n el.value +\n this._maskService.maskIsShown.slice(1, this._maskService.maskIsShown.length) +\n this.suffix;\n }\n }\n }\n let caretShift = 0;\n let backspaceShift = false;\n if (this._code === \"Delete\" /* MaskExpression.DELETE */ && \"separator\" /* MaskExpression.SEPARATOR */) {\n this._maskService.deletedSpecialCharacter = true;\n }\n if (this._inputValue.length >= this._maskService.maskExpression.length - 1 &&\n this._code !== \"Backspace\" /* MaskExpression.BACKSPACE */ &&\n this._maskService.maskExpression === \"d0/M0/0000\" /* MaskExpression.DAYS_MONTHS_YEARS */ &&\n position < 10) {\n const inputSymbol = this._inputValue.slice(position - 1, position);\n el.value =\n this._inputValue.slice(0, position - 1) +\n inputSymbol +\n this._inputValue.slice(position + 1);\n }\n if (this._maskService.maskExpression === \"d0/M0/0000\" /* MaskExpression.DAYS_MONTHS_YEARS */ &&\n this.leadZeroDateTime) {\n if ((position < 3 && Number(el.value) > 31 && Number(el.value) < 40) ||\n (position === 5 && Number(el.value.slice(3, 5)) > 12)) {\n position = position + 2;\n }\n }\n if (this._maskService.maskExpression === \"Hh:m0:s0\" /* MaskExpression.HOURS_MINUTES_SECONDS */ &&\n this.apm) {\n if (this._justPasted && el.value.slice(0, 2) === \"00\" /* MaskExpression.DOUBLE_ZERO */) {\n el.value = el.value.slice(1, 2) + el.value.slice(2, el.value.length);\n }\n el.value =\n el.value === \"00\" /* MaskExpression.DOUBLE_ZERO */\n ? \"0\" /* MaskExpression.NUMBER_ZERO */\n : el.value;\n }\n this._maskService.applyValueChanges(position, this._justPasted, this._code === \"Backspace\" /* MaskExpression.BACKSPACE */ || this._code === \"Delete\" /* MaskExpression.DELETE */, (shift, _backspaceShift) => {\n this._justPasted = false;\n caretShift = shift;\n backspaceShift = _backspaceShift;\n });\n // only set the selection if the element is active\n if (this._getActiveElement() !== el) {\n return;\n }\n if (this._maskService.plusOnePosition) {\n position = position + 1;\n this._maskService.plusOnePosition = false;\n }\n // update position after applyValueChanges to prevent cursor on wrong position when it has an array of maskExpression\n if (this._maskExpressionArray.length) {\n if (this._code === \"Backspace\" /* MaskExpression.BACKSPACE */) {\n position = this.specialCharacters.includes(this._inputValue.slice(position - 1, position))\n ? position - 1\n : position;\n }\n else {\n position =\n el.selectionStart === 1\n ? el.selectionStart + this._maskService.prefix.length\n : el.selectionStart;\n }\n }\n this._position =\n this._position === 1 && this._inputValue.length === 1 ? null : this._position;\n let positionToApply = this._position\n ? this._inputValue.length + position + caretShift\n : position +\n (this._code === \"Backspace\" /* MaskExpression.BACKSPACE */ && !backspaceShift ? 0 : caretShift);\n if (positionToApply > this._getActualInputLength()) {\n positionToApply =\n el.value === this._maskService.decimalMarker && el.value.length === 1\n ? this._getActualInputLength() + 1\n : this._getActualInputLength();\n }\n if (positionToApply < 0) {\n positionToApply = 0;\n }\n el.setSelectionRange(positionToApply, positionToApply);\n this._position = null;\n }\n else {\n console.warn('Ngx-mask writeValue work with string | number, your current value:', typeof transformedValue);\n }\n }\n else {\n if (!this._maskValue) {\n this.onChange(el.value);\n return;\n }\n this._maskService.applyValueChanges(el.value.length, this._justPasted, this._code === \"Backspace\" /* MaskExpression.BACKSPACE */ || this._code === \"Delete\" /* MaskExpression.DELETE */);\n }\n }\n // IME starts\n onCompositionStart() {\n this._isComposing = true;\n }\n // IME completes\n onCompositionEnd(e) {\n this._isComposing = false;\n this._justPasted = true;\n this.onInput(e);\n }\n onBlur(e) {\n if (this._maskValue) {\n const el = e.target;\n if (this.leadZero && el.value.length > 0 && typeof this.decimalMarker === 'string') {\n const maskExpression = this._maskService.maskExpression;\n const precision = Number(this._maskService.maskExpression.slice(maskExpression.length - 1, maskExpression.length));\n if (precision > 1) {\n el.value = this.suffix ? el.value.split(this.suffix).join('') : el.value;\n const decimalPart = el.value.split(this.decimalMarker)[1];\n el.value = el.value.includes(this.decimalMarker)\n ? el.value +\n \"0\" /* MaskExpression.NUMBER_ZERO */.repeat(precision - decimalPart.length) +\n this.suffix\n : el.value +\n this.decimalMarker +\n \"0\" /* MaskExpression.NUMBER_ZERO */.repeat(precision) +\n this.suffix;\n this._maskService.actualValue = el.value;\n }\n }\n this._maskService.clearIfNotMatchFn();\n }\n this._isFocused = false;\n this.onTouch();\n }\n onClick(e) {\n if (!this._maskValue) {\n return;\n }\n const el = e.target;\n const posStart = 0;\n const posEnd = 0;\n if (el !== null &&\n el.selectionStart !== null &&\n el.selectionStart === el.selectionEnd &&\n el.selectionStart > this._maskService.prefix.length &&\n // eslint-disable-next-line\n e.keyCode !== 38) {\n if (this._maskService.showMaskTyped && !this.keepCharacterPositions) {\n // We are showing the mask in the input\n this._maskService.maskIsShown = this._maskService.showMaskInInput();\n if (el.setSelectionRange &&\n this._maskService.prefix + this._maskService.maskIsShown === el.value) {\n // the input ONLY contains the mask, so position the cursor at the start\n el.focus();\n el.setSelectionRange(posStart, posEnd);\n }\n else {\n // the input contains some characters already\n if (el.selectionStart > this._maskService.actualValue.length) {\n // if the user clicked beyond our value's length, position the cursor at the end of our value\n el.setSelectionRange(this._maskService.actualValue.length, this._maskService.actualValue.length);\n }\n }\n }\n }\n const nextValue = el &&\n (el.value === this._maskService.prefix\n ? this._maskService.prefix + this._maskService.maskIsShown\n : el.value);\n /** Fix of cursor position jumping to end in most browsers no matter where cursor is inserted onFocus */\n if (el && el.value !== nextValue) {\n el.value = nextValue;\n }\n /** fix of cursor position with prefix when mouse click occur */\n if (el &&\n el.type !== 'number' &&\n (el.selectionStart || el.selectionEnd) <=\n this._maskService.prefix.length) {\n el.selectionStart = this._maskService.prefix.length;\n return;\n }\n /** select only inserted text */\n if (el && el.selectionEnd > this._getActualInputLength()) {\n el.selectionEnd = this._getActualInputLength();\n }\n }\n // eslint-disable-next-line complexity\n onKeyDown(e) {\n if (!this._maskValue) {\n return;\n }\n if (this._isComposing) {\n // User finalize their choice from IME composition, so trigger onInput() for the composed text.\n if (e.key === 'Enter')\n this.onCompositionEnd(e);\n return;\n }\n this._code = e.code ? e.code : e.key;\n const el = e.target;\n this._inputValue = el.value;\n this._setMask();\n if (el.type !== 'number') {\n if (e.key === \"ArrowUp\" /* MaskExpression.ARROW_UP */) {\n e.preventDefault();\n }\n if (e.key === \"ArrowLeft\" /* MaskExpression.ARROW_LEFT */ ||\n e.key === \"Backspace\" /* MaskExpression.BACKSPACE */ ||\n e.key === \"Delete\" /* MaskExpression.DELETE */) {\n if (e.key === \"Backspace\" /* MaskExpression.BACKSPACE */ && el.value.length === 0) {\n el.selectionStart = el.selectionEnd;\n }\n if (e.key === \"Backspace\" /* MaskExpression.BACKSPACE */ && el.selectionStart !== 0) {\n // If specialChars is false, (shouldn't ever happen) then set to the defaults\n this.specialCharacters = this.specialCharacters?.length\n ? this.specialCharacters\n : this._config.specialCharacters;\n if (this.prefix.length > 1 &&\n el.selectionStart <= this.prefix.length) {\n el.setSelectionRange(this.prefix.length, el.selectionEnd);\n }\n else {\n if (this._inputValue.length !== el.selectionStart &&\n el.selectionStart !== 1) {\n while (this.specialCharacters.includes((this._inputValue[el.selectionStart - 1] ??\n \"\" /* MaskExpression.EMPTY_STRING */).toString()) &&\n ((this.prefix.length >= 1 &&\n el.selectionStart > this.prefix.length) ||\n this.prefix.length === 0)) {\n el.setSelectionRange(el.selectionStart - 1, el.selectionEnd);\n }\n }\n }\n }\n this.checkSelectionOnDeletion(el);\n if (this._maskService.prefix.length &&\n el.selectionStart <= this._maskService.prefix.length &&\n el.selectionEnd <= this._maskService.prefix.length) {\n e.preventDefault();\n }\n const cursorStart = el.selectionStart;\n if (e.key === \"Backspace\" /* MaskExpression.BACKSPACE */ &&\n !el.readOnly &&\n cursorStart === 0 &&\n el.selectionEnd === el.value.length &&\n el.value.length !== 0) {\n this._position = this._maskService.prefix ? this._maskService.prefix.length : 0;\n this._maskService.applyMask(this._maskService.prefix, this._maskService.maskExpression, this._position);\n }\n }\n if (!!this.suffix &&\n this.suffix.length > 1 &&\n this._inputValue.length - this.suffix.length < el.selectionStart) {\n el.setSelectionRange(this._inputValue.length - this.suffix.length, this._inputValue.length);\n }\n else if ((e.code === 'KeyA' && e.ctrlKey) ||\n (e.code === 'KeyA' && e.metaKey) // Cmd + A (Mac)\n ) {\n el.setSelectionRange(0, this._getActualInputLength());\n e.preventDefault();\n }\n this._maskService.selStart = el.selectionStart;\n this._maskService.selEnd = el.selectionEnd;\n }\n }\n /** It writes the value in the input */\n async writeValue(controlValue) {\n if (typeof controlValue === 'object' && controlValue !== null && 'value' in controlValue) {\n if ('disable' in controlValue) {\n this.setDisabledState(Boolean(controlValue.disable));\n }\n // eslint-disable-next-line no-param-reassign\n controlValue = controlValue.value;\n }\n if (controlValue !== null) {\n // eslint-disable-next-line no-param-reassign\n controlValue = this.inputTransformFn\n ? this.inputTransformFn(controlValue)\n : controlValue;\n }\n if (typeof controlValue === 'string' ||\n typeof controlValue === 'number' ||\n controlValue === null ||\n controlValue === undefined) {\n if (controlValue === null || controlValue === undefined || controlValue === '') {\n this._maskService._currentValue = '';\n this._maskService._previousValue = '';\n }\n // eslint-disable-next-line no-param-reassign\n let inputValue = controlValue;\n if (typeof inputValue === 'number' ||\n this._maskValue.startsWith(\"separator\" /* MaskExpression.SEPARATOR */)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = String(inputValue);\n const localeDecimalMarker = this._maskService.currentLocaleDecimalMarker();\n if (!Array.isArray(this._maskService.decimalMarker)) {\n // eslint-disable-next-line no-param-reassign\n inputValue =\n this._maskService.decimalMarker !== localeDecimalMarker\n ? inputValue.replace(localeDecimalMarker, this._maskService.decimalMarker)\n : inputValue;\n }\n if (this._maskService.leadZero &&\n inputValue &&\n this.maskExpression &&\n this.dropSpecialCharacters !== false) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._maskService._checkPrecision(this._maskService.maskExpression, inputValue);\n }\n if (this._maskService.decimalMarker === \",\" /* MaskExpression.COMMA */) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue\n .toString()\n .replace(\".\" /* MaskExpression.DOT */, \",\" /* MaskExpression.COMMA */);\n }\n if (this.maskExpression?.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) && this.leadZero) {\n requestAnimationFrame(() => {\n this._maskService.applyMask(inputValue?.toString() ?? '', this._maskService.maskExpression);\n });\n }\n this._maskService.isNumberValue = true;\n }\n if (typeof inputValue !== 'string') {\n // eslint-disable-next-line no-param-reassign\n inputValue = '';\n }\n this._inputValue = inputValue;\n this._setMask();\n if ((inputValue && this._maskService.maskExpression) ||\n (this._maskService.maskExpression &&\n (this._maskService.prefix || this._maskService.showMaskTyped))) {\n // Let the service we know we are writing value so that triggering onChange function won't happen during applyMask\n typeof this.inputTransformFn !== 'function'\n ? (this._maskService.writingValue = true)\n : '';\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(inputValue, this._maskService.maskExpression),\n ];\n // Let the service know we've finished writing value\n typeof this.inputTransformFn !== 'function'\n ? (this._maskService.writingValue = false)\n : '';\n }\n else {\n this._maskService.formElementProperty = ['value', inputValue];\n }\n this._inputValue = inputValue;\n }\n else {\n console.warn('Ngx-mask writeValue work with string | number, your current value:', typeof controlValue);\n }\n }\n registerOnChange(fn) {\n this._maskService.onChange = this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouch = fn;\n }\n _getActiveElement(document = this.document) {\n const shadowRootEl = document?.activeElement?.shadowRoot;\n if (!shadowRootEl?.activeElement) {\n return document.activeElement;\n }\n else {\n return this._getActiveElement(shadowRootEl);\n }\n }\n checkSelectionOnDeletion(el) {\n el.selectionStart = Math.min(Math.max(this.prefix.length, el.selectionStart), this._inputValue.length - this.suffix.length);\n el.selectionEnd = Math.min(Math.max(this.prefix.length, el.selectionEnd), this._inputValue.length - this.suffix.length);\n }\n /** It disables the input element */\n setDisabledState(isDisabled) {\n this._maskService.formElementProperty = ['disabled', isDisabled];\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _applyMask() {\n this._maskService.maskExpression = this._maskService._repeatPatternSymbols(this._maskValue || '');\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(this._inputValue, this._maskService.maskExpression),\n ];\n }\n _validateTime(value) {\n const rowMaskLen = this._maskValue\n .split(\"\" /* MaskExpression.EMPTY_STRING */)\n .filter((s) => s !== ':').length;\n if (!value) {\n return null; // Don't validate empty values to allow for optional form control\n }\n if ((+(value[value.length - 1] ?? -1) === 0 && value.length < rowMaskLen) ||\n value.length <= rowMaskLen - 2) {\n return this._createValidationError(value);\n }\n return null;\n }\n _getActualInputLength() {\n return (this._maskService.actualValue.length ||\n this._maskService.actualValue.length + this._maskService.prefix.length);\n }\n _createValidationError(actualValue) {\n return {\n mask: {\n requiredMask: this._maskValue,\n actualValue,\n },\n };\n }\n _setMask() {\n this._maskExpressionArray.some((mask) => {\n const specialChart = mask\n .split(\"\" /* MaskExpression.EMPTY_STRING */)\n .some((char) => this._maskService.specialCharacters.includes(char));\n if ((specialChart && this._inputValue && !mask.includes(\"S\" /* MaskExpression.LETTER_S */)) ||\n mask.includes(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */)) {\n const test = this._maskService.removeMask(this._inputValue)?.length <=\n this._maskService.removeMask(mask)?.length;\n if (test) {\n this._maskValue =\n this.maskExpression =\n this._maskService.maskExpression =\n mask.includes(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */)\n ? this._maskService._repeatPatternSymbols(mask)\n : mask;\n return test;\n }\n else {\n const expression = this._maskExpressionArray[this._maskExpressionArray.length - 1] ??\n \"\" /* MaskExpression.EMPTY_STRING */;\n this._maskValue =\n this.maskExpression =\n this._maskService.maskExpression =\n expression.includes(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */)\n ? this._maskService._repeatPatternSymbols(expression)\n : expression;\n }\n }\n else {\n const check = this._maskService\n .removeMask(this._inputValue)\n ?.split(\"\" /* MaskExpression.EMPTY_STRING */)\n .every((character, index) => {\n const indexMask = mask.charAt(index);\n return this._maskService._checkSymbolMask(character, indexMask);\n });\n if (check) {\n this._maskValue = this.maskExpression = this._maskService.maskExpression = mask;\n return check;\n }\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.2.12\", ngImport: i0, type: NgxMaskDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.2.12\", type: NgxMaskDirective, isStandalone: true, selector: \"input[mask], textarea[mask]\", inputs: { maskExpression: [\"mask\", \"maskExpression\"], specialCharacters: \"specialCharacters\", patterns: \"patterns\", prefix: \"prefix\", suffix: \"suffix\", thousandSeparator: \"thousandSeparator\", decimalMarker: \"decimalMarker\", dropSpecialCharacters: \"dropSpecialCharacters\", hiddenInput: \"hiddenInput\", showMaskTyped: \"showMaskTyped\", placeHolderCharacter: \"placeHolderCharacter\", shownMaskExpression: \"shownMaskExpression\", showTemplate: \"showTemplate\", clearIfNotMatch: \"clearIfNotMatch\", validation: \"validation\", separatorLimit: \"separatorLimit\", allowNegativeNumbers: \"allowNegativeNumbers\", leadZeroDateTime: \"leadZeroDateTime\", leadZero: \"leadZero\", triggerOnMaskChange: \"triggerOnMaskChange\", apm: \"apm\", inputTransformFn: \"inputTransformFn\", outputTransformFn: \"outputTransformFn\", keepCharacterPositions: \"keepCharacterPositions\" }, outputs: { maskFilled: \"maskFilled\" }, host: { listeners: { \"paste\": \"onPaste()\", \"focus\": \"onFocus($event)\", \"ngModelChange\": \"onModelChange($event)\", \"input\": \"onInput($event)\", \"compositionstart\": \"onCompositionStart($event)\", \"compositionend\": \"onCompositionEnd($event)\", \"blur\": \"onBlur($event)\", \"click\": \"onClick($event)\", \"keydown\": \"onKeyDown($event)\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n NgxMaskService,\n ], exportAs: [\"mask\", \"ngxMask\"], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.2.12\", ngImport: i0, type: NgxMaskDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'input[mask], textarea[mask]',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n NgxMaskService,\n ],\n exportAs: 'mask,ngxMask',\n }]\n }], propDecorators: { maskExpression: [{\n type: Input,\n args: ['mask']\n }], specialCharacters: [{\n type: Input\n }], patterns: [{\n type: Input\n }], prefix: [{\n type: Input\n }], suffix: [{\n type: Input\n }], thousandSeparator: [{\n type: Input\n }], decimalMarker: [{\n type: Input\n }], dropSpecialCharacters: [{\n type: Input\n }], hiddenInput: [{\n type: Input\n }], showMaskTyped: [{\n type: Input\n }], placeHolderCharacter: [{\n type: Input\n }], shownMaskExpression: [{\n type: Input\n }], showTemplate: [{\n type: Input\n }], clearIfNotMatch: [{\n type: Input\n }], validation: [{\n type: Input\n }], separatorLimit: [{\n type: Input\n }], allowNegativeNumbers: [{\n type: Input\n }], leadZeroDateTime: [{\n type: Input\n }], leadZero: [{\n type: Input\n }], triggerOnMaskChange: [{\n type: Input\n }], apm: [{\n type: Input\n }], inputTransformFn: [{\n type: Input\n }], outputTransformFn: [{\n type: Input\n }], keepCharacterPositions: [{\n type: Input\n }], maskFilled: [{\n type: Output\n }], onPaste: [{\n type: HostListener,\n args: ['paste']\n }], onFocus: [{\n type: HostListener,\n args: ['focus', ['$event']]\n }], onModelChange: [{\n type: HostListener,\n args: ['ngModelChange', ['$event']]\n }], onInput: [{\n type: HostListener,\n args: ['input', ['$event']]\n }], onCompositionStart: [{\n type: HostListener,\n args: ['compositionstart', ['$event']]\n }], onCompositionEnd: [{\n type: HostListener,\n args: ['compositionend', ['$event']]\n }], onBlur: [{\n type: HostListener,\n args: ['blur', ['$event']]\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n\nclass NgxMaskPipe {\n constructor() {\n this.defaultOptions = {};\n this._maskService = inject(NgxMaskService);\n this._maskExpressionArray = [];\n this.mask = '';\n }\n transform(value, mask, { patterns, ...config } = {}) {\n const currentConfig = {\n maskExpression: mask,\n ...this.defaultOptions,\n ...config,\n patterns: {\n ...this._maskService.patterns,\n ...patterns,\n },\n };\n Object.entries(currentConfig).forEach(([key, value]) => {\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n this._maskService[key] = value;\n });\n if (mask.includes('||')) {\n if (mask.split('||').length > 1) {\n this._maskExpressionArray = mask.split('||').sort((a, b) => {\n return a.length - b.length;\n });\n this._setMask(value);\n return this._maskService.applyMask(`${value}`, this.mask);\n }\n else {\n this._maskExpressionArray = [];\n return this._maskService.applyMask(`${value}`, this.mask);\n }\n }\n if (mask.includes(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */)) {\n return this._maskService.applyMask(`${value}`, this._maskService._repeatPatternSymbols(mask));\n }\n if (mask.startsWith(\"separator\" /* MaskExpression.SEPARATOR */)) {\n if (config.decimalMarker) {\n this._maskService.decimalMarker = config.decimalMarker;\n }\n if (config.thousandSeparator) {\n this._maskService.thousandSeparator = config.thousandSeparator;\n }\n if (config.leadZero) {\n // eslint-disable-next-line no-param-reassign\n this._maskService.leadZero = config.leadZero;\n }\n // eslint-disable-next-line no-param-reassign\n value = String(value);\n const localeDecimalMarker = this._maskService.currentLocaleDecimalMarker();\n if (!Array.isArray(this._maskService.decimalMarker)) {\n // eslint-disable-next-line no-param-reassign\n value =\n this._maskService.decimalMarker !== localeDecimalMarker\n ? value.replace(localeDecimalMarker, this._maskService.decimalMarker)\n : value;\n }\n if (this._maskService.leadZero &&\n value &&\n this._maskService.dropSpecialCharacters !== false) {\n // eslint-disable-next-line no-param-reassign\n value = this._maskService._checkPrecision(mask, value);\n }\n if (this._maskService.decimalMarker === \",\" /* MaskExpression.COMMA */) {\n // eslint-disable-next-line no-param-reassign\n value = value.toString().replace(\".\" /* MaskExpression.DOT */, \",\" /* MaskExpression.COMMA */);\n }\n this._maskService.isNumberValue = true;\n }\n if (value === null || value === undefined) {\n return this._maskService.applyMask('', mask);\n }\n return this._maskService.applyMask(`${value}`, mask);\n }\n _setMask(value) {\n if (this._maskExpressionArray.length > 0) {\n this._maskExpressionArray.some((mask) => {\n const test = this._maskService.removeMask(value)?.length <=\n this._maskService.removeMask(mask)?.length;\n if (value && test) {\n this.mask = mask;\n return test;\n }\n else {\n const expression = this._maskExpressionArray[this._maskExpressionArray.length - 1] ??\n \"\" /* MaskExpression.EMPTY_STRING */;\n this.mask = expression;\n }\n });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.2.12\", ngImport: i0, type: NgxMaskPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"16.2.12\", ngImport: i0, type: NgxMaskPipe, isStandalone: true, name: \"mask\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.2.12\", ngImport: i0, type: NgxMaskPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mask',\n pure: true,\n standalone: true,\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { INITIAL_CONFIG, NEW_CONFIG, NGX_MASK_CONFIG, NgxMaskDirective, NgxMaskPipe, NgxMaskService, initialConfig, provideEnvironmentNgxMask, provideNgxMask, timeMasks, withoutValidation };\n","
\n
\n
\n \n {{ field.title }}\n \n {{form.value[field.title].length}} / {{ field.maxLength }}\n \n O campo {{ field.title }} é obrigatório.\n \n \n O campo {{ field.title }} está inválido.\n \n \n
\n\n
\n \n\n {{ field.title }}\n \n \n O campo {{ field.title }} é obrigatório.\n \n
\n\n
\n \n \n {{ field.title }}\n \n {{form.value[field.title].length}} / {{ field.maxLength }}\n \n O campo {{ field.title }} é obrigatório.\n \n \n
\n\n
\n \n\n \n\n {{ field.title }}\n \n \n O campo {{ field.title }} é obrigatório.\n \n \n {{ field.title }} inválido.\n \n \n {{ field.title }} inválido.\n \n \n
\n\n
\n \n {{ field.title }}\n \n \n O campo {{ field.title }} é obrigatório.\n \n \n {{ field.title }} inválido.\n \n \n
\n\n
\n \n\n \n {{ field.title }}\n \n Selecione...\n \n {{option.name | uppercase}}\n \n \n \n O campo {{ field.title }} é obrigatório.\n \n \n {{ field.title }} inválido.\n \n \n
\n
\n
\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { CustomFieldService } from '../custom-field.service';\nimport { FieldBase } from '../models/field-base.model';\n\n@Component({\n selector: 'app-custom-fields',\n templateUrl: './custom-fields.component.html',\n styleUrls: ['./custom-fields.component.scss']\n})\nexport class CustomFieldsComponent implements OnInit, OnDestroy {\n @Input() field: FieldBase;\n @Input() providerId: number;\n @Input() locationId: number;\n @Input() form: UntypedFormGroup;\n\n currentDate: string;\n options = [];\n\n private subscription: Subscription;\n\n constructor(private customFieldService: CustomFieldService) {\n this.currentDate = new Date().toISOString().slice(0, 10);\n }\n\n ngOnInit() { }\n\n ngOnDestroy() {\n if (this.subscription !== undefined) {\n this.subscription.unsubscribe();\n }\n }\n\n get isInvalid() {\n return this.form.controls[this.field.title].hasError('required') && this.form.controls[this.field.title].touched;\n }\n\n get isInvalidLength() {\n return this.form.controls[this.field.title].hasError('minlength') && this.form.controls[this.field.title].touched;\n }\n\n get isInvalidCpf() {\n return this.form.controls[this.field.title].hasError('cpfNotValid') && this.form.controls[this.field.title].touched;\n }\n\n get isInvalidCnpj() {\n return this.form.controls[this.field.title].hasError('cnpjNotValid') && this.form.controls[this.field.title].touched;\n }\n\n getCustomFieldOptions() {\n if (this.options.length === 0) {\n this.subscription = this.customFieldService.getCustomFieldOptions(this.providerId, this.locationId, this.field.id)\n .subscribe((options) => this.options = options);\n }\n }\n}\n","
\n
\n
\n \n \n
\n
\n
\n","import { Component, Input, OnInit, Output, EventEmitter, AfterViewInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\nimport { FieldBase } from '../models/field-base.model';\nimport { FieldControlService } from '../field-control.service';\n\n@Component({\n selector: 'app-custom-fields-form',\n templateUrl: './custom-fields-form.component.html',\n styleUrls: ['./custom-fields-form.component.scss'],\n providers: [FieldControlService]\n})\n\nexport class CustomFieldsFormComponent implements OnInit, AfterViewInit {\n @Input() fields: FieldBase[] = [];\n @Input() providerId: number;\n @Input() locationId: number;\n @Output() sendFormGroup: EventEmitter;\n form: UntypedFormGroup;\n\n constructor(private fieldControlService: FieldControlService) {\n this.sendFormGroup = new EventEmitter();\n }\n\n ngOnInit() {\n this.form = this.fieldControlService.makeFormGroup(this.fields);\n }\n\n ngAfterViewInit() {\n this.sendFormGroup.emit(this.form);\n }\n}\n","\n\n\n\n\n
\n
\n
\n
\n
\n

{{ 'general.pages.schedule.basicInformation' | translate }}

\n
\n
\n
\n \n {{ 'general.pages.schedule.form.name.label' | translate }}\n\n \n \n {{ 'general.pages.schedule.form.name.errors.required' | translate }}\n \n \n
\n
\n \n {{ 'general.pages.schedule.form.phone.label' | translate }}\n\n \n \n {{ 'general.pages.schedule.form.phone.errors.required' | translate }}\n \n \n
\n\n
\n \n\n \n {{ 'general.pages.schedule.form.email.label' | translate }}\n\n \n \n {{ 'general.pages.schedule.form.email.errors.required' | translate }}\n \n \n
\n\n
\n \n \n
\n
\n\n
\n
\n \n {{ 'general.pages.schedule.form.preferential' | translate }}\n \n accessible\n \n \n
\n
\n\n
\n
\n \n {{ 'general.actions.continue' | translate }}\n \n
\n
\n
\n
\n
\n
\n\n\n \n \n\n\n\n\n\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { CollapsableButton, CustomData, Service, Session, Terminal, TerminalOptionsDisplay, TerminalPayload, Ticket } from '../../shared/models';\nimport { MessagingService, PusherService, StorageService, TerminalService, TicketService } from '../../shared/services';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { finalize } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { brighten } from '../../shared/utils/colors';\nimport { environment } from 'src/environments/environment';\nimport { FieldInput } from '../../modules/custom-fields/models/field-input.model';\nimport { CustomFieldService } from '../../modules/custom-fields/custom-field.service';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { PriorityModalComponent } from '../../components/priority-modal/priority-modal.component';\nimport { v4 as uuidv4 } from 'uuid';\nimport { chain } from 'lodash';\nimport { ReCaptchaV3Service } from 'ng-recaptcha';\nimport { DeviceDetectorService } from 'ngx-device-detector';\n\n@Component({\n selector: 'app-schedule',\n templateUrl: './schedule.component.html',\n styleUrls: ['./schedule.component.scss']\n})\nexport class ScheduleComponent implements OnInit {\n terminal: Terminal;\n payload: TerminalPayload;\n isLoading = true;\n isLoadingEmit = false;\n completed = false;\n ticketId: number;\n isNameFocus = false;\n isPhoneFocus = false;\n isEmailFocus = false;\n formGroup: UntypedFormGroup;\n fields: FieldInput[] = [];\n isConstumFieldFormValid = false;\n customData: CustomData[] = [];\n hasSlot = true;\n isPriority = false;\n showOptions = false;\n serviceCategories: Array<[string, Service[]]>;\n cardList: Array = [];\n cardLisTemp: Array = [];\n selectedCategory: string = null;\n categoryBackButton: CollapsableButton = {\n text: 'Voltar',\n fontColor: 'primary',\n } as CollapsableButton;\n buttons:Array;\n\n constructor(\n private customFieldService: CustomFieldService,\n private pusherService: PusherService,\n private router: Router,\n private snackBar: MatSnackBar,\n private storageService: StorageService,\n private terminalService: TerminalService,\n private ticketService: TicketService,\n public dialog: MatDialog,\n private messagingService: MessagingService,\n private deviceService: DeviceDetectorService,\n private reCaptchaV3Service: ReCaptchaV3Service\n ) {\n this.terminal = this.storageService.currentTerminal;\n\n this.formGroup = new UntypedFormGroup({\n name: new UntypedFormControl('', [Validators.required]),\n phone: new UntypedFormControl('', this.isPhoneNoel ? [Validators.required] : [])\n });\n const uuid = uuidv4();\n localStorage.setItem('browserUuid', uuid);\n }\n\n ngOnInit() {\n this.messagingService.requestPermission();\n this.messagingService.receiveMessage();\n if (this.isQueueNoel) {\n this.formGroup.addControl('email', new UntypedFormControl('', [Validators.required]));\n }\n this.payload = this.terminalService.getCurrentTerminalPayload();\n this.isLoading = false;\n\n this.customFieldService.getCustomFields(this.payload.locationId, [])\n .subscribe((fields) => this.fields = fields);\n\n this.groupServicesByCategory(this.terminal.services);\n this.buttons = this.getButtons();\n }\n\n onCardClick(info: string | number) {\n if (typeof info === 'string') {\n this.selectCategory(info);\n } else {\n this.selectService(info);\n }\n }\n\n selectService(serviceId: number) {\n this.payload.serviceId = serviceId;\n const service = this.terminal.services.find((s) => s.id === serviceId);\n this.storageService.setCurrentService(service);\n this.payload.terminalSchedule.sessions = service.sessions;\n this.terminalService.setCurrentTerminalPayload(this.payload);\n\n this.reCaptchaV3Service\n .execute('schedule')\n .subscribe((token) => this.resolvedCaptcha(token));\n\n }\n\n booking() {\n this.getCustomFieldsValues();\n\n const browserUuid = localStorage.getItem('browserUuid');\n\n if (this.hasCustomFields) {\n this.payload.customData = this.customData;\n }\n\n this.payload.browserUuid = browserUuid;\n\n this.payload.customer.name = this.formGroup.value.name;\n this.payload.customer.phone = this.formGroup.value.phone;\n if (this.isQueueNoel) {\n this.payload.customer.email = this.formGroup.value.email;\n }\n this.selectServicePreference();\n this.terminalService.setCurrentTerminalPayload(this.payload);\n this.isLoadingEmit = true;\n this.terminalService.booking(this.payload)\n .pipe(finalize(() => {\n setTimeout(() => {\n if (!this.completed) {\n this.getTicket();\n }\n }, 5000);\n }))\n .subscribe((result) => {\n if (result.responseData) {\n this.subscribeBooking(result.responseData.aggregatorId);\n this.ticketId = result.responseData.tickets[0];\n } else {\n this.isLoadingEmit = false;\n this.snackBar.open(result.messages[0].description, 'Erro', { duration: 3000 });\n this.completed = true;\n }\n }, (error) => {\n this.isLoadingEmit = false;\n this.snackBar.open('Não foi possível emitir o bilhete', 'Erro', { duration: 3000 });\n this.completed = true;\n });\n }\n\n subscribeBooking(aggregatorId: string) {\n const scheduleChannel = this.pusherService.pusher.subscribe('schedule-' + aggregatorId);\n\n scheduleChannel.bind('ScheduleAuthorized', data => {\n this.isLoadingEmit = false;\n this.completed = true;\n\n const ticket: Ticket = {\n accessKey: data.tickets[0].AccessKey,\n friendlyCode: data.tickets[0].FriendlyCode,\n locationId: data.tickets[0].LocationId,\n id: data.tickets[0].Id,\n prevision: data.tickets[0].prevision,\n providerId: data.tickets[0].TenantId,\n timezoneId: data.tickets[0].Timezone,\n serviceConfigId: data.tickets[0].ServiceConfigId\n } as Ticket;\n\n this.storageService.addTicket(ticket);\n this.storageService.setCurrentTicket(ticket);\n\n this.goToTrack();\n });\n\n scheduleChannel.bind('ScheduleUnauthorized', data => {\n this.isLoadingEmit = false;\n this.completed = true;\n });\n }\n\n private getTicket() {\n this.ticketService.getTicket(this.ticketId)\n .pipe()\n .subscribe((ticket) => {\n const t: Ticket = {\n accessKey: ticket.accessKey,\n friendlyCode: ticket.friendlyCode,\n locationId: ticket.location.id,\n id: ticket.id,\n providerId: ticket.provider.id,\n timezoneId: ticket.location.timezoneId,\n serviceConfigId: ticket.session.serviceConfigId\n } as Ticket;\n\n this.storageService.addTicket(t);\n this.storageService.setCurrentTicket(t);\n this.goToTrack();\n });\n }\n\n openPriorityDialog() {\n if(this.isPriority) {\n const dialogRef = this.dialog.open(PriorityModalComponent);\n dialogRef.afterClosed().subscribe(confirm => {\n if(!confirm) {\n this.isPriority = false;\n }\n });\n }\n }\n\n resolvedCaptcha(result) {\n this.payload.recaptcha = result;\n this.booking();\n }\n\n private goToTrack() {\n this.router.navigate(['/track']);\n }\n\n onFocus(event: FocusEvent, el: HTMLElement) {\n if (this.deviceService.os === 'Android') {\n setTimeout(() => el.scrollIntoView(), 300);\n }\n }\n\n brighten(color: string, amount: number): string {\n return '#' + brighten(color, amount);\n }\n\n setCustomFieldForm(formGroup: UntypedFormGroup) {\n this.formGroup.addControl('custom', formGroup);\n }\n\n showOptionList() {\n this.showOptions = true;\n }\n\n private getCustomFieldsValues(): CustomData[] {\n this.customData = [];\n if (this.fields) {\n for (const field of this.fields) {\n if (this.formGroup.value.custom[field.title]) {\n this.customData.push({\n customFieldId: field.id,\n value: String(this.formGroup.value.custom[field.title])\n });\n }\n }\n }\n return this.customData.length > 0 ? this.customData : undefined;\n }\n\n private selectServicePreference() {\n this.isPriority\n ? this.payload.priority = 1\n : this.payload.priority = 0;\n }\n\n get hasServices() {\n return this.terminal.services &&\n this.terminal.services.length > 0 &&\n this.filteredServices.length > 0;\n }\n\n get filteredServices(): Service[] {\n return this.terminalService.providerAvailableServices(this.terminal.services, this.terminal.showOptionsBasedOnSessions, new Date());\n }\n\n private groupServicesByCategory(services: Service[]) {\n this.serviceCategories = chain(services)\n .groupBy((s) => s.category)\n .entries()\n .sortBy((e: [string, Service[]]) => e[0])\n .value();\n\n this.cardList = [];\n\n if (this.selectedCategory !== null) {\n const currentCategory = this.serviceCategories.find((c) => c[0] === this.selectedCategory);\n\n if (currentCategory) {\n this.cardList = currentCategory[1];\n } else {\n this.selectedCategory = null;\n }\n }\n\n if (this.cardList.length === 0) {\n this.cardList = this.serviceCategories\n .filter((c) => c[0] !== 'undefined')\n .map((c) => ({\n name: c[0],\n type: 'category'\n }));\n\n const ungrouped = this.serviceCategories.find((c) => c[0] === 'undefined');\n\n if (ungrouped) {\n ungrouped\n this.cardList = this.cardList.concat(ungrouped[1]);\n }\n }\n }\n\n selectCategory(category: string) {\n this.selectedCategory = category;\n this.categoryBackButton.backgroundColor = `#${brighten(this?.terminal?.headerBackgroundColor || '#7604C2', 20)}`,\n this.cardLisTemp = this.cardList;\n this.cardList = this.serviceCategories.find((c) => c[0] === category)[1];\n this.buttons = this.getButtons();\n }\n\n leaveCategory() {\n this.selectedCategory = null;\n this.cardList = this.cardLisTemp;\n this.buttons = this.getButtons();\n }\n\n private makeCategoryButton(element: any): CollapsableButton {\n return {\n backgroundColor: `#${brighten(this?.terminal?.headerBackgroundColor || '#7604C2', 20)}`,\n fontColor: \"primary\",\n text: element.name,\n type: 'category'\n }\n }\n\n private makeServiceButton(service: Service): CollapsableButton {\n return {\n backgroundColor: `#${brighten(this?.terminal?.headerBackgroundColor || '#7604C2', 20)}`,\n fontColor: \"primary\",\n text: service.name,\n serviceOrientation: service.note,\n serviceId: service.id,\n };\n }\n\n get shouldDisplayCategory() {\n return this.terminal.optionsDisplay === TerminalOptionsDisplay.CATEGORY;\n }\n\n getButtons():Array {\n return this.shouldDisplayCategory\n ? this.cardList.map((c) => {\n if (c.type === 'category') {\n return this.makeCategoryButton(c);\n } else {\n return this.makeServiceButton(c);\n }\n })\n : this.filteredServices.map(this.makeServiceButton);\n }\n\n get hasSessions() {\n if (this.hasServices) {\n return this.terminal.services.some((service) => service.sessions && service.sessions.length > 0);\n }\n\n return false;\n }\n\n get areSlotsAvailable() {\n this.terminal.services.forEach(service => this.hasSlot = service.sessions.some(this.slotIsEmpty));\n return this.hasSlot;\n }\n\n slotIsEmpty(session: Session) {\n return session.hasSlotsLeft;\n }\n\n get isNike() {\n return this.terminal.provider.id === environment.nike.providerId;\n }\n\n get isQueuesNoel() {\n return this.terminal.provider.id === environment.phoneNoelProviderId || this.terminal.provider.id === environment.queueNoelProviderId;\n }\n\n get isPhoneNoel() {\n return this.terminal.provider.id === environment.phoneNoelProviderId;\n }\n\n get isQueueNoel() {\n return this.terminal.provider.id === environment.queueNoelProviderId;\n }\n\n get hasCustomFields() {\n return this.fields && this.fields.length > 0;\n }\n\n get isValid() {\n return this.formGroup.valid;\n }\n\n get displayOptions() {\n return this.showOptions;\n }\n\n get allowPriority() {\n return this.terminal.allowPriority;\n }\n}\n","
\n
\n close\n
\n

Termos de uso

\n
\n

\n Bem-vindo ao Filazero! Por favor, reserve-nos um momento e leia com\n atenção estes Termos de Uso.\n

\n

\n Vale lembrá-lo que o acesso ao conteúdo de nossa plataforma dependerá\n de sua prévia e expressa concordância com os Termos de Uso e Política\n de Privacidade.\n

\n

\n Os Termos de Uso apresentam as \"condições gerais\" aplicáveis ao uso\n das plataformas disponibilizadas pela Inventione Tecnologia da\n Informação Ltda., pessoa jurídica de direito privado, com sede na Rua\n Pastor Euclides Arlindo, 575, Loja A Pereira Lobo Aracaju - SE\n 49052-330, inscrita no CNPJ sob o n. 11.533.443/0001-64, doravante\n denominada \"Filazero\".\n

\n\n

Definições Importantes

\n\n

\n Usuário: Toda e qualquer pessoa física que acessa e\n utiliza os recursos ofertados pelo Filazero.\n

\n

\n Plataforma: São os meios digitais pelo qual o usuário\n poderá acessar os recursos ofertados pelo Filazero (aplicativo, site,\n totem de atendimento, qr code e etc.).\n

\n Parceiro: Toda e qualquer pessoa jurídica que oferte\n seus próprios serviços ao usuário por meio das plataformas do Filazero.\n\n

O que é o Filazero

\n\n

\n O Filazero é uma plataforma que dinamiza o gerenciamento de\n atendimentos e a otimização de processos, auxiliando nossos parceiros\n em melhor atender ao público e proporcionando ao usuário maior\n conforto e praticidade quando precisar aguardar para ser atendido,\n melhorando a qualidade de atendimentos e a interação entre clientes e\n estabelecimentos.\n

\n

\n Ao utilizar a plataforma Filazero, o usuário terá acesso aos seguintes\n recursos: Conhecimento de locais que você pode ir. Com a nossa\n plataforma você consegue encontrar os estabelecimentos que possuem\n nosso sistema e, assim, usufruir dos benefícios de nossos serviços. No\n mais, você pode verificar quais destes estabelecimentos estão\n atendendo ou não naquele momento.\n

\n\n

\n Acompanhar sua posição de atendimento na fila. Em nossa plataforma\n você consegue ver sua posição na fila em tempo real, bastando ter\n conectividade e o código de acompanhamento.\n

\n

\n Pegar senhas de atendimentos pelo aplicativo. Você pode emitir senhas\n de atendimento para esperar virtualmente nas filas, dessa maneira você\n não precisa esperar no local até ser atendido.\n

\n

\n Melhor aproveitamento do seu tempo. O Filazero facilita sua vida,\n indicando a estimativa de tempo e a quantidade de pessoas na sua\n frente na fila, permitindo que você utilize o tempo que seria de\n espera no local para fazer o que quiser.\n

\n

\n Agendar um serviço. Você pode agendar serviços de nossos clientes para\n ser atendimento presencialmente a acompanhar atrasos no dia do\n atendimento.\n

\n

\n Atendimento remoto. O Filazero permite que as filas sejam configura\n para atendimento por vídeo conferência, o cliente poderá usar o\n browser através de um link seguro enviado por e-mail ou via aplicativo\n Filazero disponível para Android e IOS.\n

\n\n

Acesso e Registro

\n\n

\n O acesso e registro nas plataformas Filazero pelo usuário é gratuito,\n podendo ser realizado tanto por nosso aplicativo (disponível na “Apple\n App Store” e na “Google Play Store”) como pelo nosso site.\n

\n\n

\n Para ter acesso aos recursos disponíveis aos usuários do Filazero,\n você deverá realizar seu cadastro em nossas plataformas.\n

\n\n

\n Não será permitido o cadastro de pessoas com menos de 18 anos de idade\n na plataforma Filazero, sendo que se você tiver menos de 18 anos de\n idade só poderá fazer uso de nossos recursos com o envolvimento, a\n supervisão e aprovação de seus pais ou responsáveis.\n

\n\n

Você pode se cadastrar no Filazero de duas maneiras:

\n
    \n
  1. \n cadastrando-se diretamente nas plataforma Filazero, através da\n criação de uma senha de acesso e prestando as informações\n solicitadas;\n
  2. \n
  3. \n utilizando a rede social Facebook. Neste caso, o usuário deverá\n autorizar o Filazero a utilizar suas informações de registro naquela\n rede social para completar seu cadastro. O usuário é o único\n responsável pela segurança de seus dados de acesso. É por meio\n desses dados que o usuário pode acessar sua conta no Filazero e\n alterar suas informações pessoais e outros dados de seu cadastro.\n Caso haja qualquer suspeita de uso indevido ou não autorizado de sua\n conta, o usuário deve notificar imediatamente o Filazero através de\n nossos canais de atendimento.\n
  4. \n
\n

O usuário concorda em:

\n
    \n
  1. \n Fornecer informações verdadeiras, exatas, atuais e completas quando\n for realizar seu cadastro;\n
  2. \n\n
  3. \n Conservar e atualizar suas informações de forma a mantê-las\n verdadeiras, exatas, atuais e completas;\n
  4. \n\n
  5. \n Ser responsável por qualquer informação falsa, incorreta,\n desatualizada ou incompleta fornecida.\n
  6. \n
\n\n

\n Caso o Filazero tenha razões suficientes para suspeitar da veracidade\n e/ou da exatidão de tais informações, terá o direito de suspender ou\n cancelar, imediatamente e independente de qualquer aviso ou\n notificação, a conta do usuário.\n

\n\n

\n O Filazero é uma empresa privada e, com isso, se reserva o direito de,\n a seu exclusivo critério e segundo seus parâmetros de análise\n cadastral, aceitar ou não a adesão do usuário, bem como bloquear ou\n cancelar sua conta de nossas plataformas.\n

\n\n

Limitação e Responsabilidade

\n\n

\n O Filazero é uma plataforma que visa facilitar a relação entre o\n usuário e nossos parceiros, mas não assume responsabilidade pelo\n serviço prestado e pelas informações geradas por estes parceiros, nem\n tem qualquer obrigação de monitoramento.\n

\n

\n Os recursos são fornecidos ao usuário sem nenhuma garantia explícita\n ou implícita de fomentar qualquer objetivo comercial específico. Em\n nenhum caso o Filazero será responsabilizada por quaisquer danos,\n incluindo lucros cessantes, interrupção de negócio ou perda de\n informação que resultem do uso ou da incapacidade de usar os recursos\n disponíveis nas plataformasFilazero.\n

\n\n

\n O Filazero sempre se empenhará em trabalhar com seus parceiros para\n fornecer ao usuário a melhor experiência possível, porém você deve\n estar ciente que nem sempre as informações que são mostradas estarão\n corretas ou atualizadas, e que não nos responsabilizamos pela exatidão\n destas informações.\n

\n\n

\n Não nos responsabilizamos pelos serviços prestados por nossos\n parceiros cadastrados, tampouco por atrasos acima do tempo de espera,\n adiantamentos do tempo previsto ou atendimento de clientes que não\n estão na fila. O Filazero é uma ferramenta de otimização, mas o\n gerenciamento dos atendimentos é de inteira responsabilidade do\n parceiro que oferta o serviço.\n

\n

\n É de responsabilidade exclusiva do usuário estar no local de\n atendimento antes ou no momento que for notificado para ser atendido.\n Esta notificação poderá ocorrer por voz, por meio de aparelho\n televisor ou por meio de seu smartphone, sendo dever do usuário se\n certificar da forma de notificação.\n

\n\n

\n O Filazero não se responsabiliza por qualquer dano, prejuízo ou perda\n sofridos pelo usuário em razão de falhas na internet, no sistema ou no\n servidor utilizados pelo usuário, decorrentes de condutas de\n terceiros, caso fortuito ou força maior. O Filazero não é responsável\n pela qualidade de sua conexão com a internet.\n

\n\n

\n O Filazero não será também responsável por qualquer dano causado por\n vírus ou “hacker” que possa atacar o equipamento do usuário em\n decorrência do acesso, utilização ou navegação na internet nas\n plataforma Filazero.\n

\n\n

Restrições de Uso

\n\n

\n Por favor, tenha sempre em mente que os recursos disponibilizados pelo\n Filazero devem ser utilizados de forma consciente, respeitando nossos\n parceiros e a comunidade em geral. O Filazero não irá tolerar o uso\n abusivo de seus recursos. Ao utilizar o Filazero, sempre esteja atento\n às seguintes disposições:\n

\n\n
    \n
  1. \n Você não pode utilizar o Filazero para violar as leis em sua\n jurisdição; Você não pode se passar por outras pessoas ou fornecer\n informações imprecisas; Você não pode fazer algo que interfira ou\n afete negativamente a operação dos parcerios cadastrados;\n
  2. \n\n
  3. \n Você não pode realizar a aquisição de senhas em massa de serviços\n que não pretende utilizar, bem como não pode utilizar de\n automatizações (“bots”) ou qualquer forma de “spam” dentro das\n plataformas Filazero;\n
  4. \n\n
  5. \n Você não pode tentar comprar, vender ou transferir qualquer elemento\n de sua conta (inclusive seu nome de usuário e seu lugar em filas) ou\n solicitar, coletar ou usar credenciais de conta de outros usuários;\n
  6. \n\n
  7. \n Você não pode acessar o API (Interface de Programação de Aplicações)\n do Filazero por uma plataforma não oficial;\n
  8. \n\n
  9. \n Você não pode realizar qualquer ato que interfira no ou de qualquer\n forma interrompa o serviço ofertado pelo Filazero, manipule, viole\n ou tente sondar, varrer ou testar a vulnerabilidade do serviço ou\n dos sistemas de computador, rede e regras de uso do Filazero, ou\n qualquer componente de segurança do Filazero, medidas de\n autenticação ou quaisquer outras medidas de proteção aplicáveis ao\n serviço, ao conteúdo ou a qualquer parte dos mesmos;\n
  10. \n
\n\n

Reserva de Direitos

\n\n

\n Em que pese o compromisso do Filazero em garantir que os serviços\n estejam sempre normalmente disponíveis, é possível que aconteçam\n ocasiões em que os serviços serão interrompidos para manutenção\n programada, upgrades ou para reparos de emergência. O Filazero\n reserva-se o direito de excluir qualquer conteúdo por qualquer motivo\n ou suspender seus serviços a qualquer momento, sem aviso prévio.\n

\n

\n Nossa responsabilidade por qualquer ocorrência no serviço será\n limitada tanto quanto permitido por lei. Se houver um problema com\n nosso serviço, não temos como prever todos os impactos que poderão\n ocorrer. Você concorda que nós não seremos responsáveis por qualquer\n perda de lucro, receitas, informação ou dados, ou, ainda, por danos\n eventuais, especiais, indiretos, exemplares, punitivos ou acidentais\n decorrentes de ou relativos a estes termos, ainda que saibamos que\n eles são possíveis.\n

\n

\n O serviço Filazero é fornecido “no estado em que se encontra”, sem\n garantias ou condições. Especificamente, o nosso serviço pode não\n estar livre de interrupções ou erros. Você renuncia a todas e\n quaisquer indenizações por danos indiretos, morais e materiais, contra\n o Filazero.\n

\n

\n O uso comercial da expressão \"Filazero\" como marca, nome empresarial\n ou nome de domínio, bem como os conteúdos das telas relativas aos\n serviços do Filazero, assim como os programas, bancos de dados, redes,\n códigos de programação, e arquivos que permitem que o usuário acesse e\n use sua conta são propriedade do Filazero e estão protegidos pelas\n leis e tratados internacionais de direito autoral, marcas, patentes,\n modelos e desenhos industriais. O uso indevido e a reprodução total ou\n parcial dos referidos conteúdos são proibidos, salvo se houver\n autorização expressa pelo Filazero.\n

\n\n

Atualização dos Termos de Uso

\n\n

\n Em caso de modificação destes termos, para atender melhor seus\n clientes, publicaremos tais alterações de nossos serviços e dos termos\n de uso ligados a estes, e lhes notificaremos sobre esta situação.\n Também manteremos as versões anteriores destes Termos de Uso\n arquivadas para você compará-las. Se você optar por continuar\n utilizando nossas plataformas, você estará concordando automaticamente\n com as disposições atualizadas.\n

\n\n

Legislação Aplicável

\n\n

\n Estes termos de uso são regidos única e exclusivamente pelas leis\n brasileiras, sendo que qualquer ação judicial relativa à sua\n interpretação ou aplicação deverá ser processada e julgada pelo Poder\n Judiciário Brasileiro. Fica eleito o foro da Comarca de Aracaju-SE\n para dirimir as dúvidas oriundas destes termos de uso.\n

\n
\n
\n\n
\n

Terms of Use

\n
\n

\n Welcome to Filazero! Please allow us a moment and read with attention\n to these Terms of Use.\n

\n

\n It is worth reminding you that access to the content of our platform\n will depend on of your prior and express agreement to the Terms of Use\n and Policy of Privacy.\n

\n

\n The Terms of Use present the \"general conditions\" applicable to the\n use of the platforms made available by Inventione Tecnologia da\n Information Ltd., a legal entity governed by private law,\n headquartered at Rua Pastor Euclides Arlindo, 575, A Pereira Lobo\n Aracaju Store - SE 49052-330, registered with the CNPJ under no.\n 11.533.443/0001-64, hereinafter called \"Filazero\".\n

\n\n

Important Definitions

\n\n

\n User: Each and every individual who accesses and uses\n the resources offered by Filazero.\n

\n

\n Platform: Are the digital means by which the user\n will be able to access the resources offered by Filazero (application,\n website, service totem, qr code, etc.).\n

\n Partner: Any and all legal entities that offer their\n own user services through Filazero platforms.\n\n

What is Filazero

\n\n

\n Filazero is a platform that streamlines the management of service and\n process optimization, helping our partners in better serving the\n public and providing the largest user comfort and convenience when you\n need to wait to be served, improving the quality of care and\n interaction between customers and establishments.\n

\n

\n When using the Filazero platform, the user will have access to the\n following features: Knowledge of places you can go. with our platform\n you can find the establishments that have our system and thus enjoy\n the benefits of our services. At the more, you can check which of\n these establishments are answering or not at that moment.\n

\n\n

\n Keep track of your position in the queue. on our platform you can see\n your position in the queue in real time, just have connectivity and\n the tracking code.\n

\n

\n Get service passwords through the application. You can issue passwords\n to wait virtually in lines, this way you you don't need to wait on\n site until you're served.\n

\n

\n Better use of your time. Filazero makes your life easier, indicating\n the estimated time and the number of people in your front in line,\n allowing you to use the time you would have wait at the place to do\n what you want.\n

\n

\n Schedule a service. You can schedule services from our customers to be\n a face-to-face service to monitor delays on the day of the attendance.\n

\n

\n Remote service. Filazero allows queues to be configured. for video\n conference service, the customer can use the browser via a secure link\n sent by email or via the app Filazero available for Android and IOS.\n

\n\n

Access and Registration

\n

\n User access and registration on Filazero platforms is free, can be\n done either by our app (available on \"Apple App Store” and the “Google\n Play Store”) as per our website.\n

\n\n

\n To access the resources available to Filazero users, you must register\n on our platforms.\n

\n\n

\n The registration of people under 18 years of age will not be allowed\n on the Filazero platform, if you are under 18 years of age age can\n only use our resources with the involvement, the supervision and\n approval of their parents or guardians.\n

\n\n

You can register with Filazero in two ways:

\n
    \n
  1. \n registering directly on the Filazero platform, through the creating\n an access password and providing the information requested;\n
  2. \n
  3. \n using the social network Facebook. In this case, the user must\n authorize Filazero to use your registration information in that\n social network to complete your registration. the user is the only\n one responsible for the security of your access data. It's through\n of these data that the user can access their account on Filazero and\n change your personal information and other data in your\n registration. If there is any suspicion of misuse or unauthorized\n use of your account, the user must immediately notify Filazero\n through our service channels.\n
  4. \n
\n

User agrees:

\n
    \n
  1. \n Provide true, accurate, current and complete information when to\n perform your registration;\n
  2. \n\n
  3. \n Keep and update your information in order to keep it true, accurate,\n current and complete;\n
  4. \n\n
  5. \n Be responsible for any false, incorrect information, outdated or\n incomplete provided.\n
  6. \n
\n\n

\n If Filazero has sufficient reasons to suspect the veracity and/or the\n accuracy of such information, shall have the right to suspend or\n cancel, immediately and regardless of any notice or notification, the\n user account.\n

\n\n

\n Filazero is a private company and, therefore, reserves the right to,\n at its sole discretion and according to its analysis parameters\n registration, accept or not the user's membership, as well as block or\n cancel your account from our platforms.\n

\n

Limitation and Liability

\n\n

\n Filazero is a platform that aims to facilitate the relationship\n between the user and our partners, but does not assume responsibility\n for the service provided and the information generated by these\n partners, nor has any monitoring obligation.\n

\n

\n Features are provided to the user without any explicit warranty or\n implied to further any specific business purpose. In in no case will\n Filazero be held liable for any damages, including lost profits,\n business interruption or loss of information resulting from the use or\n inability to use the resources available on Filazero platforms.\n

\n\n

\n Filazero will always strive to work with its partners to provide the\n best user experience possible, but you should be aware that the\n information that is shown will not always be correct or updated, and\n that we are not responsible for the accuracy of this information.\n

\n\n

\n We are not responsible for the services provided by our registered\n partners, or due to delays above the waiting time, advances of the\n estimated time or customer service that do not are in the queue.\n Filazero is an optimization tool, but the care management is the sole\n responsibility of the partner offering the service.\n

\n

\n It is the sole responsibility of the user to be at the location of\n service before or at the time you are notified to be serviced. This\n notification may occur by voice, through the device TV or through your\n smartphone, it is the user's duty to certify the form of notification.\n

\n\n

\n Filazero is not responsible for any damage, loss or loss suffered by\n the user due to internet, system or server used by the user, arising\n from conduct of third parties, acts of God or force majeure. Filazero\n is not responsible for the quality of your internet connection.\n

\n\n

\n Filazero will also not be responsible for any damage caused by virus\n or \"hacker\" that can attack the user's equipment in as a result of\n accessing, using or browsing the internet in the Filazero platform.\n

\n\n

Usage Restrictions

\n\n

\n Please always keep in mind that the features made available by\n Filazero must be used conscientiously, respecting our partners and the\n wider community. Filazero will not tolerate use abusive of its\n resources. When using Filazero, always be aware to the following\n provisions:\n

\n\n
    \n
  1. \n You may not use Filazero to violate the laws in your jurisdiction;\n You cannot impersonate other people or provide inaccurate\n information; You cannot do something that interferes or negatively\n affect the operation of registered partners;\n
  2. \n\n
  3. \n You cannot purchase bulk passwords from services that you don't want\n to use, as well as you can't use from automations (\"bots\") or any\n form of \"spam\" within the Filazero platforms;\n
  4. \n\n
  5. \n You may not attempt to buy, sell or transfer any element. of your\n account (including your username and your place in queues) or\n solicit, collect or use account credentials of other users;\n
  6. \n\n
  7. \n You cannot access the API (Application Programming Interface) of\n Filazero by an unofficial platform;\n
  8. \n\n
  9. \n You may not perform any act that interferes with or any way\n interrupt the service offered by Filazero, manipulate, violate or\n try to probe, scan or test the vulnerability of the service or of\n the Filazero computer systems, network and usage rules, or any\n security component of Filazero, measures of authentication or any\n other protective measures applicable to the service, content or any\n part thereof;\n
  10. \n
\n

Reservation of Rights

\n\n

\n Despite Filazero's commitment to ensure that the services are always\n normally available, it is possible that they will happen. occasions\n when services will be interrupted for maintenance scheduled, upgrades\n or for emergency repairs. the Filazero reserves the right to delete\n any content for any reason. or suspend your services at any time\n without notice.\n

\n

\n Our responsibility for any occurrence on the service will be limited\n as far as permitted by law. If there is a problem with our service, we\n cannot predict all the impacts that could to occur. You agree that we\n will not be responsible for any loss of profit, revenue, information\n or data, or damage occasional, special, indirect, exemplary, punitive\n or accidental arising from or relating to these terms, even though we\n know that they are possible.\n

\n

\n The Filazero service is provided \"as is\", without warranties or\n conditions. Specifically, our service may not be free from\n interruptions or errors. you renounce all and any indemnities for\n indirect, moral and material damages, against the Filazero.\n

\n

\n The commercial use of the expression \"Filazero\" as a brand, business\n name or domain name, as well as the contents of the screens related to\n the Filazero services, as well as programs, databases, networks,\n programming codes, and files that allow the user to access and use\n your account are the property of Filazero and are protected by laws\n and international treaties on copyright, trademarks, patents,\n industrial models and designs. Misuse and full reproduction or partial\n of said contents are prohibited, unless there is express authorization\n by Filazero.\n

\n\n

Update of Terms of Use

\n\n

\n In case of modification of these terms, to better serve your\n customers, we will post such changes to our services and terms. linked\n to them, and we will notify you of this situation. We will also retain\n previous versions of these Terms of Use. files for you to compare. If\n you choose to continue using our platforms, you will be automatically\n agreeing with updated provisions.\n

\n\n

Applicable Law

\n\n

\n These terms of use are governed solely and exclusively by the laws\n Brazilian companies, and any legal action related to their\n interpretation or application shall be processed and judged by the\n Power Brazilian Judiciary. The jurisdiction of the District of\n Aracaju-SE is elected to resolve any doubts arising from these terms\n of use.\n

\n
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-terms-modal',\n templateUrl: './terms-modal.component.html',\n styleUrls: ['./terms-modal.component.scss']\n})\nexport class TermsModalComponent implements OnInit {\n\n constructor(\n private matDialogRef: MatDialogRef,\n private translateService: TranslateService\n ) { }\n\n ngOnInit() {\n }\n\n get currentLang() {\n return this.translateService.currentLang;\n }\n\n closeModal() {\n this.matDialogRef.close();\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-terms-modal',\n templateUrl: './terms-noel-modal.component.html',\n styleUrls: ['./terms-noel-modal.component.scss']\n})\nexport class TermsNoelModalComponent implements OnInit {\n\n constructor(private matDialogRef: MatDialogRef) { }\n\n ngOnInit() {\n }\n\n closeModal() {\n this.matDialogRef.close();\n }\n\n}\n","
\n
\n close\n
\n

Termos de uso

\n
\n

As atividades e horários poderão ser alterados ou cancelados sem aviso prévio.

\n

Alguns minutos antes do papai noel realizar a ligação, o cliente irá receber um sms no telefone cadastrado informando que está perto de receber a ligação.

\n

Serão realizadas 2 (duas) tentativas de contato. Em casos onde o cliente não atenda as ligações, após todas as tentativas, o mesmo não permanecerá mais na fila, sendo necessário realizar todo procedimento novamente.

\n

Todos os clientes que participam desta ação autorizam previamente o cadastro dos dados para relacionamento do estabelecimento.

\n

Servirá como protocolo de atendimento o número do bilhete gerado ao realizar o cadastro no hotsite do Fila Zero.

\n

A chamada será realizada de um número aleatório e que não recebe ligação de volta.

\n

A ligação será gravada.

\n

A simples participação nesta ação/atividade significa que o participante conhece e aceita plenamente todas as normas expressas no presente regulamento, aceita fornecer os dados cadastrais e concorda em ser contatado pela empresa promotora através de e-mail, mensagem ou qualquer outra forma de contato, salvo quando o participante informar no posto de trocas que não aceita ser contatado pela empresa promotora.

\n
\n
\n
\n
\n","
\n
\n close\n
\n

Política de Privacidade

\n
\n

\n Nossa Política de Privacidade explica: quais informações coletamos e\n por que as coletamos. Como usamos essas informações. E com quem e por\n que compartilhamos essas informações.\n

\n\n

\n Somos uma startup de gestão de atendimentos e eliminação de filas, que\n visa auxiliar nossos parceiros em melhor atender ao público, reduzir\n custos e entregar ao seu cliente final maior conforto e liberdade\n quando precisar ser atendido.\n

\n\n

\n Sua privacidade é importante para nós, portanto, sendo você um\n usuário, por favor reserve um tempo para conhecer nossas práticas. E,\n se você tiver alguma dúvida, consulte esta página ou os Termos de Uso.\n

\n\n

\n Fazemos referência à empresa através do uso de termos tais como “app”\n “Filazero” “site”, “nós”, “nosso”, “conosco”, palavras tais como\n “você”, “seu”, e expressões similares referem-se a nossos clientes, ou\n a usuários de nosso site. Ao visitar uma de nossas plataformas e\n usufruir de nossos serviços, você automaticamente aceita as condições\n descritas a seguir, que compõem a Política de Privacidade.\n

\n\n

\n Importante: Você não é obrigado a conceder\n informações o Filazero. Entretanto, sem conceder certas informações\n quando estas forem solicitadas, não seremos capazes de entregar nossos\n serviços, assim não lhe será permitido o acesso a algumas\n funcionalidades. Coletamos informações para fornecer serviços de\n qualidade a todos nossos usuários, e elas ocorrem da seguinte forma:\n

\n\n

1. Coleta de Informação Pessoal

\n\n

\n O Filazero pode coletar informações de identificação pessoal, como\n nome, sobrenome, e-mail, senha, número de telefone, data de\n nascimento,foto, sexo, CPF, RG ou qualquer outra informação exigida\n durante o acesso a plataforma.\n

\n\n

\n Sempre que você acessar e utilizar a nossa plataforma de serviços, o\n Filazero receberá e armazenará automaticamente informações, incluindo\n seu endereço IP e informações de cookies, que serão relacionadas com\n as informações pessoais que você fornece, possibilitando uma\n experiência mais prática e eficiente.\n

\n\n

\n Como o Filazero auxilia seus parceiros no gerenciamento de seus\n atendimentos, poderá coletar, ainda, outros dados pessoais além dos\n listados acima, de acordo com as solicitações específicas destes\n parceiros, visando possibilitar que o serviço pretendido pelo usuário\n seja ofertado. Contudo, sempre que isso ocorrer, você será\n cientificado dos dados que serão coletados e deverá concordar com seu\n compartilhamento.\n

\n\n

2. Uso da sua informação pessoal

\n\n

\n O Filazero irá utilizar essas informações para processar e completar\n seu acesso às nossas plataformas. Dessa maneira, de acordo com a Lei\n 12.965/2014 (Marco Civil da Internet) e Lei 13.709/2018 (Lei Geral de\n Proteção de Dados), trataremos estas informações para otimizar nossos\n serviços e para realizar o seu cadastro.\n

\n\n

\n O Filazero irá disponibilizar suas informações pessoais, sem aviso\n prévio, somente em caso de:\n

\n
    \n
  1. \n legislação, regulamentação, processo legal ou solicitação\n governamental aplicável;\n
  2. \n
  3. cumprir investigação de possíveis violações;
  4. \n
  5. fraude ou por segurança;
  6. \n
  7. \n proteger contra dano aos direitos, a propriedade ou a segurança do\n Filazero, nossos usuários ou o público, conforme solicitado ou\n permitido por lei.\n
  8. \n
\n\n

\n O Filazero efetuará o cadastro do usuário, mantendo em seu sistema os\n registros específicos das operações efetuadas. Fazemos isso para que\n você tenha acesso rápido e eficiente aos serviços ofertados pelo\n Filazero, melhorando sua experiência e evitando que você tenha que\n fornecer informações toda vez que for utilizar nossos serviços.\n

\n\n

\n Os seus dados serão armazenados. Todos os documentos e informações\n relacionados ao cadastro do Titular permanecerão armazenados em\n segurança na posse de empresa especializada em armazenamento digital\n de dados contratada pelo Filazero (Amazon Web Service), mas apenas o\n Filazero terá acesso a este banco de dados.\n

\n\n

\n Utilizamos seus dados para desambiguação de cadastros, chamadas em\n painéis ou ainda para entrar em contato com você através de e-mails,\n SMS ou similares, para que possamos realizar verificação de contas e\n notificações de mudanças, atualizações ou informações técnicas\n referentes aos nossos serviços.\n

\n\n

\n Seus dados poderão ser utilizados para que possamos analisar e\n entender nossos usuários, permitindo que possamos lhe fornecer\n conteúdo e serviços personalizados, de acordo com suas preferências, e\n possamos melhorar nossos serviços constantemente.\n

\n\n

3. Compartilhamento de informações com terceiros

\n\n

\n Em razão da natureza do serviço prestado pelo Filazero, é essencial\n que algumas de suas informações sejam compartilhadas com nossos\n parceiros. Quando você decide utilizar o serviço de algum desses\n parceiros, estes solicitarão o Filazero que compartilhe seus dados\n cadastrais e/ou outros dados necessários para concluir a operação.\n Seus dados só serão compartilhados neste caso, e se você tiver\n consentido com esta Política de Privacidade.\n

\n\n

\n Para proteger seus dados, cobramos destes parceiros que cumpram\n rigorosamente as normas referentes à proteção de dados pessoais.\n Também impomos fortes restrições sobre como nossos parceiros podem\n usar e divulgar os dados que fornecemos. Sempre que houver suspeita de\n violação, por qualquer um destes parceiros, o Filazero irá tomar todas\n as providências cabíveis para proteger as suas informações.\n

\n\n

\n É importante ressaltar, portanto, que para utilizar as plataformas do\n Filazero você precisará concordar que estes parceiros possam, para\n ofertar o serviço que você procura, adquirir informações que você\n compartilha com o Filazero.\n

\n\n

\n Excetuado para atender ao fim exclusivo de prestar nossos serviços,\n conforme destacado acima, nós não compartilharemos suas informações\n pessoais com outras empresas, em atenção à Lei 12.965/2014 e Lei\n 13.709/2018, salvo com sua expressa autorização ou em caso de ordem\n judicial.\n

\n\n

\n Ainda que o Filazero sempre esteja atenta à forma como seus parceiros\n utilizam seus dados, as informações coletadas por esses serviços de\n terceiros estão sujeitas aos termos e políticas próprios, e não a esta\n Política de Privacidade. Por isso, nós não nos responsabilizamos pela\n forma com que terceiros coletam, usam, protegem ou revelam as\n informações que você possa vir a fornecê-los.\n

\n\n

\n Sabendo disso, ao utilizar os serviços ofertados pelo Filazero, o\n Titular autoriza a transmissão de alguns de seus dados cadastrais e de\n outros eventuais dados necessários com os parceiros do Filazero, para\n que estes possam processar e realizar o atendimento solicitado pelo\n usuário.\n

\n\n

\n O Filazero não irá vender seus dados pessoais em nenhuma\n circunstância.\n

\n\n

4. Restrição de idade

\n\n

\n O Filazero foi idealizada para consumidores maiores de idade. Se você\n tiver menos de 18 anos de idade, não será permitido o envio de suas\n informações pessoais às nossas plataformas para realização de seu\n cadastro. Apesar de indivíduos com menos de 18 anos poderem utilizar o\n serviço, eles só poderão fazê-lo com o envolvimento, a supervisão e\n aprovação dos pais ou responsáveis.\n

\n\n

5. Segurança

\n\n

\n Nós dispomos de medidas de segurança em âmbitos físico, eletrônico e\n administrativo, que protegem os dados pessoais e suas informações.\n Essas medidas de proteção nos auxiliam na prevenção de fraudes e\n acessos não autorizados às informações, bem como na manutenção da\n integridade dos dados. Além disso, dispomos de uma política de\n segurança interna para que funcionários do Filazero não tenham acesso\n a suas informações pessoais, de modo que seus dados permaneçam sempre\n em segurança.\n

\n\n

6. Direitos dos usuários

\n\n

\n Todos os direitos elencados abaixo podem ser exercidos a qualquer\n momento através dos canais de atendimento do Filazero.\n

\n\n

\n Acesso. O usuário poderá solicitar informações a respeito de quais\n dados são armazenados e para qual finalidade.\n

\n\n

\n Retificação. O usuário poderá solicitar a correção/atualização de\n algum de seus dados pessoais, pois é sua responsabilidade mantê-los\n sempre atualizado.\n

\n\n

\n Eliminação. O usuário poderá solicitar a eliminação dos seus dados\n pessoais nas seguintes situações:\n

\n
    \n
  1. \n quando não forem necessários para a finalidade para a qual são\n utilizados\n
  2. \n
  3. \n quando não estiver mais consentindo com os termos aqui expostos.\n
  4. \n
\n\n

\n O Filazero se reserva o direito de bloquear ou cancelar a Conta do\n usuário, excluindo todos os dados vinculadas a esta, em virtude da\n existência de indícios ou de ilícito efetivo identificado, além de\n divergências cadastrais.\n

\n\n

7. Mudanças nesta Declaração

\n\n

\n Em caso de modificação destes termos, para atender melhor seus\n clientes, publicaremos tais alterações da política de privacidade e\n notificaremos sobre esta situação. Também manteremos as versões\n anteriores desta Política de Privacidade arquivadas para você\n compará-las.\n

\n\n

8. Prazo de armazenamento de dados

\n\n

\n O Filazero armazenará seus dados pessoais durante o período necessário\n para a prestação do serviço que ofertamos, ou seja, enquanto sua conta\n permanecer ativa em nossas plataformas.\n

\n\n

\n Como destacado anterioremente, os dados poderão ser eliminados a\n pedido do usuário. Para encerrar a sua conta no Filazero, você deverá\n nos contatar por um de nossos canais de atendimento.\n

\n\n

\n O Filazero poderá armazenar seus dados durante o período necessário\n para cumprimento de obrigação legal ou regulatória.\n

\n\n

9. Consentimento

\n\n

\n Ao utilizar as plataformas do Filazero, você está consentindo com o\n tratamento dos seus dados nos termos da nossa Política de Privacidade,\n estando ciente dos dados que coletamos, das finalidades desta coleta e\n dos direitos do usuário em relação ao tratamento que realizamos.\n

\n\n

10. Encarregado de Dados

\n\n

\n Durante o período de armazenamento pelo Filazero, haverá um\n responsável exclusivo pelos dados, nos termos do art. 41 da Lei Geral\n de Proteção de Dados. Esta pessoa irá responder pelos dados, caso haja\n necessidade de apresentá-los para autoridade competente.\n

\n\n

\n Dados do contato: Hermeval Geraldo de Souza,\n app@filazero.net\n

\n\n

Resumo

\n\n

\n O Filazero respeita a sua privacidade. Quando se conectam a nós,\n queremos que nossos clientes saibam que seus dados pessoais estão em\n segurança, bem como que nós nos dedicamos em levar-lhes uma\n experiência fácil e segura. As informações pessoais armazenadas e\n compartilhadas através de nossas plataformas tem o fim de fornecer aos\n nosso clientes um serviço de qualidade, mas também nos ajudam a\n compreender melhor os interesses destes clientes, sendo que o nosso\n esforço em atendê-los com o melhor serviço possível nunca cessa.\n

\n\n

Se, mesmo assim, você ficar com alguma dúvida, entre em contato:

\n

E-mail: app@filazero.net

\n
\n
\n\n
\n

Privacy Policy

\n
\n

\n Our Privacy Policy explains: what information we collect and why we\n collect them. How we use this information. and with whom and by that\n we share this information.\n

\n\n

\n We are a service management and queue elimination startup, which aims\n to help our partners to better serve the public, reduce costs and\n deliver greater comfort and freedom to your end customer when you need\n to be attended to.\n

\n\n

\n Your privacy is important to us, so being you a user, please take the\n time to learn about our practices. AND, if you have any questions,\n please refer to this page or the Terms of Use.\n

\n\n

\n We refer to the company through the use of terms such as \"app\"\n “Filazero” “site”, “we”, “our”, “us”, words such as “you”, “your”, and\n similar expressions refer to our customers, or to users of our\n website. By visiting one of our platforms and enjoy our services, you\n automatically accept the conditions described below, which make up the\n Privacy Policy.\n

\n\n

\n Important: You are not required to grant information\n the Filazero. However, without giving certain information when these\n are requested, we will not be able to deliver our services, so you\n will not be allowed access to some functionalities. We collect\n information to provide services. quality to all our users, and they\n occur as follows:\n

\n\n

1. Collection of Personal Information

\n\n

\n Filazero may collect personally identifiable information such as name,\n surname, email, password, phone number, date of birth, photo, gender,\n CPF, RG or any other required information during platform access.\n

\n\n

\n Whenever you access and use our service platform, the Filazero will\n automatically receive and store information, including your IP address\n and cookie information, which will be related to the personal\n information you provide, enabling a more practical and efficient\n experience.\n

\n\n

\n How Filazero helps its partners in managing their services, may also\n collect other personal data in addition to the listed above, according\n to the specific requests of these partners, aiming to enable the\n service intended by the user be offered. However, whenever this\n happens, you will be aware of the data that will be collected and must\n agree with its sharing.\n

\n\n

2. Use of your personal information

\n\n

\n Filazero will use this information to process and complete your access\n to our platforms. In this way, according to the Law 12,965/2014\n (Internet Civil Mark) and Law 13,709/2018 (General Law of Data\n Protection), we will treat this information to optimize our services\n and to carry out your registration.\n

\n\n

\n Filazero will make your personal information available without notice\n prior, only in case:\n

\n
    \n
  1. \n legislation, regulation, legal process or request applicable\n government;\n
  2. \n
  3. complete investigation of possible violations;
  4. \n
  5. fraud or for security;
  6. \n
  7. \n protect against damage to the rights, property or safety of the\n Filazero, our users or the public, as requested or permitted by law.\n
  8. \n
\n\n

\n Filazero will register the user, keeping the specific records of the\n operations carried out. We do it so that you have fast and efficient\n access to the services offered by Filazero, improving your experience\n and preventing you from having to provide information every time you\n use our services.\n

\n\n

\n Your data will be stored. All documents and information related to the\n registration of the Holder will remain stored in security held by a\n company specializing in digital storage contracted by Filazero (Amazon\n Web Service), but only the Filazero will have access to this database.\n

\n\n

\n We use your data to disambiguate entries, calls in panels or to\n contact you through emails, SMS or similar, so that we can verify\n accounts and notifications of changes, updates or technical\n information regarding our services.\n

\n\n

\n Your data may be used so that we can analyze and understand our users,\n allowing us to provide you personalized content and services,\n according to your preferences, and we can constantly improve our\n services.\n

\n\n

3. Sharing information with third parties

\n\n

\n Due to the nature of the service provided by Filazero, it is essential\n that some of your information be shared with our partners. When you\n decide to use the service of one of these partners, they will ask\n Filazero to share their data records and/or other data necessary to\n complete the transaction. Your data will only be shared in this case,\n and if you have consented to this Privacy Policy.\n

\n\n

\n To protect your data, we charge these partners to comply strictly\n enforce the rules regarding the protection of personal data. We also\n impose strong restrictions on how our partners can use and disclose\n the data we provide. Whenever there is a suspicion of violation, by\n any of these partners, Filazero will take all take reasonable steps to\n protect your information.\n

\n\n

\n It is important to emphasize, therefore, that to use the platforms of\n the Filazero you will need to agree that these partners can, to offer\n the service you are looking for, acquire information that you share\n with Filazero.\n

\n\n

\n Except for the exclusive purpose of providing our services, as\n highlighted above, we will not share your information. with other\n companies, in compliance with Law 12.965/2014 and Law 13.709/2018,\n except with your express authorization or in case of order judicial.\n

\n\n

\n Although Filazero is always attentive to the way its partners use your\n data, the information collected by these services third parties are\n subject to their own terms and policies, not this Privacy Policy.\n Therefore, we are not responsible for the how third parties collect,\n use, protect or disclose information that you may provide them.\n

\n\n

\n Knowing this, when using the services offered by Filazero, the Holder\n authorizes the transmission of some of his registration data and any\n other necessary data with Filazero's partners, to that they can\n process and carry out the service requested by the user.\n

\n\n

Filazero will not sell your personal data in any circumstance.

\n\n

4. Age restriction

\n\n

\n Filazero was designed for older consumers. If you you are under 18\n years of age, you will not be allowed to send your personal\n information to our platforms to carry out your register. Although\n individuals under the age of 18 can use the service, they can only do\n so with involvement, supervision and approval of parents or guardians.\n

\n\n

5. Security

\n\n

\n We have security measures in the physical, electronic and\n administrative, which protect personal data and your information.\n These protective measures help us to prevent fraud and unauthorized\n access to information, as well as in maintaining the data integrity.\n In addition, we have a policy of internal security so that Filazero\n employees do not have access to your personal information, so that\n your data always remains in safety.\n

\n\n

6. Users rights

\n\n

\n All rights listed below can be exercised to any moment through\n Filazero's service channels.\n

\n\n

\n Access. The user may request information regarding which data is\n stored and for what purpose.\n

\n\n

\n Rectification. The user may request the correction/update of some of\n your personal data, as it is your responsibility to keep it always up\n to date.\n

\n\n

\n he immination. The user may request the deletion of their data\n personal in the following situations:\n

\n
    \n
  1. \n when they are not needed for the purpose for which they are used\n
  2. \n
  3. \n when you are no longer consenting to the terms set forth herein.\n
  4. \n
\n\n

\n Filazero reserves the right to block or cancel the user, excluding all\n data linked to it, due to the existence of evidence or of an\n identified effective offense, in addition to registration divergences.\n

\n\n

7. Changes to this Statement

\n\n

\n In case of modification of these terms, to better serve your\n customers, we will post such privacy policy changes and we will notify\n you of this situation. We will also keep the versions of this Privacy\n Policy filed for you compare them.\n

\n\n

8. Data storage term

\n\n

\n Filazero will store your personal data for as long as necessary. for\n the provision of the service we offer, that is, while your account\n stay active on our platforms.\n

\n\n

\n As highlighted above, the data can be deleted at user request. To\n close your Filazero account, you must contact us through one of our\n service channels.\n

\n\n

\n Filazero will be able to store your data during the necessary period\n to comply with a legal or regulatory obligation.\n

\n\n

9. Consent

\n\n

\n By using Filazero's platforms, you are consenting to the treatment of\n your data in accordance with our Privacy Policy, being aware of the\n data we collect, the purposes of this collection and of the user's\n rights in relation to the treatment we carry out.\n

\n\n

10. Data Officer

\n\n

\n During the Filazero storage period, there will be a exclusive\n responsible for the data, pursuant to art. 41 of the General Law of\n Data Protection. This person will answer for the data, if there is\n need to present them to the competent authority.\n

\n\n

\n Contact details: Hermeval Geraldo de Souza,\n app@filazero.net\n

\n\n

Summary

\n\n

\n Filazero respects your privacy. When they connect to us, we want our\n customers to know that their personal data is in security, as well as\n that we are dedicated to bringing them a easy and safe experience.\n Personal information stored and shared through our platforms is\n intended to provide our customers a quality service, but also help us\n to better understand the interests of these customers, and our effort\n to serve them with the best possible service never ceases.\n

\n\n

If you still have any questions, please contact:

\n

E-mail: app@filazero.net

\n
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-privacy-policy-modal',\n templateUrl: './privacy-policy-modal.component.html',\n styleUrls: ['./privacy-policy-modal.component.scss']\n})\nexport class PrivacyPolicyModalComponent implements OnInit {\n\n constructor(\n private matDialogRef: MatDialogRef,\n private translateService: TranslateService\n ) { }\n\n ngOnInit() {\n }\n\n get currentLang() {\n return this.translateService.currentLang;\n }\n\n closeModal() {\n this.matDialogRef.close();\n }\n}\n\n\n\n\n\n","\n\n\n
\n \n
\n
\n\n
\n
\n
\n

\n {{ 'general.pages.start.wellcome' | translate }}\n

\n
\n\n
\n

\n {{ terminal.location.name | uppercase }}\n

\n
\n\n
\n \n

\n {{ 'general.pages.start.legalTerms.part1' | translate }}\n \n {{ 'general.pages.start.legalTerms.termsOfUse' | translate }}\n \n \n {{ 'general.pages.start.legalTerms.termsOfUse' | translate }}\n \n {{ 'general.pages.start.legalTerms.part2' | translate }}\n \n {{ 'general.pages.start.legalTerms.privacyPolicy' | translate }}\n \n

\n
\n
\n
\n\n
\n
\n \n {{ 'general.actions.getInLine' | translate }}\n \n
\n
\n
\n\n\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Terminal, TerminalPayload } from '../../shared/models';\nimport { TerminalService } from '../../shared/services/terminal.service';\nimport { StorageService } from '../../shared/services';\nimport { MatDialog } from '@angular/material/dialog';\nimport { brighten } from '../../shared/utils/colors';\nimport { TermsModalComponent } from '../../components/terms-modal/terms-modal.component';\nimport { TermsNoelModalComponent } from '../../components/terms-noel-modal/terms-noel-modal.component';\nimport { environment } from 'src/environments/environment';\nimport { finalize } from 'rxjs/operators';\nimport { PrivacyPolicyModalComponent } from '../../components/privacy-policy-modal/privacy-policy-modal.component';\n\n@Component({\n selector: 'app-start',\n templateUrl: './start.component.html',\n styleUrls: ['./start.component.scss']\n})\nexport class StartComponent implements OnInit {\n isChecked = false;\n terminal: Terminal;\n payload: TerminalPayload;\n isLoading = true;\n container: HTMLElement;\n\n constructor(\n public dialog: MatDialog,\n private route: ActivatedRoute,\n private storageService: StorageService,\n private terminalService: TerminalService,\n private router: Router\n ) { }\n\n ngOnInit() {\n this.payload = {} as TerminalPayload;\n this.route.paramMap\n .subscribe(params => {\n const accessKey = params.get('accessKey');\n\n localStorage.setItem('terminalKey', accessKey);\n\n if (accessKey !== undefined) {\n this.terminalService.getTerminal(accessKey)\n .pipe(finalize(() => {\n this.isLoading = false\n\n const interval = setInterval(() => {\n this.container = document.getElementById('welcome-wrapper');\n if (this.container) {\n const height = window.innerHeight;\n this.container.style.height = `calc(${height}px - (64px + 40px))`;\n clearInterval(interval);\n }\n }, 250);\n }))\n .subscribe(terminal => {\n if (!(terminal.messages && terminal.messages[0].type === 'ERROR')) {\n this.terminal = terminal;\n this.storageService.addTerminal(terminal);\n this.storageService.setTemplate({templateColor: this.terminal.headerBackgroundColor, logoUrl: this.terminal.providerLogoUrl })\n this.terminalService.initPayload(terminal.provider.id, terminal.location.id, accessKey, terminal.id);\n this.payload = this.terminalService.getCurrentTerminalPayload();\n }\n });\n }\n });\n }\n\n get isValid() { return this.isChecked; }\n\n next(): void {\n this.terminalService.setCurrentTerminalPayload(this.payload);\n this.router.navigate(['/schedule']);\n }\n\n brighten(color: string, amount: number): string {\n return '#' + brighten(color, amount);\n }\n\n get isPhoneNoel() {\n return this.terminal.provider.id === environment.phoneNoelProviderId;\n }\n\n openTermsNoelModal() {\n this.dialog.open(TermsNoelModalComponent, {\n minWidth: '100vw',\n height: '100vh'\n });\n }\n\n openTermsModal() {\n this.dialog.open(TermsModalComponent, {\n minWidth: '100vw',\n height: '100vh'\n });\n }\n\n openPrivacyPolicyModal() {\n this.dialog.open(PrivacyPolicyModalComponent, {\n minWidth: '100vw',\n height: '100vh'\n })\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Service } from '../../shared/models';\nimport { StorageService, TerminalService, TicketService } from '../../shared/services';\nimport Hashids from 'hashids';\n@Component({\n selector: 'app-ticket',\n templateUrl: './ticket.component.html',\n styleUrls: ['./ticket.component.scss']\n})\nexport class TicketComponent implements OnInit {\n terminalAccessKey: string;\n ticketAccessKey: string;\n\n constructor(\n private router: Router,\n private _activatedRoute: ActivatedRoute,\n private storageService: StorageService,\n private ticketService: TicketService,\n private terminalService: TerminalService,\n ) { }\n\n ngOnInit() {\n this.ticketAccessKey = this._activatedRoute.snapshot.params['accessKey'];\n this.terminalAccessKey = this._activatedRoute.snapshot.queryParams['t'];\n this.getTerminal(this.terminalAccessKey);\n }\n\n private getTicket(ticketId: any) {\n this.ticketService.getTicket(ticketId)\n .subscribe((response) => {\n const ticket = {\n id: response.id,\n prevision: response.estimatedServiceStart,\n status: response.status,\n resource: response.resource?.name,\n attendanceType: response.attendanceType,\n timezoneId: response.location.timezoneId,\n providerId: response.provider.id,\n position: 0,\n serviceConfigId: response.session.serviceConfigId,\n friendlyCode: response.friendlyCode,\n accessKey: response.accessKey,\n locationId: response.location.id,\n locationName: response.location.name,\n providerName: response.provider.name,\n serviceName: response.service.name,\n feedback: response.feedback,\n smartCode: response.smartCode\n };\n\n this.storageService.addTicket(ticket);\n this.storageService.setCurrentTicket(ticket);\n\n this.terminalService.getService(response.service.id)\n .subscribe((data) => {\n const service: Service = {\n id: data.id,\n name: data.name,\n sessions: [],\n isRecommendDesktop: data.isRecommendDesktop,\n lobbyContent: data.lobbyContent,\n note: data.note,\n embedChat: data.embedChat\n }\n this.storageService.setCurrentService(service)\n this.router.navigate([`/track`]);\n });\n this.terminalService.getTemplate(response.provider.slug).subscribe((template) => \n this.storageService.setTemplate(template)\n );\n\n });\n }\n\n private getTerminal(accessKey: string): void {\n localStorage.setItem('terminalKey', accessKey);\n this.terminalService.getTerminal(accessKey).subscribe(response => {\n if (!(response.messages && response.messages[0].type === 'ERROR')) {\n const terminal = response;\n\n this.storageService.removeTerminal(terminal.id);\n this.storageService.addTerminal(terminal);\n }\n\n this.getTicket(this.decode(this.ticketAccessKey));\n });\n }\n\n private decode(accessKey: string): any {\n const hashids = new Hashids(\"45148c5e-3401-470b-a737-253d9d0b0831\", 8, \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\");\n return hashids.decode(accessKey)[0].valueOf();\n }\n}\n","\n\n
\n \n
\n \n
\n
\n
","import { Component } from \"@angular/core\";\nimport { MatDialogRef } from \"@angular/material/dialog\";\n\n@Component({\n selector: \"app-vidoconference-alert\",\n templateUrl: \"./vidoconference-alert.component.html\",\n styleUrls: [\"./vidoconference-alert.component.scss\"],\n})\nexport class VidoconferenceAlertComponent {\n constructor(private dialogRef: MatDialogRef) {\n this.dialogRef.disableClose = true;\n }\n\n closeDialog() {\n this.dialogRef.close();\n }\n}\n","
\n videocam\n
\n {{ 'components.videoConferenceAlertModal.emphasis-text' | translate }}\n

{{ 'components.videoConferenceAlertModal.description' | translate }}

\n
\n \n
\n","import { Component, Input } from '@angular/core';\n\n\n@Component({\n selector: 'app-track-information',\n templateUrl: './track-information.component.html',\n styleUrls: ['./track-information.component.scss']\n\n})\nexport class TrackInformationComponent {\n @Input() ticketPosition: string;\n @Input() prevision: string;\n @Input() ticketCode: string;\n}\n","
\n
\n
\n

{{ ticketPosition }}

\n
\n
\n

{{ 'general.components.trackInformation.position' | translate }}

\n
\n
\n
\n
\n

{{ prevision }}

\n
\n
\n

{{ 'general.components.trackInformation.forecast' | translate }}

\n
\n
\n
\n
\n

{{ ticketCode }}

\n
\n
\n
\n","

\n {{ \"general.pages.track.details.ticketStatusMessage\" | translate }}\n

\n

\n {{ status | translate }}\n

\n
\n
\n assignment\n {{\n \"general.pages.track.details.ticketDetails\" | translate\n }}\n
\n
\n {{\"general.pages.track.details.service\" | translate}}\n {{ ticket.serviceName }}\n
\n
\n \n {{\n \"general.pages.track.details.ticket\" | translate\n }}\n {{ ticket.friendlyCode }}\n
\n
\n Smart Code\n SC-{{ ticket.smartCode }}\n
\n
\n {{\n \"general.pages.track.details.session\" | translate\n }}\n {{\n session.start.toString()\n | timezoneFormat: ticket.timezoneId\n | dateFormat\n : {\n format: \"LLL\",\n locale: currentLang\n }\n }}\n
\n
\n {{\n \"general.pages.track.details.session\" | translate\n }}\n {{\n session.start.toString()\n | timezoneFormat: ticket.timezoneId\n | dateFormat\n : {\n format: \"LLL\",\n locale: currentLang\n }\n }}\n
\n
\n {{\n \"general.pages.track.details.prevision\" | translate\n }}\n {{ \"general.pages.track.details.at\" | translate }}\n {{\n ticket.prevision\n | timezoneFormat: ticket.timezoneId\n | dateFormat: { format: \"LT\", locale: currentLang }\n }}\n
\n
\n
\n
\n add\n {{\n \"general.pages.track.details.moreDetails\" | translate\n }}\n expand_more\n
\n
\n
\n {{\n \"general.pages.track.details.professional\" | translate\n }}\n {{ ticket.resource }}\n
\n
\n {{\n \"general.pages.track.details.priority\" | translate\n }}\n {{ priority | translate }}\n
\n
\n {{\n \"general.pages.track.details.priority\" | translate\n }}\n {{ priority | translate }}\n
\n
\n Status\n {{ status | translate }}\n
\n \n Status\n {{ status | translate }}\n
\n
\n location_on\n {{\n \"general.pages.track.details.location\" | translate\n }}\n
\n
\n
\n {{ ticket.providerName }} - {{ ticket.serviceName }}\n
\n
\n {{ ticket.locationAddress }}, {{ ticket.locationCity }} -\n {{ ticket.locationUF }}\n
\n
\n
\n \n \n
\n
\n
\n smartphone\n {{\n \"general.pages.track.details.follow\" | translate\n }}\n
\n
\n \n \n \n
\n {{ \"general.pages.track.details.qrCodePhrase\" | translate }}\n
\n \n \n
\n
\n
\n history\n {{\n \"general.pages.track.details.history\" | translate\n }}\n
\n
\n
\n
\n {{\n this.convertStatus(this.ticket.activities[0].name) | translate\n }}{{\n this.ticket.activities[0].at\n | date: \"H:mm - dd/MM/yyyy\":this.ticket.timezoneId:\"en-US\"\n }}\n
\n \n
\n {{\n this.convertStatus(update.name) | translate\n }}{{\n update.at | date: \"H:mm - dd/MM/yyyy\":this.ticket.timezoneId:\"en-US\"\n }}\n
\n
\n \n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Session, Ticket, Location, Terminal } from 'src/app/shared/models';\nimport { TranslateService } from '@ngx-translate/core';\n\n\n@Component({\n selector: 'app-ticket-details',\n templateUrl: './ticket-details.component.html',\n styleUrls: ['./ticket-details.component.scss'],\n})\n\nexport class TicketDetailsComponent implements OnInit {\n @Input() ticket: Ticket;\n @Input() session: Session;\n @Input() location: Location;\n @Input() terminal: Terminal;\n\n //isOpen é a boolean utilizada no toggleMoreDetails();\n public isOpen = false;\n public qrCodeBase = \"https://chart.googleapis.com/chart?chs=200x200&cht=qr&chl=https://entre.filazero.app/track/\";\n public qrCodeBaseLink = \"https://entre.filazero.app/track/\";\n\n constructor(private translateService: TranslateService) { }\n\n ngOnInit(): void {\n this.qrCodeBase += this.ticket.accessKey;\n this.qrCodeBaseLink += this.ticket.accessKey;\n\n }\n\n get currentLang(): string {\n return this.translateService.currentLang;\n }\n\n get center(): google.maps.LatLngLiteral {\n return {\n lat: +this.location.address.latitude, \n lng: +this.location.address.longitude\n };\n }\n\n get lat(): number {\n return +this.location.address.latitude;\n }\n\n get lng(): number {\n return +this.location.address.longitude;\n }\n\n get status(): string {\n if (this.translateService.currentLang) {\n\n }\n switch (this.ticket.status) {\n case 'Authorized':\n return 'general.pages.track.details.authorized';\n case 'Confirmed':\n return 'general.pages.track.details.confirmed';\n case 'Reopened':\n return 'general.pages.track.details.reopened';\n }\n }\n\n convertStatus(str) {\n switch (str) {\n case 'Authorized':\n return 'general.pages.track.details.authorized';\n case 'Confirmed':\n return 'general.pages.track.details.confirmed';\n case 'Reopened':\n return 'general.pages.track.details.reopened';\n case 'Checked':\n return 'general.pages.track.details.checked';\n case 'Called':\n return 'general.pages.track.details.called';\n }\n }\n\n get priority(): string {\n switch (this.ticket.priority) {\n case 'Normal':\n return 'general.pages.track.details.nonPreferential';\n case 'Preferential':\n return 'general.pages.track.details.preferential';\n case 'SuperPreferential':\n return 'general.pages.track.details.superPreferential';\n }\n }\n\n open(url) {\n window.open(url)\n }\n\n toggleMoreDetails() {\n if (!this.isOpen) {\n document.querySelectorAll('.more-details__body')[0].style.display = \"block\";\n setTimeout(() => {\n document.querySelectorAll('.more-details__body')[0].style.transform = \"translateY(0%) scaleY(1)\";\n document.querySelectorAll('.more-details__header')[0].style.borderRadius = \"10px 10px 0 0\";\n document.querySelectorAll('.more-details__header__arrow')[0].style.transform = \"rotateZ(180deg) translateX(-50%)\";\n document.querySelectorAll('.more-details__body')[0].style.borderRadius = \"0 0 10px 10px\";\n this.isOpen = true;\n }, 50)\n\n } else {\n setTimeout(() => {\n document.querySelectorAll(\".more-details__body\")[0].style.display = \"none\";\n this.isOpen = false;\n }, 350)\n document.querySelectorAll(\".more-details__body\")[0].style.transform = \"translateY(-50%) scaleY(0)\";\n document.querySelectorAll(\".more-details__header\")[0].style.borderRadius = \"10px\";\n document.querySelectorAll(\".more-details__header__arrow\")[0].style.transform = \"rotateZ(0deg)\";\n document.querySelectorAll(\".more-details__body\")[0].style.borderRadius = \"10px 10px 10px 10px\";\n }\n\n }\n\n\n}\n\n\n","/**\n * @license Angular v17.3.10\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { assertInInjectionContext, inject, DestroyRef, ɵRuntimeError, ɵgetOutputDestroyRef, Injector, effect, untracked, assertNotInReactiveContext, signal, computed } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * Operator which completes the Observable when the calling context (component, directive, service,\n * etc) is destroyed.\n *\n * @param destroyRef optionally, the `DestroyRef` representing the current context. This can be\n * passed explicitly to use `takeUntilDestroyed` outside of an [injection\n * context](guide/dependency-injection-context). Otherwise, the current `DestroyRef` is injected.\n *\n * @developerPreview\n */\nfunction takeUntilDestroyed(destroyRef) {\n if (!destroyRef) {\n assertInInjectionContext(takeUntilDestroyed);\n destroyRef = inject(DestroyRef);\n }\n const destroyed$ = new Observable(observer => {\n const unregisterFn = destroyRef.onDestroy(observer.next.bind(observer));\n return unregisterFn;\n });\n return (source) => {\n return source.pipe(takeUntil(destroyed$));\n };\n}\n\n/**\n * Implementation of `OutputRef` that emits values from\n * an RxJS observable source.\n *\n * @internal\n */\nclass OutputFromObservableRef {\n constructor(source) {\n this.source = source;\n this.destroyed = false;\n this.destroyRef = inject(DestroyRef);\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n });\n }\n subscribe(callbackFn) {\n if (this.destroyed) {\n throw new ɵRuntimeError(953 /* ɵRuntimeErrorCode.OUTPUT_REF_DESTROYED */, ngDevMode &&\n 'Unexpected subscription to destroyed `OutputRef`. ' +\n 'The owning directive/component is destroyed.');\n }\n // Stop yielding more values when the directive/component is already destroyed.\n const subscription = this.source.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n next: value => callbackFn(value),\n });\n return {\n unsubscribe: () => subscription.unsubscribe(),\n };\n }\n}\n/**\n * Declares an Angular output that is using an RxJS observable as a source\n * for events dispatched to parent subscribers.\n *\n * The behavior for an observable as source is defined as followed:\n * 1. New values are forwarded to the Angular output (next notifications).\n * 2. Errors notifications are not handled by Angular. You need to handle these manually.\n * For example by using `catchError`.\n * 3. Completion notifications stop the output from emitting new values.\n *\n * @usageNotes\n * Initialize an output in your directive by declaring a\n * class field and initializing it with the `outputFromObservable()` function.\n *\n * ```ts\n * @Directive({..})\n * export class MyDir {\n * nameChange$ = ;\n * nameChange = outputFromObservable(this.nameChange$);\n * }\n * ```\n *\n * @developerPreview\n */\nfunction outputFromObservable(observable, opts) {\n ngDevMode && assertInInjectionContext(outputFromObservable);\n return new OutputFromObservableRef(observable);\n}\n\n/**\n * Converts an Angular output declared via `output()` or `outputFromObservable()`\n * to an observable.\n *\n * You can subscribe to the output via `Observable.subscribe` then.\n *\n * @developerPreview\n */\nfunction outputToObservable(ref) {\n const destroyRef = ɵgetOutputDestroyRef(ref);\n return new Observable(observer => {\n // Complete the observable upon directive/component destroy.\n // Note: May be `undefined` if an `EventEmitter` is declared outside\n // of an injection context.\n destroyRef?.onDestroy(() => observer.complete());\n const subscription = ref.subscribe(v => observer.next(v));\n return () => subscription.unsubscribe();\n });\n}\n\n/**\n * Exposes the value of an Angular `Signal` as an RxJS `Observable`.\n *\n * The signal's value will be propagated into the `Observable`'s subscribers using an `effect`.\n *\n * `toObservable` must be called in an injection context unless an injector is provided via options.\n *\n * @developerPreview\n */\nfunction toObservable(source, options) {\n !options?.injector && assertInInjectionContext(toObservable);\n const injector = options?.injector ?? inject(Injector);\n const subject = new ReplaySubject(1);\n const watcher = effect(() => {\n let value;\n try {\n value = source();\n }\n catch (err) {\n untracked(() => subject.error(err));\n return;\n }\n untracked(() => subject.next(value));\n }, { injector, manualCleanup: true });\n injector.get(DestroyRef).onDestroy(() => {\n watcher.destroy();\n subject.complete();\n });\n return subject.asObservable();\n}\n\n/**\n * Get the current value of an `Observable` as a reactive `Signal`.\n *\n * `toSignal` returns a `Signal` which provides synchronous reactive access to values produced\n * by the given `Observable`, by subscribing to that `Observable`. The returned `Signal` will always\n * have the most recent value emitted by the subscription, and will throw an error if the\n * `Observable` errors.\n *\n * With `requireSync` set to `true`, `toSignal` will assert that the `Observable` produces a value\n * immediately upon subscription. No `initialValue` is needed in this case, and the returned signal\n * does not include an `undefined` type.\n *\n * By default, the subscription will be automatically cleaned up when the current [injection\n * context](/guide/dependency-injection-context) is destroyed. For example, when `toSignal` is\n * called during the construction of a component, the subscription will be cleaned up when the\n * component is destroyed. If an injection context is not available, an explicit `Injector` can be\n * passed instead.\n *\n * If the subscription should persist until the `Observable` itself completes, the `manualCleanup`\n * option can be specified instead, which disables the automatic subscription teardown. No injection\n * context is needed in this configuration as well.\n *\n * @developerPreview\n */\nfunction toSignal(source, options) {\n ngDevMode &&\n assertNotInReactiveContext(toSignal, 'Invoking `toSignal` causes new subscriptions every time. ' +\n 'Consider moving `toSignal` outside of the reactive context and read the signal value where needed.');\n const requiresCleanup = !options?.manualCleanup;\n requiresCleanup && !options?.injector && assertInInjectionContext(toSignal);\n const cleanupRef = requiresCleanup ? options?.injector?.get(DestroyRef) ?? inject(DestroyRef) : null;\n // Note: T is the Observable value type, and U is the initial value type. They don't have to be\n // the same - the returned signal gives values of type `T`.\n let state;\n if (options?.requireSync) {\n // Initially the signal is in a `NoValue` state.\n state = signal({ kind: 0 /* StateKind.NoValue */ });\n }\n else {\n // If an initial value was passed, use it. Otherwise, use `undefined` as the initial value.\n state = signal({ kind: 1 /* StateKind.Value */, value: options?.initialValue });\n }\n // Note: This code cannot run inside a reactive context (see assertion above). If we'd support\n // this, we would subscribe to the observable outside of the current reactive context, avoiding\n // that side-effect signal reads/writes are attribute to the current consumer. The current\n // consumer only needs to be notified when the `state` signal changes through the observable\n // subscription. Additional context (related to async pipe):\n // https://github.com/angular/angular/pull/50522.\n const sub = source.subscribe({\n next: value => state.set({ kind: 1 /* StateKind.Value */, value }),\n error: error => {\n if (options?.rejectErrors) {\n // Kick the error back to RxJS. It will be caught and rethrown in a macrotask, which causes\n // the error to end up as an uncaught exception.\n throw error;\n }\n state.set({ kind: 2 /* StateKind.Error */, error });\n },\n // Completion of the Observable is meaningless to the signal. Signals don't have a concept of\n // \"complete\".\n });\n if (ngDevMode && options?.requireSync && state().kind === 0 /* StateKind.NoValue */) {\n throw new ɵRuntimeError(601 /* ɵRuntimeErrorCode.REQUIRE_SYNC_WITHOUT_SYNC_EMIT */, '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n }\n // Unsubscribe when the current context is destroyed, if requested.\n cleanupRef?.onDestroy(sub.unsubscribe.bind(sub));\n // The actual returned signal is a `computed` of the `State` signal, which maps the various states\n // to either values or errors.\n return computed(() => {\n const current = state();\n switch (current.kind) {\n case 1 /* StateKind.Value */:\n return current.value;\n case 2 /* StateKind.Error */:\n throw current.error;\n case 0 /* StateKind.NoValue */:\n // This shouldn't really happen because the error is thrown on creation.\n // TODO(alxhub): use a RuntimeError when we finalize the error semantics\n throw new ɵRuntimeError(601 /* ɵRuntimeErrorCode.REQUIRE_SYNC_WITHOUT_SYNC_EMIT */, '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n }\n });\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { outputFromObservable, outputToObservable, takeUntilDestroyed, toObservable, toSignal };\n","const { isArray } = Array;\nexport function argsOrArgArray(args) {\n return args.length === 1 && isArray(args[0]) ? args[0] : args;\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nexport function race(...sources) {\n sources = argsOrArgArray(sources);\n return sources.length === 1 ? innerFrom(sources[0]) : new Observable(raceInit(sources));\n}\nexport function raceInit(sources) {\n return (subscriber) => {\n let subscriptions = [];\n for (let i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) {\n subscriptions.push(innerFrom(sources[i]).subscribe(createOperatorSubscriber(subscriber, (value) => {\n if (subscriptions) {\n for (let s = 0; s < subscriptions.length; s++) {\n s !== i && subscriptions[s].unsubscribe();\n }\n subscriptions = null;\n }\n subscriber.next(value);\n })));\n }\n };\n}\n","import { Observable } from '../Observable';\nimport { noop } from '../util/noop';\nexport const NEVER = new Observable(noop);\nexport function never() {\n return NEVER;\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { EMPTY } from './empty';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { popResultSelector } from '../util/args';\nexport function zip(...args) {\n const resultSelector = popResultSelector(args);\n const sources = argsOrArgArray(args);\n return sources.length\n ? new Observable((subscriber) => {\n let buffers = sources.map(() => []);\n let completed = sources.map(() => false);\n subscriber.add(() => {\n buffers = completed = null;\n });\n for (let sourceIndex = 0; !subscriber.closed && sourceIndex < sources.length; sourceIndex++) {\n innerFrom(sources[sourceIndex]).subscribe(createOperatorSubscriber(subscriber, (value) => {\n buffers[sourceIndex].push(value);\n if (buffers.every((buffer) => buffer.length)) {\n const result = buffers.map((buffer) => buffer.shift());\n subscriber.next(resultSelector ? resultSelector(...result) : result);\n if (buffers.some((buffer, i) => !buffer.length && completed[i])) {\n subscriber.complete();\n }\n }\n }, () => {\n completed[sourceIndex] = true;\n !buffers[sourceIndex].length && subscriber.complete();\n }));\n }\n return () => {\n buffers = completed = null;\n };\n })\n : EMPTY;\n}\n","import * as i0 from '@angular/core';\nimport { Injectable, inject, ElementRef, NgZone, EventEmitter, Directive, Input, Output, ViewContainerRef, TemplateRef, ContentChild, ChangeDetectorRef, DestroyRef, ContentChildren, NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, PLATFORM_ID, LOCALE_ID, ViewChild, Injector, forwardRef, ApplicationRef, EnvironmentInjector, createComponent, Attribute, ViewChildren, HostBinding, InjectionToken } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, EMPTY, of, Subject, fromEvent, timer, race, BehaviorSubject, combineLatest, NEVER, zip, merge } from 'rxjs';\nimport { endWith, takeUntil, filter, map, distinctUntilChanged, startWith, switchMap, take, tap, withLatestFrom, delay, mergeMap, skip, finalize } from 'rxjs/operators';\nimport { isPlatformBrowser, NgTemplateOutlet, FormStyle, TranslationWidth, getLocaleMonthNames, getLocaleDayNames, formatDate, DOCUMENT, PercentPipe, getLocaleDayPeriods } from '@angular/common';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';\nimport { flip, preventOverflow, arrow, createPopperLite, offset } from '@popperjs/core';\n\nconst environment = {\n animation: true,\n transitionTimerDelayMs: 5,\n};\n\n/**\n * Global ng-bootstrap config\n *\n * @since 8.0.0\n */\nclass NgbConfig {\n constructor() {\n this.animation = environment.animation;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * A configuration service for the [`NgbAccordionDirective`](#/components/accordion/api#NgbAccordionDirective).\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all accordions used in the application.\n */\nclass NgbAccordionConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.closeOthers = false;\n this.destroyOnHide = true;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nfunction getTransitionDurationMs(element) {\n const { transitionDelay, transitionDuration } = window.getComputedStyle(element);\n const transitionDelaySec = parseFloat(transitionDelay);\n const transitionDurationSec = parseFloat(transitionDuration);\n return (transitionDelaySec + transitionDurationSec) * 1000;\n}\n\nfunction toInteger(value) {\n return parseInt(`${value}`, 10);\n}\nfunction toString(value) {\n return value !== undefined && value !== null ? `${value}` : '';\n}\nfunction getValueInRange(value, max, min = 0) {\n return Math.max(Math.min(value, max), min);\n}\nfunction isString(value) {\n return typeof value === 'string';\n}\nfunction isNumber(value) {\n return !isNaN(toInteger(value));\n}\nfunction isInteger(value) {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\nfunction isPromise(v) {\n return v && v.then;\n}\nfunction padNumber(value) {\n if (isNumber(value)) {\n return `0${value}`.slice(-2);\n }\n else {\n return '';\n }\n}\nfunction regExpEscape(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\nfunction closest(element, selector) {\n if (!selector) {\n return null;\n }\n /*\n * In certain browsers (e.g. Edge 44.18362.449.0) HTMLDocument does\n * not support `Element.prototype.closest`. To emulate the correct behaviour\n * we return null when the method is missing.\n *\n * Note that in evergreen browsers `closest(document.documentElement, 'html')`\n * will return the document element whilst in Edge null will be returned. This\n * compromise was deemed good enough.\n */\n if (typeof element.closest === 'undefined') {\n return null;\n }\n return element.closest(selector);\n}\n/**\n * Force a browser reflow\n * @param element element where to apply the reflow\n */\nfunction reflow(element) {\n return (element || document.body).getBoundingClientRect();\n}\n/**\n * Creates an observable where all callbacks are executed inside a given zone\n *\n * @param zone\n */\nfunction runInZone(zone) {\n return (source) => {\n return new Observable((observer) => {\n const next = (value) => zone.run(() => observer.next(value));\n const error = (e) => zone.run(() => observer.error(e));\n const complete = () => zone.run(() => observer.complete());\n return source.subscribe({ next, error, complete });\n });\n };\n}\nfunction removeAccents(str) {\n return str.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n/**\n * Returns the active element in the given root.\n * If the active element is inside a shadow root, it is searched recursively.\n */\nfunction getActiveElement(root = document) {\n const activeEl = root?.activeElement;\n if (!activeEl) {\n return null;\n }\n return activeEl.shadowRoot ? getActiveElement(activeEl.shadowRoot) : activeEl;\n}\n\nconst noopFn = () => { };\nconst { transitionTimerDelayMs } = environment;\nconst runningTransitions = new Map();\nconst ngbRunTransition = (zone, element, startFn, options) => {\n // Getting initial context from options\n let context = options.context || {};\n // Checking if there are already running transitions on the given element.\n const running = runningTransitions.get(element);\n if (running) {\n switch (options.runningTransition) {\n // If there is one running and we want for it to 'continue' to run, we have to cancel the new one.\n // We're not emitting any values, but simply completing the observable (EMPTY).\n case 'continue':\n return EMPTY;\n // If there is one running and we want for it to 'stop', we have to complete the running one.\n // We're simply completing the running one and not emitting any values and merging newly provided context\n // with the one coming from currently running transition.\n case 'stop':\n zone.run(() => running.transition$.complete());\n context = Object.assign(running.context, context);\n runningTransitions.delete(element);\n }\n }\n // Running the start function\n const endFn = startFn(element, options.animation, context) || noopFn;\n // If 'prefer-reduced-motion' is enabled, the 'transition' will be set to 'none'.\n // If animations are disabled, we have to emit a value and complete the observable\n // In this case we have to call the end function, but can finish immediately by emitting a value,\n // completing the observable and executing end functions synchronously.\n if (!options.animation || window.getComputedStyle(element).transitionProperty === 'none') {\n zone.run(() => endFn());\n return of(undefined).pipe(runInZone(zone));\n }\n // Starting a new transition\n const transition$ = new Subject();\n const finishTransition$ = new Subject();\n const stop$ = transition$.pipe(endWith(true));\n runningTransitions.set(element, {\n transition$,\n complete: () => {\n finishTransition$.next();\n finishTransition$.complete();\n },\n context,\n });\n const transitionDurationMs = getTransitionDurationMs(element);\n // 1. We have to both listen for the 'transitionend' event and have a 'just-in-case' timer,\n // because 'transitionend' event might not be fired in some browsers, if the transitioning\n // element becomes invisible (ex. when scrolling, making browser tab inactive, etc.). The timer\n // guarantees, that we'll release the DOM element and complete 'ngbRunTransition'.\n // 2. We need to filter transition end events, because they might bubble from shorter transitions\n // on inner DOM elements. We're only interested in the transition on the 'element' itself.\n zone.runOutsideAngular(() => {\n const transitionEnd$ = fromEvent(element, 'transitionend').pipe(takeUntil(stop$), filter(({ target }) => target === element));\n const timer$ = timer(transitionDurationMs + transitionTimerDelayMs).pipe(takeUntil(stop$));\n race(timer$, transitionEnd$, finishTransition$)\n .pipe(takeUntil(stop$))\n .subscribe(() => {\n runningTransitions.delete(element);\n zone.run(() => {\n endFn();\n transition$.next();\n transition$.complete();\n });\n });\n });\n return transition$.asObservable();\n};\nconst ngbCompleteTransition = (element) => {\n runningTransitions.get(element)?.complete();\n};\n\nfunction measureCollapsingElementDimensionPx(element, dimension) {\n // SSR fix for without injecting the PlatformId\n if (typeof navigator === 'undefined') {\n return '0px';\n }\n const { classList } = element;\n const hasShownClass = classList.contains('show');\n if (!hasShownClass) {\n classList.add('show');\n }\n element.style[dimension] = '';\n const dimensionSize = element.getBoundingClientRect()[dimension] + 'px';\n if (!hasShownClass) {\n classList.remove('show');\n }\n return dimensionSize;\n}\nconst ngbCollapsingTransition = (element, animation, context) => {\n let { direction, maxSize, dimension } = context;\n const { classList } = element;\n function setInitialClasses() {\n classList.add('collapse');\n if (direction === 'show') {\n classList.add('show');\n }\n else {\n classList.remove('show');\n }\n }\n // without animations we just need to set initial classes\n if (!animation) {\n setInitialClasses();\n return;\n }\n // No maxHeight -> running the transition for the first time\n if (!maxSize) {\n maxSize = measureCollapsingElementDimensionPx(element, dimension);\n context.maxSize = maxSize;\n // Fix the height before starting the animation\n element.style[dimension] = direction !== 'show' ? maxSize : '0px';\n classList.remove('collapse');\n classList.remove('collapsing');\n classList.remove('show');\n reflow(element);\n // Start the animation\n classList.add('collapsing');\n }\n // Start or revert the animation\n element.style[dimension] = direction === 'show' ? maxSize : '0px';\n return () => {\n setInitialClasses();\n classList.remove('collapsing');\n element.style[dimension] = '';\n };\n};\n\n/**\n * A configuration service for the [NgbCollapse](#/components/collapse/api#NgbCollapse) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all collapses used in the application.\n */\nclass NgbCollapseConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.horizontal = false;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCollapseConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCollapseConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCollapseConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * A directive to provide a simple way of hiding and showing elements on the\n * page.\n */\nclass NgbCollapse {\n constructor() {\n this._config = inject(NgbCollapseConfig);\n this._element = inject(ElementRef);\n this._zone = inject(NgZone);\n /**\n * If `true`, collapse will be animated.\n *\n * Animation is triggered only when clicked on triggering element\n * or via the `.toggle()` function\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * Flag used to track if the collapse setter is invoked during initialization\n * or not. This distinction is made in order to avoid running the transition during initialization.\n */\n this._afterInit = false;\n this._isCollapsed = false;\n this.ngbCollapseChange = new EventEmitter();\n /**\n * If `true`, will collapse horizontally.\n *\n * @since 13.1.0\n */\n this.horizontal = this._config.horizontal;\n /**\n * An event emitted when the collapse element is shown, after the transition.\n * It has no payload.\n *\n * @since 8.0.0\n */\n this.shown = new EventEmitter();\n /**\n * An event emitted when the collapse element is hidden, after the transition.\n * It has no payload.\n *\n * @since 8.0.0\n */\n this.hidden = new EventEmitter();\n }\n /**\n * If `true`, will collapse the element or show it otherwise.\n */\n set collapsed(isCollapsed) {\n if (this._isCollapsed !== isCollapsed) {\n this._isCollapsed = isCollapsed;\n if (this._afterInit) {\n this._runTransitionWithEvents(isCollapsed, this.animation);\n }\n }\n }\n ngOnInit() {\n this._runTransition(this._isCollapsed, false);\n this._afterInit = true;\n }\n /**\n * Triggers collapsing programmatically.\n *\n * If there is a collapsing transition running already, it will be reversed.\n * If the animations are turned off this happens synchronously.\n *\n * @since 8.0.0\n */\n toggle(open = this._isCollapsed) {\n this.collapsed = !open;\n this.ngbCollapseChange.next(this._isCollapsed);\n }\n _runTransition(collapsed, animation) {\n return ngbRunTransition(this._zone, this._element.nativeElement, ngbCollapsingTransition, {\n animation,\n runningTransition: 'stop',\n context: { direction: collapsed ? 'hide' : 'show', dimension: this.horizontal ? 'width' : 'height' },\n });\n }\n _runTransitionWithEvents(collapsed, animation) {\n this._runTransition(collapsed, animation).subscribe(() => {\n if (collapsed) {\n this.hidden.emit();\n }\n else {\n this.shown.emit();\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCollapse, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbCollapse, isStandalone: true, selector: \"[ngbCollapse]\", inputs: { animation: \"animation\", collapsed: [\"ngbCollapse\", \"collapsed\"], horizontal: \"horizontal\" }, outputs: { ngbCollapseChange: \"ngbCollapseChange\", shown: \"shown\", hidden: \"hidden\" }, host: { properties: { \"class.collapse-horizontal\": \"horizontal\" } }, exportAs: [\"ngbCollapse\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCollapse, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbCollapse]',\n exportAs: 'ngbCollapse',\n standalone: true,\n host: {\n '[class.collapse-horizontal]': 'horizontal',\n },\n }]\n }], propDecorators: { animation: [{\n type: Input\n }], collapsed: [{\n type: Input,\n args: ['ngbCollapse']\n }], ngbCollapseChange: [{\n type: Output\n }], horizontal: [{\n type: Input\n }], shown: [{\n type: Output\n }], hidden: [{\n type: Output\n }] } });\n\nlet nextId$3 = 0;\n/**\n * A directive that wraps the content of an accordion item's collapsible body.\n *\n * The actual content is provided in a child `ng-template` element.\n * Depending on the state of the accordion, the template will be either inserted or removed from the DOM.\n *\n * @since 14.1.0\n */\nclass NgbAccordionBody {\n constructor() {\n this._vcr = inject(ViewContainerRef);\n this._element = inject((ElementRef)).nativeElement;\n this._item = inject(NgbAccordionItem);\n this._viewRef = null;\n }\n ngAfterContentChecked() {\n if (this._bodyTpl) {\n if (this._item._shouldBeInDOM) {\n this._createViewIfNotExists();\n }\n else {\n this._destroyViewIfExists();\n }\n }\n }\n ngOnDestroy() {\n this._destroyViewIfExists();\n }\n _destroyViewIfExists() {\n if (this._viewRef) {\n this._viewRef.destroy();\n this._viewRef = null;\n }\n }\n _createViewIfNotExists() {\n if (!this._viewRef) {\n this._viewRef = this._vcr.createEmbeddedView(this._bodyTpl);\n this._viewRef.detectChanges();\n for (const node of this._viewRef.rootNodes) {\n this._element.appendChild(node);\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionBody, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbAccordionBody, isStandalone: true, selector: \"[ngbAccordionBody]\", host: { properties: { \"class.accordion-body\": \"true\" } }, queries: [{ propertyName: \"_bodyTpl\", first: true, predicate: TemplateRef, descendants: true, static: true }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionBody, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbAccordionBody]',\n standalone: true,\n host: { '[class.accordion-body]': 'true' },\n }]\n }], propDecorators: { _bodyTpl: [{\n type: ContentChild,\n args: [TemplateRef, { static: true }]\n }] } });\n/**\n * A directive that wraps the collapsible item's content of the accordion.\n *\n * Internally it reuses the [`NgbCollapse` directive](#/components/collapse)\n *\n * @since 14.1.0\n */\nclass NgbAccordionCollapse {\n constructor() {\n this.item = inject(NgbAccordionItem);\n this.ngbCollapse = inject(NgbCollapse);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionCollapse, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbAccordionCollapse, isStandalone: true, selector: \"[ngbAccordionCollapse]\", host: { attributes: { \"role\": \"region\" }, properties: { \"class.accordion-collapse\": \"true\", \"id\": \"item.collapseId\", \"attr.aria-labelledby\": \"item.toggleId\" } }, exportAs: [\"ngbAccordionCollapse\"], hostDirectives: [{ directive: NgbCollapse }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionCollapse, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'ngbAccordionCollapse',\n standalone: true,\n selector: '[ngbAccordionCollapse]',\n host: {\n role: 'region',\n '[class.accordion-collapse]': 'true',\n '[id]': 'item.collapseId',\n '[attr.aria-labelledby]': 'item.toggleId',\n },\n hostDirectives: [NgbCollapse],\n }]\n }] });\n/**\n * A directive to put on a toggling element inside the accordion item's header.\n * It will register click handlers that toggle the associated panel and will handle accessibility attributes.\n *\n * This directive is used internally by the [`NgbAccordionButton` directive](#/components/accordion/api#NgbAccordionButton).\n *\n * @since 14.1.0\n */\nclass NgbAccordionToggle {\n constructor() {\n this.item = inject(NgbAccordionItem);\n this.accordion = inject(NgbAccordionDirective);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionToggle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbAccordionToggle, isStandalone: true, selector: \"[ngbAccordionToggle]\", host: { listeners: { \"click\": \"!item.disabled && accordion.toggle(item.id)\" }, properties: { \"id\": \"item.toggleId\", \"class.collapsed\": \"item.collapsed\", \"attr.aria-controls\": \"item.collapseId\", \"attr.aria-expanded\": \"!item.collapsed\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionToggle, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbAccordionToggle]',\n standalone: true,\n host: {\n '[id]': 'item.toggleId',\n '[class.collapsed]': 'item.collapsed',\n '[attr.aria-controls]': 'item.collapseId',\n '[attr.aria-expanded]': '!item.collapsed',\n '(click)': '!item.disabled && accordion.toggle(item.id)',\n },\n }]\n }] });\n/**\n * A directive to put on a button element inside an accordion item's header.\n *\n * If you want a custom markup for the header, you can also use the [`NgbAccordionToggle` directive](#/components/accordion/api#NgbAccordionToggle).\n *\n * @since 14.1.0\n */\nclass NgbAccordionButton {\n constructor() {\n this.item = inject(NgbAccordionItem);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionButton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbAccordionButton, isStandalone: true, selector: \"button[ngbAccordionButton]\", host: { attributes: { \"type\": \"button\" }, properties: { \"disabled\": \"item.disabled\", \"class.accordion-button\": \"true\" } }, hostDirectives: [{ directive: NgbAccordionToggle }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionButton, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[ngbAccordionButton]',\n standalone: true,\n host: {\n '[disabled]': 'item.disabled',\n '[class.accordion-button]': 'true',\n type: 'button',\n },\n hostDirectives: [NgbAccordionToggle],\n }]\n }] });\n/**\n * A directive that wraps an accordion item's header.\n *\n * @since 14.1.0\n */\nclass NgbAccordionHeader {\n constructor() {\n this.item = inject(NgbAccordionItem);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionHeader, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbAccordionHeader, isStandalone: true, selector: \"[ngbAccordionHeader]\", host: { attributes: { \"role\": \"heading\" }, properties: { \"class.accordion-header\": \"true\", \"class.collapsed\": \"item.collapsed\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionHeader, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbAccordionHeader]',\n standalone: true,\n host: {\n role: 'heading',\n '[class.accordion-header]': 'true',\n '[class.collapsed]': 'item.collapsed',\n },\n }]\n }] });\n/**\n * A directive that wraps an accordion item: a toggleable header + body that collapses.\n *\n * You can get hold of the `NgbAccordionItem` instance in the template with `#item=\"ngbAccordionItem\"`.\n * It allows to check if the item is collapsed or not, toggle the collapse state, etc.\n *\n * Every accordion item has a string ID that is automatically generated in the `ngb-accordion-item-XX` format, unless provided explicitly.\n *\n * @since 14.1.0\n */\nclass NgbAccordionItem {\n constructor() {\n this._accordion = inject(NgbAccordionDirective);\n this._cd = inject(ChangeDetectorRef);\n this._destroyRef = inject(DestroyRef);\n this._collapsed = true;\n this._id = `ngb-accordion-item-${nextId$3++}`;\n this._collapseAnimationRunning = false;\n /**\n * If `true`, the accordion item will be disabled.\n * It won't react to user's clicks, but still will be toggelable programmatically.\n */\n this.disabled = false;\n /**\n * Event emitted before the expanding animation starts. It has no payload.\n *\n * @since 15.1.0\n */\n this.show = new EventEmitter();\n /**\n * Event emitted when the expanding animation is finished. It has no payload.\n */\n this.shown = new EventEmitter();\n /**\n * Event emitted before the collapsing animation starts. It has no payload.\n *\n * @since 15.1.0\n */\n this.hide = new EventEmitter();\n /**\n * Event emitted when the collapsing animation is finished and before the content is removed from DOM.\n * It has no payload.\n */\n this.hidden = new EventEmitter();\n }\n /**\n * Sets the custom ID of the accordion item. It must be unique for the document.\n *\n * @param id The ID of the accordion item, must be a non-empty string\n */\n set id(id) {\n if (isString(id) && id !== '') {\n this._id = id;\n }\n }\n /**\n * If `true`, the content of the accordion item's body will be removed from the DOM. It will be just hidden otherwise.\n *\n * This property can also be set up on the parent [`NgbAccordion` directive](#/components/accordion/api#NgbAccordionDirective).\n */\n set destroyOnHide(destroyOnHide) {\n this._destroyOnHide = destroyOnHide;\n }\n get destroyOnHide() {\n return this._destroyOnHide === undefined ? this._accordion.destroyOnHide : this._destroyOnHide;\n }\n /**\n *\tIf `true`, the accordion item will be collapsed. Otherwise, it will be expanded.\n *\n * @param collapsed New state of the accordion item.\n */\n set collapsed(collapsed) {\n if (collapsed) {\n this.collapse();\n }\n else {\n this.expand();\n }\n }\n get collapsed() {\n return this._collapsed;\n }\n get id() {\n return `${this._id}`;\n }\n get toggleId() {\n return `${this.id}-toggle`;\n }\n get collapseId() {\n return `${this.id}-collapse`;\n }\n get _shouldBeInDOM() {\n return !this.collapsed || this._collapseAnimationRunning || !this.destroyOnHide;\n }\n ngAfterContentInit() {\n const { ngbCollapse } = this._collapse;\n // we need to disable the animation for the first init\n ngbCollapse.animation = false;\n ngbCollapse.collapsed = this.collapsed;\n // we set the animation to the default of the accordion\n ngbCollapse.animation = this._accordion.animation;\n // event forwarding from 'ngbCollapse' to 'ngbAccordion'\n ngbCollapse.hidden.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n // when the animation finishes we can remove the template from DOM\n this._collapseAnimationRunning = false;\n this.hidden.emit();\n this._accordion.hidden.emit(this.id);\n });\n ngbCollapse.shown.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.shown.emit();\n this._accordion.shown.emit(this.id);\n });\n }\n /**\n * Toggles an accordion item.\n */\n toggle() {\n this.collapsed = !this.collapsed;\n }\n /**\n * Expands an accordion item.\n */\n expand() {\n if (this.collapsed) {\n // checking if accordion allows to expand the panel in respect to 'closeOthers' flag\n if (!this._accordion._ensureCanExpand(this)) {\n return;\n }\n this._collapsed = false;\n // need if the accordion is used inside a component having OnPush change detection strategy\n this._cd.markForCheck();\n // we need force CD to get template into DOM before starting animation to calculate its height correctly\n // this will synchronously put the item body into DOM, because `this._collapsed` was flipped to `false`\n this._cd.detectChanges();\n // firing events before starting animations\n this.show.emit();\n this._accordion.show.emit(this.id);\n // we also need to make sure 'animation' flag is up-to- date\n this._collapse.ngbCollapse.animation = this._accordion.animation;\n this._collapse.ngbCollapse.collapsed = false;\n }\n }\n /**\n * Collapses an accordion item.\n */\n collapse() {\n if (!this.collapsed) {\n this._collapsed = true;\n this._collapseAnimationRunning = true;\n // need if the accordion is used inside a component having OnPush change detection strategy\n this._cd.markForCheck();\n // firing events before starting animations\n this.hide.emit();\n this._accordion.hide.emit(this.id);\n // we also need to make sure 'animation' flag is up-to- date\n this._collapse.ngbCollapse.animation = this._accordion.animation;\n this._collapse.ngbCollapse.collapsed = true;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbAccordionItem, isStandalone: true, selector: \"[ngbAccordionItem]\", inputs: { id: [\"ngbAccordionItem\", \"id\"], destroyOnHide: \"destroyOnHide\", disabled: \"disabled\", collapsed: \"collapsed\" }, outputs: { show: \"show\", shown: \"shown\", hide: \"hide\", hidden: \"hidden\" }, host: { properties: { \"class.accordion-item\": \"true\", \"id\": \"id\" } }, queries: [{ propertyName: \"_collapse\", first: true, predicate: NgbAccordionCollapse, descendants: true, static: true }], exportAs: [\"ngbAccordionItem\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionItem, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbAccordionItem]',\n exportAs: 'ngbAccordionItem',\n standalone: true,\n host: {\n '[class.accordion-item]': 'true',\n '[id]': 'id',\n },\n }]\n }], propDecorators: { _collapse: [{\n type: ContentChild,\n args: [NgbAccordionCollapse, { static: true }]\n }], id: [{\n type: Input,\n args: ['ngbAccordionItem']\n }], destroyOnHide: [{\n type: Input\n }], disabled: [{\n type: Input\n }], collapsed: [{\n type: Input\n }], show: [{\n type: Output\n }], shown: [{\n type: Output\n }], hide: [{\n type: Output\n }], hidden: [{\n type: Output\n }] } });\n/**\n * Accordion is a stack of cards that have a header and collapsible body.\n *\n * This directive is a container for these items and provides an API to handle them.\n *\n * @since 14.1.0\n */\nclass NgbAccordionDirective {\n constructor() {\n this._config = inject(NgbAccordionConfig);\n this._anItemWasAlreadyExpandedDuringInitialisation = false;\n /**\n * If `true`, accordion will be animated.\n */\n this.animation = this._config.animation;\n /**\n * If `true`, only one item at the time can stay open.\n */\n this.closeOthers = this._config.closeOthers;\n /**\n * If `true`, the content of the accordion items body will be removed from the DOM. It will be just hidden otherwise.\n *\n * This property can be overwritten at the [`NgbAccordionItem`](#/components/accordion/api#NgbAccordionItem) level\n */\n this.destroyOnHide = this._config.destroyOnHide;\n /**\n * Event emitted before expanding animation starts. The payload is the id of shown accordion item.\n *\n * @since 15.1.0\n */\n this.show = new EventEmitter();\n /**\n * Event emitted when the expanding animation is finished. The payload is the id of shown accordion item.\n */\n this.shown = new EventEmitter();\n /**\n * Event emitted before the collapsing animation starts. The payload is the id of hidden accordion item.\n *\n * @since 15.1.0\n */\n this.hide = new EventEmitter();\n /**\n * Event emitted when the collapsing animation is finished and before the content is removed from DOM.\n * The payload is the id of hidden accordion item.\n */\n this.hidden = new EventEmitter();\n }\n /**\n * Toggles an item with the given id.\n *\n * It will toggle an item, even if it is disabled.\n *\n * @param itemId The id of the item to toggle.\n */\n toggle(itemId) {\n this._getItem(itemId)?.toggle();\n }\n /**\n * Expands an item with the given id.\n *\n * If `closeOthers` is `true`, it will collapse other panels.\n *\n * @param itemId The id of the item to expand.\n */\n expand(itemId) {\n this._getItem(itemId)?.expand();\n }\n /**\n * Expands all items.\n *\n * If `closeOthers` is `true` and all items are closed, it will open the first one. Otherwise, it will keep the opened one.\n */\n expandAll() {\n if (this._items) {\n if (this.closeOthers) {\n // we check if there is an item open and if it is not we can expand the first item\n // (otherwise we toggle nothing)\n if (!this._items.find((item) => !item.collapsed)) {\n this._items.first.expand();\n }\n }\n else {\n this._items.forEach((item) => item.expand());\n }\n }\n }\n /**\n * Collapses an item with the given id.\n *\n * Has no effect if the `itemId` does not correspond to any item.\n *\n * @param itemId The id of the item to collapse.\n */\n collapse(itemId) {\n this._getItem(itemId)?.collapse();\n }\n /**\n * Collapses all items.\n */\n collapseAll() {\n this._items?.forEach((item) => item.collapse());\n }\n /**\n * Checks if an item with the given id is expanded.\n *\n * If the `itemId` does not correspond to any item, it returns `false`.\n *\n * @param itemId The id of the item to check.\n */\n isExpanded(itemId) {\n const item = this._getItem(itemId);\n return item ? !item.collapsed : false;\n }\n /**\n * It checks, if the item can be expanded in the current state of the accordion.\n * With `closeOthers` there can be only one expanded item at a time.\n *\n * @internal\n */\n _ensureCanExpand(toExpand) {\n if (!this.closeOthers) {\n return true;\n }\n // special case during the initialization of the [collapse]=\"false\" inputs\n // `this._items` QueryList is not yet initialized, but we need to ensure only one item can be expanded at a time\n if (!this._items) {\n if (!this._anItemWasAlreadyExpandedDuringInitialisation) {\n this._anItemWasAlreadyExpandedDuringInitialisation = true;\n return true;\n }\n return false;\n }\n // if there is an expanded item, we need to collapse it first\n this._items.find((item) => !item.collapsed && toExpand !== item)?.collapse();\n return true;\n }\n _getItem(itemId) {\n return this._items?.find((item) => item.id === itemId);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbAccordionDirective, isStandalone: true, selector: \"[ngbAccordion]\", inputs: { animation: \"animation\", closeOthers: \"closeOthers\", destroyOnHide: \"destroyOnHide\" }, outputs: { show: \"show\", shown: \"shown\", hide: \"hide\", hidden: \"hidden\" }, host: { properties: { \"class.accordion\": \"true\" } }, queries: [{ propertyName: \"_items\", predicate: NgbAccordionItem }], exportAs: [\"ngbAccordion\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbAccordion]',\n standalone: true,\n exportAs: 'ngbAccordion',\n host: { '[class.accordion]': 'true' },\n }]\n }], propDecorators: { _items: [{\n type: ContentChildren,\n args: [NgbAccordionItem, { descendants: false }]\n }], animation: [{\n type: Input\n }], closeOthers: [{\n type: Input\n }], destroyOnHide: [{\n type: Input\n }], show: [{\n type: Output\n }], shown: [{\n type: Output\n }], hide: [{\n type: Output\n }], hidden: [{\n type: Output\n }] } });\n\nconst NGB_ACCORDION_DIRECTIVES = [\n NgbAccordionButton,\n NgbAccordionDirective,\n NgbAccordionItem,\n NgbAccordionHeader,\n NgbAccordionToggle,\n NgbAccordionBody,\n NgbAccordionCollapse,\n];\nclass NgbAccordionModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionModule, imports: [NgbAccordionButton,\n NgbAccordionDirective,\n NgbAccordionItem,\n NgbAccordionHeader,\n NgbAccordionToggle,\n NgbAccordionBody,\n NgbAccordionCollapse], exports: [NgbAccordionButton,\n NgbAccordionDirective,\n NgbAccordionItem,\n NgbAccordionHeader,\n NgbAccordionToggle,\n NgbAccordionBody,\n NgbAccordionCollapse] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAccordionModule, decorators: [{\n type: NgModule,\n args: [{\n imports: NGB_ACCORDION_DIRECTIVES,\n exports: NGB_ACCORDION_DIRECTIVES,\n }]\n }] });\n\n/**\n * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all alerts used in the application.\n */\nclass NgbAlertConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.dismissible = true;\n this.type = 'warning';\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAlertConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAlertConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAlertConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nconst ngbAlertFadingTransition = ({ classList }) => {\n classList.remove('show');\n};\n\n/**\n * Alert is a component to provide contextual feedback messages for user.\n *\n * It supports several alert types and can be dismissed.\n */\nclass NgbAlert {\n constructor() {\n this._config = inject(NgbAlertConfig);\n this._elementRef = inject((ElementRef));\n this._zone = inject(NgZone);\n /**\n * If `true`, alert closing will be animated.\n *\n * Animation is triggered only when clicked on the close button (×)\n * or via the `.close()` function\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * If `true`, alert can be dismissed by the user.\n *\n * The close button (×) will be displayed and you can be notified\n * of the event with the `(closed)` output.\n */\n this.dismissible = this._config.dismissible;\n /**\n * Type of the alert.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n this.type = this._config.type;\n /**\n * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.\n *\n * @since 8.0.0\n */\n this.closed = new EventEmitter();\n }\n /**\n * Triggers alert closing programmatically (same as clicking on the close button (×)).\n *\n * The returned observable will emit and be completed once the closing transition has finished.\n * If the animations are turned off this happens synchronously.\n *\n * Alternatively you could listen or subscribe to the `(closed)` output\n *\n * @since 8.0.0\n */\n close() {\n const transition = ngbRunTransition(this._zone, this._elementRef.nativeElement, ngbAlertFadingTransition, {\n animation: this.animation,\n runningTransition: 'continue',\n });\n transition.subscribe(() => this.closed.emit());\n return transition;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAlert, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbAlert, isStandalone: true, selector: \"ngb-alert\", inputs: { animation: \"animation\", dismissible: \"dismissible\", type: \"type\" }, outputs: { closed: \"closed\" }, host: { attributes: { \"role\": \"alert\" }, properties: { \"class\": \"\\\"alert show\\\" + (type ? \\\" alert-\\\" + type : \\\"\\\")\", \"class.fade\": \"animation\", \"class.alert-dismissible\": \"dismissible\" } }, exportAs: [\"ngbAlert\"], ngImport: i0, template: `\n\t\t\n\t\t@if (dismissible) {\n\t\t\t\n\t\t}\n\t`, isInline: true, styles: [\"ngb-alert{display:block}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAlert, decorators: [{\n type: Component,\n args: [{ selector: 'ngb-alert', exportAs: 'ngbAlert', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {\n role: 'alert',\n '[class]': '\"alert show\" + (type ? \" alert-\" + type : \"\")',\n '[class.fade]': 'animation',\n '[class.alert-dismissible]': 'dismissible',\n }, template: `\n\t\t\n\t\t@if (dismissible) {\n\t\t\t\n\t\t}\n\t`, styles: [\"ngb-alert{display:block}\\n\"] }]\n }], propDecorators: { animation: [{\n type: Input\n }], dismissible: [{\n type: Input\n }], type: [{\n type: Input\n }], closed: [{\n type: Output\n }] } });\n\nclass NgbAlertModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAlertModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAlertModule, imports: [NgbAlert], exports: [NgbAlert] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAlertModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbAlertModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NgbAlert],\n exports: [NgbAlert],\n }]\n }] });\n\n/**\n * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all carousels used in the application.\n */\nclass NgbCarouselConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.interval = 5000;\n this.wrap = true;\n this.keyboard = true;\n this.pauseOnHover = true;\n this.pauseOnFocus = true;\n this.showNavigationArrows = true;\n this.showNavigationIndicators = true;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCarouselConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCarouselConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCarouselConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * Defines the carousel slide transition direction.\n */\nvar NgbSlideEventDirection;\n(function (NgbSlideEventDirection) {\n NgbSlideEventDirection[\"START\"] = \"start\";\n NgbSlideEventDirection[\"END\"] = \"end\";\n})(NgbSlideEventDirection || (NgbSlideEventDirection = {}));\nconst isBeingAnimated = ({ classList }) => {\n return classList.contains('carousel-item-start') || classList.contains('carousel-item-end');\n};\nconst removeDirectionClasses = (classList) => {\n classList.remove('carousel-item-start');\n classList.remove('carousel-item-end');\n};\nconst removeClasses = (classList) => {\n removeDirectionClasses(classList);\n classList.remove('carousel-item-prev');\n classList.remove('carousel-item-next');\n};\nconst ngbCarouselTransitionIn = (element, animation, { direction }) => {\n const { classList } = element;\n if (!animation) {\n removeDirectionClasses(classList);\n removeClasses(classList);\n classList.add('active');\n return;\n }\n if (isBeingAnimated(element)) {\n // Revert the transition\n removeDirectionClasses(classList);\n }\n else {\n // For the 'in' transition, a 'pre-class' is applied to the element to ensure its visibility\n classList.add('carousel-item-' + (direction === NgbSlideEventDirection.START ? 'next' : 'prev'));\n reflow(element);\n classList.add('carousel-item-' + direction);\n }\n return () => {\n removeClasses(classList);\n classList.add('active');\n };\n};\nconst ngbCarouselTransitionOut = (element, animation, { direction }) => {\n const { classList } = element;\n if (!animation) {\n removeDirectionClasses(classList);\n removeClasses(classList);\n classList.remove('active');\n return;\n }\n // direction is left or right, depending on the way the slide goes out.\n if (isBeingAnimated(element)) {\n // Revert the transition\n removeDirectionClasses(classList);\n }\n else {\n classList.add('carousel-item-' + direction);\n }\n return () => {\n removeClasses(classList);\n classList.remove('active');\n };\n};\n\nlet nextId$2 = 0;\nlet carouselId = 0;\n/**\n * A directive that wraps the individual carousel slide.\n */\nclass NgbSlide {\n constructor() {\n this.templateRef = inject(TemplateRef);\n /**\n * Slide id that must be unique for the entire document.\n *\n * If not provided, will be generated in the `ngb-slide-xx` format.\n */\n this.id = `ngb-slide-${nextId$2++}`;\n /**\n * An event emitted when the slide transition is finished\n *\n * @since 8.0.0\n */\n this.slid = new EventEmitter();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbSlide, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbSlide, isStandalone: true, selector: \"ng-template[ngbSlide]\", inputs: { id: \"id\" }, outputs: { slid: \"slid\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbSlide, decorators: [{\n type: Directive,\n args: [{ selector: 'ng-template[ngbSlide]', standalone: true }]\n }], propDecorators: { id: [{\n type: Input\n }], slid: [{\n type: Output\n }] } });\n/**\n * Carousel is a component to easily create and control slideshows.\n *\n * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API.\n */\nclass NgbCarousel {\n constructor() {\n this.NgbSlideEventSource = NgbSlideEventSource;\n this._config = inject(NgbCarouselConfig);\n this._platformId = inject(PLATFORM_ID);\n this._ngZone = inject(NgZone);\n this._cd = inject(ChangeDetectorRef);\n this._container = inject(ElementRef);\n this._destroyRef = inject(DestroyRef);\n this._interval$ = new BehaviorSubject(this._config.interval);\n this._mouseHover$ = new BehaviorSubject(false);\n this._focused$ = new BehaviorSubject(false);\n this._pauseOnHover$ = new BehaviorSubject(this._config.pauseOnHover);\n this._pauseOnFocus$ = new BehaviorSubject(this._config.pauseOnFocus);\n this._pause$ = new BehaviorSubject(false);\n this._wrap$ = new BehaviorSubject(this._config.wrap);\n this.id = `ngb-carousel-${carouselId++}`;\n /**\n * A flag to enable/disable the animations.\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * If `true`, allows to interact with carousel using keyboard 'arrow left' and 'arrow right'.\n */\n this.keyboard = this._config.keyboard;\n /**\n * If `true`, 'previous' and 'next' navigation arrows will be visible on the slide.\n *\n * @since 2.2.0\n */\n this.showNavigationArrows = this._config.showNavigationArrows;\n /**\n * If `true`, navigation indicators at the bottom of the slide will be visible.\n *\n * @since 2.2.0\n */\n this.showNavigationIndicators = this._config.showNavigationIndicators;\n /**\n * An event emitted just before the slide transition starts.\n *\n * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.\n */\n this.slide = new EventEmitter();\n /**\n * An event emitted right after the slide transition is completed.\n *\n * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.\n *\n * @since 8.0.0\n */\n this.slid = new EventEmitter();\n /*\n * Keep the ids of the panels currently transitionning\n * in order to allow only the transition revertion\n */\n this._transitionIds = null;\n }\n /**\n * Time in milliseconds before the next slide is shown.\n */\n set interval(value) {\n this._interval$.next(value);\n }\n get interval() {\n return this._interval$.value;\n }\n /**\n * If `true`, will 'wrap' the carousel by switching from the last slide back to the first.\n */\n set wrap(value) {\n this._wrap$.next(value);\n }\n get wrap() {\n return this._wrap$.value;\n }\n /**\n * If `true`, will pause slide switching when mouse cursor hovers the slide.\n *\n * @since 2.2.0\n */\n set pauseOnHover(value) {\n this._pauseOnHover$.next(value);\n }\n get pauseOnHover() {\n return this._pauseOnHover$.value;\n }\n /**\n * If `true`, will pause slide switching when the focus is inside the carousel.\n */\n set pauseOnFocus(value) {\n this._pauseOnFocus$.next(value);\n }\n get pauseOnFocus() {\n return this._pauseOnFocus$.value;\n }\n set mouseHover(value) {\n this._mouseHover$.next(value);\n }\n get mouseHover() {\n return this._mouseHover$.value;\n }\n set focused(value) {\n this._focused$.next(value);\n }\n get focused() {\n return this._focused$.value;\n }\n arrowLeft() {\n this.focus();\n this.prev(NgbSlideEventSource.ARROW_LEFT);\n }\n arrowRight() {\n this.focus();\n this.next(NgbSlideEventSource.ARROW_RIGHT);\n }\n ngAfterContentInit() {\n // setInterval() doesn't play well with SSR and protractor,\n // so we should run it in the browser and outside Angular\n if (isPlatformBrowser(this._platformId)) {\n this._ngZone.runOutsideAngular(() => {\n const hasNextSlide$ = combineLatest([\n this.slide.pipe(map((slideEvent) => slideEvent.current), startWith(this.activeId)),\n this._wrap$,\n this.slides.changes.pipe(startWith(null)),\n ]).pipe(map(([currentSlideId, wrap]) => {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1;\n }), distinctUntilChanged());\n combineLatest([\n this._pause$,\n this._pauseOnHover$,\n this._mouseHover$,\n this._pauseOnFocus$,\n this._focused$,\n this._interval$,\n hasNextSlide$,\n ])\n .pipe(map(([pause, pauseOnHover, mouseHover, pauseOnFocus, focused, interval, hasNextSlide]) => pause || (pauseOnHover && mouseHover) || (pauseOnFocus && focused) || !hasNextSlide ? 0 : interval), distinctUntilChanged(), switchMap((interval) => (interval > 0 ? timer(interval, interval) : NEVER)), takeUntilDestroyed(this._destroyRef))\n .subscribe(() => this._ngZone.run(() => this.next(NgbSlideEventSource.TIMER)));\n });\n }\n this.slides.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._transitionIds?.forEach((id) => ngbCompleteTransition(this._getSlideElement(id)));\n this._transitionIds = null;\n this._cd.markForCheck();\n // The following code need to be done asynchronously, after the dom becomes stable,\n // otherwise all changes will be undone.\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n for (const { id } of this.slides) {\n const element = this._getSlideElement(id);\n if (id === this.activeId) {\n element.classList.add('active');\n }\n else {\n element.classList.remove('active');\n }\n }\n });\n });\n }\n ngAfterContentChecked() {\n let activeSlide = this._getSlideById(this.activeId);\n this.activeId = activeSlide ? activeSlide.id : this.slides.length ? this.slides.first.id : '';\n }\n ngAfterViewInit() {\n // Initialize the 'active' class (not managed by the template)\n if (this.activeId) {\n const element = this._getSlideElement(this.activeId);\n if (element) {\n element.classList.add('active');\n }\n }\n }\n /**\n * Navigates to a slide with the specified identifier.\n */\n select(slideId, source) {\n this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source);\n }\n /**\n * Navigates to the previous slide.\n */\n prev(source) {\n this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.END, source);\n }\n /**\n * Navigates to the next slide.\n */\n next(source) {\n this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.START, source);\n }\n /**\n * Pauses cycling through the slides.\n */\n pause() {\n this._pause$.next(true);\n }\n /**\n * Restarts cycling through the slides from start to end.\n */\n cycle() {\n this._pause$.next(false);\n }\n /**\n * Set the focus on the carousel.\n */\n focus() {\n this._container.nativeElement.focus();\n }\n _cycleToSelected(slideIdx, direction, source) {\n const transitionIds = this._transitionIds;\n if (transitionIds && (transitionIds[0] !== slideIdx || transitionIds[1] !== this.activeId)) {\n // Revert prevented\n return;\n }\n let selectedSlide = this._getSlideById(slideIdx);\n if (selectedSlide && selectedSlide.id !== this.activeId) {\n this._transitionIds = [this.activeId, slideIdx];\n this.slide.emit({\n prev: this.activeId,\n current: selectedSlide.id,\n direction: direction,\n paused: this._pause$.value,\n source,\n });\n const options = {\n animation: this.animation,\n runningTransition: 'stop',\n context: { direction },\n };\n const transitions = [];\n const activeSlide = this._getSlideById(this.activeId);\n if (activeSlide) {\n const activeSlideTransition = ngbRunTransition(this._ngZone, this._getSlideElement(activeSlide.id), ngbCarouselTransitionOut, options);\n activeSlideTransition.subscribe(() => {\n activeSlide.slid.emit({ isShown: false, direction, source });\n });\n transitions.push(activeSlideTransition);\n }\n const previousId = this.activeId;\n this.activeId = selectedSlide.id;\n const nextSlide = this._getSlideById(this.activeId);\n const transition = ngbRunTransition(this._ngZone, this._getSlideElement(selectedSlide.id), ngbCarouselTransitionIn, options);\n transition.subscribe(() => {\n nextSlide?.slid.emit({ isShown: true, direction, source });\n });\n transitions.push(transition);\n zip(...transitions)\n .pipe(take(1))\n .subscribe(() => {\n this._transitionIds = null;\n this.slid.emit({\n prev: previousId,\n current: selectedSlide.id,\n direction: direction,\n paused: this._pause$.value,\n source,\n });\n });\n }\n // we get here after the interval fires or any external API call like next(), prev() or select()\n this._cd.markForCheck();\n }\n _getSlideEventDirection(currentActiveSlideId, nextActiveSlideId) {\n const currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId);\n const nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId);\n return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.END : NgbSlideEventDirection.START;\n }\n _getSlideById(slideId) {\n return this.slides.find((slide) => slide.id === slideId) || null;\n }\n _getSlideIdxById(slideId) {\n const slide = this._getSlideById(slideId);\n return slide != null ? this.slides.toArray().indexOf(slide) : -1;\n }\n _getNextSlide(currentSlideId) {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isLastSlide = currentSlideIdx === slideArr.length - 1;\n return isLastSlide\n ? this.wrap\n ? slideArr[0].id\n : slideArr[slideArr.length - 1].id\n : slideArr[currentSlideIdx + 1].id;\n }\n _getPrevSlide(currentSlideId) {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isFirstSlide = currentSlideIdx === 0;\n return isFirstSlide\n ? this.wrap\n ? slideArr[slideArr.length - 1].id\n : slideArr[0].id\n : slideArr[currentSlideIdx - 1].id;\n }\n _getSlideElement(slideId) {\n return this._container.nativeElement.querySelector(`#slide-${slideId}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCarousel, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbCarousel, isStandalone: true, selector: \"ngb-carousel\", inputs: { animation: \"animation\", activeId: \"activeId\", interval: \"interval\", wrap: \"wrap\", keyboard: \"keyboard\", pauseOnHover: \"pauseOnHover\", pauseOnFocus: \"pauseOnFocus\", showNavigationArrows: \"showNavigationArrows\", showNavigationIndicators: \"showNavigationIndicators\" }, outputs: { slide: \"slide\", slid: \"slid\" }, host: { attributes: { \"tabIndex\": \"0\" }, listeners: { \"keydown.arrowLeft\": \"keyboard && arrowLeft()\", \"keydown.arrowRight\": \"keyboard && arrowRight()\", \"mouseenter\": \"mouseHover = true\", \"mouseleave\": \"mouseHover = false\", \"focusin\": \"focused = true\", \"focusout\": \"focused = false\" }, properties: { \"style.display\": \"\\\"block\\\"\", \"attr.aria-activedescendant\": \"'slide-' + activeId\" }, classAttribute: \"carousel slide\" }, queries: [{ propertyName: \"slides\", predicate: NgbSlide }], exportAs: [\"ngbCarousel\"], ngImport: i0, template: `\n\t\t
\n\t\t\t@for (slide of slides; track slide) {\n\t\t\t\t\n\t\t\t}\n\t\t
\n\t\t
\n\t\t\t@for (slide of slides; track slide; let i = $index; let c = $count) {\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\tSlide {{ i + 1 }} of {{ c }}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t}\n\t\t
\n\t\t@if (showNavigationArrows) {\n\t\t\t\n\t\t\t\t\n\t\t\t\tPrevious\n\t\t\t\n\t\t\t\n\t\t}\n\t`, isInline: true, dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCarousel, decorators: [{\n type: Component,\n args: [{\n selector: 'ngb-carousel',\n exportAs: 'ngbCarousel',\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'carousel slide',\n '[style.display]': '\"block\"',\n tabIndex: '0',\n '(keydown.arrowLeft)': 'keyboard && arrowLeft()',\n '(keydown.arrowRight)': 'keyboard && arrowRight()',\n '(mouseenter)': 'mouseHover = true',\n '(mouseleave)': 'mouseHover = false',\n '(focusin)': 'focused = true',\n '(focusout)': 'focused = false',\n '[attr.aria-activedescendant]': `'slide-' + activeId`,\n },\n template: `\n\t\t
\n\t\t\t@for (slide of slides; track slide) {\n\t\t\t\t\n\t\t\t}\n\t\t
\n\t\t
\n\t\t\t@for (slide of slides; track slide; let i = $index; let c = $count) {\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\tSlide {{ i + 1 }} of {{ c }}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t}\n\t\t
\n\t\t@if (showNavigationArrows) {\n\t\t\t\n\t\t\t\t\n\t\t\t\tPrevious\n\t\t\t\n\t\t\t\n\t\t}\n\t`,\n }]\n }], propDecorators: { slides: [{\n type: ContentChildren,\n args: [NgbSlide]\n }], animation: [{\n type: Input\n }], activeId: [{\n type: Input\n }], interval: [{\n type: Input\n }], wrap: [{\n type: Input\n }], keyboard: [{\n type: Input\n }], pauseOnHover: [{\n type: Input\n }], pauseOnFocus: [{\n type: Input\n }], showNavigationArrows: [{\n type: Input\n }], showNavigationIndicators: [{\n type: Input\n }], slide: [{\n type: Output\n }], slid: [{\n type: Output\n }] } });\nvar NgbSlideEventSource;\n(function (NgbSlideEventSource) {\n NgbSlideEventSource[\"TIMER\"] = \"timer\";\n NgbSlideEventSource[\"ARROW_LEFT\"] = \"arrowLeft\";\n NgbSlideEventSource[\"ARROW_RIGHT\"] = \"arrowRight\";\n NgbSlideEventSource[\"INDICATOR\"] = \"indicator\";\n})(NgbSlideEventSource || (NgbSlideEventSource = {}));\n\nclass NgbCarouselModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCarouselModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCarouselModule, imports: [NgbCarousel, NgbSlide], exports: [NgbCarousel, NgbSlide] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCarouselModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCarouselModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NgbCarousel, NgbSlide],\n exports: [NgbCarousel, NgbSlide],\n }]\n }] });\n\nclass NgbCollapseModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCollapseModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCollapseModule, imports: [NgbCollapse], exports: [NgbCollapse] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCollapseModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCollapseModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NgbCollapse],\n exports: [NgbCollapse],\n }]\n }] });\n\n/**\n * A simple class that represents a date that datepicker also uses internally.\n *\n * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods,\n * like `.equals()`, `.before()`, etc.\n *\n * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`.\n *\n * In many cases it is simpler to manipulate these objects together with\n * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n *\n * @since 3.0.0\n */\nclass NgbDate {\n /**\n * A **static method** that creates a new date object from the `NgbDateStruct`,\n *\n * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`.\n *\n * If the `date` is already of `NgbDate` type, the method will return the same object.\n */\n static from(date) {\n if (date instanceof NgbDate) {\n return date;\n }\n return date ? new NgbDate(date.year, date.month, date.day) : null;\n }\n constructor(year, month, day) {\n this.year = isInteger(year) ? year : null;\n this.month = isInteger(month) ? month : null;\n this.day = isInteger(day) ? day : null;\n }\n /**\n * Checks if the current date is equal to another date.\n */\n equals(other) {\n return other != null && this.year === other.year && this.month === other.month && this.day === other.day;\n }\n /**\n * Checks if the current date is before another date.\n */\n before(other) {\n if (!other) {\n return false;\n }\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day < other.day;\n }\n else {\n return this.month < other.month;\n }\n }\n else {\n return this.year < other.year;\n }\n }\n /**\n * Checks if the current date is after another date.\n */\n after(other) {\n if (!other) {\n return false;\n }\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day > other.day;\n }\n else {\n return this.month > other.month;\n }\n }\n else {\n return this.year > other.year;\n }\n }\n}\n\nfunction fromJSDate(jsDate) {\n return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());\n}\nfunction toJSDate(date) {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // this is done avoid 30 -> 1930 conversion\n if (!isNaN(jsDate.getTime())) {\n jsDate.setFullYear(date.year);\n }\n return jsDate;\n}\nfunction NGB_DATEPICKER_CALENDAR_FACTORY() {\n return new NgbCalendarGregorian();\n}\n/**\n * A service that represents the calendar used by the datepicker.\n *\n * The default implementation uses the Gregorian calendar. You can inject it in your own\n * implementations if necessary to simplify `NgbDate` calculations.\n */\nclass NgbCalendar {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendar, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendar, providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendar, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY }]\n }] });\nclass NgbCalendarGregorian extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n getMonths() {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n getWeeksPerMonth() {\n return 6;\n }\n getNext(date, period = 'd', number = 1) {\n let jsDate = toJSDate(date);\n let checkMonth = true;\n let expectedMonth = jsDate.getMonth();\n switch (period) {\n case 'y':\n jsDate.setFullYear(jsDate.getFullYear() + number);\n break;\n case 'm':\n expectedMonth += number;\n jsDate.setMonth(expectedMonth);\n expectedMonth = expectedMonth % 12;\n if (expectedMonth < 0) {\n expectedMonth = expectedMonth + 12;\n }\n break;\n case 'd':\n jsDate.setDate(jsDate.getDate() + number);\n checkMonth = false;\n break;\n default:\n return date;\n }\n if (checkMonth && jsDate.getMonth() !== expectedMonth) {\n // this means the destination month has less days than the initial month\n // let's go back to the end of the previous month:\n jsDate.setDate(0);\n }\n return fromJSDate(jsDate);\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n let jsDate = toJSDate(date);\n let day = jsDate.getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n let date = week[thursdayIndex];\n const jsDate = toJSDate(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n jsDate.setMonth(0); // Compare with Jan 1\n jsDate.setDate(1);\n return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;\n }\n getToday() {\n return fromJSDate(new Date());\n }\n isValid(date) {\n if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {\n return false;\n }\n // year 0 doesn't exist in Gregorian calendar\n if (date.year === 0) {\n return false;\n }\n const jsDate = toJSDate(date);\n return (!isNaN(jsDate.getTime()) &&\n jsDate.getFullYear() === date.year &&\n jsDate.getMonth() + 1 === date.month &&\n jsDate.getDate() === date.day);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarGregorian, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarGregorian }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarGregorian, decorators: [{\n type: Injectable\n }] });\n\nfunction isChangedDate(prev, next) {\n return !dateComparator(prev, next);\n}\nfunction isChangedMonth(prev, next) {\n return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month;\n}\nfunction dateComparator(prev, next) {\n return (!prev && !next) || (!!prev && !!next && prev.equals(next));\n}\nfunction checkMinBeforeMax(minDate, maxDate) {\n if (maxDate && minDate && maxDate.before(minDate)) {\n throw new Error(`'maxDate' ${maxDate} should be greater than 'minDate' ${minDate}`);\n }\n}\nfunction checkDateInRange(date, minDate, maxDate) {\n if (date && minDate && date.before(minDate)) {\n return minDate;\n }\n if (date && maxDate && date.after(maxDate)) {\n return maxDate;\n }\n return date || null;\n}\nfunction isDateSelectable(date, state) {\n const { minDate, maxDate, disabled, markDisabled } = state;\n return !(date === null ||\n date === undefined ||\n disabled ||\n (markDisabled && markDisabled(date, { year: date.year, month: date.month })) ||\n (minDate && date.before(minDate)) ||\n (maxDate && date.after(maxDate)));\n}\nfunction generateSelectBoxMonths(calendar, date, minDate, maxDate) {\n if (!date) {\n return [];\n }\n let months = calendar.getMonths(date.year);\n if (minDate && date.year === minDate.year) {\n const index = months.findIndex((month) => month === minDate.month);\n months = months.slice(index);\n }\n if (maxDate && date.year === maxDate.year) {\n const index = months.findIndex((month) => month === maxDate.month);\n months = months.slice(0, index + 1);\n }\n return months;\n}\nfunction generateSelectBoxYears(date, minDate, maxDate) {\n if (!date) {\n return [];\n }\n const start = minDate ? Math.max(minDate.year, date.year - 500) : date.year - 10;\n const end = maxDate ? Math.min(maxDate.year, date.year + 500) : date.year + 10;\n const length = end - start + 1;\n const numbers = Array(length);\n for (let i = 0; i < length; i++) {\n numbers[i] = start + i;\n }\n return numbers;\n}\nfunction nextMonthDisabled(calendar, date, maxDate) {\n const nextDate = Object.assign(calendar.getNext(date, 'm'), { day: 1 });\n return maxDate != null && nextDate.after(maxDate);\n}\nfunction prevMonthDisabled(calendar, date, minDate) {\n const prevDate = Object.assign(calendar.getPrev(date, 'm'), { day: 1 });\n return (minDate != null &&\n ((prevDate.year === minDate.year && prevDate.month < minDate.month) ||\n (prevDate.year < minDate.year && minDate.month === 1)));\n}\nfunction buildMonths(calendar, date, state, i18n, force) {\n const { displayMonths, months } = state;\n // move old months to a temporary array\n const monthsToReuse = months.splice(0, months.length);\n // generate new first dates, nullify or reuse months\n const firstDates = Array.from({ length: displayMonths }, (_, i) => {\n const firstDate = Object.assign(calendar.getNext(date, 'm', i), { day: 1 });\n months[i] = null;\n if (!force) {\n const reusedIndex = monthsToReuse.findIndex((month) => month.firstDate.equals(firstDate));\n // move reused month back to months\n if (reusedIndex !== -1) {\n months[i] = monthsToReuse.splice(reusedIndex, 1)[0];\n }\n }\n return firstDate;\n });\n // rebuild nullified months\n firstDates.forEach((firstDate, i) => {\n if (months[i] === null) {\n months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || {});\n }\n });\n return months;\n}\nfunction buildMonth(calendar, date, state, i18n, month = {}) {\n const { dayTemplateData, minDate, maxDate, firstDayOfWeek, markDisabled, outsideDays, weekdayWidth, weekdaysVisible, } = state;\n const calendarToday = calendar.getToday();\n month.firstDate = null;\n month.lastDate = null;\n month.number = date.month;\n month.year = date.year;\n month.weeks = month.weeks || [];\n month.weekdays = month.weekdays || [];\n date = getFirstViewDate(calendar, date, firstDayOfWeek);\n // clearing weekdays, if not visible\n if (!weekdaysVisible) {\n month.weekdays.length = 0;\n }\n // month has weeks\n for (let week = 0; week < calendar.getWeeksPerMonth(); week++) {\n let weekObject = month.weeks[week];\n if (!weekObject) {\n weekObject = month.weeks[week] = { number: 0, days: [], collapsed: true };\n }\n const days = weekObject.days;\n // week has days\n for (let day = 0; day < calendar.getDaysPerWeek(); day++) {\n if (week === 0 && weekdaysVisible) {\n month.weekdays[day] = i18n.getWeekdayLabel(calendar.getWeekday(date), weekdayWidth);\n }\n const newDate = new NgbDate(date.year, date.month, date.day);\n const nextDate = calendar.getNext(newDate);\n const ariaLabel = i18n.getDayAriaLabel(newDate);\n // marking date as disabled\n let disabled = !!((minDate && newDate.before(minDate)) || (maxDate && newDate.after(maxDate)));\n if (!disabled && markDisabled) {\n disabled = markDisabled(newDate, { month: month.number, year: month.year });\n }\n // today\n let today = newDate.equals(calendarToday);\n // adding user-provided data to the context\n let contextUserData = dayTemplateData\n ? dayTemplateData(newDate, { month: month.number, year: month.year })\n : undefined;\n // saving first date of the month\n if (month.firstDate === null && newDate.month === month.number) {\n month.firstDate = newDate;\n }\n // saving last date of the month\n if (newDate.month === month.number && nextDate.month !== month.number) {\n month.lastDate = newDate;\n }\n let dayObject = days[day];\n if (!dayObject) {\n dayObject = days[day] = {};\n }\n dayObject.date = newDate;\n dayObject.context = Object.assign(dayObject.context || {}, {\n $implicit: newDate,\n date: newDate,\n data: contextUserData,\n currentMonth: month.number,\n currentYear: month.year,\n disabled,\n focused: false,\n selected: false,\n today,\n });\n dayObject.tabindex = -1;\n dayObject.ariaLabel = ariaLabel;\n dayObject.hidden = false;\n date = nextDate;\n }\n weekObject.number = calendar.getWeekNumber(days.map((day) => day.date), firstDayOfWeek);\n // marking week as collapsed\n weekObject.collapsed =\n outsideDays === 'collapsed' &&\n days[0].date.month !== month.number &&\n days[days.length - 1].date.month !== month.number;\n }\n return month;\n}\nfunction getFirstViewDate(calendar, date, firstDayOfWeek) {\n const daysPerWeek = calendar.getDaysPerWeek();\n const firstMonthDate = new NgbDate(date.year, date.month, 1);\n const dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek;\n return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek);\n}\n\n/**\n * A service supplying i18n data to the datepicker component.\n *\n * The default implementation of this service uses the Angular locale and registered locale data for\n * weekdays and month names (as explained in the Angular i18n guide).\n *\n * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year\n * numerals. For other static labels the datepicker uses the default Angular i18n.\n *\n * See the [i18n demo](#/components/datepicker/examples#i18n) and\n * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define\n * a custom provider for i18n.\n */\nclass NgbDatepickerI18n {\n /**\n * Returns the text label to display above the day view.\n *\n * @since 9.1.0\n */\n getMonthLabel(date) {\n return `${this.getMonthFullName(date.month, date.year)} ${this.getYearNumerals(date.year)}`;\n }\n /**\n * Returns the textual representation of a day that is rendered in a day cell.\n *\n * @since 3.0.0\n */\n getDayNumerals(date) {\n return `${date.day}`;\n }\n /**\n * Returns the textual representation of a week number rendered by datepicker.\n *\n * @since 3.0.0\n */\n getWeekNumerals(weekNumber) {\n return `${weekNumber}`;\n }\n /**\n * Returns the textual representation of a year that is rendered in the datepicker year select box.\n *\n * @since 3.0.0\n */\n getYearNumerals(year) {\n return `${year}`;\n }\n /**\n * Returns the week label to display in the heading of the month view.\n *\n * @since 9.1.0\n */\n getWeekLabel() {\n return '';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18n, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18n, providedIn: 'root', useFactory: () => new NgbDatepickerI18nDefault() }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18n, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n useFactory: () => new NgbDatepickerI18nDefault(),\n }]\n }] });\n/**\n * A service providing default implementation for the datepicker i18n.\n * It can be used as a base implementation if necessary.\n *\n * @since 9.1.0\n */\nclass NgbDatepickerI18nDefault extends NgbDatepickerI18n {\n constructor() {\n super(...arguments);\n this._locale = inject(LOCALE_ID);\n this._monthsShort = getLocaleMonthNames(this._locale, FormStyle.Standalone, TranslationWidth.Abbreviated);\n this._monthsFull = getLocaleMonthNames(this._locale, FormStyle.Standalone, TranslationWidth.Wide);\n }\n getWeekdayLabel(weekday, width) {\n const weekdaysStartingOnSunday = getLocaleDayNames(this._locale, FormStyle.Standalone, width === undefined ? TranslationWidth.Short : width);\n const weekdays = weekdaysStartingOnSunday.map((day, index) => weekdaysStartingOnSunday[(index + 1) % 7]);\n return weekdays[weekday - 1] || '';\n }\n getMonthShortName(month) {\n return this._monthsShort[month - 1] || '';\n }\n getMonthFullName(month) {\n return this._monthsFull[month - 1] || '';\n }\n getDayAriaLabel(date) {\n const jsDate = new Date(date.year, date.month - 1, date.day);\n return formatDate(jsDate, 'fullDate', this._locale);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18nDefault, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18nDefault }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18nDefault, decorators: [{\n type: Injectable\n }] });\n\nclass NgbDatepickerService {\n constructor() {\n this._VALIDATORS = {\n dayTemplateData: (dayTemplateData) => {\n if (this._state.dayTemplateData !== dayTemplateData) {\n return { dayTemplateData };\n }\n },\n displayMonths: (displayMonths) => {\n displayMonths = toInteger(displayMonths);\n if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) {\n return { displayMonths };\n }\n },\n disabled: (disabled) => {\n if (this._state.disabled !== disabled) {\n return { disabled };\n }\n },\n firstDayOfWeek: (firstDayOfWeek) => {\n firstDayOfWeek = toInteger(firstDayOfWeek);\n if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) {\n return { firstDayOfWeek };\n }\n },\n focusVisible: (focusVisible) => {\n if (this._state.focusVisible !== focusVisible && !this._state.disabled) {\n return { focusVisible };\n }\n },\n markDisabled: (markDisabled) => {\n if (this._state.markDisabled !== markDisabled) {\n return { markDisabled };\n }\n },\n maxDate: (date) => {\n const maxDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.maxDate, maxDate)) {\n return { maxDate };\n }\n },\n minDate: (date) => {\n const minDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.minDate, minDate)) {\n return { minDate };\n }\n },\n navigation: (navigation) => {\n if (this._state.navigation !== navigation) {\n return { navigation };\n }\n },\n outsideDays: (outsideDays) => {\n if (this._state.outsideDays !== outsideDays) {\n return { outsideDays };\n }\n },\n weekdays: (weekdays) => {\n const weekdayWidth = weekdays === true || weekdays === false ? TranslationWidth.Short : weekdays;\n const weekdaysVisible = weekdays === true || weekdays === false ? weekdays : true;\n if (this._state.weekdayWidth !== weekdayWidth || this._state.weekdaysVisible !== weekdaysVisible) {\n return { weekdayWidth, weekdaysVisible };\n }\n },\n };\n this._calendar = inject(NgbCalendar);\n this._i18n = inject(NgbDatepickerI18n);\n this._model$ = new Subject();\n this._dateSelect$ = new Subject();\n this._state = {\n dayTemplateData: null,\n markDisabled: null,\n maxDate: null,\n minDate: null,\n disabled: false,\n displayMonths: 1,\n firstDate: null,\n firstDayOfWeek: 1,\n lastDate: null,\n focusDate: null,\n focusVisible: false,\n months: [],\n navigation: 'select',\n outsideDays: 'visible',\n prevDisabled: false,\n nextDisabled: false,\n selectedDate: null,\n selectBoxes: { years: [], months: [] },\n weekdayWidth: TranslationWidth.Short,\n weekdaysVisible: true,\n };\n }\n get model$() {\n return this._model$.pipe(filter((model) => model.months.length > 0));\n }\n get dateSelect$() {\n return this._dateSelect$.pipe(filter((date) => date !== null));\n }\n set(options) {\n let patch = Object.keys(options)\n .map((key) => this._VALIDATORS[key](options[key]))\n .reduce((obj, part) => ({ ...obj, ...part }), {});\n if (Object.keys(patch).length > 0) {\n this._nextState(patch);\n }\n }\n focus(date) {\n const focusedDate = this.toValidDate(date, null);\n if (focusedDate != null && !this._state.disabled && isChangedDate(this._state.focusDate, focusedDate)) {\n this._nextState({ focusDate: date });\n }\n }\n focusSelect() {\n if (isDateSelectable(this._state.focusDate, this._state)) {\n this.select(this._state.focusDate, { emitEvent: true });\n }\n }\n open(date) {\n const firstDate = this.toValidDate(date, this._calendar.getToday());\n if (firstDate != null &&\n !this._state.disabled &&\n (!this._state.firstDate || isChangedMonth(this._state.firstDate, firstDate))) {\n this._nextState({ firstDate });\n }\n }\n select(date, options = {}) {\n const selectedDate = this.toValidDate(date, null);\n if (selectedDate != null && !this._state.disabled) {\n if (isChangedDate(this._state.selectedDate, selectedDate)) {\n this._nextState({ selectedDate });\n }\n if (options.emitEvent && isDateSelectable(selectedDate, this._state)) {\n this._dateSelect$.next(selectedDate);\n }\n }\n }\n toValidDate(date, defaultValue) {\n const ngbDate = NgbDate.from(date);\n if (defaultValue === undefined) {\n defaultValue = this._calendar.getToday();\n }\n return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue;\n }\n getMonth(struct) {\n for (let month of this._state.months) {\n if (struct.month === month.number && struct.year === month.year) {\n return month;\n }\n }\n throw new Error(`month ${struct.month} of year ${struct.year} not found`);\n }\n _nextState(patch) {\n const newState = this._updateState(patch);\n this._patchContexts(newState);\n this._state = newState;\n this._model$.next(this._state);\n }\n _patchContexts(state) {\n const { months, displayMonths, selectedDate, focusDate, focusVisible, disabled, outsideDays } = state;\n state.months.forEach((month) => {\n month.weeks.forEach((week) => {\n week.days.forEach((day) => {\n // patch focus flag\n if (focusDate) {\n day.context.focused = focusDate.equals(day.date) && focusVisible;\n }\n // calculating tabindex\n day.tabindex =\n !disabled && focusDate && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1;\n // override context disabled\n if (disabled === true) {\n day.context.disabled = true;\n }\n // patch selection flag\n if (selectedDate !== undefined) {\n day.context.selected = selectedDate !== null && selectedDate.equals(day.date);\n }\n // visibility\n if (month.number !== day.date.month) {\n day.hidden =\n outsideDays === 'hidden' ||\n outsideDays === 'collapsed' ||\n (displayMonths > 1 &&\n day.date.after(months[0].firstDate) &&\n day.date.before(months[displayMonths - 1].lastDate));\n }\n });\n });\n });\n }\n _updateState(patch) {\n // patching fields\n const state = Object.assign({}, this._state, patch);\n let startDate = state.firstDate;\n // min/max dates changed\n if ('minDate' in patch || 'maxDate' in patch) {\n checkMinBeforeMax(state.minDate, state.maxDate);\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n }\n // disabled\n if ('disabled' in patch) {\n state.focusVisible = false;\n }\n // initial rebuild via 'select()'\n if ('selectedDate' in patch && this._state.months.length === 0) {\n startDate = state.selectedDate;\n }\n // terminate early if only focus visibility was changed\n if ('focusVisible' in patch) {\n return state;\n }\n // focus date changed\n if ('focusDate' in patch) {\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n // nothing to rebuild if only focus changed and it is still visible\n if (state.months.length !== 0 &&\n state.focusDate &&\n !state.focusDate.before(state.firstDate) &&\n !state.focusDate.after(state.lastDate)) {\n return state;\n }\n }\n // first date changed\n if ('firstDate' in patch) {\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.firstDate;\n }\n // rebuilding months\n if (startDate) {\n const forceRebuild = 'dayTemplateData' in patch ||\n 'firstDayOfWeek' in patch ||\n 'markDisabled' in patch ||\n 'minDate' in patch ||\n 'maxDate' in patch ||\n 'disabled' in patch ||\n 'outsideDays' in patch ||\n 'weekdaysVisible' in patch;\n const months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild);\n // updating months and boundary dates\n state.months = months;\n state.firstDate = months[0].firstDate;\n state.lastDate = months[months.length - 1].lastDate;\n // reset selected date if 'markDisabled' returns true\n if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) {\n state.selectedDate = null;\n }\n // adjusting focus after months were built\n if ('firstDate' in patch) {\n if (!state.focusDate || state.focusDate.before(state.firstDate) || state.focusDate.after(state.lastDate)) {\n state.focusDate = startDate;\n }\n }\n // adjusting months/years for the select box navigation\n const yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year;\n const monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month;\n if (state.navigation === 'select') {\n // years -> boundaries (min/max were changed)\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) {\n state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate);\n }\n // months -> when current year or boundaries change\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) {\n state.selectBoxes.months = generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate);\n }\n }\n else {\n state.selectBoxes = { years: [], months: [] };\n }\n // updating navigation arrows -> boundaries change (min/max) or month/year changes\n if ((state.navigation === 'arrows' || state.navigation === 'select') &&\n (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) {\n state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate);\n state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate);\n }\n }\n return state;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerService, decorators: [{\n type: Injectable\n }] });\n\nvar NavigationEvent;\n(function (NavigationEvent) {\n NavigationEvent[NavigationEvent[\"PREV\"] = 0] = \"PREV\";\n NavigationEvent[NavigationEvent[\"NEXT\"] = 1] = \"NEXT\";\n})(NavigationEvent || (NavigationEvent = {}));\n\n/**\n * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the datepickers used in the application.\n */\nclass NgbDatepickerConfig {\n constructor() {\n this.displayMonths = 1;\n this.firstDayOfWeek = 1;\n this.navigation = 'select';\n this.outsideDays = 'visible';\n this.showWeekNumbers = false;\n this.weekdays = TranslationWidth.Short;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nfunction NGB_DATEPICKER_DATE_ADAPTER_FACTORY() {\n return new NgbDateStructAdapter();\n}\n/**\n * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and\n * any provided user date model `D`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding datepicker to a form control,\n * ex. `[(ngModel)]=\"userDateModel\"`. Here `userDateModel` can be of any type.\n *\n * The default datepicker implementation assumes we use `NgbDateStruct` as a user model.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details\n * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example.\n */\nclass NgbDateAdapter {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateAdapter, providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateAdapter, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY }]\n }] });\nclass NgbDateStructAdapter extends NgbDateAdapter {\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n fromModel(date) {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)\n ? { year: date.year, month: date.month, day: date.day }\n : null;\n }\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n toModel(date) {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)\n ? { year: date.year, month: date.month, day: date.day }\n : null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateStructAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateStructAdapter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateStructAdapter, decorators: [{\n type: Injectable\n }] });\n\nvar Key;\n(function (Key) {\n Key[Key[\"Tab\"] = 9] = \"Tab\";\n Key[Key[\"Enter\"] = 13] = \"Enter\";\n Key[Key[\"Escape\"] = 27] = \"Escape\";\n Key[Key[\"Space\"] = 32] = \"Space\";\n Key[Key[\"PageUp\"] = 33] = \"PageUp\";\n Key[Key[\"PageDown\"] = 34] = \"PageDown\";\n Key[Key[\"End\"] = 35] = \"End\";\n Key[Key[\"Home\"] = 36] = \"Home\";\n Key[Key[\"ArrowLeft\"] = 37] = \"ArrowLeft\";\n Key[Key[\"ArrowUp\"] = 38] = \"ArrowUp\";\n Key[Key[\"ArrowRight\"] = 39] = \"ArrowRight\";\n Key[Key[\"ArrowDown\"] = 40] = \"ArrowDown\";\n})(Key || (Key = {}));\n\n/**\n * A service that represents the keyboard navigation.\n *\n * Default keyboard shortcuts [are documented in the overview](#/components/datepicker/overview#keyboard-shortcuts)\n *\n * @since 5.2.0\n */\nclass NgbDatepickerKeyboardService {\n /**\n * Processes a keyboard event.\n */\n processKey(event, datepicker) {\n const { state, calendar } = datepicker;\n /* eslint-disable-next-line deprecation/deprecation */\n switch (event.which) {\n case Key.PageUp:\n datepicker.focusDate(calendar.getPrev(state.focusedDate, event.shiftKey ? 'y' : 'm', 1));\n break;\n case Key.PageDown:\n datepicker.focusDate(calendar.getNext(state.focusedDate, event.shiftKey ? 'y' : 'm', 1));\n break;\n case Key.End:\n datepicker.focusDate(event.shiftKey ? state.maxDate : state.lastDate);\n break;\n case Key.Home:\n datepicker.focusDate(event.shiftKey ? state.minDate : state.firstDate);\n break;\n case Key.ArrowLeft:\n datepicker.focusDate(calendar.getPrev(state.focusedDate, 'd', 1));\n break;\n case Key.ArrowUp:\n datepicker.focusDate(calendar.getPrev(state.focusedDate, 'd', calendar.getDaysPerWeek()));\n break;\n case Key.ArrowRight:\n datepicker.focusDate(calendar.getNext(state.focusedDate, 'd', 1));\n break;\n case Key.ArrowDown:\n datepicker.focusDate(calendar.getNext(state.focusedDate, 'd', calendar.getDaysPerWeek()));\n break;\n case Key.Enter:\n case Key.Space:\n datepicker.focusSelect();\n break;\n default:\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerKeyboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerKeyboardService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerKeyboardService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nclass NgbDatepickerDayView {\n constructor() {\n this.i18n = inject(NgbDatepickerI18n);\n }\n isMuted() {\n return !this.selected && (this.date.month !== this.currentMonth || this.disabled);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerDayView, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbDatepickerDayView, isStandalone: true, selector: \"[ngbDatepickerDayView]\", inputs: { currentMonth: \"currentMonth\", date: \"date\", disabled: \"disabled\", focused: \"focused\", selected: \"selected\" }, host: { properties: { \"class.bg-primary\": \"selected\", \"class.text-white\": \"selected\", \"class.text-muted\": \"isMuted()\", \"class.outside\": \"isMuted()\", \"class.active\": \"focused\" }, classAttribute: \"btn-light\" }, ngImport: i0, template: `{{ i18n.getDayNumerals(date) }}`, isInline: true, styles: [\"[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:transparent}[ngbDatepickerDayView]:hover:not(.bg-primary),[ngbDatepickerDayView].active:not(.bg-primary){background-color:var(--bs-tertiary-bg);outline:1px solid var(--bs-border-color)}[ngbDatepickerDayView].outside{opacity:.5}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerDayView, decorators: [{\n type: Component,\n args: [{ selector: '[ngbDatepickerDayView]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {\n class: 'btn-light',\n '[class.bg-primary]': 'selected',\n '[class.text-white]': 'selected',\n '[class.text-muted]': 'isMuted()',\n '[class.outside]': 'isMuted()',\n '[class.active]': 'focused',\n }, template: `{{ i18n.getDayNumerals(date) }}`, styles: [\"[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:transparent}[ngbDatepickerDayView]:hover:not(.bg-primary),[ngbDatepickerDayView].active:not(.bg-primary){background-color:var(--bs-tertiary-bg);outline:1px solid var(--bs-border-color)}[ngbDatepickerDayView].outside{opacity:.5}\\n\"] }]\n }], propDecorators: { currentMonth: [{\n type: Input\n }], date: [{\n type: Input\n }], disabled: [{\n type: Input\n }], focused: [{\n type: Input\n }], selected: [{\n type: Input\n }] } });\n\nclass NgbDatepickerNavigationSelect {\n constructor() {\n this._month = -1;\n this._year = -1;\n this.i18n = inject(NgbDatepickerI18n);\n this.select = new EventEmitter();\n }\n changeMonth(month) {\n this.select.emit(new NgbDate(this.date.year, toInteger(month), 1));\n }\n changeYear(year) {\n this.select.emit(new NgbDate(toInteger(year), this.date.month, 1));\n }\n ngAfterViewChecked() {\n if (this.date) {\n if (this.date.month !== this._month) {\n this._month = this.date.month;\n this.monthSelect.nativeElement.value = `${this._month}`;\n }\n if (this.date.year !== this._year) {\n this._year = this.date.year;\n this.yearSelect.nativeElement.value = `${this._year}`;\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerNavigationSelect, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbDatepickerNavigationSelect, isStandalone: true, selector: \"ngb-datepicker-navigation-select\", inputs: { date: \"date\", disabled: \"disabled\", months: \"months\", years: \"years\" }, outputs: { select: \"select\" }, viewQueries: [{ propertyName: \"monthSelect\", first: true, predicate: [\"month\"], descendants: true, read: ElementRef, static: true }, { propertyName: \"yearSelect\", first: true, predicate: [\"year\"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: `\n\t\t\n\t\t\t@for (m of months; track m) {\n\t\t\t\t\n\t\t\t}\n\t\t\t@for (y of years; track y) {\n\t\t\t\t\n\t\t\t}\n\t\t\n\t`, isInline: true, styles: [\"ngb-datepicker-navigation-select>.form-select{flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}ngb-datepicker-navigation-select>.form-select:focus{z-index:1}ngb-datepicker-navigation-select>.form-select::-ms-value{background-color:transparent!important}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerNavigationSelect, decorators: [{\n type: Component,\n args: [{ selector: 'ngb-datepicker-navigation-select', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `\n\t\t\n\t\t\t@for (m of months; track m) {\n\t\t\t\t\n\t\t\t}\n\t\t\t@for (y of years; track y) {\n\t\t\t\t\n\t\t\t}\n\t\t\n\t`, styles: [\"ngb-datepicker-navigation-select>.form-select{flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}ngb-datepicker-navigation-select>.form-select:focus{z-index:1}ngb-datepicker-navigation-select>.form-select::-ms-value{background-color:transparent!important}\\n\"] }]\n }], propDecorators: { date: [{\n type: Input\n }], disabled: [{\n type: Input\n }], months: [{\n type: Input\n }], years: [{\n type: Input\n }], select: [{\n type: Output\n }], monthSelect: [{\n type: ViewChild,\n args: ['month', { static: true, read: ElementRef }]\n }], yearSelect: [{\n type: ViewChild,\n args: ['year', { static: true, read: ElementRef }]\n }] } });\n\nclass NgbDatepickerNavigation {\n constructor() {\n this.navigation = NavigationEvent;\n this.i18n = inject(NgbDatepickerI18n);\n this.months = [];\n this.navigate = new EventEmitter();\n this.select = new EventEmitter();\n }\n onClickPrev(event) {\n event.currentTarget.focus();\n this.navigate.emit(this.navigation.PREV);\n }\n onClickNext(event) {\n event.currentTarget.focus();\n this.navigate.emit(this.navigation.NEXT);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerNavigation, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbDatepickerNavigation, isStandalone: true, selector: \"ngb-datepicker-navigation\", inputs: { date: \"date\", disabled: \"disabled\", months: \"months\", showSelect: \"showSelect\", prevDisabled: \"prevDisabled\", nextDisabled: \"nextDisabled\", selectBoxes: \"selectBoxes\" }, outputs: { navigate: \"navigate\", select: \"select\" }, ngImport: i0, template: `\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t@if (showSelect) {\n\t\t\t\n\t\t}\n\n\t\t@if (!showSelect) {\n\t\t\t@for (month of months; track month; let i = $index) {\n\t\t\t\t@if (i > 0) {\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t\t
\n\t\t\t\t\t{{ i18n.getMonthLabel(month.firstDate) }}\n\t\t\t\t
\n\t\t\t\t@if (i !== months.length - 1) {\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t`, isInline: true, styles: [\"ngb-datepicker-navigation{display:flex;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;transform:rotate(-135deg)}.ngb-dp-arrow{display:flex;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow-next{justify-content:flex-end}.ngb-dp-arrow-next .ngb-dp-navigation-chevron{transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:flex;flex:1 1 9rem}\\n\"], dependencies: [{ kind: \"component\", type: NgbDatepickerNavigationSelect, selector: \"ngb-datepicker-navigation-select\", inputs: [\"date\", \"disabled\", \"months\", \"years\"], outputs: [\"select\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerNavigation, decorators: [{\n type: Component,\n args: [{ selector: 'ngb-datepicker-navigation', standalone: true, imports: [NgbDatepickerNavigationSelect], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t@if (showSelect) {\n\t\t\t\n\t\t}\n\n\t\t@if (!showSelect) {\n\t\t\t@for (month of months; track month; let i = $index) {\n\t\t\t\t@if (i > 0) {\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t\t
\n\t\t\t\t\t{{ i18n.getMonthLabel(month.firstDate) }}\n\t\t\t\t
\n\t\t\t\t@if (i !== months.length - 1) {\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t`, styles: [\"ngb-datepicker-navigation{display:flex;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;transform:rotate(-135deg)}.ngb-dp-arrow{display:flex;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow-next{justify-content:flex-end}.ngb-dp-arrow-next .ngb-dp-navigation-chevron{transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:flex;flex:1 1 9rem}\\n\"] }]\n }], propDecorators: { date: [{\n type: Input\n }], disabled: [{\n type: Input\n }], months: [{\n type: Input\n }], showSelect: [{\n type: Input\n }], prevDisabled: [{\n type: Input\n }], nextDisabled: [{\n type: Input\n }], selectBoxes: [{\n type: Input\n }], navigate: [{\n type: Output\n }], select: [{\n type: Output\n }] } });\n\n/**\n * A directive that marks the content template that customizes the way datepicker months are displayed\n *\n * @since 5.3.0\n */\nclass NgbDatepickerContent {\n constructor() {\n this.templateRef = inject(TemplateRef);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbDatepickerContent, isStandalone: true, selector: \"ng-template[ngbDatepickerContent]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerContent, decorators: [{\n type: Directive,\n args: [{ selector: 'ng-template[ngbDatepickerContent]', standalone: true }]\n }] });\n/**\n * A component that renders one month including all the days, weekdays and week numbers. Can be used inside\n * the `` when you want to customize months layout.\n *\n * For a usage example, see [custom month layout demo](#/components/datepicker/examples#custommonth)\n *\n * @since 5.3.0\n */\nclass NgbDatepickerMonth {\n constructor() {\n this._keyboardService = inject(NgbDatepickerKeyboardService);\n this._service = inject(NgbDatepickerService);\n this.i18n = inject(NgbDatepickerI18n);\n this.datepicker = inject(NgbDatepicker);\n }\n /**\n * The first date of month to be rendered.\n *\n * This month must one of the months present in the\n * [datepicker state](#/components/datepicker/api#NgbDatepickerState).\n */\n set month(month) {\n this.viewModel = this._service.getMonth(month);\n }\n onKeyDown(event) {\n this._keyboardService.processKey(event, this.datepicker);\n }\n doSelect(day) {\n if (!day.context.disabled && !day.hidden) {\n this.datepicker.onDateSelect(day.date);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerMonth, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbDatepickerMonth, isStandalone: true, selector: \"ngb-datepicker-month\", inputs: { month: \"month\" }, host: { attributes: { \"role\": \"grid\" }, listeners: { \"keydown\": \"onKeyDown($event)\" } }, ngImport: i0, template: `\n\t\t@if (viewModel.weekdays.length > 0) {\n\t\t\t
\n\t\t\t\t@if (datepicker.showWeekNumbers) {\n\t\t\t\t\t
{{ i18n.getWeekLabel() }}
\n\t\t\t\t}\n\t\t\t\t@for (weekday of viewModel.weekdays; track weekday) {\n\t\t\t\t\t
{{ weekday }}
\n\t\t\t\t}\n\t\t\t
\n\t\t}\n\t\t@for (week of viewModel.weeks; track week) {\n\t\t\t@if (!week.collapsed) {\n\t\t\t\t
\n\t\t\t\t\t@if (datepicker.showWeekNumbers) {\n\t\t\t\t\t\t
{{ i18n.getWeekNumerals(week.number) }}
\n\t\t\t\t\t}\n\t\t\t\t\t@for (day of week.days; track day) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t@if (!day.hidden) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t
\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t`, isInline: true, styles: [\"ngb-datepicker-month{display:block}.ngb-dp-weekday,.ngb-dp-week-number{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:var(--bs-info)}.ngb-dp-week{border-radius:.25rem;display:flex}.ngb-dp-weekdays{border-bottom:1px solid var(--bs-border-color);border-radius:0;background-color:var(--bs-tertiary-bg)}.ngb-dp-day,.ngb-dp-weekday,.ngb-dp-week-number{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default;pointer-events:none}.ngb-dp-day[tabindex=\\\"0\\\"]{z-index:1}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerMonth, decorators: [{\n type: Component,\n args: [{ selector: 'ngb-datepicker-month', standalone: true, imports: [NgTemplateOutlet], host: {\n role: 'grid',\n '(keydown)': 'onKeyDown($event)',\n }, encapsulation: ViewEncapsulation.None, template: `\n\t\t@if (viewModel.weekdays.length > 0) {\n\t\t\t
\n\t\t\t\t@if (datepicker.showWeekNumbers) {\n\t\t\t\t\t
{{ i18n.getWeekLabel() }}
\n\t\t\t\t}\n\t\t\t\t@for (weekday of viewModel.weekdays; track weekday) {\n\t\t\t\t\t
{{ weekday }}
\n\t\t\t\t}\n\t\t\t
\n\t\t}\n\t\t@for (week of viewModel.weeks; track week) {\n\t\t\t@if (!week.collapsed) {\n\t\t\t\t
\n\t\t\t\t\t@if (datepicker.showWeekNumbers) {\n\t\t\t\t\t\t
{{ i18n.getWeekNumerals(week.number) }}
\n\t\t\t\t\t}\n\t\t\t\t\t@for (day of week.days; track day) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t@if (!day.hidden) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t
\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t`, styles: [\"ngb-datepicker-month{display:block}.ngb-dp-weekday,.ngb-dp-week-number{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:var(--bs-info)}.ngb-dp-week{border-radius:.25rem;display:flex}.ngb-dp-weekdays{border-bottom:1px solid var(--bs-border-color);border-radius:0;background-color:var(--bs-tertiary-bg)}.ngb-dp-day,.ngb-dp-weekday,.ngb-dp-week-number{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default;pointer-events:none}.ngb-dp-day[tabindex=\\\"0\\\"]{z-index:1}\\n\"] }]\n }], propDecorators: { month: [{\n type: Input\n }] } });\n/**\n * A highly configurable component that helps you with selecting calendar dates.\n *\n * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup.\n */\nclass NgbDatepicker {\n constructor() {\n this.injector = inject(Injector);\n this._service = inject(NgbDatepickerService);\n this._calendar = inject(NgbCalendar);\n this._i18n = inject(NgbDatepickerI18n);\n this._config = inject(NgbDatepickerConfig);\n this._nativeElement = inject(ElementRef).nativeElement;\n this._ngbDateAdapter = inject((NgbDateAdapter));\n this._ngZone = inject(NgZone);\n this._destroyRef = inject(DestroyRef);\n this._controlValue = null;\n this._publicState = {};\n /**\n * The reference to a custom template for the day.\n *\n * Allows to completely override the way a day 'cell' in the calendar is displayed.\n *\n * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside.\n */\n this.dayTemplate = this._config.dayTemplate;\n /**\n * The callback to pass any arbitrary data to the template cell via the\n * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter.\n *\n * `current` is the month that is currently displayed by the datepicker.\n *\n * @since 3.3.0\n */\n this.dayTemplateData = this._config.dayTemplateData;\n /**\n * The number of months to display.\n */\n this.displayMonths = this._config.displayMonths;\n /**\n * The first day of the week.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n this.firstDayOfWeek = this._config.firstDayOfWeek;\n /**\n * The reference to the custom template for the datepicker footer.\n *\n * @since 3.3.0\n */\n this.footerTemplate = this._config.footerTemplate;\n /**\n * The callback to mark some dates as disabled.\n *\n * It is called for each new date when navigating to a different month.\n *\n * `current` is the month that is currently displayed by the datepicker.\n */\n this.markDisabled = this._config.markDisabled;\n /**\n * The latest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years after the current month.\n */\n this.maxDate = this._config.maxDate;\n /**\n * The earliest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years before the current month.\n */\n this.minDate = this._config.minDate;\n /**\n * Navigation type.\n *\n * * `\"select\"` - select boxes for month and navigation arrows\n * * `\"arrows\"` - only navigation arrows\n * * `\"none\"` - no navigation visible at all\n */\n this.navigation = this._config.navigation;\n /**\n * The way of displaying days that don't belong to the current month.\n *\n * * `\"visible\"` - days are visible\n * * `\"hidden\"` - days are hidden, white space preserved\n * * `\"collapsed\"` - days are collapsed, so the datepicker height might change between months\n *\n * For the 2+ months view, days in between months are never shown.\n */\n this.outsideDays = this._config.outsideDays;\n /**\n * If `true`, week numbers will be displayed.\n */\n this.showWeekNumbers = this._config.showWeekNumbers;\n /**\n * The date to open calendar with.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date is provided, calendar will open with current month.\n *\n * You could use `navigateTo(date)` method as an alternative.\n */\n this.startDate = this._config.startDate;\n /**\n * The way weekdays should be displayed.\n *\n * * `true` - weekdays are displayed using default width\n * * `false` - weekdays are not displayed\n * * `TranslationWidth` - weekdays are displayed using specified width\n *\n * @since 9.1.0\n */\n this.weekdays = this._config.weekdays;\n /**\n * An event emitted right before the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n this.navigate = new EventEmitter();\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n *\n * @since 5.2.0\n */\n this.dateSelect = new EventEmitter();\n this.onChange = (_) => { };\n this.onTouched = () => { };\n const cd = inject(ChangeDetectorRef);\n this._service.dateSelect$.pipe(takeUntilDestroyed()).subscribe((date) => {\n this.dateSelect.emit(date);\n });\n this._service.model$.pipe(takeUntilDestroyed()).subscribe((model) => {\n const newDate = model.firstDate;\n const oldDate = this.model ? this.model.firstDate : null;\n // update public state\n this._publicState = {\n maxDate: model.maxDate,\n minDate: model.minDate,\n firstDate: model.firstDate,\n lastDate: model.lastDate,\n focusedDate: model.focusDate,\n months: model.months.map((viewModel) => viewModel.firstDate),\n };\n let navigationPrevented = false;\n // emitting navigation event if the first month changes\n if (!newDate.equals(oldDate)) {\n this.navigate.emit({\n current: oldDate ? { year: oldDate.year, month: oldDate.month } : null,\n next: { year: newDate.year, month: newDate.month },\n preventDefault: () => (navigationPrevented = true),\n });\n // can't prevent the very first navigation\n if (navigationPrevented && oldDate !== null) {\n this._service.open(oldDate);\n return;\n }\n }\n const newSelectedDate = model.selectedDate;\n const newFocusedDate = model.focusDate;\n const oldFocusedDate = this.model ? this.model.focusDate : null;\n this.model = model;\n // handling selection change\n if (isChangedDate(newSelectedDate, this._controlValue)) {\n this._controlValue = newSelectedDate;\n this.onTouched();\n this.onChange(this._ngbDateAdapter.toModel(newSelectedDate));\n }\n // handling focus change\n if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) {\n this.focus();\n }\n cd.markForCheck();\n });\n }\n /**\n * Returns the readonly public state of the datepicker\n *\n * @since 5.2.0\n */\n get state() {\n return this._publicState;\n }\n /**\n * Returns the calendar service used in the specific datepicker instance.\n *\n * @since 5.3.0\n */\n get calendar() {\n return this._calendar;\n }\n /**\n * Returns the i18n service used in the specific datepicker instance.\n *\n * @since 14.2.0\n */\n get i18n() {\n return this._i18n;\n }\n /**\n * Focuses on given date.\n */\n focusDate(date) {\n this._service.focus(NgbDate.from(date));\n }\n /**\n * Selects focused date.\n */\n focusSelect() {\n this._service.focusSelect();\n }\n focus() {\n this._ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => this._nativeElement.querySelector('div.ngb-dp-day[tabindex=\"0\"]')?.focus());\n }\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date) {\n this._service.open(NgbDate.from(date ? (date.day ? date : { ...date, day: 1 }) : null));\n }\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(() => {\n const focusIns$ = fromEvent(this._contentEl.nativeElement, 'focusin');\n const focusOuts$ = fromEvent(this._contentEl.nativeElement, 'focusout');\n // we're changing 'focusVisible' only when entering or leaving months view\n // and ignoring all focus events where both 'target' and 'related' target are day cells\n merge(focusIns$, focusOuts$)\n .pipe(filter((focusEvent) => {\n const target = focusEvent.target;\n const relatedTarget = focusEvent.relatedTarget;\n return !(target?.classList.contains('ngb-dp-day') &&\n relatedTarget?.classList.contains('ngb-dp-day') &&\n this._nativeElement.contains(target) &&\n this._nativeElement.contains(relatedTarget));\n }), takeUntilDestroyed(this._destroyRef))\n .subscribe(({ type }) => this._ngZone.run(() => this._service.set({ focusVisible: type === 'focusin' })));\n });\n }\n ngOnInit() {\n if (this.model === undefined) {\n const inputs = {};\n [\n 'dayTemplateData',\n 'displayMonths',\n 'markDisabled',\n 'firstDayOfWeek',\n 'navigation',\n 'minDate',\n 'maxDate',\n 'outsideDays',\n 'weekdays',\n ].forEach((name) => (inputs[name] = this[name]));\n this._service.set(inputs);\n this.navigateTo(this.startDate);\n }\n if (!this.dayTemplate) {\n this.dayTemplate = this._defaultDayTemplate;\n }\n }\n ngOnChanges(changes) {\n const inputs = {};\n [\n 'dayTemplateData',\n 'displayMonths',\n 'markDisabled',\n 'firstDayOfWeek',\n 'navigation',\n 'minDate',\n 'maxDate',\n 'outsideDays',\n 'weekdays',\n ]\n .filter((name) => name in changes)\n .forEach((name) => (inputs[name] = this[name]));\n this._service.set(inputs);\n if ('startDate' in changes) {\n const { currentValue, previousValue } = changes.startDate;\n if (isChangedMonth(previousValue, currentValue)) {\n this.navigateTo(this.startDate);\n }\n }\n }\n onDateSelect(date) {\n this._service.focus(date);\n this._service.select(date, { emitEvent: true });\n }\n onNavigateDateSelect(date) {\n this._service.open(date);\n }\n onNavigateEvent(event) {\n switch (event) {\n case NavigationEvent.PREV:\n this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1));\n break;\n case NavigationEvent.NEXT:\n this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1));\n break;\n }\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n setDisabledState(disabled) {\n this._service.set({ disabled });\n }\n writeValue(value) {\n this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value));\n this._service.select(this._controlValue);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepicker, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbDatepicker, isStandalone: true, selector: \"ngb-datepicker\", inputs: { contentTemplate: \"contentTemplate\", dayTemplate: \"dayTemplate\", dayTemplateData: \"dayTemplateData\", displayMonths: \"displayMonths\", firstDayOfWeek: \"firstDayOfWeek\", footerTemplate: \"footerTemplate\", markDisabled: \"markDisabled\", maxDate: \"maxDate\", minDate: \"minDate\", navigation: \"navigation\", outsideDays: \"outsideDays\", showWeekNumbers: \"showWeekNumbers\", startDate: \"startDate\", weekdays: \"weekdays\" }, outputs: { navigate: \"navigate\", dateSelect: \"dateSelect\" }, host: { properties: { \"class.disabled\": \"model.disabled\" } }, providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgbDatepicker), multi: true },\n NgbDatepickerService,\n ], queries: [{ propertyName: \"contentTemplateFromContent\", first: true, predicate: NgbDatepickerContent, descendants: true, static: true }], viewQueries: [{ propertyName: \"_defaultDayTemplate\", first: true, predicate: [\"defaultDayTemplate\"], descendants: true, static: true }, { propertyName: \"_contentEl\", first: true, predicate: [\"content\"], descendants: true, static: true }], exportAs: [\"ngbDatepicker\"], usesOnChanges: true, ngImport: i0, template: `\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\n\t\t\n\t\t\t@for (month of model.months; track month; let i = $index) {\n\t\t\t\t
\n\t\t\t\t\t@if (navigation === 'none' || (displayMonths > 1 && navigation === 'select')) {\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{{ i18n.getMonthLabel(month.firstDate) }}\n\t\t\t\t\t\t
\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t}\n\t\t
\n\n\t\t
\n\t\t\t@if (navigation !== 'none') {\n\t\t\t\t\n\t\t\t}\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t
\n\n\t\t\n\t`, isInline: true, styles: [\"ngb-datepicker{border:1px solid var(--bs-border-color);border-radius:.25rem;display:inline-block}ngb-datepicker-month{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}ngb-datepicker.disabled .ngb-dp-weekday,ngb-datepicker.disabled .ngb-dp-week-number,ngb-datepicker.disabled .ngb-dp-month-name{color:var(--bs-text-muted)}.ngb-dp-body{z-index:1055}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:var(--bs-tertiary-bg)}.ngb-dp-months{display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:var(--bs-tertiary-bg)}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: NgbDatepickerDayView, selector: \"[ngbDatepickerDayView]\", inputs: [\"currentMonth\", \"date\", \"disabled\", \"focused\", \"selected\"] }, { kind: \"component\", type: NgbDatepickerMonth, selector: \"ngb-datepicker-month\", inputs: [\"month\"] }, { kind: \"component\", type: NgbDatepickerNavigation, selector: \"ngb-datepicker-navigation\", inputs: [\"date\", \"disabled\", \"months\", \"showSelect\", \"prevDisabled\", \"nextDisabled\", \"selectBoxes\"], outputs: [\"navigate\", \"select\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepicker, decorators: [{\n type: Component,\n args: [{ exportAs: 'ngbDatepicker', selector: 'ngb-datepicker', standalone: true, imports: [NgTemplateOutlet, NgbDatepickerDayView, NgbDatepickerMonth, NgbDatepickerNavigation], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {\n '[class.disabled]': 'model.disabled',\n }, template: `\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\n\t\t\n\t\t\t@for (month of model.months; track month; let i = $index) {\n\t\t\t\t
\n\t\t\t\t\t@if (navigation === 'none' || (displayMonths > 1 && navigation === 'select')) {\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{{ i18n.getMonthLabel(month.firstDate) }}\n\t\t\t\t\t\t
\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t}\n\t\t
\n\n\t\t
\n\t\t\t@if (navigation !== 'none') {\n\t\t\t\t\n\t\t\t}\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t
\n\n\t\t\n\t`, providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgbDatepicker), multi: true },\n NgbDatepickerService,\n ], styles: [\"ngb-datepicker{border:1px solid var(--bs-border-color);border-radius:.25rem;display:inline-block}ngb-datepicker-month{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}ngb-datepicker.disabled .ngb-dp-weekday,ngb-datepicker.disabled .ngb-dp-week-number,ngb-datepicker.disabled .ngb-dp-month-name{color:var(--bs-text-muted)}.ngb-dp-body{z-index:1055}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:var(--bs-tertiary-bg)}.ngb-dp-months{display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:var(--bs-tertiary-bg)}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { _defaultDayTemplate: [{\n type: ViewChild,\n args: ['defaultDayTemplate', { static: true }]\n }], _contentEl: [{\n type: ViewChild,\n args: ['content', { static: true }]\n }], contentTemplate: [{\n type: Input\n }], contentTemplateFromContent: [{\n type: ContentChild,\n args: [NgbDatepickerContent, { static: true }]\n }], dayTemplate: [{\n type: Input\n }], dayTemplateData: [{\n type: Input\n }], displayMonths: [{\n type: Input\n }], firstDayOfWeek: [{\n type: Input\n }], footerTemplate: [{\n type: Input\n }], markDisabled: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], minDate: [{\n type: Input\n }], navigation: [{\n type: Input\n }], outsideDays: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], startDate: [{\n type: Input\n }], weekdays: [{\n type: Input\n }], navigate: [{\n type: Output\n }], dateSelect: [{\n type: Output\n }] } });\n\nconst isContainedIn = (element, array) => array ? array.some((item) => item.contains(element)) : false;\nconst matchesSelectorIfAny = (element, selector) => !selector || closest(element, selector) != null;\n// we have to add a more significant delay to avoid re-opening when handling (click) on a toggling element\n// TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID\nconst isMobile = (() => {\n const isIOS = () => /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (/Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2);\n const isAndroid = () => /Android/.test(navigator.userAgent);\n return typeof navigator !== 'undefined' ? !!navigator.userAgent && (isIOS() || isAndroid()) : false;\n})();\n// setting 'ngbAutoClose' synchronously on mobile results in immediate popup closing\n// when tapping on the triggering element\nconst wrapAsyncForMobile = (fn) => (isMobile ? () => setTimeout(() => fn(), 100) : fn);\nfunction ngbAutoClose(zone, document, type, close, closed$, insideElements, ignoreElements, insideSelector) {\n // closing on ESC and outside clicks\n if (type) {\n zone.runOutsideAngular(wrapAsyncForMobile(() => {\n const shouldCloseOnClick = (event) => {\n const element = event.target;\n if (event.button === 2 || isContainedIn(element, ignoreElements)) {\n return false;\n }\n if (type === 'inside') {\n return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector);\n }\n else if (type === 'outside') {\n return !isContainedIn(element, insideElements);\n } /* if (type === true) */\n else {\n return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements);\n }\n };\n const escapes$ = fromEvent(document, 'keydown').pipe(takeUntil(closed$), \n /* eslint-disable-next-line deprecation/deprecation */\n filter((e) => e.which === Key.Escape), tap((e) => e.preventDefault()));\n // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown',\n // because on 'mouseup' DOM nodes might be detached\n const mouseDowns$ = fromEvent(document, 'mousedown').pipe(map(shouldCloseOnClick), takeUntil(closed$));\n const closeableClicks$ = fromEvent(document, 'mouseup').pipe(withLatestFrom(mouseDowns$), filter(([_, shouldClose]) => shouldClose), delay(0), takeUntil(closed$));\n race([escapes$.pipe(map((_) => 0 /* SOURCE.ESCAPE */)), closeableClicks$.pipe(map((_) => 1 /* SOURCE.CLICK */))]).subscribe((source) => zone.run(() => close(source)));\n }));\n }\n}\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[contenteditable]',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(', ');\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nfunction getFocusableBoundaryElements(element) {\n const list = Array.from(element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)).filter((el) => el.tabIndex !== -1);\n return [list[0], list[list.length - 1]];\n}\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param zone Angular zone\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nconst ngbFocusTrap = (zone, element, stopFocusTrap$, refocusOnClick = false) => {\n zone.runOutsideAngular(() => {\n // last focused element\n const lastFocusedElement$ = fromEvent(element, 'focusin').pipe(takeUntil(stopFocusTrap$), map((e) => e.target));\n // 'tab' / 'shift+tab' stream\n fromEvent(element, 'keydown')\n .pipe(takeUntil(stopFocusTrap$), \n /* eslint-disable-next-line deprecation/deprecation */\n filter((e) => e.which === Key.Tab), withLatestFrom(lastFocusedElement$))\n .subscribe(([tabEvent, focusedElement]) => {\n const [first, last] = getFocusableBoundaryElements(element);\n if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) {\n last.focus();\n tabEvent.preventDefault();\n }\n if (focusedElement === last && !tabEvent.shiftKey) {\n first.focus();\n tabEvent.preventDefault();\n }\n });\n // inside click\n if (refocusOnClick) {\n fromEvent(element, 'click')\n .pipe(takeUntil(stopFocusTrap$), withLatestFrom(lastFocusedElement$), map((arr) => arr[1]))\n .subscribe((lastFocusedElement) => lastFocusedElement.focus());\n }\n });\n};\n\nclass NgbRTL {\n constructor() {\n this._element = inject(DOCUMENT).documentElement;\n }\n isRTL() {\n return (this._element.getAttribute('dir') || '').toLowerCase() === 'rtl';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRTL, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRTL, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRTL, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nconst placementSeparator = /\\s+/;\nconst spacesRegExp = / +/gi;\n/**\n * Matching classes from the Bootstrap ones to the poppers ones.\n * The first index of each array is used for the left to right direction,\n * the second one is used for the right to left, defaulting to the first index (when LTR and RTL lead to the same class)\n *\n * See [Bootstrap alignments](https://getbootstrap.com/docs/5.1/components/dropdowns/#alignment-options)\n * and [Popper placements](https://popper.js.org/docs/v2/constructors/#options)\n */\nconst bootstrapPopperMatches = {\n top: ['top'],\n bottom: ['bottom'],\n start: ['left', 'right'],\n left: ['left'],\n end: ['right', 'left'],\n right: ['right'],\n 'top-start': ['top-start', 'top-end'],\n 'top-left': ['top-start'],\n 'top-end': ['top-end', 'top-start'],\n 'top-right': ['top-end'],\n 'bottom-start': ['bottom-start', 'bottom-end'],\n 'bottom-left': ['bottom-start'],\n 'bottom-end': ['bottom-end', 'bottom-start'],\n 'bottom-right': ['bottom-end'],\n 'start-top': ['left-start', 'right-start'],\n 'left-top': ['left-start'],\n 'start-bottom': ['left-end', 'right-end'],\n 'left-bottom': ['left-end'],\n 'end-top': ['right-start', 'left-start'],\n 'right-top': ['right-start'],\n 'end-bottom': ['right-end', 'left-end'],\n 'right-bottom': ['right-end'],\n};\nfunction getPopperClassPlacement(placement, isRTL) {\n const [leftClass, rightClass] = bootstrapPopperMatches[placement];\n return isRTL ? rightClass || leftClass : leftClass;\n}\nconst popperStartPrimaryPlacement = /^left/;\nconst popperEndPrimaryPlacement = /^right/;\nconst popperStartSecondaryPlacement = /^start/;\nconst popperEndSecondaryPlacement = /^end/;\nfunction getBootstrapBaseClassPlacement(baseClass, placement) {\n let [primary, secondary] = placement.split('-');\n const newPrimary = primary.replace(popperStartPrimaryPlacement, 'start').replace(popperEndPrimaryPlacement, 'end');\n let classnames = [newPrimary];\n if (secondary) {\n let newSecondary = secondary;\n if (primary === 'left' || primary === 'right') {\n newSecondary = newSecondary\n .replace(popperStartSecondaryPlacement, 'top')\n .replace(popperEndSecondaryPlacement, 'bottom');\n }\n classnames.push(`${newPrimary}-${newSecondary}`);\n }\n if (baseClass) {\n classnames = classnames.map((classname) => `${baseClass}-${classname}`);\n }\n return classnames.join(' ');\n}\n/*\n * Accept the placement array and applies the appropriate placement dependent on the viewport.\n * Returns the applied placement.\n * In case of auto placement, placements are selected in order\n * 'top', 'bottom', 'start', 'end',\n * 'top-start', 'top-end',\n * 'bottom-start', 'bottom-end',\n * 'start-top', 'start-bottom',\n * 'end-top', 'end-bottom'.\n * */\nfunction getPopperOptions({ placement, baseClass }, rtl) {\n let placementVals = Array.isArray(placement)\n ? placement\n : placement.split(placementSeparator);\n // No need to consider left and right here, as start and end are enough, and it is used for 'auto' placement only\n const allowedPlacements = [\n 'top',\n 'bottom',\n 'start',\n 'end',\n 'top-start',\n 'top-end',\n 'bottom-start',\n 'bottom-end',\n 'start-top',\n 'start-bottom',\n 'end-top',\n 'end-bottom',\n ];\n // replace auto placement with other placements\n let hasAuto = placementVals.findIndex((val) => val === 'auto');\n if (hasAuto >= 0) {\n allowedPlacements.forEach(function (obj) {\n if (placementVals.find((val) => val.search('^' + obj) !== -1) == null) {\n placementVals.splice(hasAuto++, 1, obj);\n }\n });\n }\n const popperPlacements = placementVals.map((_placement) => {\n return getPopperClassPlacement(_placement, rtl.isRTL());\n });\n let mainPlacement = popperPlacements.shift();\n const bsModifier = {\n name: 'bootstrapClasses',\n enabled: !!baseClass,\n phase: 'write',\n fn({ state }) {\n const bsClassRegExp = new RegExp(baseClass + '(-[a-z]+)*', 'gi');\n const popperElement = state.elements.popper;\n const popperPlacement = state.placement;\n let className = popperElement.className;\n // Remove old bootstrap classes\n className = className.replace(bsClassRegExp, '');\n // Add current placements\n className += ` ${getBootstrapBaseClassPlacement(baseClass, popperPlacement)}`;\n // Remove multiple spaces\n className = className.trim().replace(spacesRegExp, ' ');\n // Reassign\n popperElement.className = className;\n },\n };\n return {\n placement: mainPlacement,\n modifiers: [\n bsModifier,\n flip,\n preventOverflow,\n arrow,\n {\n enabled: true,\n name: 'flip',\n options: {\n fallbackPlacements: popperPlacements,\n },\n },\n {\n enabled: true,\n name: 'preventOverflow',\n phase: 'main',\n fn: function () { },\n },\n ],\n };\n}\nfunction noop(arg) {\n return arg;\n}\nfunction ngbPositioning() {\n const rtl = inject(NgbRTL);\n let popperInstance = null;\n return {\n createPopper(positioningOption) {\n if (!popperInstance) {\n const updatePopperOptions = positioningOption.updatePopperOptions || noop;\n let popperOptions = updatePopperOptions(getPopperOptions(positioningOption, rtl));\n popperInstance = createPopperLite(positioningOption.hostElement, positioningOption.targetElement, popperOptions);\n }\n },\n update() {\n if (popperInstance) {\n popperInstance.update();\n }\n },\n setOptions(positioningOption) {\n if (popperInstance) {\n const updatePopperOptions = positioningOption.updatePopperOptions || noop;\n let popperOptions = updatePopperOptions(getPopperOptions(positioningOption, rtl));\n popperInstance.setOptions(popperOptions);\n }\n },\n destroy() {\n if (popperInstance) {\n popperInstance.destroy();\n popperInstance = null;\n }\n },\n };\n}\n\nfunction NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() {\n return new NgbDateISOParserFormatter();\n}\n/**\n * An abstract service for parsing and formatting dates for the\n * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive.\n * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the\n * input element.\n *\n * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object.\n * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string`\n * in the input.\n *\n * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI\n * to use an alternative string format or a custom parsing logic.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n */\nclass NgbDateParserFormatter {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateParserFormatter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateParserFormatter, providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateParserFormatter, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY }]\n }] });\nclass NgbDateISOParserFormatter extends NgbDateParserFormatter {\n parse(value) {\n if (value != null) {\n const dateParts = value.trim().split('-');\n if (dateParts.length === 1 && isNumber(dateParts[0])) {\n return { year: toInteger(dateParts[0]), month: null, day: null };\n }\n else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {\n return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null };\n }\n else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {\n return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2]) };\n }\n }\n return null;\n }\n format(date) {\n return date\n ? `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${isNumber(date.day) ? padNumber(date.day) : ''}`\n : '';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateISOParserFormatter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateISOParserFormatter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateISOParserFormatter, decorators: [{\n type: Injectable\n }] });\n\n/**\n * A configuration service for the [`NgbDatepickerInput`](#/components/datepicker/api#NgbDatepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the datepicker inputs used in the application.\n *\n * @since 5.2.0\n */\nclass NgbInputDatepickerConfig extends NgbDatepickerConfig {\n constructor() {\n super(...arguments);\n this.autoClose = true;\n this.placement = ['bottom-start', 'bottom-end', 'top-start', 'top-end'];\n this.popperOptions = (options) => options;\n this.restoreFocus = true;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbInputDatepickerConfig, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbInputDatepickerConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbInputDatepickerConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nfunction addPopperOffset(offset$1) {\n return (options) => {\n options.modifiers.push(offset, {\n name: 'offset',\n options: {\n offset: () => offset$1,\n },\n });\n return options;\n };\n}\n\n/**\n * A directive that allows to stick a datepicker popup to an input field.\n *\n * Manages interaction with the input field itself, does value formatting and provides forms integration.\n */\nclass NgbInputDatepicker {\n constructor() {\n this._parserFormatter = inject(NgbDateParserFormatter);\n this._elRef = inject((ElementRef));\n this._vcRef = inject(ViewContainerRef);\n this._ngZone = inject(NgZone);\n this._calendar = inject(NgbCalendar);\n this._dateAdapter = inject((NgbDateAdapter));\n this._document = inject(DOCUMENT);\n this._changeDetector = inject(ChangeDetectorRef);\n this._config = inject(NgbInputDatepickerConfig);\n this._cRef = null;\n this._disabled = false;\n this._elWithFocus = null;\n this._model = null;\n this._positioning = ngbPositioning();\n this._destroyCloseHandlers$ = new Subject();\n /**\n * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not.\n *\n * * `true` - the popup will close on both date selection and outside click.\n * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the popup will close on date selection, but not outside clicks.\n * * `\"outside\"` - the popup will close only on the outside click and not on date selection/inside clicks.\n *\n * @since 3.0.0\n */\n this.autoClose = this._config.autoClose;\n /**\n * The preferred placement of the datepicker popup, among the [possible values](#/guides/positioning#api).\n *\n * The default order of preference is `\"bottom-start bottom-end top-start top-end\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n this.placement = this._config.placement;\n /**\n * Allows to change default Popper options when positioning the popup.\n * Receives current popper options and returns modified ones.\n *\n * @since 13.1.0\n */\n this.popperOptions = this._config.popperOptions;\n /**\n * A selector specifying the element the datepicker popup should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n this.container = this._config.container;\n /**\n * A css selector or html element specifying the element the datepicker popup should be positioned against.\n *\n * By default the input is used as a target.\n *\n * @since 4.2.0\n */\n this.positionTarget = this._config.positionTarget;\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n *\n * @since 1.1.1\n */\n this.dateSelect = new EventEmitter();\n /**\n * Event emitted right after the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n this.navigate = new EventEmitter();\n /**\n * An event fired after closing datepicker window.\n *\n * @since 4.2.0\n */\n this.closed = new EventEmitter();\n this._onChange = (_) => { };\n this._onTouched = () => { };\n this._validatorChange = () => { };\n }\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = value === '' || (value && value !== 'false');\n if (this.isOpen()) {\n this._cRef.instance.setDisabledState(this._disabled);\n }\n }\n registerOnChange(fn) {\n this._onChange = fn;\n }\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n registerOnValidatorChange(fn) {\n this._validatorChange = fn;\n }\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n validate(c) {\n const { value } = c;\n if (value != null) {\n const ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value));\n if (!ngbDate) {\n return { ngbDate: { invalid: value } };\n }\n if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) {\n return { ngbDate: { minDate: { minDate: this.minDate, actual: value } } };\n }\n if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) {\n return { ngbDate: { maxDate: { maxDate: this.maxDate, actual: value } } };\n }\n }\n return null;\n }\n writeValue(value) {\n this._model = this._fromDateStruct(this._dateAdapter.fromModel(value));\n this._writeModelValue(this._model);\n }\n manualDateChange(value, updateView = false) {\n const inputValueChanged = value !== this._inputValue;\n if (inputValueChanged) {\n this._inputValue = value;\n this._model = this._fromDateStruct(this._parserFormatter.parse(value));\n }\n if (inputValueChanged || !updateView) {\n this._onChange(this._model ? this._dateAdapter.toModel(this._model) : value === '' ? null : value);\n }\n if (updateView && this._model) {\n this._writeModelValue(this._model);\n }\n }\n isOpen() {\n return !!this._cRef;\n }\n /**\n * Opens the datepicker popup.\n *\n * If the related form control contains a valid date, the corresponding month will be opened.\n */\n open() {\n if (!this.isOpen()) {\n this._cRef = this._vcRef.createComponent(NgbDatepicker);\n this._applyPopupStyling(this._cRef.location.nativeElement);\n this._applyDatepickerInputs(this._cRef);\n this._subscribeForDatepickerOutputs(this._cRef.instance);\n this._cRef.instance.ngOnInit();\n this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model));\n // date selection event handling\n this._cRef.instance.registerOnChange((selectedDate) => {\n this.writeValue(selectedDate);\n this._onChange(selectedDate);\n this._onTouched();\n });\n this._cRef.changeDetectorRef.detectChanges();\n this._cRef.instance.setDisabledState(this.disabled);\n if (this.container === 'body') {\n this._document.querySelector(this.container)?.appendChild(this._cRef.location.nativeElement);\n }\n // focus handling\n this._elWithFocus = this._document.activeElement;\n ngbFocusTrap(this._ngZone, this._cRef.location.nativeElement, this.closed, true);\n setTimeout(() => this._cRef?.instance.focus());\n let hostElement;\n if (isString(this.positionTarget)) {\n hostElement = this._document.querySelector(this.positionTarget);\n }\n else if (this.positionTarget instanceof HTMLElement) {\n hostElement = this.positionTarget;\n }\n else {\n hostElement = this._elRef.nativeElement;\n }\n if (this.positionTarget && !hostElement) {\n throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.');\n }\n // Setting up popper and scheduling updates when zone is stable\n this._ngZone.runOutsideAngular(() => {\n if (this._cRef && hostElement) {\n this._positioning.createPopper({\n hostElement,\n targetElement: this._cRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n updatePopperOptions: (options) => this.popperOptions(addPopperOffset([0, 2])(options)),\n });\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n }\n });\n this._setCloseHandlers();\n }\n }\n /**\n * Closes the datepicker popup.\n */\n close() {\n if (this.isOpen()) {\n this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView));\n this._cRef = null;\n this._positioning.destroy();\n this._zoneSubscription?.unsubscribe();\n this._destroyCloseHandlers$.next();\n this.closed.emit();\n this._changeDetector.markForCheck();\n // restore focus\n let elementToFocus = this._elWithFocus;\n if (isString(this.restoreFocus)) {\n elementToFocus = this._document.querySelector(this.restoreFocus);\n }\n else if (this.restoreFocus !== undefined) {\n elementToFocus = this.restoreFocus;\n }\n // in IE document.activeElement can contain an object without 'focus()' sometimes\n if (elementToFocus && elementToFocus['focus']) {\n elementToFocus.focus();\n }\n else {\n this._document.body.focus();\n }\n }\n }\n /**\n * Toggles the datepicker popup.\n */\n toggle() {\n if (this.isOpen()) {\n this.close();\n }\n else {\n this.open();\n }\n }\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date) {\n if (this.isOpen()) {\n this._cRef.instance.navigateTo(date);\n }\n }\n onBlur() {\n this._onTouched();\n }\n onFocus() {\n this._elWithFocus = this._elRef.nativeElement;\n }\n ngOnChanges(changes) {\n if (changes['minDate'] || changes['maxDate']) {\n this._validatorChange();\n if (this.isOpen()) {\n if (changes['minDate']) {\n this._cRef.setInput('minDate', this.minDate);\n }\n if (changes['maxDate']) {\n this._cRef.setInput('maxDate', this.maxDate);\n }\n }\n }\n if (changes['datepickerClass']) {\n const { currentValue, previousValue } = changes['datepickerClass'];\n this._applyPopupClass(currentValue, previousValue);\n }\n if (changes['autoClose'] && this.isOpen()) {\n this._setCloseHandlers();\n }\n }\n ngOnDestroy() {\n this.close();\n }\n _applyDatepickerInputs(datepickerComponentRef) {\n [\n 'contentTemplate',\n 'dayTemplate',\n 'dayTemplateData',\n 'displayMonths',\n 'firstDayOfWeek',\n 'footerTemplate',\n 'markDisabled',\n 'minDate',\n 'maxDate',\n 'navigation',\n 'outsideDays',\n 'showNavigation',\n 'showWeekNumbers',\n 'weekdays',\n ].forEach((inputName) => {\n if (this[inputName] !== undefined) {\n datepickerComponentRef.setInput(inputName, this[inputName]);\n }\n });\n datepickerComponentRef.setInput('startDate', this.startDate || this._model);\n }\n _applyPopupClass(newClass, oldClass) {\n const popupEl = this._cRef?.location.nativeElement;\n if (popupEl) {\n if (newClass) {\n popupEl.classList.add(newClass);\n }\n if (oldClass) {\n popupEl.classList.remove(oldClass);\n }\n }\n }\n _applyPopupStyling(nativeElement) {\n nativeElement.classList.add('dropdown-menu', 'show');\n if (this.container === 'body') {\n nativeElement.classList.add('ngb-dp-body');\n }\n this._applyPopupClass(this.datepickerClass);\n }\n _subscribeForDatepickerOutputs(datepickerInstance) {\n datepickerInstance.navigate.subscribe((navigateEvent) => this.navigate.emit(navigateEvent));\n datepickerInstance.dateSelect.subscribe((date) => {\n this.dateSelect.emit(date);\n if (this.autoClose === true || this.autoClose === 'inside') {\n this.close();\n }\n });\n }\n _writeModelValue(model) {\n const value = this._parserFormatter.format(model);\n this._inputValue = value;\n this._elRef.nativeElement.value = value;\n if (this.isOpen()) {\n this._cRef.instance.writeValue(this._dateAdapter.toModel(model));\n this._onTouched();\n }\n }\n _fromDateStruct(date) {\n const ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null;\n return this._calendar.isValid(ngbDate) ? ngbDate : null;\n }\n _setCloseHandlers() {\n this._destroyCloseHandlers$.next();\n ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this._destroyCloseHandlers$, [], [this._elRef.nativeElement, this._cRef.location.nativeElement]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbInputDatepicker, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbInputDatepicker, isStandalone: true, selector: \"input[ngbDatepicker]\", inputs: { autoClose: \"autoClose\", contentTemplate: \"contentTemplate\", datepickerClass: \"datepickerClass\", dayTemplate: \"dayTemplate\", dayTemplateData: \"dayTemplateData\", displayMonths: \"displayMonths\", firstDayOfWeek: \"firstDayOfWeek\", footerTemplate: \"footerTemplate\", markDisabled: \"markDisabled\", minDate: \"minDate\", maxDate: \"maxDate\", navigation: \"navigation\", outsideDays: \"outsideDays\", placement: \"placement\", popperOptions: \"popperOptions\", restoreFocus: \"restoreFocus\", showWeekNumbers: \"showWeekNumbers\", startDate: \"startDate\", container: \"container\", positionTarget: \"positionTarget\", weekdays: \"weekdays\", disabled: \"disabled\" }, outputs: { dateSelect: \"dateSelect\", navigate: \"navigate\", closed: \"closed\" }, host: { listeners: { \"input\": \"manualDateChange($event.target.value)\", \"change\": \"manualDateChange($event.target.value, true)\", \"focus\": \"onFocus()\", \"blur\": \"onBlur()\" }, properties: { \"disabled\": \"disabled\" } }, providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgbInputDatepicker), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => NgbInputDatepicker), multi: true },\n { provide: NgbDatepickerConfig, useExisting: NgbInputDatepickerConfig },\n ], exportAs: [\"ngbDatepicker\"], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbInputDatepicker, decorators: [{\n type: Directive,\n args: [{\n selector: 'input[ngbDatepicker]',\n exportAs: 'ngbDatepicker',\n standalone: true,\n host: {\n '(input)': 'manualDateChange($event.target.value)',\n '(change)': 'manualDateChange($event.target.value, true)',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '[disabled]': 'disabled',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgbInputDatepicker), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => NgbInputDatepicker), multi: true },\n { provide: NgbDatepickerConfig, useExisting: NgbInputDatepickerConfig },\n ],\n }]\n }], propDecorators: { autoClose: [{\n type: Input\n }], contentTemplate: [{\n type: Input\n }], datepickerClass: [{\n type: Input\n }], dayTemplate: [{\n type: Input\n }], dayTemplateData: [{\n type: Input\n }], displayMonths: [{\n type: Input\n }], firstDayOfWeek: [{\n type: Input\n }], footerTemplate: [{\n type: Input\n }], markDisabled: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], navigation: [{\n type: Input\n }], outsideDays: [{\n type: Input\n }], placement: [{\n type: Input\n }], popperOptions: [{\n type: Input\n }], restoreFocus: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], startDate: [{\n type: Input\n }], container: [{\n type: Input\n }], positionTarget: [{\n type: Input\n }], weekdays: [{\n type: Input\n }], dateSelect: [{\n type: Output\n }], navigate: [{\n type: Output\n }], closed: [{\n type: Output\n }], disabled: [{\n type: Input\n }] } });\n\nclass NgbCalendarHijri extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n getMonths() {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n getWeeksPerMonth() {\n return 6;\n }\n getNext(date, period = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n switch (period) {\n case 'y':\n date = this._setYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = this._setMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return this._setDay(date, date.day + number);\n default:\n return date;\n }\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n const day = this.toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n const jsDate = this.toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); // Compare with Muharram 1\n return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1;\n }\n getToday() {\n return this.fromGregorian(new Date());\n }\n isValid(date) {\n return (date != null &&\n isNumber(date.year) &&\n isNumber(date.month) &&\n isNumber(date.day) &&\n !isNaN(this.toGregorian(date).getTime()));\n }\n _setDay(date, day) {\n day = +day;\n let mDays = this.getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = this._setMonth(date, date.month - 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n }\n else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = this._setMonth(date, date.month + 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n }\n _setMonth(date, month) {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor((((month - 1) % 12) + 12) % 12) + 1;\n return date;\n }\n _setYear(date, year) {\n date.year = +year;\n return date;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarHijri, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarHijri }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarHijri, decorators: [{\n type: Injectable\n }] });\n\n/**\n * Checks if islamic year is a leap year\n */\nfunction isIslamicLeapYear(hYear) {\n return (14 + 11 * hYear) % 30 < 11;\n}\n/**\n * Checks if gregorian years is a leap year\n */\nfunction isGregorianLeapYear$1(gDate) {\n const year = gDate.getFullYear();\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n/**\n * Returns the start of Hijri Month.\n * `hMonth` is 0 for Muharram, 1 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\nfunction getIslamicMonthStart(hYear, hMonth) {\n return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0);\n}\n/**\n * Returns the start of Hijri year.\n * `year` is any Hijri year.\n */\nfunction getIslamicYearStart(year) {\n return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0);\n}\nfunction mod$1(a, b) {\n return a - b * Math.floor(a / b);\n}\n/**\n * The civil calendar is one type of Hijri calendars used in islamic countries.\n * Uses a fixed cycle of alternating 29- and 30-day months,\n * with a leap day added to the last month of 11 out of every 30 years.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n * All the calculations here are based on the equations from \"Calendrical Calculations\" By Edward M. Reingold, Nachum\n * Dershowitz.\n */\nconst GREGORIAN_EPOCH$1 = 1721425.5;\nconst ISLAMIC_EPOCH = 1948439.5;\nclass NgbCalendarIslamicCivil extends NgbCalendarHijri {\n /**\n * Returns the equivalent islamic(civil) date value for a give input Gregorian date.\n * `gDate` is a JS Date to be converted to Hijri.\n */\n fromGregorian(gDate) {\n const gYear = gDate.getFullYear(), gMonth = gDate.getMonth(), gDay = gDate.getDate();\n let julianDay = GREGORIAN_EPOCH$1 -\n 1 +\n 365 * (gYear - 1) +\n Math.floor((gYear - 1) / 4) +\n -Math.floor((gYear - 1) / 100) +\n Math.floor((gYear - 1) / 400) +\n Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear$1(gDate) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay) + 0.5;\n const days = julianDay - ISLAMIC_EPOCH;\n const hYear = Math.floor((30 * days + 10646) / 10631.0);\n let hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5);\n hMonth = Math.min(hMonth, 11);\n const hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n /**\n * Returns the equivalent JS date value for a give input islamic(civil) date.\n * `hDate` is an islamic(civil) date to be converted to Gregorian.\n */\n toGregorian(hDate) {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n const julianDay = hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1;\n const wjd = Math.floor(julianDay - 0.5) + 0.5, depoch = wjd - GREGORIAN_EPOCH$1, quadricent = Math.floor(depoch / 146097), dqc = mod$1(depoch, 146097), cent = Math.floor(dqc / 36524), dcent = mod$1(dqc, 36524), quad = Math.floor(dcent / 1461), dquad = mod$1(dcent, 1461), yindex = Math.floor(dquad / 365);\n let year = quadricent * 400 + cent * 100 + quad * 4 + yindex;\n if (!(cent === 4 || yindex === 4)) {\n year++;\n }\n const gYearStart = GREGORIAN_EPOCH$1 +\n 365 * (year - 1) +\n Math.floor((year - 1) / 4) -\n Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400);\n const yearday = wjd - gYearStart;\n const tjd = GREGORIAN_EPOCH$1 -\n 1 +\n 365 * (year - 1) +\n Math.floor((year - 1) / 4) -\n Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400) +\n Math.floor(739 / 12 + (isGregorianLeapYear$1(new Date(year, 3, 1)) ? -1 : -2) + 1);\n const leapadj = wjd < tjd ? 0 : isGregorianLeapYear$1(new Date(year, 3, 1)) ? 1 : 2;\n const month = Math.floor(((yearday + leapadj) * 12 + 373) / 367);\n const tjd2 = GREGORIAN_EPOCH$1 -\n 1 +\n 365 * (year - 1) +\n Math.floor((year - 1) / 4) -\n Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400) +\n Math.floor((367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear$1(new Date(year, month - 1, 1)) ? -1 : -2) + 1);\n const day = wjd - tjd2 + 1;\n return new Date(year, month - 1, day);\n }\n /**\n * Returns the number of days in a specific Hijri month.\n * `month` is 1 for Muharram, 2 for Safar, etc.\n * `year` is any Hijri year.\n */\n getDaysPerMonth(month, year) {\n year = year + Math.floor(month / 13);\n month = ((month - 1) % 12) + 1;\n let length = 29 + (month % 2);\n if (month === 12 && isIslamicLeapYear(year)) {\n length++;\n }\n return length;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarIslamicCivil, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarIslamicCivil }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarIslamicCivil, decorators: [{\n type: Injectable\n }] });\n\n/**\n * Umalqura calendar is one type of Hijri calendars used in islamic countries.\n * This Calendar is used by Saudi Arabia for administrative purpose.\n * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n */\nconst GREGORIAN_FIRST_DATE = new Date(1882, 10, 12);\nconst GREGORIAN_LAST_DATE = new Date(2174, 10, 25);\nconst HIJRI_BEGIN = 1300;\nconst HIJRI_END = 1600;\nconst ONE_DAY = 1000 * 60 * 60 * 24;\nconst MONTH_LENGTH = [\n // 1300-1304\n '101010101010',\n '110101010100',\n '111011001001',\n '011011010100',\n '011011101010',\n // 1305-1309\n '001101101100',\n '101010101101',\n '010101010101',\n '011010101001',\n '011110010010',\n // 1310-1314\n '101110101001',\n '010111010100',\n '101011011010',\n '010101011100',\n '110100101101',\n // 1315-1319\n '011010010101',\n '011101001010',\n '101101010100',\n '101101101010',\n '010110101101',\n // 1320-1324\n '010010101110',\n '101001001111',\n '010100010111',\n '011010001011',\n '011010100101',\n // 1325-1329\n '101011010101',\n '001011010110',\n '100101011011',\n '010010011101',\n '101001001101',\n // 1330-1334\n '110100100110',\n '110110010101',\n '010110101100',\n '100110110110',\n '001010111010',\n // 1335-1339\n '101001011011',\n '010100101011',\n '101010010101',\n '011011001010',\n '101011101001',\n // 1340-1344\n '001011110100',\n '100101110110',\n '001010110110',\n '100101010110',\n '101011001010',\n // 1345-1349\n '101110100100',\n '101111010010',\n '010111011001',\n '001011011100',\n '100101101101',\n // 1350-1354\n '010101001101',\n '101010100101',\n '101101010010',\n '101110100101',\n '010110110100',\n // 1355-1359\n '100110110110',\n '010101010111',\n '001010010111',\n '010101001011',\n '011010100011',\n // 1360-1364\n '011101010010',\n '101101100101',\n '010101101010',\n '101010101011',\n '010100101011',\n // 1365-1369\n '110010010101',\n '110101001010',\n '110110100101',\n '010111001010',\n '101011010110',\n // 1370-1374\n '100101010111',\n '010010101011',\n '100101001011',\n '101010100101',\n '101101010010',\n // 1375-1379\n '101101101010',\n '010101110101',\n '001001110110',\n '100010110111',\n '010001011011',\n // 1380-1384\n '010101010101',\n '010110101001',\n '010110110100',\n '100111011010',\n '010011011101',\n // 1385-1389\n '001001101110',\n '100100110110',\n '101010101010',\n '110101010100',\n '110110110010',\n // 1390-1394\n '010111010101',\n '001011011010',\n '100101011011',\n '010010101011',\n '101001010101',\n // 1395-1399\n '101101001001',\n '101101100100',\n '101101110001',\n '010110110100',\n '101010110101',\n // 1400-1404\n '101001010101',\n '110100100101',\n '111010010010',\n '111011001001',\n '011011010100',\n // 1405-1409\n '101011101001',\n '100101101011',\n '010010101011',\n '101010010011',\n '110101001001',\n // 1410-1414\n '110110100100',\n '110110110010',\n '101010111001',\n '010010111010',\n '101001011011',\n // 1415-1419\n '010100101011',\n '101010010101',\n '101100101010',\n '101101010101',\n '010101011100',\n // 1420-1424\n '010010111101',\n '001000111101',\n '100100011101',\n '101010010101',\n '101101001010',\n // 1425-1429\n '101101011010',\n '010101101101',\n '001010110110',\n '100100111011',\n '010010011011',\n // 1430-1434\n '011001010101',\n '011010101001',\n '011101010100',\n '101101101010',\n '010101101100',\n // 1435-1439\n '101010101101',\n '010101010101',\n '101100101001',\n '101110010010',\n '101110101001',\n // 1440-1444\n '010111010100',\n '101011011010',\n '010101011010',\n '101010101011',\n '010110010101',\n // 1445-1449\n '011101001001',\n '011101100100',\n '101110101010',\n '010110110101',\n '001010110110',\n // 1450-1454\n '101001010110',\n '111001001101',\n '101100100101',\n '101101010010',\n '101101101010',\n // 1455-1459\n '010110101101',\n '001010101110',\n '100100101111',\n '010010010111',\n '011001001011',\n // 1460-1464\n '011010100101',\n '011010101100',\n '101011010110',\n '010101011101',\n '010010011101',\n // 1465-1469\n '101001001101',\n '110100010110',\n '110110010101',\n '010110101010',\n '010110110101',\n // 1470-1474\n '001011011010',\n '100101011011',\n '010010101101',\n '010110010101',\n '011011001010',\n // 1475-1479\n '011011100100',\n '101011101010',\n '010011110101',\n '001010110110',\n '100101010110',\n // 1480-1484\n '101010101010',\n '101101010100',\n '101111010010',\n '010111011001',\n '001011101010',\n // 1485-1489\n '100101101101',\n '010010101101',\n '101010010101',\n '101101001010',\n '101110100101',\n // 1490-1494\n '010110110010',\n '100110110101',\n '010011010110',\n '101010010111',\n '010101000111',\n // 1495-1499\n '011010010011',\n '011101001001',\n '101101010101',\n '010101101010',\n '101001101011',\n // 1500-1504\n '010100101011',\n '101010001011',\n '110101000110',\n '110110100011',\n '010111001010',\n // 1505-1509\n '101011010110',\n '010011011011',\n '001001101011',\n '100101001011',\n '101010100101',\n // 1510-1514\n '101101010010',\n '101101101001',\n '010101110101',\n '000101110110',\n '100010110111',\n // 1515-1519\n '001001011011',\n '010100101011',\n '010101100101',\n '010110110100',\n '100111011010',\n // 1520-1524\n '010011101101',\n '000101101101',\n '100010110110',\n '101010100110',\n '110101010010',\n // 1525-1529\n '110110101001',\n '010111010100',\n '101011011010',\n '100101011011',\n '010010101011',\n // 1530-1534\n '011001010011',\n '011100101001',\n '011101100010',\n '101110101001',\n '010110110010',\n // 1535-1539\n '101010110101',\n '010101010101',\n '101100100101',\n '110110010010',\n '111011001001',\n // 1540-1544\n '011011010010',\n '101011101001',\n '010101101011',\n '010010101011',\n '101001010101',\n // 1545-1549\n '110100101001',\n '110101010100',\n '110110101010',\n '100110110101',\n '010010111010',\n // 1550-1554\n '101000111011',\n '010010011011',\n '101001001101',\n '101010101010',\n '101011010101',\n // 1555-1559\n '001011011010',\n '100101011101',\n '010001011110',\n '101000101110',\n '110010011010',\n // 1560-1564\n '110101010101',\n '011010110010',\n '011010111001',\n '010010111010',\n '101001011101',\n // 1565-1569\n '010100101101',\n '101010010101',\n '101101010010',\n '101110101000',\n '101110110100',\n // 1570-1574\n '010110111001',\n '001011011010',\n '100101011010',\n '101101001010',\n '110110100100',\n // 1575-1579\n '111011010001',\n '011011101000',\n '101101101010',\n '010101101101',\n '010100110101',\n // 1580-1584\n '011010010101',\n '110101001010',\n '110110101000',\n '110111010100',\n '011011011010',\n // 1585-1589\n '010101011011',\n '001010011101',\n '011000101011',\n '101100010101',\n '101101001010',\n // 1590-1594\n '101110010101',\n '010110101010',\n '101010101110',\n '100100101110',\n '110010001111',\n // 1595-1599\n '010100100111',\n '011010010101',\n '011010101010',\n '101011010110',\n '010101011101',\n // 1600\n '001010011101',\n];\nfunction getDaysDiff(date1, date2) {\n // Ignores the time part in date1 and date2:\n const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());\n const diff = Math.abs(time1 - time2);\n return Math.round(diff / ONE_DAY);\n}\nclass NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil {\n /**\n * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date.\n * `gdate` is s JS Date to be converted to Hijri.\n */\n fromGregorian(gDate) {\n let hDay = 1, hMonth = 0, hYear = 1300;\n let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE);\n if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) {\n let year = 1300;\n for (let i = 0; i < MONTH_LENGTH.length; i++, year++) {\n for (let j = 0; j < 12; j++) {\n let numOfDays = +MONTH_LENGTH[i][j] + 29;\n if (daysDiff <= numOfDays) {\n hDay = daysDiff + 1;\n if (hDay > numOfDays) {\n hDay = 1;\n j++;\n }\n if (j > 11) {\n j = 0;\n year++;\n }\n hMonth = j;\n hYear = year;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n daysDiff = daysDiff - numOfDays;\n }\n }\n return null;\n }\n else {\n return super.fromGregorian(gDate);\n }\n }\n /**\n * Converts the current Hijri date to Gregorian.\n */\n toGregorian(hDate) {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n let gDate = new Date(GREGORIAN_FIRST_DATE);\n let dayDiff = hDay - 1;\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n for (let y = 0; y < hYear - HIJRI_BEGIN; y++) {\n for (let m = 0; m < 12; m++) {\n dayDiff += +MONTH_LENGTH[y][m] + 29;\n }\n }\n for (let m = 0; m < hMonth; m++) {\n dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29;\n }\n gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff);\n }\n else {\n gDate = super.toGregorian(hDate);\n }\n return gDate;\n }\n /**\n * Returns the number of days in a specific Hijri hMonth.\n * `hMonth` is 1 for Muharram, 2 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\n getDaysPerMonth(hMonth, hYear) {\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n const pos = hYear - HIJRI_BEGIN;\n return +MONTH_LENGTH[pos][hMonth - 1] + 29;\n }\n return super.getDaysPerMonth(hMonth, hYear);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarIslamicUmalqura, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarIslamicUmalqura }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarIslamicUmalqura, decorators: [{\n type: Injectable\n }] });\n\n/**\n * Returns the equivalent JS date value for a give input Jalali date.\n * `jalaliDate` is an Jalali date to be converted to Gregorian.\n */\nfunction toGregorian$3(jalaliDate) {\n let jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day);\n let date = julianToGregorian$1(jdn);\n date.setHours(6, 30, 3, 200);\n return date;\n}\n/**\n * Returns the equivalent jalali date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to jalali.\n * utc to local\n */\nfunction fromGregorian$3(gdate) {\n let g2d = gregorianToJulian$1(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate());\n return julianToJalali(g2d);\n}\nfunction setJalaliYear(date, yearValue) {\n date.year = +yearValue;\n return date;\n}\nfunction setJalaliMonth(date, month) {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor((((month - 1) % 12) + 12) % 12) + 1;\n return date;\n}\nfunction setJalaliDay(date, day) {\n let mDays = getDaysPerMonth$1(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = setJalaliMonth(date, date.month - 1);\n mDays = getDaysPerMonth$1(date.month, date.year);\n day += mDays;\n }\n }\n else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = setJalaliMonth(date, date.month + 1);\n mDays = getDaysPerMonth$1(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n}\nfunction mod(a, b) {\n return a - b * Math.floor(a / b);\n}\nfunction div(a, b) {\n return Math.trunc(a / b);\n}\n/*\n This function determines if the Jalali (Persian) year is\n leap (366-day long) or is the common year (365 days), and\n finds the day in March (Gregorian calendar) of the first\n day of the Jalali year (jalaliYear).\n @param jalaliYear Jalali calendar year (-61 to 3177)\n @return\n leap: number of years since the last leap year (0 to 4)\n gYear: Gregorian year of the beginning of Jalali year\n march: the March day of Farvardin the 1st (1st day of jalaliYear)\n @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm\n @see: http://www.fourmilab.ch/documents/calendar/\n */\nfunction jalCal(jalaliYear) {\n // Jalali years starting the 33-year rule.\n let breaks = [\n -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178,\n ];\n const breaksLength = breaks.length;\n const gYear = jalaliYear + 621;\n let leapJ = -14;\n let jp = breaks[0];\n if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) {\n throw new Error('Invalid Jalali year ' + jalaliYear);\n }\n // Find the limiting years for the Jalali year jalaliYear.\n let jump;\n for (let i = 1; i < breaksLength; i += 1) {\n const jm = breaks[i];\n jump = jm - jp;\n if (jalaliYear < jm) {\n break;\n }\n leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4);\n jp = jm;\n }\n let n = jalaliYear - jp;\n // Find the number of leap years from AD 621 to the beginning\n // of the current Jalali year in the Persian calendar.\n leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4);\n if (mod(jump, 33) === 4 && jump - n === 4) {\n leapJ += 1;\n }\n // And the same in the Gregorian calendar (until the year gYear).\n const leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150;\n // Determine the Gregorian date of Farvardin the 1st.\n const march = 20 + leapJ - leapG;\n // Find how many years have passed since the last leap year.\n if (jump - n < 6) {\n n = n - jump + div(jump + 4, 33) * 33;\n }\n let leap = mod(mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n return { leap: leap, gy: gYear, march: march };\n}\n/*\n Calculates Gregorian and Julian calendar dates from the Julian Day number\n (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both\n calendars) to some millions years ahead of the present.\n @param jdn Julian Day number\n @return\n gYear: Calendar year (years BC numbered 0, -1, -2, ...)\n gMonth: Calendar month (1 to 12)\n gDay: Calendar day of the month M (1 to 28/29/30/31)\n */\nfunction julianToGregorian$1(julianDayNumber) {\n let j = 4 * julianDayNumber + 139361631;\n j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908;\n const i = div(mod(j, 1461), 4) * 5 + 308;\n const gDay = div(mod(i, 153), 5) + 1;\n const gMonth = mod(div(i, 153), 12) + 1;\n const gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6);\n return new Date(gYear, gMonth - 1, gDay);\n}\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jy Jalali year (1 to 3100)\n @param jm Jalali month (1 to 12)\n @param jd Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction gregorianToJulian$1(gy, gm, gd) {\n let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408;\n d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;\n return d;\n}\n/*\n Converts the Julian Day number to a date in the Jalali calendar.\n @param julianDayNumber Julian Day number\n @return\n jalaliYear: Jalali year (1 to 3100)\n jalaliMonth: Jalali month (1 to 12)\n jalaliDay: Jalali day (1 to 29/31)\n */\nfunction julianToJalali(julianDayNumber) {\n let gy = julianToGregorian$1(julianDayNumber).getFullYear(), // Calculate Gregorian year (gy).\n jalaliYear = gy - 621, r = jalCal(jalaliYear), gregorianDay = gregorianToJulian$1(gy, 3, r.march), jalaliDay, jalaliMonth, numberOfDays;\n // Find number of days that passed since 1 Farvardin.\n numberOfDays = julianDayNumber - gregorianDay;\n if (numberOfDays >= 0) {\n if (numberOfDays <= 185) {\n // The first 6 months.\n jalaliMonth = 1 + div(numberOfDays, 31);\n jalaliDay = mod(numberOfDays, 31) + 1;\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n }\n else {\n // The remaining months.\n numberOfDays -= 186;\n }\n }\n else {\n // Previous Jalali year.\n jalaliYear -= 1;\n numberOfDays += 179;\n if (r.leap === 1) {\n numberOfDays += 1;\n }\n }\n jalaliMonth = 7 + div(numberOfDays, 30);\n jalaliDay = mod(numberOfDays, 30) + 1;\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n}\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jYear Jalali year (1 to 3100)\n @param jMonth Jalali month (1 to 12)\n @param jDay Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction jalaliToJulian(jYear, jMonth, jDay) {\n let r = jalCal(jYear);\n return gregorianToJulian$1(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1;\n}\n/**\n * Returns the number of days in a specific jalali month.\n */\nfunction getDaysPerMonth$1(month, year) {\n if (month <= 6) {\n return 31;\n }\n if (month <= 11) {\n return 30;\n }\n if (jalCal(year).leap === 0) {\n return 30;\n }\n return 29;\n}\n\nclass NgbCalendarPersian extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n getMonths() {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n getWeeksPerMonth() {\n return 6;\n }\n getNext(date, period = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n switch (period) {\n case 'y':\n date = setJalaliYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setJalaliMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return setJalaliDay(date, date.day + number);\n default:\n return date;\n }\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n const day = toGregorian$3(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n const jsDate = toGregorian$3(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const startDate = toGregorian$3(new NgbDate(date.year, 1, 1));\n return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1;\n }\n getToday() {\n return fromGregorian$3(new Date());\n }\n isValid(date) {\n return (date != null &&\n isInteger(date.year) &&\n isInteger(date.month) &&\n isInteger(date.day) &&\n !isNaN(toGregorian$3(date).getTime()));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarPersian, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarPersian }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarPersian, decorators: [{\n type: Injectable\n }] });\n\nconst PARTS_PER_HOUR = 1080;\nconst PARTS_PER_DAY = 24 * PARTS_PER_HOUR;\nconst PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793;\nconst PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH;\nconst BAHARAD = 11 * PARTS_PER_HOUR + 204;\nconst HEBREW_DAY_ON_JAN_1_1970 = 2092591;\nconst GREGORIAN_EPOCH = 1721425.5;\nfunction isGregorianLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\nfunction numberOfFirstDayInYear(year) {\n let monthsBeforeYear = Math.floor((235 * year - 234) / 19);\n let fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD;\n let dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY);\n let timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY;\n let dayOfWeek = dayNumber % 7; // 0 == Monday\n if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) {\n dayNumber++;\n dayOfWeek = dayNumber % 7;\n }\n if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) {\n dayNumber += 2;\n }\n else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) {\n dayNumber++;\n }\n return dayNumber;\n}\nfunction getDaysInGregorianMonth(month, year) {\n let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (isGregorianLeapYear(year)) {\n days[1]++;\n }\n return days[month - 1];\n}\nfunction getHebrewMonths(year) {\n return isHebrewLeapYear(year) ? 13 : 12;\n}\n/**\n * Returns the number of days in a specific Hebrew year.\n * `year` is any Hebrew year.\n */\nfunction getDaysInHebrewYear(year) {\n return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n}\nfunction isHebrewLeapYear(year) {\n if (year != null) {\n let b = (year * 12 + 17) % 19;\n return b >= (b < 0 ? -7 : 12);\n }\n return false;\n}\n/**\n * Returns the number of days in a specific Hebrew month.\n * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months.\n * `year` is any Hebrew year.\n */\nfunction getDaysInHebrewMonth(month, year) {\n let yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n let yearType = (yearLength <= 380 ? yearLength : yearLength - 30) - 353;\n let leapYear = isHebrewLeapYear(year);\n let daysInMonth = leapYear\n ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29]\n : [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29];\n if (yearType > 0) {\n daysInMonth[2]++; // Kislev gets an extra day in normal or complete years.\n }\n if (yearType > 1) {\n daysInMonth[1]++; // Heshvan gets an extra day in complete years only.\n }\n return daysInMonth[month - 1];\n}\nfunction getDayNumberInHebrewYear(date) {\n let numberOfDay = 0;\n for (let i = 1; i < date.month; i++) {\n numberOfDay += getDaysInHebrewMonth(i, date.year);\n }\n return numberOfDay + date.day;\n}\nfunction setHebrewMonth(date, val) {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getHebrewMonths(date.year) - date.month) {\n val -= getHebrewMonths(date.year) - date.month + 1;\n date.year++;\n date.month = 1;\n }\n else {\n date.month += val;\n val = 0;\n }\n }\n else {\n if (val >= date.month) {\n date.year--;\n val -= date.month;\n date.month = getHebrewMonths(date.year);\n }\n else {\n date.month -= val;\n val = 0;\n }\n }\n }\n return date;\n}\nfunction setHebrewDay(date, val) {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) {\n val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1;\n date.year++;\n date.month = 1;\n date.day = 1;\n }\n else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) {\n val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1;\n date.month++;\n date.day = 1;\n }\n else {\n date.day += val;\n val = 0;\n }\n }\n else {\n if (val >= date.day) {\n val -= date.day;\n date.month--;\n if (date.month === 0) {\n date.year--;\n date.month = getHebrewMonths(date.year);\n }\n date.day = getDaysInHebrewMonth(date.month, date.year);\n }\n else {\n date.day -= val;\n val = 0;\n }\n }\n }\n return date;\n}\n/**\n * Returns the equivalent Hebrew date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to Hebrew date.\n */\nfunction fromGregorian$2(gdate) {\n const date = new Date(gdate);\n const gYear = date.getFullYear(), gMonth = date.getMonth(), gDay = date.getDate();\n let julianDay = GREGORIAN_EPOCH -\n 1 +\n 365 * (gYear - 1) +\n Math.floor((gYear - 1) / 4) -\n Math.floor((gYear - 1) / 100) +\n Math.floor((gYear - 1) / 400) +\n Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gYear) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay + 0.5);\n let daysSinceHebEpoch = julianDay - 347997;\n let monthsSinceHebEpoch = Math.floor((daysSinceHebEpoch * PARTS_PER_DAY) / PARTS_PER_MONTH);\n let hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1;\n let firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n let dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n while (dayOfYear < 1) {\n hYear--;\n firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n }\n let hMonth = 1;\n let hDay = dayOfYear;\n while (hDay > getDaysInHebrewMonth(hMonth, hYear)) {\n hDay -= getDaysInHebrewMonth(hMonth, hYear);\n hMonth++;\n }\n return new NgbDate(hYear, hMonth, hDay);\n}\n/**\n * Returns the equivalent JS date value for a given Hebrew date.\n * `hebrewDate` is an Hebrew date to be converted to Gregorian.\n */\nfunction toGregorian$2(hebrewDate) {\n const hYear = hebrewDate.year;\n const hMonth = hebrewDate.month;\n const hDay = hebrewDate.day;\n let days = numberOfFirstDayInYear(hYear);\n for (let i = 1; i < hMonth; i++) {\n days += getDaysInHebrewMonth(i, hYear);\n }\n days += hDay;\n let diffDays = days - HEBREW_DAY_ON_JAN_1_1970;\n let after = diffDays >= 0;\n if (!after) {\n diffDays = -diffDays;\n }\n let gYear = 1970;\n let gMonth = 1;\n let gDay = 1;\n while (diffDays > 0) {\n if (after) {\n if (diffDays >= (isGregorianLeapYear(gYear) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear) ? 366 : 365;\n gYear++;\n }\n else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n gMonth++;\n }\n else {\n gDay += diffDays;\n diffDays = 0;\n }\n }\n else {\n if (diffDays >= (isGregorianLeapYear(gYear - 1) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear - 1) ? 366 : 365;\n gYear--;\n }\n else {\n if (gMonth > 1) {\n gMonth--;\n }\n else {\n gMonth = 12;\n gYear--;\n }\n if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n }\n else {\n gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1;\n diffDays = 0;\n }\n }\n }\n }\n return new Date(gYear, gMonth - 1, gDay);\n}\nfunction hebrewNumerals(numerals) {\n if (!numerals) {\n return '';\n }\n const hArray0_9 = ['', '\\u05d0', '\\u05d1', '\\u05d2', '\\u05d3', '\\u05d4', '\\u05d5', '\\u05d6', '\\u05d7', '\\u05d8'];\n const hArray10_19 = [\n '\\u05d9',\n '\\u05d9\\u05d0',\n '\\u05d9\\u05d1',\n '\\u05d9\\u05d2',\n '\\u05d9\\u05d3',\n '\\u05d8\\u05d5',\n '\\u05d8\\u05d6',\n '\\u05d9\\u05d6',\n '\\u05d9\\u05d7',\n '\\u05d9\\u05d8',\n ];\n const hArray20_90 = ['', '', '\\u05db', '\\u05dc', '\\u05de', '\\u05e0', '\\u05e1', '\\u05e2', '\\u05e4', '\\u05e6'];\n const hArray100_900 = [\n '',\n '\\u05e7',\n '\\u05e8',\n '\\u05e9',\n '\\u05ea',\n '\\u05ea\\u05e7',\n '\\u05ea\\u05e8',\n '\\u05ea\\u05e9',\n '\\u05ea\\u05ea',\n '\\u05ea\\u05ea\\u05e7',\n ];\n const hArray1000_9000 = [\n '',\n '\\u05d0',\n '\\u05d1',\n '\\u05d1\\u05d0',\n '\\u05d1\\u05d1',\n '\\u05d4',\n '\\u05d4\\u05d0',\n '\\u05d4\\u05d1',\n '\\u05d4\\u05d1\\u05d0',\n '\\u05d4\\u05d1\\u05d1',\n ];\n const geresh = '\\u05f3', gershaim = '\\u05f4';\n let mem = 0;\n let result = [];\n let step = 0;\n while (numerals > 0) {\n let m = numerals % 10;\n if (step === 0) {\n mem = m;\n }\n else if (step === 1) {\n if (m !== 1) {\n result.unshift(hArray20_90[m], hArray0_9[mem]);\n }\n else {\n result.unshift(hArray10_19[mem]);\n }\n }\n else if (step === 2) {\n result.unshift(hArray100_900[m]);\n }\n else {\n if (m !== 5) {\n result.unshift(hArray1000_9000[m], geresh, ' ');\n }\n break;\n }\n numerals = Math.floor(numerals / 10);\n if (step === 0 && numerals === 0) {\n result.unshift(hArray0_9[m]);\n }\n step++;\n }\n result = result.join('').split('');\n if (result.length === 1) {\n result.push(geresh);\n }\n else if (result.length > 1) {\n result.splice(result.length - 1, 0, gershaim);\n }\n return result.join('');\n}\n\n/**\n * @since 3.2.0\n */\nclass NgbCalendarHebrew extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n getMonths(year) {\n if (year && isHebrewLeapYear(year)) {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];\n }\n else {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n }\n getWeeksPerMonth() {\n return 6;\n }\n isValid(date) {\n if (date != null) {\n let b = isNumber(date.year) && isNumber(date.month) && isNumber(date.day);\n b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12);\n b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year);\n return b && !isNaN(toGregorian$2(date).getTime());\n }\n return false;\n }\n getNext(date, period = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n switch (period) {\n case 'y':\n date.year += number;\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setHebrewMonth(date, number);\n date.day = 1;\n return date;\n case 'd':\n return setHebrewDay(date, number);\n default:\n return date;\n }\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n const day = toGregorian$2(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n getWeekNumber(week, firstDayOfWeek) {\n const date = week[week.length - 1];\n return Math.ceil(getDayNumberInHebrewYear(date) / 7);\n }\n getToday() {\n return fromGregorian$2(new Date());\n }\n /**\n * @since 3.4.0\n */\n toGregorian(date) {\n return fromJSDate(toGregorian$2(date));\n }\n /**\n * @since 3.4.0\n */\n fromGregorian(date) {\n return fromGregorian$2(toJSDate(date));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarHebrew, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarHebrew }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarHebrew, decorators: [{\n type: Injectable\n }] });\n\nconst WEEKDAYS$1 = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון'];\nconst MONTHS$1 = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\nconst MONTHS_LEAP = [\n 'תשרי',\n 'חשון',\n 'כסלו',\n 'טבת',\n 'שבט',\n 'אדר א׳',\n 'אדר ב׳',\n 'ניסן',\n 'אייר',\n 'סיון',\n 'תמוז',\n 'אב',\n 'אלול',\n];\n/**\n * @since 3.2.0\n */\nclass NgbDatepickerI18nHebrew extends NgbDatepickerI18n {\n getMonthShortName(month, year) {\n return this.getMonthFullName(month, year);\n }\n getMonthFullName(month, year) {\n return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] || '' : MONTHS$1[month - 1] || '';\n }\n getWeekdayLabel(weekday, width) {\n return WEEKDAYS$1[weekday - 1] || '';\n }\n getDayAriaLabel(date) {\n return `${hebrewNumerals(date.day)} ${this.getMonthFullName(date.month, date.year)} ${hebrewNumerals(date.year)}`;\n }\n getDayNumerals(date) {\n return hebrewNumerals(date.day);\n }\n getWeekNumerals(weekNumber) {\n return hebrewNumerals(weekNumber);\n }\n getYearNumerals(year) {\n return hebrewNumerals(year);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18nHebrew, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18nHebrew }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18nHebrew, decorators: [{\n type: Injectable\n }] });\n\n/**\n * Returns the equivalent JS date value for a give input Buddhist date.\n * `date` is an Buddhist date to be converted to Gregorian.\n */\nfunction toGregorian$1(date) {\n return new Date(date.year - 543, date.month - 1, date.day);\n}\n/**\n * Returns the equivalent Buddhist date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to Buddhist.\n * utc to local\n */\nfunction fromGregorian$1(gdate) {\n return new NgbDate(gdate.getFullYear() + 543, gdate.getMonth() + 1, gdate.getDate());\n}\n\n/**\n * @since 9.1.0\n */\nclass NgbCalendarBuddhist extends NgbCalendarGregorian {\n getToday() {\n return fromGregorian$1(new Date());\n }\n getNext(date, period = 'd', number = 1) {\n let jsDate = toGregorian$1(date);\n let checkMonth = true;\n let expectedMonth = jsDate.getMonth();\n switch (period) {\n case 'y':\n jsDate.setFullYear(jsDate.getFullYear() + number);\n break;\n case 'm':\n expectedMonth += number;\n jsDate.setMonth(expectedMonth);\n expectedMonth = expectedMonth % 12;\n if (expectedMonth < 0) {\n expectedMonth = expectedMonth + 12;\n }\n break;\n case 'd':\n jsDate.setDate(jsDate.getDate() + number);\n checkMonth = false;\n break;\n default:\n return date;\n }\n if (checkMonth && jsDate.getMonth() !== expectedMonth) {\n // this means the destination month has less days than the initial month\n // let's go back to the end of the previous month:\n jsDate.setDate(0);\n }\n return fromGregorian$1(jsDate);\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n let jsDate = toGregorian$1(date);\n let day = jsDate.getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n let date = week[thursdayIndex];\n const jsDate = toGregorian$1(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n jsDate.setMonth(0); // Compare with Jan 1\n jsDate.setDate(1);\n return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;\n }\n isValid(date) {\n if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {\n return false;\n }\n // year 0 doesn't exist in Gregorian calendar\n if (date.year === 0) {\n return false;\n }\n const jsDate = toGregorian$1(date);\n return (!isNaN(jsDate.getTime()) &&\n jsDate.getFullYear() === date.year - 543 &&\n jsDate.getMonth() + 1 === date.month &&\n jsDate.getDate() === date.day);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarBuddhist, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarBuddhist }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarBuddhist, decorators: [{\n type: Injectable\n }] });\n\nconst JD_EPOCH = 1724220.5;\nconst DAYSPERMONTH = [30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 5];\n/**\n * Determine whether this date is in a leap year.\n * * `year` is the year to examine\n * returns boolean - true if this is a leap year, false if not\n * */\nfunction isEthiopianLeapYear(year) {\n if (year != null) {\n return year % 4 == 3 || year % 4 == -1;\n }\n return false;\n}\n/**\n * Sets the Ethiopian year.\n * * `date` is Ethiopian date\n * * `yearValue` incremented year\n * returns NgbDate - ethiopian date\n * */\nfunction setEthiopianYear(date, yearValue) {\n date.year = +yearValue;\n return date;\n}\n/**\n * Sets the Ethiopian month.\n * * `date` is Ethiopian date\n * * `val` incremented month\n * returns NgbDate - Ethiopian date\n * */\nfunction setEthiopianMonth(date, val) {\n val = +val;\n date.year = date.year + Math.floor((val - 1) / 13);\n date.month = Math.floor((((val - 1) % 13) + 13) % 13) + 1;\n return date;\n}\n/**\n * Sets the Ethiopian day.\n * * `date` is Ethiopian date\n * * `day` incremented day\n * returns NgbDate - Ethiopian date\n * */\nfunction setEthiopianDay(date, day) {\n let mDays = getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = setEthiopianMonth(date, date.month - 1);\n mDays = getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n }\n else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = setEthiopianMonth(date, date.month + 1);\n mDays = getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n}\nfunction getDaysPerMonth(month, year) {\n let leapYear = isEthiopianLeapYear(year);\n return DAYSPERMONTH[month - 1] + (month === 13 && leapYear ? 1 : 0);\n}\nfunction toGregorian(ethiopianDate) {\n let jdn = ethiopianToJulian(ethiopianDate.year, ethiopianDate.month, ethiopianDate.day);\n let date = julianToGregorian(jdn);\n date.setHours(6, 30, 3, 200);\n return date;\n}\nfunction fromGregorian(gdate) {\n let g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate());\n return juilianToEthiopia(g2d);\n}\nfunction ethiopianToJulian(year, month, day) {\n if (year < 0) {\n year++;\n } // No year zero\n return day + (month - 1) * 30 + (year - 1) * 365 + Math.floor(year / 4) + JD_EPOCH - 1;\n}\nfunction juilianToEthiopia(jd) {\n let c = Math.floor(jd) + 0.5 - JD_EPOCH;\n let year = Math.floor((c - Math.floor((c + 366) / 1461)) / 365) + 1;\n if (year <= 0) {\n year--;\n } // No year zero\n c = Math.floor(jd) + 0.5 - ethiopianToJulian(year, 1, 1);\n let month = Math.floor(c / 30) + 1;\n let day = c - (month - 1) * 30 + 1;\n return new NgbDate(year, month, day);\n}\nfunction julianToGregorian(jd) {\n let z = Math.floor(jd + 0.5);\n let a = Math.floor((z - 1867216.25) / 36524.25);\n a = z + 1 + a - Math.floor(a / 4);\n let b = a + 1524;\n let c = Math.floor((b - 122.1) / 365.25);\n let d = Math.floor(365.25 * c);\n let e = Math.floor((b - d) / 30.6001);\n let day = b - d - Math.floor(e * 30.6001);\n let month = e - (e > 13.5 ? 13 : 1);\n let year = c - (month > 2.5 ? 4716 : 4715);\n if (year <= 0) {\n year--;\n } // No year zero\n return new Date(year, month, day);\n}\nfunction gregorianToJulian(year, month, day) {\n if (year < 0) {\n year++;\n } // No year zero\n // Jean Meeus algorithm, \"Astronomical Algorithms\", 1991\n if (month < 3) {\n month += 12;\n year--;\n }\n let a = Math.floor(year / 100);\n let b = 2 - a + Math.floor(a / 4);\n return Math.floor(365.25 * (year + 4716)) + Math.floor(30.6001 * (month + 1)) + day + b - 1524.5;\n}\n\n/**\n * @since 16.0.0\n */\nclass NgbCalendarEthiopian extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n getMonths(year) {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];\n }\n getNext(date, period = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n switch (period) {\n case 'y':\n date = setEthiopianYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setEthiopianMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return setEthiopianDay(date, date.day + number);\n default:\n return date;\n }\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n const dt = Math.floor(ethiopianToJulian(date.year, date.month, date.day) + 3) % 7;\n return dt === 0 ? 7 : dt;\n }\n getWeekNumber(week, firstDayOfWeek) {\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n const jsDate = toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const startDate = toGregorian(new NgbDate(date.year, 1, 1));\n return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1;\n }\n getWeeksPerMonth() {\n return 6;\n }\n getToday() {\n return fromGregorian(new Date());\n }\n isValid(date) {\n return (date &&\n isInteger(date.year) &&\n isInteger(date.month) &&\n isInteger(date.day) &&\n !isNaN(toGregorian(date).getTime()));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarEthiopian, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarEthiopian }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbCalendarEthiopian, decorators: [{\n type: Injectable\n }] });\n\nconst WEEKDAYS = ['እሑድ', 'ሰኞ', 'ማክሰኞ', 'ረቡዕ', 'ሓሙስ', 'ዓርብ', 'ቅዳሜ'];\nconst MONTHS = ['መስከረም', 'ጥቅምት', 'ኅዳር', 'ታህሣሥ', 'ጥር', 'የካቲት', 'መጋቢት', 'ሚያዝያ', 'ግንቦት', 'ሰኔ', 'ሐምሌ', 'ነሐሴ', 'ጳጉሜ'];\n/**\n * @since 16.0.0\n */\nclass NgbDatepickerI18nAmharic extends NgbDatepickerI18n {\n getMonthShortName(month, year) {\n return this.getMonthFullName(month, year);\n }\n getMonthFullName(month, year) {\n return MONTHS[month - 1];\n }\n getWeekdayLabel(weekday, width) {\n return WEEKDAYS[weekday - 1];\n }\n getDayAriaLabel(date) {\n return `${date.day} ${this.getMonthFullName(date.month, date.year)} ${date.year}`;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18nAmharic, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18nAmharic }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerI18nAmharic, decorators: [{\n type: Injectable\n }] });\n\n/**\n * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses\n * native javascript dates as a user date model.\n */\nclass NgbDateNativeAdapter extends NgbDateAdapter {\n /**\n * Converts a native `Date` to a `NgbDateStruct`.\n */\n fromModel(date) {\n return date instanceof Date && !isNaN(date.getTime()) ? this._fromNativeDate(date) : null;\n }\n /**\n * Converts a `NgbDateStruct` to a native `Date`.\n */\n toModel(date) {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)\n ? this._toNativeDate(date)\n : null;\n }\n _fromNativeDate(date) {\n return { year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate() };\n }\n _toNativeDate(date) {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // avoid 30 -> 1930 conversion\n jsDate.setFullYear(date.year);\n return jsDate;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateNativeAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateNativeAdapter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateNativeAdapter, decorators: [{\n type: Injectable\n }] });\n\n/**\n * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates.\n *\n * @since 3.2.0\n */\nclass NgbDateNativeUTCAdapter extends NgbDateNativeAdapter {\n _fromNativeDate(date) {\n return { year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate() };\n }\n _toNativeDate(date) {\n const jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day));\n // avoid 30 -> 1930 conversion\n jsDate.setUTCFullYear(date.year);\n return jsDate;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateNativeUTCAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateNativeUTCAdapter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDateNativeUTCAdapter, decorators: [{\n type: Injectable\n }] });\n\nconst NGB_DATEPICKER_DIRECTIVES = [NgbDatepicker, NgbDatepickerContent, NgbInputDatepicker, NgbDatepickerMonth];\nclass NgbDatepickerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerModule, imports: [NgbDatepicker, NgbDatepickerContent, NgbInputDatepicker, NgbDatepickerMonth], exports: [NgbDatepicker, NgbDatepickerContent, NgbInputDatepicker, NgbDatepickerMonth] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDatepickerModule, decorators: [{\n type: NgModule,\n args: [{\n exports: NGB_DATEPICKER_DIRECTIVES,\n imports: NGB_DATEPICKER_DIRECTIVES,\n }]\n }] });\n\n/**\n * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the dropdowns used in the application.\n */\nclass NgbDropdownConfig {\n constructor() {\n this.autoClose = true;\n this.placement = ['bottom-start', 'bottom-end', 'top-start', 'top-end'];\n this.popperOptions = (options) => options;\n this.container = null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * A directive you should put on a dropdown item to enable keyboard navigation.\n * Arrow keys will move focus between items marked with this directive.\n *\n * @since 4.1.0\n */\nclass NgbDropdownItem {\n constructor() {\n this._disabled = false;\n this.nativeElement = inject(ElementRef).nativeElement;\n this.tabindex = 0;\n }\n set disabled(value) {\n this._disabled = value === '' || value === true; // accept an empty attribute as true\n }\n get disabled() {\n return this._disabled;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbDropdownItem, isStandalone: true, selector: \"[ngbDropdownItem]\", inputs: { tabindex: \"tabindex\", disabled: \"disabled\" }, host: { properties: { \"class.disabled\": \"disabled\", \"tabIndex\": \"disabled ? -1 : tabindex\" }, classAttribute: \"dropdown-item\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownItem, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbDropdownItem]',\n standalone: true,\n host: {\n class: 'dropdown-item',\n '[class.disabled]': 'disabled',\n '[tabIndex]': 'disabled ? -1 : tabindex',\n },\n }]\n }], propDecorators: { tabindex: [{\n type: Input\n }], disabled: [{\n type: Input\n }] } });\n/**\n * A directive that will be applied if dropdown item is a button.\n * It will only set the disabled property.\n */\nclass NgbDropdownButtonItem {\n constructor() {\n this.item = inject(NgbDropdownItem);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownButtonItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbDropdownButtonItem, isStandalone: true, selector: \"button[ngbDropdownItem]\", host: { properties: { \"disabled\": \"item.disabled\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownButtonItem, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[ngbDropdownItem]',\n standalone: true,\n host: { '[disabled]': 'item.disabled' },\n }]\n }] });\n/**\n * A directive that wraps dropdown menu content and dropdown items.\n */\nclass NgbDropdownMenu {\n constructor() {\n this.dropdown = inject(NgbDropdown);\n this.nativeElement = inject(ElementRef).nativeElement;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbDropdownMenu, isStandalone: true, selector: \"[ngbDropdownMenu]\", host: { listeners: { \"keydown.ArrowUp\": \"dropdown.onKeyDown($event)\", \"keydown.ArrowDown\": \"dropdown.onKeyDown($event)\", \"keydown.Home\": \"dropdown.onKeyDown($event)\", \"keydown.End\": \"dropdown.onKeyDown($event)\", \"keydown.Enter\": \"dropdown.onKeyDown($event)\", \"keydown.Space\": \"dropdown.onKeyDown($event)\", \"keydown.Tab\": \"dropdown.onKeyDown($event)\", \"keydown.Shift.Tab\": \"dropdown.onKeyDown($event)\" }, properties: { \"class.dropdown-menu\": \"true\", \"class.show\": \"dropdown.isOpen()\" } }, queries: [{ propertyName: \"menuItems\", predicate: NgbDropdownItem }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownMenu, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbDropdownMenu]',\n standalone: true,\n host: {\n '[class.dropdown-menu]': 'true',\n '[class.show]': 'dropdown.isOpen()',\n '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',\n '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',\n '(keydown.Home)': 'dropdown.onKeyDown($event)',\n '(keydown.End)': 'dropdown.onKeyDown($event)',\n '(keydown.Enter)': 'dropdown.onKeyDown($event)',\n '(keydown.Space)': 'dropdown.onKeyDown($event)',\n '(keydown.Tab)': 'dropdown.onKeyDown($event)',\n '(keydown.Shift.Tab)': 'dropdown.onKeyDown($event)',\n },\n }]\n }], propDecorators: { menuItems: [{\n type: ContentChildren,\n args: [NgbDropdownItem]\n }] } });\n/**\n * A directive to mark an element to which dropdown menu will be anchored.\n *\n * This is a simple version of the `NgbDropdownToggle` directive.\n * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support\n * for events other than click.\n *\n * @since 1.1.0\n */\nclass NgbDropdownAnchor {\n constructor() {\n this.dropdown = inject(NgbDropdown);\n this.nativeElement = inject(ElementRef).nativeElement;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownAnchor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbDropdownAnchor, isStandalone: true, selector: \"[ngbDropdownAnchor]\", host: { properties: { \"class.show\": \"dropdown.isOpen()\", \"attr.aria-expanded\": \"dropdown.isOpen()\" }, classAttribute: \"dropdown-toggle\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownAnchor, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbDropdownAnchor]',\n standalone: true,\n host: {\n class: 'dropdown-toggle',\n '[class.show]': 'dropdown.isOpen()',\n '[attr.aria-expanded]': 'dropdown.isOpen()',\n },\n }]\n }] });\n/**\n * A directive to mark an element that will toggle dropdown via the `click` event.\n *\n * You can also use `NgbDropdownAnchor` as an alternative.\n */\nclass NgbDropdownToggle extends NgbDropdownAnchor {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownToggle, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbDropdownToggle, isStandalone: true, selector: \"[ngbDropdownToggle]\", host: { listeners: { \"click\": \"dropdown.toggle()\", \"keydown.ArrowUp\": \"dropdown.onKeyDown($event)\", \"keydown.ArrowDown\": \"dropdown.onKeyDown($event)\", \"keydown.Home\": \"dropdown.onKeyDown($event)\", \"keydown.End\": \"dropdown.onKeyDown($event)\", \"keydown.Tab\": \"dropdown.onKeyDown($event)\", \"keydown.Shift.Tab\": \"dropdown.onKeyDown($event)\" }, properties: { \"class.show\": \"dropdown.isOpen()\", \"attr.aria-expanded\": \"dropdown.isOpen()\" }, classAttribute: \"dropdown-toggle\" }, providers: [{ provide: NgbDropdownAnchor, useExisting: forwardRef(() => NgbDropdownToggle) }], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownToggle, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbDropdownToggle]',\n standalone: true,\n host: {\n class: 'dropdown-toggle',\n '[class.show]': 'dropdown.isOpen()',\n '[attr.aria-expanded]': 'dropdown.isOpen()',\n '(click)': 'dropdown.toggle()',\n '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',\n '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',\n '(keydown.Home)': 'dropdown.onKeyDown($event)',\n '(keydown.End)': 'dropdown.onKeyDown($event)',\n '(keydown.Tab)': 'dropdown.onKeyDown($event)',\n '(keydown.Shift.Tab)': 'dropdown.onKeyDown($event)',\n },\n providers: [{ provide: NgbDropdownAnchor, useExisting: forwardRef(() => NgbDropdownToggle) }],\n }]\n }] });\n/**\n * A directive that provides contextual overlays for displaying lists of links and more.\n */\nclass NgbDropdown {\n constructor() {\n this._changeDetector = inject(ChangeDetectorRef);\n this._config = inject(NgbDropdownConfig);\n this._document = inject(DOCUMENT);\n this._ngZone = inject(NgZone);\n this._nativeElement = inject(ElementRef).nativeElement;\n this._destroyCloseHandlers$ = new Subject();\n this._bodyContainer = null;\n this._positioning = ngbPositioning();\n /**\n * Indicates whether the dropdown should be closed when clicking one of dropdown items or pressing ESC.\n *\n * * `true` - the dropdown will close on both outside and inside (menu) clicks.\n * * `false` - the dropdown can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the dropdown will close on inside menu clicks, but not outside clicks.\n * * `\"outside\"` - the dropdown will close only on the outside clicks and not on menu clicks.\n */\n this.autoClose = this._config.autoClose;\n /**\n * Defines whether or not the dropdown menu is opened initially.\n */\n this._open = false;\n /**\n * The preferred placement of the dropdown, among the [possible values](#/guides/positioning#api).\n *\n * The default order of preference is `\"bottom-start bottom-end top-start top-end\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n this.placement = this._config.placement;\n /**\n * Allows to change default Popper options when positioning the dropdown.\n * Receives current popper options and returns modified ones.\n *\n * @since 13.1.0\n */\n this.popperOptions = this._config.popperOptions;\n /**\n * A selector specifying the element the dropdown should be appended to.\n * Currently only supports \"body\".\n *\n * @since 4.1.0\n */\n this.container = this._config.container;\n /**\n * An event fired when the dropdown is opened or closed.\n *\n * The event payload is a `boolean`:\n * * `true` - the dropdown was opened\n * * `false` - the dropdown was closed\n */\n this.openChange = new EventEmitter();\n }\n ngOnInit() {\n if (!this.display) {\n this.display = this._nativeElement.closest('.navbar') ? 'static' : 'dynamic';\n }\n }\n ngAfterContentInit() {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._applyPlacementClasses();\n if (this._open) {\n this._setCloseHandlers();\n }\n });\n }\n ngOnChanges(changes) {\n if (changes.container && this._open) {\n this._applyContainer(this.container);\n }\n if (changes.placement && !changes.placement.firstChange) {\n this._positioning.setOptions({\n hostElement: this._anchor.nativeElement,\n targetElement: this._bodyContainer || this._menu.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n });\n this._applyPlacementClasses();\n }\n if (changes.dropdownClass) {\n const { currentValue, previousValue } = changes.dropdownClass;\n this._applyCustomDropdownClass(currentValue, previousValue);\n }\n if (changes.autoClose && this._open) {\n this.autoClose = changes.autoClose.currentValue;\n this._setCloseHandlers();\n }\n }\n /**\n * Checks if the dropdown menu is open.\n */\n isOpen() {\n return this._open;\n }\n /**\n * Opens the dropdown menu.\n */\n open() {\n if (!this._open) {\n this._open = true;\n this._applyContainer(this.container);\n this.openChange.emit(true);\n this._setCloseHandlers();\n if (this._anchor) {\n this._anchor.nativeElement.focus();\n if (this.display === 'dynamic') {\n this._ngZone.runOutsideAngular(() => {\n this._positioning.createPopper({\n hostElement: this._anchor.nativeElement,\n targetElement: this._bodyContainer || this._menu.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n updatePopperOptions: (options) => this.popperOptions(addPopperOffset([0, 2])(options)),\n });\n this._applyPlacementClasses();\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positionMenu());\n });\n }\n }\n }\n }\n _setCloseHandlers() {\n this._destroyCloseHandlers$.next(); // destroy any existing close handlers\n ngbAutoClose(this._ngZone, this._document, this.autoClose, (source) => {\n this.close();\n if (source === 0 /* SOURCE.ESCAPE */) {\n this._anchor.nativeElement.focus();\n }\n }, this._destroyCloseHandlers$, this._menu ? [this._menu.nativeElement] : [], this._anchor ? [this._anchor.nativeElement] : [], '.dropdown-item,.dropdown-divider');\n }\n /**\n * Closes the dropdown menu.\n */\n close() {\n if (this._open) {\n this._open = false;\n this._resetContainer();\n this._positioning.destroy();\n this._zoneSubscription?.unsubscribe();\n this._destroyCloseHandlers$.next();\n this.openChange.emit(false);\n this._changeDetector.markForCheck();\n }\n }\n /**\n * Toggles the dropdown menu.\n */\n toggle() {\n if (this.isOpen()) {\n this.close();\n }\n else {\n this.open();\n }\n }\n ngOnDestroy() {\n this.close();\n }\n onKeyDown(event) {\n /* eslint-disable-next-line deprecation/deprecation */\n const key = event.which;\n const itemElements = this._getMenuElements();\n let position = -1;\n let itemElement = null;\n const isEventFromToggle = this._isEventFromToggle(event);\n if (!isEventFromToggle && itemElements.length) {\n itemElements.forEach((item, index) => {\n if (item.contains(event.target)) {\n itemElement = item;\n }\n if (item === getActiveElement(this._document)) {\n position = index;\n }\n });\n }\n // closing on Enter / Space\n if (key === Key.Space || key === Key.Enter) {\n if (itemElement && (this.autoClose === true || this.autoClose === 'inside')) {\n // Item is either a button or a link, so click will be triggered by the browser on Enter or Space.\n // So we have to register a one-time click handler that will fire after any user defined click handlers\n // to close the dropdown\n fromEvent(itemElement, 'click')\n .pipe(take(1))\n .subscribe(() => this.close());\n }\n return;\n }\n if (key === Key.Tab) {\n if (event.target && this.isOpen() && this.autoClose) {\n if (this._anchor.nativeElement === event.target) {\n if (this.container === 'body' && !event.shiftKey) {\n /* This case is special: user is using [Tab] from the anchor/toggle.\n User expects the next focusable element in the dropdown menu to get focus.\n But the menu is not a sibling to anchor/toggle, it is at the end of the body.\n Trick is to synchronously focus the menu element, and let the [keydown.Tab] go\n so that browser will focus the proper element (first one focusable in the menu) */\n this._menu.nativeElement.setAttribute('tabindex', '0');\n this._menu.nativeElement.focus();\n this._menu.nativeElement.removeAttribute('tabindex');\n }\n else if (event.shiftKey) {\n this.close();\n }\n return;\n }\n else if (this.container === 'body') {\n const focusableElements = this._menu.nativeElement.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR);\n if (event.shiftKey && event.target === focusableElements[0]) {\n this._anchor.nativeElement.focus();\n event.preventDefault();\n }\n else if (!event.shiftKey && event.target === focusableElements[focusableElements.length - 1]) {\n this._anchor.nativeElement.focus();\n this.close();\n }\n }\n else {\n fromEvent(event.target, 'focusout')\n .pipe(take(1))\n .subscribe(({ relatedTarget }) => {\n if (!this._nativeElement.contains(relatedTarget)) {\n this.close();\n }\n });\n }\n }\n return;\n }\n // opening / navigating\n if (isEventFromToggle || itemElement) {\n this.open();\n if (itemElements.length) {\n switch (key) {\n case Key.ArrowDown:\n position = Math.min(position + 1, itemElements.length - 1);\n break;\n case Key.ArrowUp:\n if (this._isDropup() && position === -1) {\n position = itemElements.length - 1;\n break;\n }\n position = Math.max(position - 1, 0);\n break;\n case Key.Home:\n position = 0;\n break;\n case Key.End:\n position = itemElements.length - 1;\n break;\n }\n itemElements[position].focus();\n }\n event.preventDefault();\n }\n }\n _isDropup() {\n return this._nativeElement.classList.contains('dropup');\n }\n _isEventFromToggle(event) {\n return this._anchor.nativeElement.contains(event.target);\n }\n _getMenuElements() {\n return this._menu\n ? this._menu.menuItems.filter(({ disabled }) => !disabled).map(({ nativeElement }) => nativeElement)\n : [];\n }\n _positionMenu() {\n const menu = this._menu;\n if (this.isOpen() && menu) {\n if (this.display === 'dynamic') {\n this._positioning.update();\n this._applyPlacementClasses();\n }\n else {\n this._applyPlacementClasses(this._getFirstPlacement(this.placement));\n }\n }\n }\n _getFirstPlacement(placement) {\n return Array.isArray(placement) ? placement[0] : placement.split(' ')[0];\n }\n _resetContainer() {\n if (this._menu) {\n this._nativeElement.appendChild(this._menu.nativeElement);\n }\n if (this._bodyContainer) {\n this._document.body.removeChild(this._bodyContainer);\n this._bodyContainer = null;\n }\n }\n _applyContainer(container = null) {\n this._resetContainer();\n if (container === 'body') {\n const dropdownMenuElement = this._menu.nativeElement;\n const bodyContainer = (this._bodyContainer = this._bodyContainer || this._document.createElement('div'));\n // Override some styles to have the positioning working\n bodyContainer.style.position = 'absolute';\n dropdownMenuElement.style.position = 'static';\n bodyContainer.style.zIndex = '1055';\n bodyContainer.appendChild(dropdownMenuElement);\n this._document.body.appendChild(bodyContainer);\n }\n this._applyCustomDropdownClass(this.dropdownClass);\n }\n _applyCustomDropdownClass(newClass, oldClass) {\n const targetElement = this.container === 'body' ? this._bodyContainer : this._nativeElement;\n if (targetElement) {\n if (oldClass) {\n targetElement.classList.remove(oldClass);\n }\n if (newClass) {\n targetElement.classList.add(newClass);\n }\n }\n }\n _applyPlacementClasses(placement) {\n if (this._menu) {\n if (!placement) {\n placement = this._getFirstPlacement(this.placement);\n }\n // remove the current placement classes\n this._nativeElement.classList.remove('dropup', 'dropdown');\n if (this.display === 'static') {\n this._menu.nativeElement.setAttribute('data-bs-popper', 'static');\n }\n else {\n this._menu.nativeElement.removeAttribute('data-bs-popper');\n }\n /*\n * apply the new placement\n * in case of top use up-arrow or down-arrow otherwise\n */\n const dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown';\n this._nativeElement.classList.add(dropdownClass);\n if (this._bodyContainer) {\n this._bodyContainer.classList.remove('dropup', 'dropdown');\n this._bodyContainer.classList.add(dropdownClass);\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdown, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbDropdown, isStandalone: true, selector: \"[ngbDropdown]\", inputs: { autoClose: \"autoClose\", dropdownClass: \"dropdownClass\", _open: [\"open\", \"_open\"], placement: \"placement\", popperOptions: \"popperOptions\", container: \"container\", display: \"display\" }, outputs: { openChange: \"openChange\" }, host: { properties: { \"class.show\": \"isOpen()\" } }, queries: [{ propertyName: \"_menu\", first: true, predicate: NgbDropdownMenu, descendants: true }, { propertyName: \"_anchor\", first: true, predicate: NgbDropdownAnchor, descendants: true }], exportAs: [\"ngbDropdown\"], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdown, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbDropdown]',\n exportAs: 'ngbDropdown',\n standalone: true,\n host: { '[class.show]': 'isOpen()' },\n }]\n }], propDecorators: { _menu: [{\n type: ContentChild,\n args: [NgbDropdownMenu, { static: false }]\n }], _anchor: [{\n type: ContentChild,\n args: [NgbDropdownAnchor, { static: false }]\n }], autoClose: [{\n type: Input\n }], dropdownClass: [{\n type: Input\n }], _open: [{\n type: Input,\n args: ['open']\n }], placement: [{\n type: Input\n }], popperOptions: [{\n type: Input\n }], container: [{\n type: Input\n }], display: [{\n type: Input\n }], openChange: [{\n type: Output\n }] } });\n\nconst NGB_DROPDOWN_DIRECTIVES = [\n NgbDropdown,\n NgbDropdownAnchor,\n NgbDropdownToggle,\n NgbDropdownMenu,\n NgbDropdownItem,\n NgbDropdownButtonItem,\n];\nclass NgbDropdownModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownModule, imports: [NgbDropdown,\n NgbDropdownAnchor,\n NgbDropdownToggle,\n NgbDropdownMenu,\n NgbDropdownItem,\n NgbDropdownButtonItem], exports: [NgbDropdown,\n NgbDropdownAnchor,\n NgbDropdownToggle,\n NgbDropdownMenu,\n NgbDropdownItem,\n NgbDropdownButtonItem] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbDropdownModule, decorators: [{\n type: NgModule,\n args: [{\n imports: NGB_DROPDOWN_DIRECTIVES,\n exports: NGB_DROPDOWN_DIRECTIVES,\n }]\n }] });\n\n/**\n * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all modals used in the application.\n *\n * @since 3.1.0\n */\nclass NgbModalConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.backdrop = true;\n this.fullscreen = false;\n this.keyboard = true;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nclass ContentRef {\n constructor(nodes, viewRef, componentRef) {\n this.nodes = nodes;\n this.viewRef = viewRef;\n this.componentRef = componentRef;\n }\n}\nclass PopupService {\n constructor(_componentType) {\n this._componentType = _componentType;\n this._windowRef = null;\n this._contentRef = null;\n this._document = inject(DOCUMENT);\n this._applicationRef = inject(ApplicationRef);\n this._injector = inject(Injector);\n this._viewContainerRef = inject(ViewContainerRef);\n this._ngZone = inject(NgZone);\n }\n open(content, templateContext, animation = false) {\n if (!this._windowRef) {\n this._contentRef = this._getContentRef(content, templateContext);\n this._windowRef = this._viewContainerRef.createComponent(this._componentType, {\n injector: this._injector,\n projectableNodes: this._contentRef.nodes,\n });\n }\n const { nativeElement } = this._windowRef.location;\n const transition$ = this._ngZone.onStable.pipe(take(1), mergeMap(() => ngbRunTransition(this._ngZone, nativeElement, ({ classList }) => classList.add('show'), {\n animation,\n runningTransition: 'continue',\n })));\n return { windowRef: this._windowRef, transition$ };\n }\n close(animation = false) {\n if (!this._windowRef) {\n return of(undefined);\n }\n return ngbRunTransition(this._ngZone, this._windowRef.location.nativeElement, ({ classList }) => classList.remove('show'), { animation, runningTransition: 'stop' }).pipe(tap(() => {\n if (this._windowRef) {\n // this is required because of the container='body' option\n this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView));\n this._windowRef = null;\n }\n if (this._contentRef?.viewRef) {\n this._applicationRef.detachView(this._contentRef.viewRef);\n this._contentRef.viewRef.destroy();\n this._contentRef = null;\n }\n }));\n }\n _getContentRef(content, templateContext) {\n if (!content) {\n return new ContentRef([]);\n }\n else if (content instanceof TemplateRef) {\n const viewRef = content.createEmbeddedView(templateContext);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n else {\n return new ContentRef([[this._document.createTextNode(`${content}`)]]);\n }\n }\n}\n\n/**\n * Utility to handle the scrollbar.\n *\n * It allows to hide the scrollbar and compensate the lack of a vertical scrollbar\n * by adding an equivalent padding on the right of the body, and to revert this change.\n */\nclass ScrollBar {\n constructor() {\n this._document = inject(DOCUMENT);\n }\n /**\n * To be called to hide a potential vertical scrollbar:\n * - if a scrollbar is there and has a width greater than 0, adds some compensation\n * padding to the body to keep the same layout as when the scrollbar is there\n * - adds overflow: hidden\n *\n * @return a callback used to revert the change\n */\n hide() {\n const scrollbarWidth = Math.abs(window.innerWidth - this._document.documentElement.clientWidth);\n const body = this._document.body;\n const bodyStyle = body.style;\n const { overflow, paddingRight } = bodyStyle;\n if (scrollbarWidth > 0) {\n const actualPadding = parseFloat(window.getComputedStyle(body).paddingRight);\n bodyStyle.paddingRight = `${actualPadding + scrollbarWidth}px`;\n }\n bodyStyle.overflow = 'hidden';\n return () => {\n if (scrollbarWidth > 0) {\n bodyStyle.paddingRight = paddingRight;\n }\n bodyStyle.overflow = overflow;\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: ScrollBar, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: ScrollBar, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: ScrollBar, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nclass NgbModalBackdrop {\n constructor() {\n this._nativeElement = inject(ElementRef).nativeElement;\n this._zone = inject(NgZone);\n }\n ngOnInit() {\n this._zone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n ngbRunTransition(this._zone, this._nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n element.classList.add('show');\n }, { animation: this.animation, runningTransition: 'continue' });\n });\n }\n hide() {\n return ngbRunTransition(this._zone, this._nativeElement, ({ classList }) => classList.remove('show'), {\n animation: this.animation,\n runningTransition: 'stop',\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalBackdrop, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbModalBackdrop, isStandalone: true, selector: \"ngb-modal-backdrop\", inputs: { animation: \"animation\", backdropClass: \"backdropClass\" }, host: { properties: { \"class\": \"\\\"modal-backdrop\\\" + (backdropClass ? \\\" \\\" + backdropClass : \\\"\\\")\", \"class.show\": \"!animation\", \"class.fade\": \"animation\" }, styleAttribute: \"z-index: 1055\" }, ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalBackdrop, decorators: [{\n type: Component,\n args: [{\n selector: 'ngb-modal-backdrop',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: '',\n host: {\n '[class]': '\"modal-backdrop\" + (backdropClass ? \" \" + backdropClass : \"\")',\n '[class.show]': '!animation',\n '[class.fade]': 'animation',\n style: 'z-index: 1055',\n },\n }]\n }], propDecorators: { animation: [{\n type: Input\n }], backdropClass: [{\n type: Input\n }] } });\n\n/**\n * A reference to the currently opened (active) modal.\n *\n * Instances of this class can be injected into your component passed as modal content.\n * So you can `.update()`, `.close()` or `.dismiss()` the modal window from your component.\n */\nclass NgbActiveModal {\n /**\n * Updates options of an opened modal.\n *\n * @since 14.2.0\n */\n update(options) { }\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbModalRef.result` promise will be resolved with the provided value.\n */\n close(result) { }\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason) { }\n}\nconst WINDOW_ATTRIBUTES = [\n 'animation',\n 'ariaLabelledBy',\n 'ariaDescribedBy',\n 'backdrop',\n 'centered',\n 'fullscreen',\n 'keyboard',\n 'scrollable',\n 'size',\n 'windowClass',\n 'modalDialogClass',\n];\nconst BACKDROP_ATTRIBUTES = ['animation', 'backdropClass'];\n/**\n * A reference to the newly opened modal returned by the `NgbModal.open()` method.\n */\nclass NgbModalRef {\n _applyWindowOptions(windowInstance, options) {\n WINDOW_ATTRIBUTES.forEach((optionName) => {\n if (isDefined(options[optionName])) {\n windowInstance[optionName] = options[optionName];\n }\n });\n }\n _applyBackdropOptions(backdropInstance, options) {\n BACKDROP_ATTRIBUTES.forEach((optionName) => {\n if (isDefined(options[optionName])) {\n backdropInstance[optionName] = options[optionName];\n }\n });\n }\n /**\n * Updates options of an opened modal.\n *\n * @since 14.2.0\n */\n update(options) {\n this._applyWindowOptions(this._windowCmptRef.instance, options);\n if (this._backdropCmptRef && this._backdropCmptRef.instance) {\n this._applyBackdropOptions(this._backdropCmptRef.instance, options);\n }\n }\n /**\n * The instance of a component used for the modal content.\n *\n * When a `TemplateRef` is used as the content or when the modal is closed, will return `undefined`.\n */\n get componentInstance() {\n if (this._contentRef && this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n /**\n * The observable that emits when the modal is closed via the `.close()` method.\n *\n * It will emit the result passed to the `.close()` method.\n *\n * @since 8.0.0\n */\n get closed() {\n return this._closed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when the modal is dismissed via the `.dismiss()` method.\n *\n * It will emit the reason passed to the `.dismissed()` method by the user, or one of the internal\n * reasons like backdrop click or ESC key press.\n *\n * @since 8.0.0\n */\n get dismissed() {\n return this._dismissed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when both modal window and backdrop are closed and animations were finished.\n * At this point modal and backdrop elements will be removed from the DOM tree.\n *\n * This observable will be completed after emitting.\n *\n * @since 8.0.0\n */\n get hidden() {\n return this._hidden.asObservable();\n }\n /**\n * The observable that emits when modal is fully visible and animation was finished.\n * Modal DOM element is always available synchronously after calling 'modal.open()' service.\n *\n * This observable will be completed after emitting.\n * It will not emit, if modal is closed before open animation is finished.\n *\n * @since 8.0.0\n */\n get shown() {\n return this._windowCmptRef.instance.shown.asObservable();\n }\n constructor(_windowCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) {\n this._windowCmptRef = _windowCmptRef;\n this._contentRef = _contentRef;\n this._backdropCmptRef = _backdropCmptRef;\n this._beforeDismiss = _beforeDismiss;\n this._closed = new Subject();\n this._dismissed = new Subject();\n this._hidden = new Subject();\n _windowCmptRef.instance.dismissEvent.subscribe((reason) => {\n this.dismiss(reason);\n });\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => { });\n }\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result) {\n if (this._windowCmptRef) {\n this._closed.next(result);\n this._resolve(result);\n this._removeModalElements();\n }\n }\n _dismiss(reason) {\n this._dismissed.next(reason);\n this._reject(reason);\n this._removeModalElements();\n }\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason) {\n if (this._windowCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n }\n else {\n const dismiss = this._beforeDismiss();\n if (isPromise(dismiss)) {\n dismiss.then((result) => {\n if (result !== false) {\n this._dismiss(reason);\n }\n }, () => { });\n }\n else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n _removeModalElements() {\n const windowTransition$ = this._windowCmptRef.instance.hide();\n const backdropTransition$ = this._backdropCmptRef ? this._backdropCmptRef.instance.hide() : of(undefined);\n // hiding window\n windowTransition$.subscribe(() => {\n const { nativeElement } = this._windowCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n this._windowCmptRef.destroy();\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n this._windowCmptRef = null;\n this._contentRef = null;\n });\n // hiding backdrop\n backdropTransition$.subscribe(() => {\n if (this._backdropCmptRef) {\n const { nativeElement } = this._backdropCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n this._backdropCmptRef.destroy();\n this._backdropCmptRef = null;\n }\n });\n // all done\n zip(windowTransition$, backdropTransition$).subscribe(() => {\n this._hidden.next();\n this._hidden.complete();\n });\n }\n}\n\nvar ModalDismissReasons;\n(function (ModalDismissReasons) {\n ModalDismissReasons[ModalDismissReasons[\"BACKDROP_CLICK\"] = 0] = \"BACKDROP_CLICK\";\n ModalDismissReasons[ModalDismissReasons[\"ESC\"] = 1] = \"ESC\";\n})(ModalDismissReasons || (ModalDismissReasons = {}));\n\nclass NgbModalWindow {\n constructor() {\n this._document = inject(DOCUMENT);\n this._elRef = inject((ElementRef));\n this._zone = inject(NgZone);\n this._closed$ = new Subject();\n this._elWithFocus = null; // element that is focused prior to modal opening\n this.backdrop = true;\n this.keyboard = true;\n this.dismissEvent = new EventEmitter();\n this.shown = new Subject();\n this.hidden = new Subject();\n }\n get fullscreenClass() {\n return this.fullscreen === true\n ? ' modal-fullscreen'\n : isString(this.fullscreen)\n ? ` modal-fullscreen-${this.fullscreen}-down`\n : '';\n }\n dismiss(reason) {\n this.dismissEvent.emit(reason);\n }\n ngOnInit() {\n this._elWithFocus = this._document.activeElement;\n this._zone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this._show();\n });\n }\n ngOnDestroy() {\n this._disableEventHandling();\n }\n hide() {\n const { nativeElement } = this._elRef;\n const context = { animation: this.animation, runningTransition: 'stop' };\n const windowTransition$ = ngbRunTransition(this._zone, nativeElement, () => nativeElement.classList.remove('show'), context);\n const dialogTransition$ = ngbRunTransition(this._zone, this._dialogEl.nativeElement, () => { }, context);\n const transitions$ = zip(windowTransition$, dialogTransition$);\n transitions$.subscribe(() => {\n this.hidden.next();\n this.hidden.complete();\n });\n this._disableEventHandling();\n this._restoreFocus();\n return transitions$;\n }\n _show() {\n const context = { animation: this.animation, runningTransition: 'continue' };\n const windowTransition$ = ngbRunTransition(this._zone, this._elRef.nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n element.classList.add('show');\n }, context);\n const dialogTransition$ = ngbRunTransition(this._zone, this._dialogEl.nativeElement, () => { }, context);\n zip(windowTransition$, dialogTransition$).subscribe(() => {\n this.shown.next();\n this.shown.complete();\n });\n this._enableEventHandling();\n this._setFocus();\n }\n _enableEventHandling() {\n const { nativeElement } = this._elRef;\n this._zone.runOutsideAngular(() => {\n fromEvent(nativeElement, 'keydown')\n .pipe(takeUntil(this._closed$), \n /* eslint-disable-next-line deprecation/deprecation */\n filter((e) => e.which === Key.Escape))\n .subscribe((event) => {\n if (this.keyboard) {\n requestAnimationFrame(() => {\n if (!event.defaultPrevented) {\n this._zone.run(() => this.dismiss(ModalDismissReasons.ESC));\n }\n });\n }\n else if (this.backdrop === 'static') {\n this._bumpBackdrop();\n }\n });\n // We're listening to 'mousedown' and 'mouseup' to prevent modal from closing when pressing the mouse\n // inside the modal dialog and releasing it outside\n let preventClose = false;\n fromEvent(this._dialogEl.nativeElement, 'mousedown')\n .pipe(takeUntil(this._closed$), tap(() => (preventClose = false)), switchMap(() => fromEvent(nativeElement, 'mouseup').pipe(takeUntil(this._closed$), take(1))), filter(({ target }) => nativeElement === target))\n .subscribe(() => {\n preventClose = true;\n });\n // We're listening to 'click' to dismiss modal on modal window click, except when:\n // 1. clicking on modal dialog itself\n // 2. closing was prevented by mousedown/up handlers\n // 3. clicking on scrollbar when the viewport is too small and modal doesn't fit (click is not triggered at all)\n fromEvent(nativeElement, 'click')\n .pipe(takeUntil(this._closed$))\n .subscribe(({ target }) => {\n if (nativeElement === target) {\n if (this.backdrop === 'static') {\n this._bumpBackdrop();\n }\n else if (this.backdrop === true && !preventClose) {\n this._zone.run(() => this.dismiss(ModalDismissReasons.BACKDROP_CLICK));\n }\n }\n preventClose = false;\n });\n });\n }\n _disableEventHandling() {\n this._closed$.next();\n }\n _setFocus() {\n const { nativeElement } = this._elRef;\n if (!nativeElement.contains(document.activeElement)) {\n const autoFocusable = nativeElement.querySelector(`[ngbAutofocus]`);\n const firstFocusable = getFocusableBoundaryElements(nativeElement)[0];\n const elementToFocus = autoFocusable || firstFocusable || nativeElement;\n elementToFocus.focus();\n }\n }\n _restoreFocus() {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n let elementToFocus;\n if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n }\n else {\n elementToFocus = body;\n }\n this._zone.runOutsideAngular(() => {\n setTimeout(() => elementToFocus.focus());\n this._elWithFocus = null;\n });\n }\n _bumpBackdrop() {\n if (this.backdrop === 'static') {\n ngbRunTransition(this._zone, this._elRef.nativeElement, ({ classList }) => {\n classList.add('modal-static');\n return () => classList.remove('modal-static');\n }, { animation: this.animation, runningTransition: 'continue' });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalWindow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbModalWindow, isStandalone: true, selector: \"ngb-modal-window\", inputs: { animation: \"animation\", ariaLabelledBy: \"ariaLabelledBy\", ariaDescribedBy: \"ariaDescribedBy\", backdrop: \"backdrop\", centered: \"centered\", fullscreen: \"fullscreen\", keyboard: \"keyboard\", scrollable: \"scrollable\", size: \"size\", windowClass: \"windowClass\", modalDialogClass: \"modalDialogClass\" }, outputs: { dismissEvent: \"dismiss\" }, host: { attributes: { \"role\": \"dialog\", \"tabindex\": \"-1\" }, properties: { \"class\": \"\\\"modal d-block\\\" + (windowClass ? \\\" \\\" + windowClass : \\\"\\\")\", \"class.fade\": \"animation\", \"attr.aria-modal\": \"true\", \"attr.aria-labelledby\": \"ariaLabelledBy\", \"attr.aria-describedby\": \"ariaDescribedBy\" } }, viewQueries: [{ propertyName: \"_dialogEl\", first: true, predicate: [\"dialog\"], descendants: true, static: true }], ngImport: i0, template: `\n\t\t\n\t\t\t
\n\t\t\n\t`, isInline: true, styles: [\"ngb-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}\\n\"], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalWindow, decorators: [{\n type: Component,\n args: [{ selector: 'ngb-modal-window', standalone: true, host: {\n '[class]': '\"modal d-block\" + (windowClass ? \" \" + windowClass : \"\")',\n '[class.fade]': 'animation',\n role: 'dialog',\n tabindex: '-1',\n '[attr.aria-modal]': 'true',\n '[attr.aria-labelledby]': 'ariaLabelledBy',\n '[attr.aria-describedby]': 'ariaDescribedBy',\n }, template: `\n\t\t\n\t\t\t
\n\t\t\n\t`, encapsulation: ViewEncapsulation.None, styles: [\"ngb-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}\\n\"] }]\n }], propDecorators: { _dialogEl: [{\n type: ViewChild,\n args: ['dialog', { static: true }]\n }], animation: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], ariaDescribedBy: [{\n type: Input\n }], backdrop: [{\n type: Input\n }], centered: [{\n type: Input\n }], fullscreen: [{\n type: Input\n }], keyboard: [{\n type: Input\n }], scrollable: [{\n type: Input\n }], size: [{\n type: Input\n }], windowClass: [{\n type: Input\n }], modalDialogClass: [{\n type: Input\n }], dismissEvent: [{\n type: Output,\n args: ['dismiss']\n }] } });\n\nclass NgbModalStack {\n constructor() {\n this._applicationRef = inject(ApplicationRef);\n this._injector = inject(Injector);\n this._environmentInjector = inject(EnvironmentInjector);\n this._document = inject(DOCUMENT);\n this._scrollBar = inject(ScrollBar);\n this._activeWindowCmptHasChanged = new Subject();\n this._ariaHiddenValues = new Map();\n this._scrollBarRestoreFn = null;\n this._modalRefs = [];\n this._windowCmpts = [];\n this._activeInstances = new EventEmitter();\n const ngZone = inject(NgZone);\n // Trap focus on active WindowCmpt\n this._activeWindowCmptHasChanged.subscribe(() => {\n if (this._windowCmpts.length) {\n const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];\n ngbFocusTrap(ngZone, activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);\n this._revertAriaHidden();\n this._setAriaHidden(activeWindowCmpt.location.nativeElement);\n }\n });\n }\n _restoreScrollBar() {\n const scrollBarRestoreFn = this._scrollBarRestoreFn;\n if (scrollBarRestoreFn) {\n this._scrollBarRestoreFn = null;\n scrollBarRestoreFn();\n }\n }\n _hideScrollBar() {\n if (!this._scrollBarRestoreFn) {\n this._scrollBarRestoreFn = this._scrollBar.hide();\n }\n }\n open(contentInjector, content, options) {\n const containerEl = options.container instanceof HTMLElement\n ? options.container\n : isDefined(options.container)\n ? this._document.querySelector(options.container)\n : this._document.body;\n if (!containerEl) {\n throw new Error(`The specified modal container \"${options.container || 'body'}\" was not found in the DOM.`);\n }\n this._hideScrollBar();\n const activeModal = new NgbActiveModal();\n contentInjector = options.injector || contentInjector;\n const environmentInjector = contentInjector.get(EnvironmentInjector, null) || this._environmentInjector;\n const contentRef = this._getContentRef(contentInjector, environmentInjector, content, activeModal, options);\n let backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(containerEl) : undefined;\n let windowCmptRef = this._attachWindowComponent(containerEl, contentRef.nodes);\n let ngbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n this._registerModalRef(ngbModalRef);\n this._registerWindowCmpt(windowCmptRef);\n // We have to cleanup DOM after the last modal when BOTH 'hidden' was emitted and 'result' promise was resolved:\n // - with animations OFF, 'hidden' emits synchronously, then 'result' is resolved asynchronously\n // - with animations ON, 'result' is resolved asynchronously, then 'hidden' emits asynchronously\n ngbModalRef.hidden.pipe(take(1)).subscribe(() => Promise.resolve(true).then(() => {\n if (!this._modalRefs.length) {\n this._document.body.classList.remove('modal-open');\n this._restoreScrollBar();\n this._revertAriaHidden();\n }\n }));\n activeModal.close = (result) => {\n ngbModalRef.close(result);\n };\n activeModal.dismiss = (reason) => {\n ngbModalRef.dismiss(reason);\n };\n activeModal.update = (options) => {\n ngbModalRef.update(options);\n };\n ngbModalRef.update(options);\n if (this._modalRefs.length === 1) {\n this._document.body.classList.add('modal-open');\n }\n if (backdropCmptRef && backdropCmptRef.instance) {\n backdropCmptRef.changeDetectorRef.detectChanges();\n }\n windowCmptRef.changeDetectorRef.detectChanges();\n return ngbModalRef;\n }\n get activeInstances() {\n return this._activeInstances;\n }\n dismissAll(reason) {\n this._modalRefs.forEach((ngbModalRef) => ngbModalRef.dismiss(reason));\n }\n hasOpenModals() {\n return this._modalRefs.length > 0;\n }\n _attachBackdrop(containerEl) {\n let backdropCmptRef = createComponent(NgbModalBackdrop, {\n environmentInjector: this._applicationRef.injector,\n elementInjector: this._injector,\n });\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n _attachWindowComponent(containerEl, projectableNodes) {\n let windowCmptRef = createComponent(NgbModalWindow, {\n environmentInjector: this._applicationRef.injector,\n elementInjector: this._injector,\n projectableNodes,\n });\n this._applicationRef.attachView(windowCmptRef.hostView);\n containerEl.appendChild(windowCmptRef.location.nativeElement);\n return windowCmptRef;\n }\n _getContentRef(contentInjector, environmentInjector, content, activeModal, options) {\n if (!content) {\n return new ContentRef([]);\n }\n else if (content instanceof TemplateRef) {\n return this._createFromTemplateRef(content, activeModal);\n }\n else if (isString(content)) {\n return this._createFromString(content);\n }\n else {\n return this._createFromComponent(contentInjector, environmentInjector, content, activeModal, options);\n }\n }\n _createFromTemplateRef(templateRef, activeModal) {\n const context = {\n $implicit: activeModal,\n close(result) {\n activeModal.close(result);\n },\n dismiss(reason) {\n activeModal.dismiss(reason);\n },\n };\n const viewRef = templateRef.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n _createFromString(content) {\n const component = this._document.createTextNode(`${content}`);\n return new ContentRef([[component]]);\n }\n _createFromComponent(contentInjector, environmentInjector, componentType, context, options) {\n const elementInjector = Injector.create({\n providers: [{ provide: NgbActiveModal, useValue: context }],\n parent: contentInjector,\n });\n const componentRef = createComponent(componentType, {\n environmentInjector,\n elementInjector,\n });\n const componentNativeEl = componentRef.location.nativeElement;\n if (options.scrollable) {\n componentNativeEl.classList.add('component-host-scrollable');\n }\n this._applicationRef.attachView(componentRef.hostView);\n // FIXME: we should here get rid of the component nativeElement\n // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class.\n return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);\n }\n _setAriaHidden(element) {\n const parent = element.parentElement;\n if (parent && element !== this._document.body) {\n Array.from(parent.children).forEach((sibling) => {\n if (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n });\n this._setAriaHidden(parent);\n }\n }\n _revertAriaHidden() {\n this._ariaHiddenValues.forEach((value, element) => {\n if (value) {\n element.setAttribute('aria-hidden', value);\n }\n else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenValues.clear();\n }\n _registerModalRef(ngbModalRef) {\n const unregisterModalRef = () => {\n const index = this._modalRefs.indexOf(ngbModalRef);\n if (index > -1) {\n this._modalRefs.splice(index, 1);\n this._activeInstances.emit(this._modalRefs);\n }\n };\n this._modalRefs.push(ngbModalRef);\n this._activeInstances.emit(this._modalRefs);\n ngbModalRef.result.then(unregisterModalRef, unregisterModalRef);\n }\n _registerWindowCmpt(ngbWindowCmpt) {\n this._windowCmpts.push(ngbWindowCmpt);\n this._activeWindowCmptHasChanged.next();\n ngbWindowCmpt.onDestroy(() => {\n const index = this._windowCmpts.indexOf(ngbWindowCmpt);\n if (index > -1) {\n this._windowCmpts.splice(index, 1);\n this._activeWindowCmptHasChanged.next();\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalStack, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalStack, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalStack, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n\n/**\n * A service for opening modal windows.\n *\n * Creating a modal is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n */\nclass NgbModal {\n constructor() {\n this._injector = inject(Injector);\n this._modalStack = inject(NgbModalStack);\n this._config = inject(NgbModalConfig);\n }\n /**\n * Opens a new modal window with the specified content and supplied options.\n *\n * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then\n * use `NgbActiveModal` methods to close / dismiss modals from \"inside\" of your component.\n *\n * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options.\n */\n open(content, options = {}) {\n const combinedOptions = { ...this._config, animation: this._config.animation, ...options };\n return this._modalStack.open(this._injector, content, combinedOptions);\n }\n /**\n * Returns an observable that holds the active modal instances.\n */\n get activeInstances() {\n return this._modalStack.activeInstances;\n }\n /**\n * Dismisses all currently displayed modal windows with the supplied reason.\n *\n * @since 3.1.0\n */\n dismissAll(reason) {\n this._modalStack.dismissAll(reason);\n }\n /**\n * Indicates if there are currently any open modal windows in the application.\n *\n * @since 3.3.0\n */\n hasOpenModals() {\n return this._modalStack.hasOpenModals();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModal, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModal, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModal, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nclass NgbModalModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalModule, providers: [NgbModal] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModalModule, decorators: [{\n type: NgModule,\n args: [{ providers: [NgbModal] }]\n }] });\n\n/**\n * A configuration service for the [`NgbNav`](#/components/nav/api#NgbNav) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the navs used in the application.\n *\n * @since 5.2.0\n */\nclass NgbNavConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.destroyOnHide = true;\n this.orientation = 'horizontal';\n this.roles = 'tablist';\n this.keyboard = true;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nconst isValidNavId = (id) => isDefined(id) && id !== '';\nlet navCounter = 0;\n/**\n * This directive must be used to wrap content to be displayed in the nav.\n *\n * @since 5.2.0\n */\nclass NgbNavContent {\n constructor() {\n this.templateRef = inject(TemplateRef);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbNavContent, isStandalone: true, selector: \"ng-template[ngbNavContent]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavContent, decorators: [{\n type: Directive,\n args: [{ selector: 'ng-template[ngbNavContent]', standalone: true }]\n }] });\n/**\n * This directive applies a specific role on a non-container based ngbNavItem.\n *\n * @since 14.1.0\n */\nclass NgbNavItemRole {\n constructor(role) {\n this.role = role;\n this.nav = inject(NgbNav);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavItemRole, deps: [{ token: 'role', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbNavItemRole, isStandalone: true, selector: \"[ngbNavItem]:not(ng-container)\", host: { properties: { \"attr.role\": \"role ? role : nav.roles ? 'presentation' : undefined\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavItemRole, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbNavItem]:not(ng-container)',\n standalone: true,\n host: {\n '[attr.role]': `role ? role : nav.roles ? 'presentation' : undefined`,\n },\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Attribute,\n args: ['role']\n }] }] });\n/**\n * The directive used to group nav link and related nav content. As well as set nav identifier and some options.\n *\n * @since 5.2.0\n */\nclass NgbNavItem {\n constructor() {\n this._nav = inject(NgbNav);\n this._nativeElement = inject(ElementRef).nativeElement;\n /**\n * If `true`, the current nav item is disabled and can't be toggled by user.\n *\n * Nevertheless disabled nav can be selected programmatically via the `.select()` method and the `[activeId]` binding.\n */\n this.disabled = false;\n /**\n * An event emitted when the fade in transition is finished on the related nav content\n *\n * @since 8.0.0\n */\n this.shown = new EventEmitter();\n /**\n * An event emitted when the fade out transition is finished on the related nav content\n *\n * @since 8.0.0\n */\n this.hidden = new EventEmitter();\n }\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.contentTpl = this.contentTpls.first;\n }\n ngOnInit() {\n if (!isDefined(this.domId)) {\n this.domId = `ngb-nav-${navCounter++}`;\n }\n }\n get active() {\n return this._nav.activeId === this.id;\n }\n get id() {\n return isValidNavId(this._id) ? this._id : this.domId;\n }\n get panelDomId() {\n return `${this.domId}-panel`;\n }\n isPanelInDom() {\n return (isDefined(this.destroyOnHide) ? !this.destroyOnHide : !this._nav.destroyOnHide) || this.active;\n }\n /**\n * @internal\n */\n isNgContainer() {\n return this._nativeElement.nodeType === Node.COMMENT_NODE;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbNavItem, isStandalone: true, selector: \"[ngbNavItem]\", inputs: { destroyOnHide: \"destroyOnHide\", disabled: \"disabled\", domId: \"domId\", _id: [\"ngbNavItem\", \"_id\"] }, outputs: { shown: \"shown\", hidden: \"hidden\" }, host: { properties: { \"class.nav-item\": \"true\" } }, queries: [{ propertyName: \"contentTpls\", predicate: NgbNavContent }], exportAs: [\"ngbNavItem\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavItem, decorators: [{\n type: Directive,\n args: [{ selector: '[ngbNavItem]', exportAs: 'ngbNavItem', standalone: true, host: { '[class.nav-item]': 'true' } }]\n }], propDecorators: { destroyOnHide: [{\n type: Input\n }], disabled: [{\n type: Input\n }], domId: [{\n type: Input\n }], _id: [{\n type: Input,\n args: ['ngbNavItem']\n }], shown: [{\n type: Output\n }], hidden: [{\n type: Output\n }], contentTpls: [{\n type: ContentChildren,\n args: [NgbNavContent, { descendants: false }]\n }] } });\n/**\n * A nav directive that helps with implementing tabbed navigation components.\n *\n * @since 5.2.0\n */\nclass NgbNav {\n constructor(role) {\n this.role = role;\n this._config = inject(NgbNavConfig);\n this._cd = inject(ChangeDetectorRef);\n this._document = inject(DOCUMENT);\n this._nativeElement = inject(ElementRef).nativeElement;\n this.destroyRef = inject(DestroyRef);\n this._navigatingWithKeyboard = false;\n /**\n * The event emitted after the active nav changes\n * The payload of the event is the newly active nav id\n *\n * If you want to prevent nav change, you should use `(navChange)` event\n */\n this.activeIdChange = new EventEmitter();\n /**\n * If `true`, nav change will be animated.\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * If `true`, non-active nav content will be removed from DOM\n * Otherwise it will just be hidden\n */\n this.destroyOnHide = this._config.destroyOnHide;\n /**\n * The orientation of navs.\n *\n * Using `vertical` will also add the `aria-orientation` attribute\n */\n this.orientation = this._config.orientation;\n /**\n * Role attribute generating strategy:\n * - `false` - no role attributes will be generated\n * - `'tablist'` - 'tablist', 'tab' and 'tabpanel' will be generated (default)\n */\n this.roles = this._config.roles;\n /**\n * Keyboard support for nav focus/selection using arrow keys.\n *\n * * `true` - navs will be focused using keyboard arrow keys\n * * `false` - no keyboard support\n * * `'changeWithArrows'` - nav will be selected using keyboard arrow keys\n *\n * See the [list of available keyboard shortcuts](#/components/nav/overview#keyboard-shortcuts).\n *\n * @since 6.1.0\n */\n this.keyboard = this._config.keyboard;\n /**\n * An event emitted when the fade in transition is finished for one of the items.\n *\n * Payload of the event is the nav id that was just shown.\n *\n * @since 8.0.0\n */\n this.shown = new EventEmitter();\n /**\n * An event emitted when the fade out transition is finished for one of the items.\n *\n * Payload of the event is the nav id that was just hidden.\n *\n * @since 8.0.0\n */\n this.hidden = new EventEmitter();\n this.navItemChange$ = new Subject();\n /**\n * The nav change event emitted right before the nav change happens on user click.\n *\n * This event won't be emitted if nav is changed programmatically via `[activeId]` or `.select()`.\n *\n * See [`NgbNavChangeEvent`](#/components/nav/api#NgbNavChangeEvent) for payload details.\n */\n this.navChange = new EventEmitter();\n }\n click(item) {\n if (!item.disabled) {\n this._updateActiveId(item.id);\n }\n }\n onFocusout({ relatedTarget }) {\n if (!this._nativeElement.contains(relatedTarget)) {\n this._navigatingWithKeyboard = false;\n }\n }\n onKeyDown(event) {\n if (this.roles !== 'tablist' || !this.keyboard) {\n return;\n }\n /* eslint-disable-next-line deprecation/deprecation */\n const key = event.which;\n const enabledLinks = this.links.filter((link) => !link.navItem.disabled);\n const { length } = enabledLinks;\n let position = -1;\n enabledLinks.forEach((link, index) => {\n if (link.nativeElement === this._document.activeElement) {\n position = index;\n }\n });\n if (length) {\n switch (key) {\n case Key.ArrowUp:\n case Key.ArrowLeft:\n position = (position - 1 + length) % length;\n break;\n case Key.ArrowRight:\n case Key.ArrowDown:\n position = (position + 1) % length;\n break;\n case Key.Home:\n position = 0;\n break;\n case Key.End:\n position = length - 1;\n break;\n }\n if (this.keyboard === 'changeWithArrows') {\n this.select(enabledLinks[position].navItem.id);\n }\n enabledLinks[position].nativeElement.focus();\n this._navigatingWithKeyboard = true;\n event.preventDefault();\n }\n }\n /**\n * Selects the nav with the given id and shows its associated pane.\n * Any other nav that was previously selected becomes unselected and its associated pane is hidden.\n */\n select(id) {\n this._updateActiveId(id, false);\n }\n ngAfterContentInit() {\n if (!isDefined(this.activeId)) {\n const nextId = this.items.first ? this.items.first.id : null;\n if (isValidNavId(nextId)) {\n this._updateActiveId(nextId, false);\n this._cd.detectChanges();\n }\n }\n this.items.changes\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this._notifyItemChanged(this.activeId));\n }\n ngOnChanges({ activeId }) {\n if (activeId && !activeId.firstChange) {\n this._notifyItemChanged(activeId.currentValue);\n }\n }\n _updateActiveId(nextId, emitNavChange = true) {\n if (this.activeId !== nextId) {\n let defaultPrevented = false;\n if (emitNavChange) {\n this.navChange.emit({\n activeId: this.activeId,\n nextId,\n preventDefault: () => {\n defaultPrevented = true;\n },\n });\n }\n if (!defaultPrevented) {\n this.activeId = nextId;\n this.activeIdChange.emit(nextId);\n this._notifyItemChanged(nextId);\n }\n }\n }\n _notifyItemChanged(nextItemId) {\n this.navItemChange$.next(this._getItemById(nextItemId));\n }\n _getItemById(itemId) {\n return (this.items && this.items.find((item) => item.id === itemId)) || null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNav, deps: [{ token: 'role', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbNav, isStandalone: true, selector: \"[ngbNav]\", inputs: { activeId: \"activeId\", animation: \"animation\", destroyOnHide: \"destroyOnHide\", orientation: \"orientation\", roles: \"roles\", keyboard: \"keyboard\" }, outputs: { activeIdChange: \"activeIdChange\", shown: \"shown\", hidden: \"hidden\", navChange: \"navChange\" }, host: { listeners: { \"keydown.arrowLeft\": \"onKeyDown($event)\", \"keydown.arrowRight\": \"onKeyDown($event)\", \"keydown.arrowDown\": \"onKeyDown($event)\", \"keydown.arrowUp\": \"onKeyDown($event)\", \"keydown.Home\": \"onKeyDown($event)\", \"keydown.End\": \"onKeyDown($event)\", \"focusout\": \"onFocusout($event)\" }, properties: { \"class.nav\": \"true\", \"class.flex-column\": \"orientation === 'vertical'\", \"attr.aria-orientation\": \"orientation === 'vertical' && roles === 'tablist' ? 'vertical' : undefined\", \"attr.role\": \"role ? role : roles ? 'tablist' : undefined\" } }, queries: [{ propertyName: \"items\", predicate: NgbNavItem }, { propertyName: \"links\", predicate: i0.forwardRef(() => NgbNavLinkBase), descendants: true }], exportAs: [\"ngbNav\"], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNav, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbNav]',\n exportAs: 'ngbNav',\n standalone: true,\n host: {\n '[class.nav]': 'true',\n '[class.flex-column]': `orientation === 'vertical'`,\n '[attr.aria-orientation]': `orientation === 'vertical' && roles === 'tablist' ? 'vertical' : undefined`,\n '[attr.role]': `role ? role : roles ? 'tablist' : undefined`,\n '(keydown.arrowLeft)': 'onKeyDown($event)',\n '(keydown.arrowRight)': 'onKeyDown($event)',\n '(keydown.arrowDown)': 'onKeyDown($event)',\n '(keydown.arrowUp)': 'onKeyDown($event)',\n '(keydown.Home)': 'onKeyDown($event)',\n '(keydown.End)': 'onKeyDown($event)',\n '(focusout)': 'onFocusout($event)',\n },\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Attribute,\n args: ['role']\n }] }], propDecorators: { activeId: [{\n type: Input\n }], activeIdChange: [{\n type: Output\n }], animation: [{\n type: Input\n }], destroyOnHide: [{\n type: Input\n }], orientation: [{\n type: Input\n }], roles: [{\n type: Input\n }], keyboard: [{\n type: Input\n }], shown: [{\n type: Output\n }], hidden: [{\n type: Output\n }], items: [{\n type: ContentChildren,\n args: [NgbNavItem]\n }], links: [{\n type: ContentChildren,\n args: [forwardRef(() => NgbNavLinkBase), { descendants: true }]\n }], navChange: [{\n type: Output\n }] } });\nclass NgbNavLinkBase {\n constructor(role) {\n this.role = role;\n this.navItem = inject(NgbNavItem);\n this.nav = inject(NgbNav);\n this.nativeElement = inject(ElementRef).nativeElement;\n }\n get tabindex() {\n if (this.nav.keyboard === false) {\n return this.navItem.disabled ? -1 : undefined;\n }\n if (this.nav._navigatingWithKeyboard) {\n return -1;\n }\n return this.navItem.disabled || !this.navItem.active ? -1 : undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavLinkBase, deps: [{ token: 'role', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbNavLinkBase, isStandalone: true, selector: \"[ngbNavLink]\", host: { properties: { \"id\": \"navItem.domId\", \"class.nav-link\": \"true\", \"class.nav-item\": \"navItem.isNgContainer()\", \"attr.role\": \"role ? role : nav.roles ? 'tab' : undefined\", \"class.active\": \"navItem.active\", \"class.disabled\": \"navItem.disabled\", \"attr.tabindex\": \"tabindex\", \"attr.aria-controls\": \"navItem.isPanelInDom() ? navItem.panelDomId : null\", \"attr.aria-selected\": \"navItem.active\", \"attr.aria-disabled\": \"navItem.disabled\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavLinkBase, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbNavLink]',\n standalone: true,\n host: {\n '[id]': 'navItem.domId',\n '[class.nav-link]': 'true',\n '[class.nav-item]': 'navItem.isNgContainer()',\n '[attr.role]': `role ? role : nav.roles ? 'tab' : undefined`,\n '[class.active]': 'navItem.active',\n '[class.disabled]': 'navItem.disabled',\n '[attr.tabindex]': 'tabindex',\n '[attr.aria-controls]': 'navItem.isPanelInDom() ? navItem.panelDomId : null',\n '[attr.aria-selected]': 'navItem.active',\n '[attr.aria-disabled]': 'navItem.disabled',\n },\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Attribute,\n args: ['role']\n }] }] });\n/**\n * A directive to mark the nav link when used on a button element.\n */\nclass NgbNavLinkButton extends NgbNavLinkBase {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavLinkButton, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbNavLinkButton, isStandalone: true, selector: \"button[ngbNavLink]\", host: { attributes: { \"type\": \"button\" }, listeners: { \"click\": \"nav.click(navItem)\" }, properties: { \"disabled\": \"navItem.disabled\" } }, usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavLinkButton, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[ngbNavLink]',\n standalone: true,\n host: {\n type: 'button',\n '[disabled]': 'navItem.disabled',\n '(click)': 'nav.click(navItem)',\n },\n }]\n }] });\n/**\n * A directive to mark the nav link when used on a link element.\n *\n * @since 5.2.0\n */\nclass NgbNavLink extends NgbNavLinkBase {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavLink, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbNavLink, isStandalone: true, selector: \"a[ngbNavLink]\", host: { attributes: { \"href\": \"\" }, listeners: { \"click\": \"nav.click(navItem); $event.preventDefault()\" } }, usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavLink, decorators: [{\n type: Directive,\n args: [{\n selector: 'a[ngbNavLink]',\n standalone: true,\n host: {\n href: '',\n '(click)': 'nav.click(navItem); $event.preventDefault()',\n },\n }]\n }] });\n\nconst ngbNavFadeOutTransition = ({ classList }) => {\n classList.remove('show');\n return () => classList.remove('active');\n};\nconst ngbNavFadeInTransition = (element, animation) => {\n if (animation) {\n reflow(element);\n }\n element.classList.add('show');\n};\n\nclass NgbNavPane {\n constructor() {\n this.nativeElement = inject(ElementRef).nativeElement;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavPane, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbNavPane, isStandalone: true, selector: \"[ngbNavPane]\", inputs: { item: \"item\", nav: \"nav\", role: \"role\" }, host: { properties: { \"id\": \"item.panelDomId\", \"class.fade\": \"nav.animation\", \"attr.role\": \"role ? role : nav.roles ? \\\"tabpanel\\\" : undefined\", \"attr.aria-labelledby\": \"item.domId\" }, classAttribute: \"tab-pane\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavPane, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbNavPane]',\n standalone: true,\n host: {\n '[id]': 'item.panelDomId',\n class: 'tab-pane',\n '[class.fade]': 'nav.animation',\n '[attr.role]': 'role ? role : nav.roles ? \"tabpanel\" : undefined',\n '[attr.aria-labelledby]': 'item.domId',\n },\n }]\n }], propDecorators: { item: [{\n type: Input\n }], nav: [{\n type: Input\n }], role: [{\n type: Input\n }] } });\n/**\n * The outlet where currently active nav content will be displayed.\n *\n * @since 5.2.0\n */\nclass NgbNavOutlet {\n constructor() {\n this._cd = inject(ChangeDetectorRef);\n this._ngZone = inject(NgZone);\n this._activePane = null;\n }\n isPanelTransitioning(item) {\n return this._activePane?.item === item;\n }\n ngAfterViewInit() {\n // initial display\n this._updateActivePane();\n // this will be emitted for all 3 types of nav changes: .select(), [activeId] or (click)\n this.nav.navItemChange$\n .pipe(takeUntilDestroyed(this.nav.destroyRef), startWith(this._activePane?.item || null), distinctUntilChanged(), skip(1))\n .subscribe((nextItem) => {\n const options = { animation: this.nav.animation, runningTransition: 'stop' };\n // next panel we're switching to will only appear in DOM after the change detection is done\n // and `this._panes` will be updated\n this._cd.detectChanges();\n // fading out\n if (this._activePane) {\n ngbRunTransition(this._ngZone, this._activePane.nativeElement, ngbNavFadeOutTransition, options).subscribe(() => {\n const activeItem = this._activePane?.item;\n this._activePane = this._getPaneForItem(nextItem);\n // mark for check when transition finishes as outlet or parent containers might be OnPush\n // without this the panes that have \"faded out\" will stay in DOM\n this._cd.markForCheck();\n // fading in\n if (this._activePane) {\n // we have to add the '.active' class before running the transition,\n // because it should be in place before `ngbRunTransition` does `reflow()`\n this._activePane.nativeElement.classList.add('active');\n ngbRunTransition(this._ngZone, this._activePane.nativeElement, ngbNavFadeInTransition, options).subscribe(() => {\n if (nextItem) {\n nextItem.shown.emit();\n this.nav.shown.emit(nextItem.id);\n }\n });\n }\n if (activeItem) {\n activeItem.hidden.emit();\n this.nav.hidden.emit(activeItem.id);\n }\n });\n }\n else {\n this._updateActivePane();\n }\n });\n }\n _updateActivePane() {\n this._activePane = this._getActivePane();\n this._activePane?.nativeElement.classList.add('show');\n this._activePane?.nativeElement.classList.add('active');\n }\n _getPaneForItem(item) {\n return (this._panes && this._panes.find((pane) => pane.item === item)) || null;\n }\n _getActivePane() {\n return (this._panes && this._panes.find((pane) => pane.item.active)) || null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavOutlet, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbNavOutlet, isStandalone: true, selector: \"[ngbNavOutlet]\", inputs: { paneRole: \"paneRole\", nav: [\"ngbNavOutlet\", \"nav\"] }, host: { properties: { \"class.tab-content\": \"true\" } }, viewQueries: [{ propertyName: \"_panes\", predicate: NgbNavPane, descendants: true }], ngImport: i0, template: `\n\t\t@for (item of nav.items; track item) {\n\t\t\t@if (item.isPanelInDom() || isPanelTransitioning(item)) {\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t}\n\t\t}\n\t`, isInline: true, dependencies: [{ kind: \"directive\", type: NgbNavPane, selector: \"[ngbNavPane]\", inputs: [\"item\", \"nav\", \"role\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavOutlet, decorators: [{\n type: Component,\n args: [{\n selector: '[ngbNavOutlet]',\n standalone: true,\n imports: [NgbNavPane, NgTemplateOutlet],\n host: {\n '[class.tab-content]': 'true',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n\t\t@for (item of nav.items; track item) {\n\t\t\t@if (item.isPanelInDom() || isPanelTransitioning(item)) {\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t}\n\t\t}\n\t`,\n }]\n }], propDecorators: { _panes: [{\n type: ViewChildren,\n args: [NgbNavPane]\n }], paneRole: [{\n type: Input\n }], nav: [{\n type: Input,\n args: ['ngbNavOutlet']\n }] } });\n\nconst NGB_NAV_DIRECTIVES = [\n NgbNavContent,\n NgbNav,\n NgbNavItem,\n NgbNavItemRole,\n NgbNavLink,\n NgbNavLinkButton,\n NgbNavLinkBase,\n NgbNavOutlet,\n NgbNavPane,\n];\nclass NgbNavModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavModule, imports: [NgbNavContent,\n NgbNav,\n NgbNavItem,\n NgbNavItemRole,\n NgbNavLink,\n NgbNavLinkButton,\n NgbNavLinkBase,\n NgbNavOutlet,\n NgbNavPane], exports: [NgbNavContent,\n NgbNav,\n NgbNavItem,\n NgbNavItemRole,\n NgbNavLink,\n NgbNavLinkButton,\n NgbNavLinkBase,\n NgbNavOutlet,\n NgbNavPane] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbNavModule, decorators: [{\n type: NgModule,\n args: [{\n imports: NGB_NAV_DIRECTIVES,\n exports: NGB_NAV_DIRECTIVES,\n }]\n }] });\n\n/**\n * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the paginations used in the application.\n */\nclass NgbPaginationConfig {\n constructor() {\n this.disabled = false;\n this.boundaryLinks = false;\n this.directionLinks = true;\n this.ellipses = true;\n this.maxSize = 0;\n this.pageSize = 10;\n this.rotate = false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * A directive to match the 'ellipsis' link template\n *\n * @since 4.1.0\n */\nclass NgbPaginationEllipsis {\n constructor() {\n this.templateRef = inject((TemplateRef));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationEllipsis, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbPaginationEllipsis, isStandalone: true, selector: \"ng-template[ngbPaginationEllipsis]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationEllipsis, decorators: [{\n type: Directive,\n args: [{ selector: 'ng-template[ngbPaginationEllipsis]', standalone: true }]\n }] });\n/**\n * A directive to match the 'first' link template\n *\n * @since 4.1.0\n */\nclass NgbPaginationFirst {\n constructor() {\n this.templateRef = inject((TemplateRef));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationFirst, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbPaginationFirst, isStandalone: true, selector: \"ng-template[ngbPaginationFirst]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationFirst, decorators: [{\n type: Directive,\n args: [{ selector: 'ng-template[ngbPaginationFirst]', standalone: true }]\n }] });\n/**\n * A directive to match the 'last' link template\n *\n * @since 4.1.0\n */\nclass NgbPaginationLast {\n constructor() {\n this.templateRef = inject((TemplateRef));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationLast, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbPaginationLast, isStandalone: true, selector: \"ng-template[ngbPaginationLast]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationLast, decorators: [{\n type: Directive,\n args: [{ selector: 'ng-template[ngbPaginationLast]', standalone: true }]\n }] });\n/**\n * A directive to match the 'next' link template\n *\n * @since 4.1.0\n */\nclass NgbPaginationNext {\n constructor() {\n this.templateRef = inject((TemplateRef));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationNext, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbPaginationNext, isStandalone: true, selector: \"ng-template[ngbPaginationNext]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationNext, decorators: [{\n type: Directive,\n args: [{ selector: 'ng-template[ngbPaginationNext]', standalone: true }]\n }] });\n/**\n * A directive to match the page 'number' link template\n *\n * @since 4.1.0\n */\nclass NgbPaginationNumber {\n constructor() {\n this.templateRef = inject((TemplateRef));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationNumber, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbPaginationNumber, isStandalone: true, selector: \"ng-template[ngbPaginationNumber]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationNumber, decorators: [{\n type: Directive,\n args: [{ selector: 'ng-template[ngbPaginationNumber]', standalone: true }]\n }] });\n/**\n * A directive to match the 'previous' link template\n *\n * @since 4.1.0\n */\nclass NgbPaginationPrevious {\n constructor() {\n this.templateRef = inject((TemplateRef));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationPrevious, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbPaginationPrevious, isStandalone: true, selector: \"ng-template[ngbPaginationPrevious]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationPrevious, decorators: [{\n type: Directive,\n args: [{ selector: 'ng-template[ngbPaginationPrevious]', standalone: true }]\n }] });\n/**\n * A directive to match the 'pages' whole content\n *\n * @since 9.1.0\n */\nclass NgbPaginationPages {\n constructor() {\n this.templateRef = inject((TemplateRef));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationPages, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbPaginationPages, isStandalone: true, selector: \"ng-template[ngbPaginationPages]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationPages, decorators: [{\n type: Directive,\n args: [{ selector: 'ng-template[ngbPaginationPages]', standalone: true }]\n }] });\n/**\n * A component that displays page numbers and allows to customize them in several ways.\n */\nclass NgbPagination {\n constructor() {\n this._config = inject(NgbPaginationConfig);\n this.pageCount = 0;\n this.pages = [];\n /**\n * If `true`, pagination links will be disabled.\n */\n this.disabled = this._config.disabled;\n /**\n * If `true`, the \"First\" and \"Last\" page links are shown.\n */\n this.boundaryLinks = this._config.boundaryLinks;\n /**\n * If `true`, the \"Next\" and \"Previous\" page links are shown.\n */\n this.directionLinks = this._config.directionLinks;\n /**\n * If `true`, the ellipsis symbols and first/last page numbers will be shown when `maxSize` > number of pages.\n */\n this.ellipses = this._config.ellipses;\n /**\n * Whether to rotate pages when `maxSize` > number of pages.\n *\n * The current page always stays in the middle if `true`.\n */\n this.rotate = this._config.rotate;\n /**\n * The maximum number of pages to display.\n */\n this.maxSize = this._config.maxSize;\n /**\n * The current page.\n *\n * Page numbers start with `1`.\n */\n this.page = 1;\n /**\n * The number of items per page.\n */\n this.pageSize = this._config.pageSize;\n /**\n * An event fired when the page is changed. Will fire only if collection size is set and all values are valid.\n *\n * Event payload is the number of the newly selected page.\n *\n * Page numbers start with `1`.\n */\n this.pageChange = new EventEmitter(true);\n /**\n * The pagination display size.\n *\n * Bootstrap currently supports small and large sizes.\n *\n * If the passed value is a string (ex. 'custom'), it will just add the `pagination-custom` css class\n */\n this.size = this._config.size;\n }\n hasPrevious() {\n return this.page > 1;\n }\n hasNext() {\n return this.page < this.pageCount;\n }\n nextDisabled() {\n return !this.hasNext() || this.disabled;\n }\n previousDisabled() {\n return !this.hasPrevious() || this.disabled;\n }\n selectPage(pageNumber) {\n this._updatePages(pageNumber);\n }\n ngOnChanges(changes) {\n this._updatePages(this.page);\n }\n isEllipsis(pageNumber) {\n return pageNumber === -1;\n }\n /**\n * Appends ellipses and first/last page number to the displayed pages\n */\n _applyEllipses(start, end) {\n if (this.ellipses) {\n if (start > 0) {\n // The first page will always be included. If the displayed range\n // starts after the third page, then add ellipsis. But if the range\n // starts on the third page, then add the second page instead of\n // an ellipsis, because the ellipsis would only hide a single page.\n if (start > 2) {\n this.pages.unshift(-1);\n }\n else if (start === 2) {\n this.pages.unshift(2);\n }\n this.pages.unshift(1);\n }\n if (end < this.pageCount) {\n // The last page will always be included. If the displayed range\n // ends before the third-last page, then add ellipsis. But if the range\n // ends on third-last page, then add the second-last page instead of\n // an ellipsis, because the ellipsis would only hide a single page.\n if (end < this.pageCount - 2) {\n this.pages.push(-1);\n }\n else if (end === this.pageCount - 2) {\n this.pages.push(this.pageCount - 1);\n }\n this.pages.push(this.pageCount);\n }\n }\n }\n /**\n * Rotates page numbers based on maxSize items visible.\n * Currently selected page stays in the middle:\n *\n * Ex. for selected page = 6:\n * [5,*6*,7] for maxSize = 3\n * [4,5,*6*,7] for maxSize = 4\n */\n _applyRotation() {\n let start = 0;\n let end = this.pageCount;\n let leftOffset = Math.floor(this.maxSize / 2);\n let rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset;\n if (this.page <= leftOffset) {\n // very beginning, no rotation -> [0..maxSize]\n end = this.maxSize;\n }\n else if (this.pageCount - this.page < leftOffset) {\n // very end, no rotation -> [len-maxSize..len]\n start = this.pageCount - this.maxSize;\n }\n else {\n // rotate\n start = this.page - leftOffset - 1;\n end = this.page + rightOffset;\n }\n return [start, end];\n }\n /**\n * Paginates page numbers based on maxSize items per page.\n */\n _applyPagination() {\n let page = Math.ceil(this.page / this.maxSize) - 1;\n let start = page * this.maxSize;\n let end = start + this.maxSize;\n return [start, end];\n }\n _setPageInRange(newPageNo) {\n const prevPageNo = this.page;\n this.page = getValueInRange(newPageNo, this.pageCount, 1);\n if (this.page !== prevPageNo && isNumber(this.collectionSize)) {\n this.pageChange.emit(this.page);\n }\n }\n _updatePages(newPage) {\n this.pageCount = Math.ceil(this.collectionSize / this.pageSize);\n if (!isNumber(this.pageCount)) {\n this.pageCount = 0;\n }\n // fill-in model needed to render pages\n this.pages.length = 0;\n for (let i = 1; i <= this.pageCount; i++) {\n this.pages.push(i);\n }\n // set page within 1..max range\n this._setPageInRange(newPage);\n // apply maxSize if necessary\n if (this.maxSize > 0 && this.pageCount > this.maxSize) {\n let start = 0;\n let end = this.pageCount;\n // either paginating or rotating page numbers\n if (this.rotate) {\n [start, end] = this._applyRotation();\n }\n else {\n [start, end] = this._applyPagination();\n }\n this.pages = this.pages.slice(start, end);\n // adding ellipses\n this._applyEllipses(start, end);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPagination, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbPagination, isStandalone: true, selector: \"ngb-pagination\", inputs: { disabled: \"disabled\", boundaryLinks: \"boundaryLinks\", directionLinks: \"directionLinks\", ellipses: \"ellipses\", rotate: \"rotate\", collectionSize: \"collectionSize\", maxSize: \"maxSize\", page: \"page\", pageSize: \"pageSize\", size: \"size\" }, outputs: { pageChange: \"pageChange\" }, host: { attributes: { \"role\": \"navigation\" } }, queries: [{ propertyName: \"tplEllipsis\", first: true, predicate: NgbPaginationEllipsis, descendants: true }, { propertyName: \"tplFirst\", first: true, predicate: NgbPaginationFirst, descendants: true }, { propertyName: \"tplLast\", first: true, predicate: NgbPaginationLast, descendants: true }, { propertyName: \"tplNext\", first: true, predicate: NgbPaginationNext, descendants: true }, { propertyName: \"tplNumber\", first: true, predicate: NgbPaginationNumber, descendants: true }, { propertyName: \"tplPrevious\", first: true, predicate: NgbPaginationPrevious, descendants: true }, { propertyName: \"tplPages\", first: true, predicate: NgbPaginationPages, descendants: true }], usesOnChanges: true, ngImport: i0, template: `\n\t\t««\n\t\t«\n\t\t»\n\t\t»»\n\t\t...\n\t\t{{ page }}\n\t\t\n\t\t\t@for (pageNumber of pages; track pageNumber) {\n\t\t\t\t\n\t\t\t\t\t@if (isEllipsis(pageNumber)) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\n\t\t
    \n\t\t\t@if (boundaryLinks) {\n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t}\n\t\t\t@if (directionLinks) {\n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t}\n\t\t\t\n\t\t\t@if (directionLinks) {\n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t}\n\t\t\t@if (boundaryLinks) {\n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t}\n\t\t
\n\t`, isInline: true, dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPagination, decorators: [{\n type: Component,\n args: [{\n selector: 'ngb-pagination',\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'navigation',\n },\n template: `\n\t\t««\n\t\t«\n\t\t»\n\t\t»»\n\t\t...\n\t\t{{ page }}\n\t\t\n\t\t\t@for (pageNumber of pages; track pageNumber) {\n\t\t\t\t\n\t\t\t\t\t@if (isEllipsis(pageNumber)) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\n\t\t
    \n\t\t\t@if (boundaryLinks) {\n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t}\n\t\t\t@if (directionLinks) {\n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t}\n\t\t\t\n\t\t\t@if (directionLinks) {\n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t}\n\t\t\t@if (boundaryLinks) {\n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t}\n\t\t
\n\t`,\n }]\n }], propDecorators: { tplEllipsis: [{\n type: ContentChild,\n args: [NgbPaginationEllipsis, { static: false }]\n }], tplFirst: [{\n type: ContentChild,\n args: [NgbPaginationFirst, { static: false }]\n }], tplLast: [{\n type: ContentChild,\n args: [NgbPaginationLast, { static: false }]\n }], tplNext: [{\n type: ContentChild,\n args: [NgbPaginationNext, { static: false }]\n }], tplNumber: [{\n type: ContentChild,\n args: [NgbPaginationNumber, { static: false }]\n }], tplPrevious: [{\n type: ContentChild,\n args: [NgbPaginationPrevious, { static: false }]\n }], tplPages: [{\n type: ContentChild,\n args: [NgbPaginationPages, { static: false }]\n }], disabled: [{\n type: Input\n }], boundaryLinks: [{\n type: Input\n }], directionLinks: [{\n type: Input\n }], ellipses: [{\n type: Input\n }], rotate: [{\n type: Input\n }], collectionSize: [{\n type: Input,\n args: [{ required: true }]\n }], maxSize: [{\n type: Input\n }], page: [{\n type: Input\n }], pageSize: [{\n type: Input\n }], pageChange: [{\n type: Output\n }], size: [{\n type: Input\n }] } });\n\nconst NGB_PAGINATION_DIRECTIVES = [\n NgbPagination,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious,\n NgbPaginationPages,\n];\nclass NgbPaginationModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationModule, imports: [NgbPagination,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious,\n NgbPaginationPages], exports: [NgbPagination,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious,\n NgbPaginationPages] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPaginationModule, decorators: [{\n type: NgModule,\n args: [{\n imports: NGB_PAGINATION_DIRECTIVES,\n exports: NGB_PAGINATION_DIRECTIVES,\n }]\n }] });\n\nconst ALIASES = {\n hover: ['mouseenter', 'mouseleave'],\n focus: ['focusin', 'focusout'],\n};\nfunction parseTriggers(triggers) {\n const trimmedTriggers = (triggers || '').trim();\n if (trimmedTriggers.length === 0) {\n return [];\n }\n const parsedTriggers = trimmedTriggers\n .split(/\\s+/)\n .map((trigger) => trigger.split(':'))\n .map((triggerPair) => (ALIASES[triggerPair[0]] || triggerPair));\n const manualTriggers = parsedTriggers.filter((triggerPair) => triggerPair.includes('manual'));\n if (manualTriggers.length > 1) {\n throw `Triggers parse error: only one manual trigger is allowed`;\n }\n if (manualTriggers.length === 1 && parsedTriggers.length > 1) {\n throw `Triggers parse error: manual trigger can't be mixed with other triggers`;\n }\n return manualTriggers.length ? [] : parsedTriggers;\n}\nfunction listenToTriggers(element, triggers, isOpenedFn, openFn, closeFn, openDelayMs = 0, closeDelayMs = 0) {\n const parsedTriggers = parseTriggers(triggers);\n if (parsedTriggers.length === 0) {\n return () => { };\n }\n const activeOpenTriggers = new Set();\n const cleanupFns = [];\n let timeout;\n function addEventListener(name, listener) {\n element.addEventListener(name, listener);\n cleanupFns.push(() => element.removeEventListener(name, listener));\n }\n function withDelay(fn, delayMs) {\n clearTimeout(timeout);\n if (delayMs > 0) {\n timeout = setTimeout(fn, delayMs);\n }\n else {\n fn();\n }\n }\n for (const [openTrigger, closeTrigger] of parsedTriggers) {\n if (!closeTrigger) {\n addEventListener(openTrigger, () => isOpenedFn() ? withDelay(closeFn, closeDelayMs) : withDelay(openFn, openDelayMs));\n }\n else {\n addEventListener(openTrigger, () => {\n activeOpenTriggers.add(openTrigger);\n withDelay(() => activeOpenTriggers.size > 0 && openFn(), openDelayMs);\n });\n addEventListener(closeTrigger, () => {\n activeOpenTriggers.delete(openTrigger);\n withDelay(() => activeOpenTriggers.size === 0 && closeFn(), closeDelayMs);\n });\n }\n }\n return () => cleanupFns.forEach((cleanupFn) => cleanupFn());\n}\n\n/**\n * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the popovers used in the application.\n */\nclass NgbPopoverConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.autoClose = true;\n this.placement = 'auto';\n this.popperOptions = (options) => options;\n this.triggers = 'click';\n this.disablePopover = false;\n this.openDelay = 0;\n this.closeDelay = 0;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPopoverConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPopoverConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPopoverConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nlet nextId$1 = 0;\nclass NgbPopoverWindow {\n isTitleTemplate() {\n return this.title instanceof TemplateRef;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPopoverWindow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbPopoverWindow, isStandalone: true, selector: \"ngb-popover-window\", inputs: { animation: \"animation\", title: \"title\", id: \"id\", popoverClass: \"popoverClass\", context: \"context\" }, host: { attributes: { \"role\": \"tooltip\" }, properties: { \"class\": \"\\\"popover\\\" + (popoverClass ? \\\" \\\" + popoverClass : \\\"\\\")\", \"class.fade\": \"animation\", \"id\": \"id\" }, styleAttribute: \"position: absolute;\" }, ngImport: i0, template: `\n\t\t
\n\t\t@if (title) {\n\t\t\t

\n\t\t\t\t{{ title }}\n\t\t\t\t\n\t\t\t

\n\t\t}\n\t\t
\n\t\t\t\n\t\t
\n\t`, isInline: true, dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPopoverWindow, decorators: [{\n type: Component,\n args: [{\n selector: 'ngb-popover-window',\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': '\"popover\" + (popoverClass ? \" \" + popoverClass : \"\")',\n '[class.fade]': 'animation',\n role: 'tooltip',\n '[id]': 'id',\n style: 'position: absolute;',\n },\n template: `\n\t\t
\n\t\t@if (title) {\n\t\t\t

\n\t\t\t\t{{ title }}\n\t\t\t\t\n\t\t\t

\n\t\t}\n\t\t
\n\t\t\t\n\t\t
\n\t`,\n }]\n }], propDecorators: { animation: [{\n type: Input\n }], title: [{\n type: Input\n }], id: [{\n type: Input\n }], popoverClass: [{\n type: Input\n }], context: [{\n type: Input\n }] } });\n/**\n * A lightweight and extensible directive for fancy popover creation.\n */\nclass NgbPopover {\n constructor() {\n this._config = inject(NgbPopoverConfig);\n /**\n * If `true`, popover opening and closing will be animated.\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * Indicates whether the popover should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n this.autoClose = this._config.autoClose;\n /**\n * The preferred placement of the popover, among the [possible values](#/guides/positioning#api).\n *\n * The default order of preference is `\"auto\"`.\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n this.placement = this._config.placement;\n /**\n * Allows to change default Popper options when positioning the popover.\n * Receives current popper options and returns modified ones.\n *\n * @since 13.1.0\n */\n this.popperOptions = this._config.popperOptions;\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/popover/examples#triggers).\n */\n this.triggers = this._config.triggers;\n /**\n * A selector specifying the element the popover should be appended to.\n *\n * Currently only supports `body`.\n */\n this.container = this._config.container;\n /**\n * If `true`, popover is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n this.disablePopover = this._config.disablePopover;\n /**\n * An optional class applied to the popover window element.\n *\n * @since 2.2.0\n */\n this.popoverClass = this._config.popoverClass;\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n this.openDelay = this._config.openDelay;\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n this.closeDelay = this._config.closeDelay;\n /**\n * An event emitted when the popover opening animation has finished. Contains no payload.\n */\n this.shown = new EventEmitter();\n /**\n * An event emitted when the popover closing animation has finished. Contains no payload.\n *\n * At this point popover is not in the DOM anymore.\n */\n this.hidden = new EventEmitter();\n this._nativeElement = inject(ElementRef).nativeElement;\n this._ngZone = inject(NgZone);\n this._document = inject(DOCUMENT);\n this._changeDetector = inject(ChangeDetectorRef);\n this._ngbPopoverWindowId = `ngb-popover-${nextId$1++}`;\n this._popupService = new PopupService(NgbPopoverWindow);\n this._windowRef = null;\n this._positioning = ngbPositioning();\n }\n /**\n * Opens the popover.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the popover template when it is created.\n */\n open(context) {\n if (!this._windowRef && !this._isDisabled()) {\n // this type assertion is safe because otherwise _isDisabled would return true\n const { windowRef, transition$ } = this._popupService.open(this.ngbPopover, context ?? this.popoverContext, this.animation);\n this._windowRef = windowRef;\n this._windowRef.setInput('animation', this.animation);\n this._windowRef.setInput('title', this.popoverTitle);\n this._windowRef.setInput('context', context ?? this.popoverContext);\n this._windowRef.setInput('popoverClass', this.popoverClass);\n this._windowRef.setInput('id', this._ngbPopoverWindowId);\n this._getPositionTargetElement().setAttribute('aria-describedby', this._ngbPopoverWindowId);\n if (this.container === 'body') {\n this._document.body.appendChild(this._windowRef.location.nativeElement);\n }\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening popover from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n // We need to mark for check, because popover won't work inside the OnPush component.\n // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the popover from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n // Setting up popper and scheduling updates when zone is stable\n this._ngZone.runOutsideAngular(() => {\n this._positioning.createPopper({\n hostElement: this._getPositionTargetElement(),\n targetElement: this._windowRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n baseClass: 'bs-popover',\n updatePopperOptions: (options) => this.popperOptions(addPopperOffset([0, 8])(options)),\n });\n Promise.resolve().then(() => {\n // This update is required for correct arrow placement\n this._positioning.update();\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n });\n });\n ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden, [\n this._windowRef.location.nativeElement,\n ]);\n transition$.subscribe(() => this.shown.emit());\n }\n }\n /**\n * Closes the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n close(animation = this.animation) {\n if (this._windowRef) {\n this._getPositionTargetElement().removeAttribute('aria-describedby');\n this._popupService.close(animation).subscribe(() => {\n this._windowRef = null;\n this._positioning.destroy();\n this._zoneSubscription?.unsubscribe();\n this.hidden.emit();\n this._changeDetector.markForCheck();\n });\n }\n }\n /**\n * Toggles the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n toggle() {\n if (this._windowRef) {\n this.close();\n }\n else {\n this.open();\n }\n }\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen() {\n return this._windowRef != null;\n }\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(this._nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n ngOnChanges({ ngbPopover, popoverTitle, disablePopover, popoverClass }) {\n if (popoverClass && this.isOpen()) {\n this._windowRef.setInput('popoverClass', popoverClass.currentValue);\n }\n // close popover if title and content become empty, or disablePopover set to true\n if ((ngbPopover || popoverTitle || disablePopover) && this._isDisabled()) {\n this.close();\n }\n }\n ngOnDestroy() {\n this.close(false);\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n this._unregisterListenersFn?.();\n }\n _isDisabled() {\n return this.disablePopover ? true : !this.ngbPopover && !this.popoverTitle;\n }\n _getPositionTargetElement() {\n return ((isString(this.positionTarget) ? this._document.querySelector(this.positionTarget) : this.positionTarget) ||\n this._nativeElement);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPopover, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbPopover, isStandalone: true, selector: \"[ngbPopover]\", inputs: { animation: \"animation\", autoClose: \"autoClose\", ngbPopover: \"ngbPopover\", popoverTitle: \"popoverTitle\", placement: \"placement\", popperOptions: \"popperOptions\", triggers: \"triggers\", positionTarget: \"positionTarget\", container: \"container\", disablePopover: \"disablePopover\", popoverClass: \"popoverClass\", popoverContext: \"popoverContext\", openDelay: \"openDelay\", closeDelay: \"closeDelay\" }, outputs: { shown: \"shown\", hidden: \"hidden\" }, exportAs: [\"ngbPopover\"], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPopover, decorators: [{\n type: Directive,\n args: [{ selector: '[ngbPopover]', exportAs: 'ngbPopover', standalone: true }]\n }], propDecorators: { animation: [{\n type: Input\n }], autoClose: [{\n type: Input\n }], ngbPopover: [{\n type: Input\n }], popoverTitle: [{\n type: Input\n }], placement: [{\n type: Input\n }], popperOptions: [{\n type: Input\n }], triggers: [{\n type: Input\n }], positionTarget: [{\n type: Input\n }], container: [{\n type: Input\n }], disablePopover: [{\n type: Input\n }], popoverClass: [{\n type: Input\n }], popoverContext: [{\n type: Input\n }], openDelay: [{\n type: Input\n }], closeDelay: [{\n type: Input\n }], shown: [{\n type: Output\n }], hidden: [{\n type: Output\n }] } });\n\nclass NgbPopoverModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPopoverModule, imports: [NgbPopover], exports: [NgbPopover] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPopoverModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbPopoverModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NgbPopover],\n exports: [NgbPopover],\n }]\n }] });\n\n/**\n * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the progress bars used in the application.\n */\nclass NgbProgressbarConfig {\n constructor() {\n this.max = 100;\n this.animated = false;\n this.ariaLabel = 'progress bar';\n this.striped = false;\n this.showValue = false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbProgressbarConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbProgressbarConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbProgressbarConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * A directive that provides feedback on the progress of a workflow or an action.\n */\nclass NgbProgressbar {\n /**\n * The maximal value to be displayed in the progress bar.\n *\n * Should be a positive number. Will default to 100 otherwise.\n */\n set max(max) {\n this._max = !isNumber(max) || max <= 0 ? 100 : max;\n }\n get max() {\n return this._max;\n }\n constructor() {\n this._config = inject(NgbProgressbarConfig);\n this.stacked = inject(NgbProgressbarStacked, { optional: true });\n /**\n * If `true`, the stripes on the progress bar are animated.\n *\n * Takes effect only for browsers supporting CSS3 animations, and if `striped` is `true`.\n */\n this.animated = this._config.animated;\n /**\n * The accessible progress bar name.\n *\n * @since 13.1.0\n */\n this.ariaLabel = this._config.ariaLabel;\n /**\n * If `true`, the progress bars will be displayed as striped.\n */\n this.striped = this._config.striped;\n /**\n * If `true`, the current percentage will be shown in the `xx%` format.\n */\n this.showValue = this._config.showValue;\n /**\n * Optional text variant type of the progress bar.\n *\n * Supports types based on Bootstrap background color variants, like:\n * `\"success\"`, `\"info\"`, `\"warning\"`, `\"danger\"`, `\"primary\"`, `\"secondary\"`, `\"dark\"` and so on.\n *\n * @since 5.2.0\n */\n this.textType = this._config.textType;\n /**\n * The type of the progress bar.\n *\n * Supports types based on Bootstrap background color variants, like:\n * `\"success\"`, `\"info\"`, `\"warning\"`, `\"danger\"`, `\"primary\"`, `\"secondary\"`, `\"dark\"` and so on.\n */\n this.type = this._config.type;\n /**\n * The current value for the progress bar.\n *\n * Should be in the `[0, max]` range.\n */\n this.value = 0;\n /**\n * The height of the progress bar.\n *\n * Accepts any valid CSS height values, ex. `\"2rem\"`\n */\n this.height = this._config.height;\n this.max = this._config.max;\n }\n getValue() {\n return getValueInRange(this.value, this.max);\n }\n getPercentValue() {\n return (100 * this.getValue()) / this.max;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbProgressbar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbProgressbar, isStandalone: true, selector: \"ngb-progressbar\", inputs: { max: \"max\", animated: \"animated\", ariaLabel: \"ariaLabel\", striped: \"striped\", showValue: \"showValue\", textType: \"textType\", type: \"type\", value: \"value\", height: \"height\" }, host: { attributes: { \"role\": \"progressbar\", \"aria-valuemin\": \"0\" }, properties: { \"attr.aria-valuenow\": \"getValue()\", \"attr.aria-valuemax\": \"max\", \"attr.aria-label\": \"ariaLabel\", \"style.width.%\": \"stacked ? getPercentValue() : null\", \"style.height\": \"this.height\" }, classAttribute: \"progress\" }, ngImport: i0, template: `\n\t\t\n\t\t\t@if (showValue) {\n\t\t\t\t{{ getValue() / max | percent }}\n\t\t\t}\n\t\t\t\n\t\t\n\t`, isInline: true, dependencies: [{ kind: \"pipe\", type: PercentPipe, name: \"percent\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbProgressbar, decorators: [{\n type: Component,\n args: [{\n selector: 'ngb-progressbar',\n standalone: true,\n imports: [PercentPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'progress',\n role: 'progressbar',\n '[attr.aria-valuenow]': 'getValue()',\n 'aria-valuemin': '0',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-label]': 'ariaLabel',\n '[style.width.%]': 'stacked ? getPercentValue() : null',\n },\n template: `\n\t\t\n\t\t\t@if (showValue) {\n\t\t\t\t{{ getValue() / max | percent }}\n\t\t\t}\n\t\t\t\n\t\t\n\t`,\n }]\n }], ctorParameters: () => [], propDecorators: { max: [{\n type: Input\n }], animated: [{\n type: Input\n }], ariaLabel: [{\n type: Input\n }], striped: [{\n type: Input\n }], showValue: [{\n type: Input\n }], textType: [{\n type: Input\n }], type: [{\n type: Input\n }], value: [{\n type: Input,\n args: [{ required: true }]\n }], height: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['style.height']\n }] } });\n/**\n * A directive that allow to stack progress bars.\n *\n * @since 16.0.0\n */\nclass NgbProgressbarStacked {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbProgressbarStacked, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbProgressbarStacked, isStandalone: true, selector: \"ngb-progressbar-stacked\", host: { classAttribute: \"progress-stacked\" }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbProgressbarStacked, decorators: [{\n type: Component,\n args: [{\n selector: 'ngb-progressbar-stacked',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'progress-stacked',\n },\n template: ``,\n }]\n }] });\n\nclass NgbProgressbarModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbProgressbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbProgressbarModule, imports: [NgbProgressbar, NgbProgressbarStacked], exports: [NgbProgressbar, NgbProgressbarStacked] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbProgressbarModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbProgressbarModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NgbProgressbar, NgbProgressbarStacked],\n exports: [NgbProgressbar, NgbProgressbarStacked],\n }]\n }] });\n\n/**\n * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the ratings used in the application.\n */\nclass NgbRatingConfig {\n constructor() {\n this.max = 10;\n this.readonly = false;\n this.resettable = false;\n this.tabindex = 0;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRatingConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRatingConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRatingConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * A directive that helps visualising and interacting with a star rating bar.\n */\nclass NgbRating {\n constructor() {\n this.contexts = [];\n this._config = inject(NgbRatingConfig);\n this._changeDetectorRef = inject(ChangeDetectorRef);\n /**\n * If `true`, the rating can't be changed or focused.\n */\n this.disabled = false;\n /**\n * The maximal rating that can be given.\n */\n this.max = this._config.max;\n /**\n * If `true`, the rating can't be changed.\n */\n this.readonly = this._config.readonly;\n /**\n * If `true`, the rating can be reset to `0` by mouse clicking currently set rating.\n */\n this.resettable = this._config.resettable;\n /**\n * Allows setting a custom rating tabindex.\n * If the component is disabled, `tabindex` will still be set to `-1`.\n *\n * @since 13.1.0\n */\n this.tabindex = this._config.tabindex;\n /**\n * An event emitted when the user is hovering over a given rating.\n *\n * Event payload equals to the rating being hovered over.\n */\n this.hover = new EventEmitter();\n /**\n * An event emitted when the user stops hovering over a given rating.\n *\n * Event payload equals to the rating of the last item being hovered over.\n */\n this.leave = new EventEmitter();\n /**\n * An event emitted when the rating is changed.\n *\n * Event payload equals to the newly selected rating.\n */\n this.rateChange = new EventEmitter(true);\n this.onChange = (_) => { };\n this.onTouched = () => { };\n }\n /**\n * Allows to provide a function to set a custom aria-valuetext\n *\n * @since 14.1.0\n */\n ariaValueText(current, max) {\n return `${current} out of ${max}`;\n }\n isInteractive() {\n return !this.readonly && !this.disabled;\n }\n enter(value) {\n if (this.isInteractive()) {\n this._updateState(value);\n }\n this.hover.emit(value);\n }\n handleBlur() {\n this.onTouched();\n }\n handleClick(value) {\n if (this.isInteractive()) {\n this.update(this.resettable && this.rate === value ? 0 : value);\n }\n }\n handleKeyDown(event) {\n /* eslint-disable-next-line deprecation/deprecation */\n switch (event.which) {\n case Key.ArrowDown:\n case Key.ArrowLeft:\n this.update(this.rate - 1);\n break;\n case Key.ArrowUp:\n case Key.ArrowRight:\n this.update(this.rate + 1);\n break;\n case Key.Home:\n this.update(0);\n break;\n case Key.End:\n this.update(this.max);\n break;\n default:\n return;\n }\n // note 'return' in default case\n event.preventDefault();\n }\n ngOnChanges(changes) {\n if (changes['rate']) {\n this.update(this.rate);\n }\n if (changes['max']) {\n this._updateMax();\n }\n }\n ngOnInit() {\n this._setupContexts();\n this._updateState(this.rate);\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n reset() {\n this.leave.emit(this.nextRate);\n this._updateState(this.rate);\n }\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n update(value, internalChange = true) {\n const newRate = getValueInRange(value, this.max, 0);\n if (this.isInteractive() && this.rate !== newRate) {\n this.rate = newRate;\n this.rateChange.emit(this.rate);\n }\n if (internalChange) {\n this.onChange(this.rate);\n this.onTouched();\n }\n this._updateState(this.rate);\n }\n writeValue(value) {\n this.update(value, false);\n this._changeDetectorRef.markForCheck();\n }\n _updateState(nextValue) {\n this.nextRate = nextValue;\n this.contexts.forEach((context, index) => (context.fill = Math.round(getValueInRange(nextValue - index, 1, 0) * 100)));\n }\n _updateMax() {\n if (this.max > 0) {\n this._setupContexts();\n this.update(this.rate);\n }\n }\n _setupContexts() {\n this.contexts = Array.from({ length: this.max }, (v, k) => ({ fill: 0, index: k }));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRating, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbRating, isStandalone: true, selector: \"ngb-rating\", inputs: { disabled: \"disabled\", max: \"max\", rate: \"rate\", readonly: \"readonly\", resettable: \"resettable\", starTemplate: \"starTemplate\", tabindex: \"tabindex\", ariaValueText: \"ariaValueText\" }, outputs: { hover: \"hover\", leave: \"leave\", rateChange: \"rateChange\" }, host: { attributes: { \"role\": \"slider\", \"aria-valuemin\": \"0\" }, listeners: { \"blur\": \"handleBlur()\", \"keydown\": \"handleKeyDown($event)\", \"mouseleave\": \"reset()\" }, properties: { \"tabindex\": \"disabled ? -1 : tabindex\", \"attr.aria-valuemax\": \"max\", \"attr.aria-valuenow\": \"nextRate\", \"attr.aria-valuetext\": \"ariaValueText(nextRate, max)\", \"attr.aria-readonly\": \"readonly && !disabled ? true : null\", \"attr.aria-disabled\": \"disabled ? true : null\" }, classAttribute: \"d-inline-flex\" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgbRating), multi: true }], queries: [{ propertyName: \"starTemplateFromContent\", first: true, predicate: TemplateRef, descendants: true }], usesOnChanges: true, ngImport: i0, template: `\n\t\t{{ fill === 100 ? '★' : '☆' }}\n\t\t@for (_ of contexts; track _; let index = $index) {\n\t\t\t({{ index < nextRate ? '*' : ' ' }})\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t}\n\t`, isInline: true, dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRating, decorators: [{\n type: Component,\n args: [{\n selector: 'ngb-rating',\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'd-inline-flex',\n '[tabindex]': 'disabled ? -1 : tabindex',\n role: 'slider',\n 'aria-valuemin': '0',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuenow]': 'nextRate',\n '[attr.aria-valuetext]': 'ariaValueText(nextRate, max)',\n '[attr.aria-readonly]': 'readonly && !disabled ? true : null',\n '[attr.aria-disabled]': 'disabled ? true : null',\n '(blur)': 'handleBlur()',\n '(keydown)': 'handleKeyDown($event)',\n '(mouseleave)': 'reset()',\n },\n template: `\n\t\t{{ fill === 100 ? '★' : '☆' }}\n\t\t@for (_ of contexts; track _; let index = $index) {\n\t\t\t({{ index < nextRate ? '*' : ' ' }})\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t}\n\t`,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgbRating), multi: true }],\n }]\n }], propDecorators: { disabled: [{\n type: Input\n }], max: [{\n type: Input\n }], rate: [{\n type: Input\n }], readonly: [{\n type: Input\n }], resettable: [{\n type: Input\n }], starTemplate: [{\n type: Input\n }], starTemplateFromContent: [{\n type: ContentChild,\n args: [TemplateRef, { static: false }]\n }], tabindex: [{\n type: Input\n }], ariaValueText: [{\n type: Input\n }], hover: [{\n type: Output\n }], leave: [{\n type: Output\n }], rateChange: [{\n type: Output\n }] } });\n\nclass NgbRatingModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRatingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRatingModule, imports: [NgbRating], exports: [NgbRating] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRatingModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbRatingModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NgbRating],\n exports: [NgbRating],\n }]\n }] });\n\nfunction toFragmentElement(container, id) {\n if (!container || id == null) {\n return null;\n }\n return isString(id) ? container.querySelector(`#${CSS.escape(id)}`) : id;\n}\nfunction getOrderedFragments(container, fragments) {\n const selector = [...fragments].map(({ id }) => `#${CSS.escape(id)}`).join(',');\n return Array.from(container.querySelectorAll(selector));\n}\nconst defaultProcessChanges = (state, changeActive, ctx) => {\n const { rootElement, fragments, scrollSpy, options, entries } = state;\n const orderedFragments = getOrderedFragments(rootElement, fragments);\n if (!ctx.initialized) {\n ctx.initialized = true;\n ctx.gapFragment = null;\n ctx.visibleFragments = new Set();\n // special case when one of the fragments was pre-selected\n const preSelectedFragment = toFragmentElement(rootElement, options?.initialFragment);\n if (preSelectedFragment) {\n scrollSpy.scrollTo(preSelectedFragment);\n return;\n }\n }\n for (const entry of entries) {\n const { isIntersecting, target: fragment } = entry;\n // 1. an entry became visible\n if (isIntersecting) {\n // if we were in-between two elements, we have to clear it up\n if (ctx.gapFragment) {\n ctx.visibleFragments.delete(ctx.gapFragment);\n ctx.gapFragment = null;\n }\n ctx.visibleFragments.add(fragment);\n }\n // 2. an entry became invisible\n else {\n ctx.visibleFragments.delete(fragment);\n // nothing is visible anymore, but something just was actually\n if (ctx.visibleFragments.size === 0 && scrollSpy.active !== '') {\n // 2.1 scrolling down - keeping the same element\n if (entry.boundingClientRect.top < entry.rootBounds.top) {\n ctx.gapFragment = fragment;\n ctx.visibleFragments.add(ctx.gapFragment);\n }\n // 2.2 scrolling up - getting the previous element\n else {\n // scrolling up and no more fragments above\n if (fragment === orderedFragments[0]) {\n ctx.gapFragment = null;\n ctx.visibleFragments.clear();\n changeActive('');\n return;\n }\n // getting previous fragment\n else {\n const fragmentIndex = orderedFragments.indexOf(fragment);\n ctx.gapFragment = orderedFragments[fragmentIndex - 1] || null;\n if (ctx.gapFragment) {\n ctx.visibleFragments.add(ctx.gapFragment);\n }\n }\n }\n }\n }\n }\n // getting the first visible element in the DOM order of the fragments\n for (const fragment of orderedFragments) {\n if (ctx.visibleFragments.has(fragment)) {\n changeActive(fragment.id);\n break;\n }\n }\n};\n\n/**\n * A configuration service for the [`NgbScrollSpyService`](#/components/scrollspy/api#NgbScrollSpyService).\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all scrollspies used in the application.\n *\n * @since 15.1.0\n */\nclass NgbScrollSpyConfig {\n constructor() {\n this.scrollBehavior = 'smooth';\n this.processChanges = defaultProcessChanges;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nconst MATCH_THRESHOLD = 3;\n/**\n * A scrollspy service that allows tracking of elements scrolling in and out of view.\n *\n * It can be instantiated manually, or automatically by the `ngbScrollSpy` directive.\n *\n * @since 15.1.0\n */\nclass NgbScrollSpyService {\n constructor() {\n this._observer = null;\n this._containerElement = null;\n this._fragments = new Set();\n this._preRegisteredFragments = new Set();\n this._active$ = new Subject();\n this._distinctActive$ = this._active$.pipe(distinctUntilChanged());\n this._active = '';\n this._config = inject(NgbScrollSpyConfig);\n this._document = inject(DOCUMENT);\n this._platformId = inject(PLATFORM_ID);\n this._scrollBehavior = this._config.scrollBehavior;\n this._diChangeDetectorRef = inject(ChangeDetectorRef, { optional: true });\n this._changeDetectorRef = this._diChangeDetectorRef;\n this._zone = inject(NgZone);\n this._distinctActive$.pipe(takeUntilDestroyed()).subscribe((active) => {\n this._active = active;\n this._changeDetectorRef?.markForCheck();\n });\n }\n /**\n * Getter for the currently active fragment id. Returns empty string if none.\n */\n get active() {\n return this._active;\n }\n /**\n * An observable emitting the currently active fragment. Emits empty string if none.\n */\n get active$() {\n return this._distinctActive$;\n }\n /**\n * Starts the scrollspy service and observes specified fragments.\n *\n * You can specify a list of options to pass, like the root element, initial fragment, scroll behavior, etc.\n * See the [`NgbScrollSpyOptions`](#/components/scrollspy/api#NgbScrollSpyOptions) interface for more details.\n */\n start(options) {\n if (isPlatformBrowser(this._platformId)) {\n this._cleanup();\n const { root, rootMargin, scrollBehavior, threshold, fragments, changeDetectorRef, processChanges } = {\n ...options,\n };\n this._containerElement = root ?? this._document.documentElement;\n this._changeDetectorRef = changeDetectorRef ?? this._diChangeDetectorRef;\n this._scrollBehavior = scrollBehavior ?? this._config.scrollBehavior;\n const processChangesFn = processChanges ?? this._config.processChanges;\n const context = {};\n this._observer = new IntersectionObserver((entries) => processChangesFn({\n entries,\n rootElement: this._containerElement,\n fragments: this._fragments,\n scrollSpy: this,\n options: { ...options },\n }, (active) => this._active$.next(active), context), {\n root: root ?? this._document,\n ...(rootMargin && { rootMargin }),\n ...(threshold && { threshold }),\n });\n // merging fragments added before starting and the ones passed as options\n for (const element of [...this._preRegisteredFragments, ...(fragments ?? [])]) {\n this.observe(element);\n }\n this._preRegisteredFragments.clear();\n }\n }\n /**\n * Stops the service and unobserves all fragments.\n */\n stop() {\n this._cleanup();\n this._active$.next('');\n }\n /**\n * Scrolls to a fragment, it must be known to the service and contained in the root element.\n * An id or an element reference can be passed.\n *\n * [`NgbScrollToOptions`](#/components/scrollspy/api#NgbScrollToOptions) can be passed.\n */\n scrollTo(fragment, options) {\n const { behavior } = { behavior: this._scrollBehavior, ...options };\n if (this._containerElement) {\n const fragmentElement = toFragmentElement(this._containerElement, fragment);\n if (fragmentElement) {\n const heightPx = fragmentElement.offsetTop - this._containerElement.offsetTop;\n this._containerElement.scrollTo({ top: heightPx, behavior });\n let lastOffset = this._containerElement.scrollTop;\n let matchCounter = 0;\n // we should update the active section only after scrolling is finished\n // and there is no clean way to do it at the moment\n const containerElement = this._containerElement;\n this._zone.runOutsideAngular(() => {\n const updateActiveWhenScrollingIsFinished = () => {\n const sameOffsetAsLastTime = lastOffset === containerElement.scrollTop;\n if (sameOffsetAsLastTime) {\n matchCounter++;\n }\n else {\n matchCounter = 0;\n }\n if (!sameOffsetAsLastTime || (sameOffsetAsLastTime && matchCounter < MATCH_THRESHOLD)) {\n lastOffset = containerElement.scrollTop;\n requestAnimationFrame(updateActiveWhenScrollingIsFinished);\n }\n else {\n this._zone.run(() => this._active$.next(fragmentElement.id));\n }\n };\n requestAnimationFrame(updateActiveWhenScrollingIsFinished);\n });\n }\n }\n }\n /**\n * Adds a fragment to observe. It must be contained in the root element.\n * An id or an element reference can be passed.\n */\n observe(fragment) {\n if (!this._observer) {\n this._preRegisteredFragments.add(fragment);\n return;\n }\n const fragmentElement = toFragmentElement(this._containerElement, fragment);\n if (fragmentElement && !this._fragments.has(fragmentElement)) {\n this._fragments.add(fragmentElement);\n this._observer.observe(fragmentElement);\n }\n }\n /**\n * Unobserves a fragment.\n * An id or an element reference can be passed.\n */\n unobserve(fragment) {\n if (!this._observer) {\n this._preRegisteredFragments.delete(fragment);\n return;\n }\n const fragmentElement = toFragmentElement(this._containerElement, fragment);\n if (fragmentElement) {\n this._fragments.delete(fragmentElement);\n // we're removing and re-adding all current fragments to recompute active one\n this._observer.disconnect();\n for (const fragment of this._fragments) {\n this._observer.observe(fragment);\n }\n }\n }\n ngOnDestroy() {\n this._cleanup();\n }\n _cleanup() {\n this._fragments.clear();\n this._observer?.disconnect();\n this._changeDetectorRef = this._diChangeDetectorRef;\n this._scrollBehavior = this._config.scrollBehavior;\n this._observer = null;\n this._containerElement = null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n\n/**\n * A helper directive to that links menu items and fragments together.\n *\n * It will automatically add the `.active` class to the menu item when the associated fragment becomes active.\n *\n * @since 15.1.0\n */\nclass NgbScrollSpyItem {\n constructor() {\n this._changeDetector = inject(ChangeDetectorRef);\n this._scrollSpyMenu = inject(NgbScrollSpyMenu, { optional: true });\n this._scrollSpyAPI = this._scrollSpyMenu ?? inject(NgbScrollSpyService);\n this._destroyRef = inject(DestroyRef);\n this._isActive = false;\n }\n /**\n * References the scroll spy directive, the id of the associated fragment and the parent menu item.\n *\n * Can be used like:\n * - `ngbScrollSpyItem=\"fragmentId\"`\n * - `[ngbScrollSpyItem]=\"scrollSpy\" fragment=\"fragmentId\"\n * - `[ngbScrollSpyItem]=\"[scrollSpy, 'fragmentId']\"` parent=\"parentId\"`\n * - `[ngbScrollSpyItem]=\"[scrollSpy, 'fragmentId', 'parentId']\"`\n *\n * As well as together with `[fragment]` and `[parent]` inputs.\n */\n set data(data) {\n if (Array.isArray(data)) {\n this._scrollSpyAPI = data[0];\n this.fragment = data[1];\n this.parent ??= data[2];\n }\n else if (data instanceof NgbScrollSpy) {\n this._scrollSpyAPI = data;\n }\n else if (isString(data)) {\n this.fragment = data;\n }\n }\n ngOnInit() {\n // if it is not a part of a bigger menu, it should handle activation itself\n if (!this._scrollSpyMenu) {\n this._scrollSpyAPI.active$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((active) => {\n if (active === this.fragment) {\n this._activate();\n }\n else {\n this._deactivate();\n }\n this._changeDetector.markForCheck();\n });\n }\n }\n /**\n * @internal\n */\n _activate() {\n this._isActive = true;\n if (this._scrollSpyMenu) {\n this._scrollSpyMenu.getItem(this.parent ?? '')?._activate();\n }\n }\n /**\n * @internal\n */\n _deactivate() {\n this._isActive = false;\n if (this._scrollSpyMenu) {\n this._scrollSpyMenu.getItem(this.parent ?? '')?._deactivate();\n }\n }\n /**\n * Returns `true`, if the associated fragment is active.\n */\n isActive() {\n return this._isActive;\n }\n /**\n * Scrolls to the associated fragment.\n */\n scrollTo(options) {\n this._scrollSpyAPI.scrollTo(this.fragment, options);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbScrollSpyItem, isStandalone: true, selector: \"[ngbScrollSpyItem]\", inputs: { data: [\"ngbScrollSpyItem\", \"data\"], fragment: \"fragment\", parent: \"parent\" }, host: { listeners: { \"click\": \"scrollTo();\" }, properties: { \"class.active\": \"isActive()\" } }, exportAs: [\"ngbScrollSpyItem\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyItem, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbScrollSpyItem]',\n standalone: true,\n exportAs: 'ngbScrollSpyItem',\n host: {\n '[class.active]': 'isActive()',\n '(click)': 'scrollTo();',\n },\n }]\n }], propDecorators: { data: [{\n type: Input,\n args: ['ngbScrollSpyItem']\n }], fragment: [{\n type: Input\n }], parent: [{\n type: Input\n }] } });\n/**\n * An optional scroll spy menu directive to build hierarchical menus\n * and simplify the [`NgbScrollSpyItem`](#/components/scrollspy/api#NgbScrollSpyItem) configuration.\n *\n * @since 15.1.0\n */\nclass NgbScrollSpyMenu {\n constructor() {\n this._scrollSpyRef = inject(NgbScrollSpyService);\n this._destroyRef = inject(DestroyRef);\n this._map = new Map();\n this._lastActiveItem = null;\n }\n set scrollSpy(scrollSpy) {\n this._scrollSpyRef = scrollSpy;\n }\n get active() {\n return this._scrollSpyRef.active;\n }\n get active$() {\n return this._scrollSpyRef.active$;\n }\n scrollTo(fragment, options) {\n this._scrollSpyRef.scrollTo(fragment, options);\n }\n getItem(id) {\n return this._map.get(id);\n }\n ngAfterViewInit() {\n this._items.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => this._rebuildMap());\n this._rebuildMap();\n this._scrollSpyRef.active$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((activeId) => {\n this._lastActiveItem?._deactivate();\n const item = this._map.get(activeId);\n if (item) {\n item._activate();\n this._lastActiveItem = item;\n }\n });\n }\n _rebuildMap() {\n this._map.clear();\n for (let item of this._items) {\n this._map.set(item.fragment, item);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbScrollSpyMenu, isStandalone: true, selector: \"[ngbScrollSpyMenu]\", inputs: { scrollSpy: [\"ngbScrollSpyMenu\", \"scrollSpy\"] }, queries: [{ propertyName: \"_items\", predicate: NgbScrollSpyItem, descendants: true }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyMenu, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbScrollSpyMenu]',\n standalone: true,\n }]\n }], propDecorators: { _items: [{\n type: ContentChildren,\n args: [NgbScrollSpyItem, { descendants: true }]\n }], scrollSpy: [{\n type: Input,\n args: ['ngbScrollSpyMenu']\n }] } });\n/**\n * A directive to put on a scrollable container.\n *\n * It will instantiate a [`NgbScrollSpyService`](#/components/scrollspy/api#NgbScrollSpyService).\n *\n * @since 15.1.0\n */\nclass NgbScrollSpy {\n constructor() {\n this._initialFragment = null;\n this._service = inject(NgbScrollSpyService);\n this._nativeElement = inject(ElementRef).nativeElement;\n /**\n * An event raised when the active section changes.\n *\n * Payload is the id of the new active section, empty string if none.\n */\n this.activeChange = this._service.active$;\n }\n set active(fragment) {\n this._initialFragment = fragment;\n this.scrollTo(fragment);\n }\n /**\n * Getter/setter for the currently active fragment id.\n */\n get active() {\n return this._service.active;\n }\n /**\n * Returns an observable that emits currently active section id.\n */\n get active$() {\n return this._service.active$;\n }\n ngAfterViewInit() {\n this._service.start({\n processChanges: this.processChanges,\n root: this._nativeElement,\n rootMargin: this.rootMargin,\n threshold: this.threshold,\n ...(this._initialFragment && { initialFragment: this._initialFragment }),\n });\n }\n /**\n * @internal\n */\n _registerFragment(fragment) {\n this._service.observe(fragment.id);\n }\n /**\n * @internal\n */\n _unregisterFragment(fragment) {\n this._service.unobserve(fragment.id);\n }\n /**\n * Scrolls to a fragment that is identified by the `ngbScrollSpyFragment` directive.\n * An id or an element reference can be passed.\n */\n scrollTo(fragment, options) {\n this._service.scrollTo(fragment, {\n ...(this.scrollBehavior && { behavior: this.scrollBehavior }),\n ...options,\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpy, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbScrollSpy, isStandalone: true, selector: \"[ngbScrollSpy]\", inputs: { processChanges: \"processChanges\", rootMargin: \"rootMargin\", scrollBehavior: \"scrollBehavior\", threshold: \"threshold\", active: \"active\" }, outputs: { activeChange: \"activeChange\" }, host: { attributes: { \"tabindex\": \"0\" }, styleAttribute: \"overflow-y: auto\" }, providers: [NgbScrollSpyService], exportAs: [\"ngbScrollSpy\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpy, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbScrollSpy]',\n standalone: true,\n exportAs: 'ngbScrollSpy',\n host: {\n tabindex: '0',\n style: 'overflow-y: auto',\n },\n providers: [NgbScrollSpyService],\n }]\n }], propDecorators: { processChanges: [{\n type: Input\n }], rootMargin: [{\n type: Input\n }], scrollBehavior: [{\n type: Input\n }], threshold: [{\n type: Input\n }], active: [{\n type: Input\n }], activeChange: [{\n type: Output\n }] } });\n/**\n * A directive to put on a fragment observed inside a scrollspy container.\n *\n * @since 15.1.0\n */\nclass NgbScrollSpyFragment {\n constructor() {\n this._destroyRef = inject(DestroyRef);\n this._scrollSpy = inject(NgbScrollSpy);\n }\n ngAfterViewInit() {\n this._scrollSpy._registerFragment(this);\n this._destroyRef.onDestroy(() => this._scrollSpy._unregisterFragment(this));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyFragment, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbScrollSpyFragment, isStandalone: true, selector: \"[ngbScrollSpyFragment]\", inputs: { id: [\"ngbScrollSpyFragment\", \"id\"] }, host: { properties: { \"id\": \"id\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyFragment, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngbScrollSpyFragment]',\n standalone: true,\n host: {\n '[id]': 'id',\n },\n }]\n }], propDecorators: { id: [{\n type: Input,\n args: ['ngbScrollSpyFragment']\n }] } });\n\nclass NgbScrollSpyModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyModule, imports: [NgbScrollSpy, NgbScrollSpyItem, NgbScrollSpyFragment, NgbScrollSpyMenu], exports: [NgbScrollSpy, NgbScrollSpyItem, NgbScrollSpyFragment, NgbScrollSpyMenu] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbScrollSpyModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NgbScrollSpy, NgbScrollSpyItem, NgbScrollSpyFragment, NgbScrollSpyMenu],\n exports: [NgbScrollSpy, NgbScrollSpyItem, NgbScrollSpyFragment, NgbScrollSpyMenu],\n }]\n }] });\n\nclass NgbTime {\n constructor(hour, minute, second) {\n this.hour = toInteger(hour);\n this.minute = toInteger(minute);\n this.second = toInteger(second);\n }\n changeHour(step = 1) {\n this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step);\n }\n updateHour(hour) {\n if (isNumber(hour)) {\n this.hour = (hour < 0 ? 24 + hour : hour) % 24;\n }\n else {\n this.hour = NaN;\n }\n }\n changeMinute(step = 1) {\n this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step);\n }\n updateMinute(minute) {\n if (isNumber(minute)) {\n this.minute = minute % 60 < 0 ? 60 + (minute % 60) : minute % 60;\n this.changeHour(Math.floor(minute / 60));\n }\n else {\n this.minute = NaN;\n }\n }\n changeSecond(step = 1) {\n this.updateSecond((isNaN(this.second) ? 0 : this.second) + step);\n }\n updateSecond(second) {\n if (isNumber(second)) {\n this.second = second < 0 ? 60 + (second % 60) : second % 60;\n this.changeMinute(Math.floor(second / 60));\n }\n else {\n this.second = NaN;\n }\n }\n isValid(checkSecs = true) {\n return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true);\n }\n toString() {\n return `${this.hour || 0}:${this.minute || 0}:${this.second || 0}`;\n }\n}\n\n/**\n * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the timepickers used in the application.\n */\nclass NgbTimepickerConfig {\n constructor() {\n this.meridian = false;\n this.spinners = true;\n this.seconds = false;\n this.hourStep = 1;\n this.minuteStep = 1;\n this.secondStep = 1;\n this.disabled = false;\n this.readonlyInputs = false;\n this.size = 'medium';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nfunction NGB_DATEPICKER_TIME_ADAPTER_FACTORY() {\n return new NgbTimeStructAdapter();\n}\n/**\n * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and\n * any provided user time model `T`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding timepicker to a form control,\n * ex. `[(ngModel)]=\"userTimeModel\"`. Here `userTimeModel` can be of any type.\n *\n * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model.\n *\n * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example.\n *\n * @since 2.2.0\n */\nclass NgbTimeAdapter {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimeAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimeAdapter, providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimeAdapter, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY }]\n }] });\nclass NgbTimeStructAdapter extends NgbTimeAdapter {\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n fromModel(time) {\n return time && isInteger(time.hour) && isInteger(time.minute)\n ? { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null }\n : null;\n }\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n toModel(time) {\n return time && isInteger(time.hour) && isInteger(time.minute)\n ? { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null }\n : null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimeStructAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimeStructAdapter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimeStructAdapter, decorators: [{\n type: Injectable\n }] });\n\n/**\n * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component.\n * The default implementation of this service honors the Angular locale, and uses the registered locale data,\n * as explained in the Angular i18n guide.\n */\nclass NgbTimepickerI18n {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerI18n, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerI18n, providedIn: 'root', useFactory: () => new NgbTimepickerI18nDefault() }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerI18n, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n useFactory: () => new NgbTimepickerI18nDefault(),\n }]\n }] });\nclass NgbTimepickerI18nDefault extends NgbTimepickerI18n {\n constructor() {\n super(...arguments);\n this._periods = getLocaleDayPeriods(inject(LOCALE_ID), FormStyle.Standalone, TranslationWidth.Narrow);\n }\n getMorningPeriod() {\n return this._periods[0];\n }\n getAfternoonPeriod() {\n return this._periods[1];\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerI18nDefault, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerI18nDefault }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerI18nDefault, decorators: [{\n type: Injectable\n }] });\n\nconst FILTER_REGEX = /[^0-9]/g;\n/**\n * A directive that helps with wth picking hours, minutes and seconds.\n */\nclass NgbTimepicker {\n /**\n * The number of hours to add/subtract when clicking hour spinners.\n */\n set hourStep(step) {\n this._hourStep = isInteger(step) ? step : this._config.hourStep;\n }\n get hourStep() {\n return this._hourStep;\n }\n /**\n * The number of minutes to add/subtract when clicking minute spinners.\n */\n set minuteStep(step) {\n this._minuteStep = isInteger(step) ? step : this._config.minuteStep;\n }\n get minuteStep() {\n return this._minuteStep;\n }\n /**\n * The number of seconds to add/subtract when clicking second spinners.\n */\n set secondStep(step) {\n this._secondStep = isInteger(step) ? step : this._config.secondStep;\n }\n get secondStep() {\n return this._secondStep;\n }\n constructor(_config, _ngbTimeAdapter, _cd, i18n) {\n this._config = _config;\n this._ngbTimeAdapter = _ngbTimeAdapter;\n this._cd = _cd;\n this.i18n = i18n;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n this.meridian = _config.meridian;\n this.spinners = _config.spinners;\n this.seconds = _config.seconds;\n this.hourStep = _config.hourStep;\n this.minuteStep = _config.minuteStep;\n this.secondStep = _config.secondStep;\n this.disabled = _config.disabled;\n this.readonlyInputs = _config.readonlyInputs;\n this.size = _config.size;\n }\n writeValue(value) {\n const structValue = this._ngbTimeAdapter.fromModel(value);\n this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime();\n if (!this.seconds && (!structValue || !isNumber(structValue.second))) {\n this.model.second = 0;\n }\n this._cd.markForCheck();\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * Increments the hours by the given step.\n */\n changeHour(step) {\n this.model?.changeHour(step);\n this.propagateModelChange();\n }\n /**\n * Increments the minutes by the given step.\n */\n changeMinute(step) {\n this.model?.changeMinute(step);\n this.propagateModelChange();\n }\n /**\n * Increments the seconds by the given step.\n */\n changeSecond(step) {\n this.model?.changeSecond(step);\n this.propagateModelChange();\n }\n /**\n * Update hours with the new value.\n */\n updateHour(newVal) {\n const isPM = this.model ? this.model.hour >= 12 : false;\n const enteredHour = toInteger(newVal);\n if (this.meridian && ((isPM && enteredHour < 12) || (!isPM && enteredHour === 12))) {\n this.model?.updateHour(enteredHour + 12);\n }\n else {\n this.model?.updateHour(enteredHour);\n }\n this.propagateModelChange();\n }\n /**\n * Update minutes with the new value.\n */\n updateMinute(newVal) {\n this.model?.updateMinute(toInteger(newVal));\n this.propagateModelChange();\n }\n /**\n * Update seconds with the new value.\n */\n updateSecond(newVal) {\n this.model?.updateSecond(toInteger(newVal));\n this.propagateModelChange();\n }\n toggleMeridian() {\n if (this.meridian) {\n this.changeHour(12);\n }\n }\n formatInput(input) {\n input.value = input.value.replace(FILTER_REGEX, '');\n }\n formatHour(value) {\n if (isNumber(value)) {\n if (this.meridian) {\n return padNumber(value % 12 === 0 ? 12 : value % 12);\n }\n else {\n return padNumber(value % 24);\n }\n }\n else {\n return padNumber(NaN);\n }\n }\n formatMinSec(value) {\n return padNumber(isNumber(value) ? value : NaN);\n }\n handleBlur() {\n this.onTouched();\n }\n get isSmallSize() {\n return this.size === 'small';\n }\n get isLargeSize() {\n return this.size === 'large';\n }\n ngOnChanges(changes) {\n if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) {\n this.model.second = 0;\n this.propagateModelChange(false);\n }\n }\n propagateModelChange(touched = true) {\n if (touched) {\n this.onTouched();\n }\n if (this.model?.isValid(this.seconds)) {\n this.onChange(this._ngbTimeAdapter.toModel({ hour: this.model.hour, minute: this.model.minute, second: this.model.second }));\n }\n else {\n this.onChange(this._ngbTimeAdapter.toModel(null));\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepicker, deps: [{ token: NgbTimepickerConfig }, { token: NgbTimeAdapter }, { token: i0.ChangeDetectorRef }, { token: NgbTimepickerI18n }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbTimepicker, isStandalone: true, selector: \"ngb-timepicker\", inputs: { meridian: \"meridian\", spinners: \"spinners\", seconds: \"seconds\", hourStep: \"hourStep\", minuteStep: \"minuteStep\", secondStep: \"secondStep\", readonlyInputs: \"readonlyInputs\", size: \"size\" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgbTimepicker), multi: true }], exportAs: [\"ngbTimepicker\"], usesOnChanges: true, ngImport: i0, template: `\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tIncrement hours\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tDecrement hours\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t
\n\t\t\t\t
:
\n\t\t\t\t
\n\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tIncrement minutes\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tDecrement minutes\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t
\n\t\t\t\t@if (seconds) {\n\t\t\t\t\t
:
\n\t\t\t\t\t
\n\t\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tIncrement seconds\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tDecrement seconds\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t\t@if (meridian) {\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t@if (model && model.hour >= 12) {\n\t\t\t\t\t\t\t\t{{ i18n.getAfternoonPeriod() }}\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t{{ i18n.getMorningPeriod() }}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t
\n\t\t
\n\t`, isInline: true, styles: [\"ngb-timepicker{font-size:1rem}.ngb-tp{display:flex;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron:before{border-style:solid;border-width:.29em .29em 0 0;content:\\\"\\\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-minute,.ngb-tp-second,.ngb-tp-meridian{display:flex;flex-direction:column;align-items:center;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}\\n\"], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepicker, decorators: [{\n type: Component,\n args: [{ exportAs: 'ngbTimepicker', selector: 'ngb-timepicker', standalone: true, encapsulation: ViewEncapsulation.None, template: `\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tIncrement hours\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tDecrement hours\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t
\n\t\t\t\t
:
\n\t\t\t\t
\n\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tIncrement minutes\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tDecrement minutes\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t
\n\t\t\t\t@if (seconds) {\n\t\t\t\t\t
:
\n\t\t\t\t\t
\n\t\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tIncrement seconds\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t@if (spinners) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tDecrement seconds\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t\t@if (meridian) {\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t@if (model && model.hour >= 12) {\n\t\t\t\t\t\t\t\t{{ i18n.getAfternoonPeriod() }}\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t{{ i18n.getMorningPeriod() }}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\t\t\t
\n\t\t
\n\t`, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgbTimepicker), multi: true }], styles: [\"ngb-timepicker{font-size:1rem}.ngb-tp{display:flex;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron:before{border-style:solid;border-width:.29em .29em 0 0;content:\\\"\\\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-minute,.ngb-tp-second,.ngb-tp-meridian{display:flex;flex-direction:column;align-items:center;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}\\n\"] }]\n }], ctorParameters: () => [{ type: NgbTimepickerConfig }, { type: NgbTimeAdapter }, { type: i0.ChangeDetectorRef }, { type: NgbTimepickerI18n }], propDecorators: { meridian: [{\n type: Input\n }], spinners: [{\n type: Input\n }], seconds: [{\n type: Input\n }], hourStep: [{\n type: Input\n }], minuteStep: [{\n type: Input\n }], secondStep: [{\n type: Input\n }], readonlyInputs: [{\n type: Input\n }], size: [{\n type: Input\n }] } });\n\nclass NgbTimepickerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerModule, imports: [NgbTimepicker], exports: [NgbTimepicker] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTimepickerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NgbTimepicker],\n exports: [NgbTimepicker],\n }]\n }] });\n\n/**\n * Configuration service for the NgbToast component. You can inject this service, typically in your root component,\n * and customize the values of its properties in order to provide default values for all the toasts used in the\n * application.\n *\n * @since 5.0.0\n */\nclass NgbToastConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.autohide = true;\n this.delay = 5000;\n this.ariaLive = 'polite';\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbToastConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbToastConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbToastConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nconst ngbToastFadeInTransition = (element, animation) => {\n const { classList } = element;\n if (animation) {\n classList.add('fade');\n }\n else {\n classList.add('show');\n return;\n }\n reflow(element);\n classList.add('show', 'showing');\n return () => {\n classList.remove('showing');\n };\n};\nconst ngbToastFadeOutTransition = ({ classList }) => {\n classList.add('showing');\n return () => {\n classList.remove('show', 'showing');\n };\n};\n\n/**\n * This directive allows the usage of HTML markup or other directives\n * inside of the toast's header.\n *\n * @since 5.0.0\n */\nclass NgbToastHeader {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbToastHeader, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbToastHeader, isStandalone: true, selector: \"[ngbToastHeader]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbToastHeader, decorators: [{\n type: Directive,\n args: [{ selector: '[ngbToastHeader]', standalone: true }]\n }] });\n/**\n * Toasts provide feedback messages as notifications to the user.\n * Goal is to mimic the push notifications available both on mobile and desktop operating systems.\n *\n * @since 5.0.0\n */\nclass NgbToast {\n constructor(ariaLive) {\n this.ariaLive = ariaLive;\n this._config = inject(NgbToastConfig);\n this._zone = inject(NgZone);\n this._element = inject(ElementRef);\n /**\n * If `true`, toast opening and closing will be animated.\n *\n * Animation is triggered only when the `.hide()` or `.show()` functions are called\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * Delay after which the toast will hide (ms).\n * default: `500` (ms) (inherited from NgbToastConfig)\n */\n this.delay = this._config.delay;\n /**\n * Auto hide the toast after a delay in ms.\n * default: `true` (inherited from NgbToastConfig)\n */\n this.autohide = this._config.autohide;\n /**\n * A template like `` can be\n * used in the projected content to allow markup usage.\n */\n this.contentHeaderTpl = null;\n /**\n * An event fired after the animation triggered by calling `.show()` method has finished.\n *\n * @since 8.0.0\n */\n this.shown = new EventEmitter();\n /**\n * An event fired after the animation triggered by calling `.hide()` method has finished.\n *\n * It can only occur in 2 different scenarios:\n * - `autohide` timeout fires\n * - user clicks on a closing cross\n *\n * Additionally this output is purely informative. The toast won't be removed from DOM automatically, it's up\n * to the user to take care of that.\n *\n * @since 8.0.0\n */\n this.hidden = new EventEmitter();\n this.ariaLive ??= this._config.ariaLive;\n }\n ngAfterContentInit() {\n this._zone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this._init();\n this.show();\n });\n }\n ngOnChanges(changes) {\n if ('autohide' in changes) {\n this._clearTimeout();\n this._init();\n }\n }\n /**\n * Triggers toast closing programmatically.\n *\n * The returned observable will emit and be completed once the closing transition has finished.\n * If the animations are turned off this happens synchronously.\n *\n * Alternatively you could listen or subscribe to the `(hidden)` output\n *\n * @since 8.0.0\n */\n hide() {\n this._clearTimeout();\n const transition = ngbRunTransition(this._zone, this._element.nativeElement, ngbToastFadeOutTransition, {\n animation: this.animation,\n runningTransition: 'stop',\n });\n transition.subscribe(() => {\n this.hidden.emit();\n });\n return transition;\n }\n /**\n * Triggers toast opening programmatically.\n *\n * The returned observable will emit and be completed once the opening transition has finished.\n * If the animations are turned off this happens synchronously.\n *\n * Alternatively you could listen or subscribe to the `(shown)` output\n *\n * @since 8.0.0\n */\n show() {\n const transition = ngbRunTransition(this._zone, this._element.nativeElement, ngbToastFadeInTransition, {\n animation: this.animation,\n runningTransition: 'continue',\n });\n transition.subscribe(() => {\n this.shown.emit();\n });\n return transition;\n }\n _init() {\n if (this.autohide && !this._timeoutID) {\n this._timeoutID = setTimeout(() => this.hide(), this.delay);\n }\n }\n _clearTimeout() {\n if (this._timeoutID) {\n clearTimeout(this._timeoutID);\n this._timeoutID = null;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbToast, deps: [{ token: 'aria-live', attribute: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbToast, isStandalone: true, selector: \"ngb-toast\", inputs: { animation: \"animation\", delay: \"delay\", autohide: \"autohide\", header: \"header\" }, outputs: { shown: \"shown\", hidden: \"hidden\" }, host: { attributes: { \"role\": \"alert\", \"aria-atomic\": \"true\" }, properties: { \"attr.aria-live\": \"ariaLive\", \"class.fade\": \"animation\" }, classAttribute: \"toast\" }, queries: [{ propertyName: \"contentHeaderTpl\", first: true, predicate: NgbToastHeader, descendants: true, read: TemplateRef, static: true }], exportAs: [\"ngbToast\"], usesOnChanges: true, ngImport: i0, template: `\n\t\t\n\t\t\t{{ header }}\n\t\t\n\t\t@if (contentHeaderTpl || header) {\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t}\n\t\t
\n\t\t\t\n\t\t
\n\t`, isInline: true, styles: [\"ngb-toast{display:block}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbToast, decorators: [{\n type: Component,\n args: [{ selector: 'ngb-toast', exportAs: 'ngbToast', standalone: true, imports: [NgTemplateOutlet], encapsulation: ViewEncapsulation.None, host: {\n role: 'alert',\n '[attr.aria-live]': 'ariaLive',\n 'aria-atomic': 'true',\n class: 'toast',\n '[class.fade]': 'animation',\n }, template: `\n\t\t\n\t\t\t{{ header }}\n\t\t\n\t\t@if (contentHeaderTpl || header) {\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t}\n\t\t
\n\t\t\t\n\t\t
\n\t`, styles: [\"ngb-toast{display:block}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}\\n\"] }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Attribute,\n args: ['aria-live']\n }] }], propDecorators: { animation: [{\n type: Input\n }], delay: [{\n type: Input\n }], autohide: [{\n type: Input\n }], header: [{\n type: Input\n }], contentHeaderTpl: [{\n type: ContentChild,\n args: [NgbToastHeader, { read: TemplateRef, static: true }]\n }], shown: [{\n type: Output\n }], hidden: [{\n type: Output\n }] } });\n\nclass NgbToastModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbToastModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbToastModule, imports: [NgbToast, NgbToastHeader], exports: [NgbToast, NgbToastHeader] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbToastModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbToastModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NgbToast, NgbToastHeader],\n exports: [NgbToast, NgbToastHeader],\n }]\n }] });\n\n/**\n * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the tooltips used in the application.\n */\nclass NgbTooltipConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.autoClose = true;\n this.placement = 'auto';\n this.popperOptions = (options) => options;\n this.triggers = 'hover focus';\n this.disableTooltip = false;\n this.openDelay = 0;\n this.closeDelay = 0;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTooltipConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTooltipConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTooltipConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nlet nextId = 0;\nclass NgbTooltipWindow {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTooltipWindow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbTooltipWindow, isStandalone: true, selector: \"ngb-tooltip-window\", inputs: { animation: \"animation\", id: \"id\", tooltipClass: \"tooltipClass\" }, host: { attributes: { \"role\": \"tooltip\" }, properties: { \"class\": \"\\\"tooltip\\\" + (tooltipClass ? \\\" \\\" + tooltipClass : \\\"\\\")\", \"class.fade\": \"animation\", \"id\": \"id\" } }, ngImport: i0, template: `\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t`, isInline: true, styles: [\"ngb-tooltip-window{pointer-events:none;position:absolute}ngb-tooltip-window .tooltip-inner{pointer-events:auto}ngb-tooltip-window.bs-tooltip-top,ngb-tooltip-window.bs-tooltip-bottom{padding-left:0;padding-right:0}ngb-tooltip-window.bs-tooltip-start,ngb-tooltip-window.bs-tooltip-end{padding-top:0;padding-bottom:0}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTooltipWindow, decorators: [{\n type: Component,\n args: [{ selector: 'ngb-tooltip-window', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {\n '[class]': '\"tooltip\" + (tooltipClass ? \" \" + tooltipClass : \"\")',\n '[class.fade]': 'animation',\n role: 'tooltip',\n '[id]': 'id',\n }, template: `\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t`, styles: [\"ngb-tooltip-window{pointer-events:none;position:absolute}ngb-tooltip-window .tooltip-inner{pointer-events:auto}ngb-tooltip-window.bs-tooltip-top,ngb-tooltip-window.bs-tooltip-bottom{padding-left:0;padding-right:0}ngb-tooltip-window.bs-tooltip-start,ngb-tooltip-window.bs-tooltip-end{padding-top:0;padding-bottom:0}\\n\"] }]\n }], propDecorators: { animation: [{\n type: Input\n }], id: [{\n type: Input\n }], tooltipClass: [{\n type: Input\n }] } });\n/**\n * A lightweight and extensible directive for fancy tooltip creation.\n */\nclass NgbTooltip {\n constructor() {\n this._config = inject(NgbTooltipConfig);\n /**\n * If `true`, tooltip opening and closing will be animated.\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * Indicates whether the tooltip should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n this.autoClose = this._config.autoClose;\n /**\n * The preferred placement of the tooltip, among the [possible values](#/guides/positioning#api).\n *\n * The default order of preference is `\"auto\"`.\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n this.placement = this._config.placement;\n /**\n * Allows to change default Popper options when positioning the tooltip.\n * Receives current popper options and returns modified ones.\n *\n * @since 13.1.0\n */\n this.popperOptions = this._config.popperOptions;\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/tooltip/examples#triggers).\n */\n this.triggers = this._config.triggers;\n /**\n * A selector specifying the element the tooltip should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n this.container = this._config.container;\n /**\n * If `true`, tooltip is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n this.disableTooltip = this._config.disableTooltip;\n /**\n * An optional class applied to the tooltip window element.\n *\n * @since 3.2.0\n */\n this.tooltipClass = this._config.tooltipClass;\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n this.openDelay = this._config.openDelay;\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n this.closeDelay = this._config.closeDelay;\n /**\n * An event emitted when the tooltip opening animation has finished. Contains no payload.\n */\n this.shown = new EventEmitter();\n /**\n * An event emitted when the tooltip closing animation has finished. Contains no payload.\n */\n this.hidden = new EventEmitter();\n this._nativeElement = inject(ElementRef).nativeElement;\n this._ngZone = inject(NgZone);\n this._document = inject(DOCUMENT);\n this._changeDetector = inject(ChangeDetectorRef);\n this._ngbTooltipWindowId = `ngb-tooltip-${nextId++}`;\n this._popupService = new PopupService(NgbTooltipWindow);\n this._windowRef = null;\n this._positioning = ngbPositioning();\n }\n /**\n * The string content or a `TemplateRef` for the content to be displayed in the tooltip.\n *\n * If the content if falsy, the tooltip won't open.\n */\n set ngbTooltip(value) {\n this._ngbTooltip = value;\n if (!value && this._windowRef) {\n this.close();\n }\n }\n get ngbTooltip() {\n return this._ngbTooltip;\n }\n /**\n * Opens the tooltip.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the tooltip template when it is created.\n */\n open(context) {\n if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) {\n const { windowRef, transition$ } = this._popupService.open(this._ngbTooltip, context ?? this.tooltipContext, this.animation);\n this._windowRef = windowRef;\n this._windowRef.setInput('animation', this.animation);\n this._windowRef.setInput('tooltipClass', this.tooltipClass);\n this._windowRef.setInput('id', this._ngbTooltipWindowId);\n this._getPositionTargetElement().setAttribute('aria-describedby', this._ngbTooltipWindowId);\n if (this.container === 'body') {\n this._document.body.appendChild(this._windowRef.location.nativeElement);\n }\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening tooltip from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n // We need to mark for check, because tooltip won't work inside the OnPush component.\n // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the tooltip from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n // Setting up popper and scheduling updates when zone is stable\n this._ngZone.runOutsideAngular(() => {\n this._positioning.createPopper({\n hostElement: this._getPositionTargetElement(),\n targetElement: this._windowRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n baseClass: 'bs-tooltip',\n updatePopperOptions: (options) => this.popperOptions(addPopperOffset([0, 6])(options)),\n });\n Promise.resolve().then(() => {\n // This update is required for correct arrow placement\n this._positioning.update();\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n });\n });\n ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden, [this._windowRef.location.nativeElement], [this._nativeElement]);\n transition$.subscribe(() => this.shown.emit());\n }\n }\n /**\n * Closes the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n close(animation = this.animation) {\n if (this._windowRef != null) {\n this._getPositionTargetElement().removeAttribute('aria-describedby');\n this._popupService.close(animation).subscribe(() => {\n this._windowRef = null;\n this._positioning.destroy();\n this._zoneSubscription?.unsubscribe();\n this.hidden.emit();\n this._changeDetector.markForCheck();\n });\n }\n }\n /**\n * Toggles the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n toggle() {\n if (this._windowRef) {\n this.close();\n }\n else {\n this.open();\n }\n }\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen() {\n return this._windowRef != null;\n }\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(this._nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n ngOnChanges({ tooltipClass }) {\n if (tooltipClass && this.isOpen()) {\n this._windowRef.setInput('tooltipClass', tooltipClass.currentValue);\n }\n }\n ngOnDestroy() {\n this.close(false);\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n this._unregisterListenersFn?.();\n }\n _getPositionTargetElement() {\n return ((isString(this.positionTarget) ? this._document.querySelector(this.positionTarget) : this.positionTarget) ||\n this._nativeElement);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTooltip, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbTooltip, isStandalone: true, selector: \"[ngbTooltip]\", inputs: { animation: \"animation\", autoClose: \"autoClose\", placement: \"placement\", popperOptions: \"popperOptions\", triggers: \"triggers\", positionTarget: \"positionTarget\", container: \"container\", disableTooltip: \"disableTooltip\", tooltipClass: \"tooltipClass\", tooltipContext: \"tooltipContext\", openDelay: \"openDelay\", closeDelay: \"closeDelay\", ngbTooltip: \"ngbTooltip\" }, outputs: { shown: \"shown\", hidden: \"hidden\" }, exportAs: [\"ngbTooltip\"], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTooltip, decorators: [{\n type: Directive,\n args: [{ selector: '[ngbTooltip]', standalone: true, exportAs: 'ngbTooltip' }]\n }], propDecorators: { animation: [{\n type: Input\n }], autoClose: [{\n type: Input\n }], placement: [{\n type: Input\n }], popperOptions: [{\n type: Input\n }], triggers: [{\n type: Input\n }], positionTarget: [{\n type: Input\n }], container: [{\n type: Input\n }], disableTooltip: [{\n type: Input\n }], tooltipClass: [{\n type: Input\n }], tooltipContext: [{\n type: Input\n }], openDelay: [{\n type: Input\n }], closeDelay: [{\n type: Input\n }], shown: [{\n type: Output\n }], hidden: [{\n type: Output\n }], ngbTooltip: [{\n type: Input\n }] } });\n\nclass NgbTooltipModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTooltipModule, imports: [NgbTooltip], exports: [NgbTooltip] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTooltipModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTooltipModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NgbTooltip],\n exports: [NgbTooltip],\n }]\n }] });\n\n/**\n * A component that helps with text highlighting.\n *\n * It splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify\n * highlighting:\n *\n * Ex. `result=\"Alaska\"` and `term=\"as\"` will produce `Alaska`.\n */\nclass NgbHighlight {\n constructor() {\n /**\n * The CSS class for `` elements wrapping the `term` inside the `result`.\n */\n this.highlightClass = 'ngb-highlight';\n /**\n * Boolean option to determine if the highlighting should be sensitive to accents or not.\n *\n * This feature is only available for browsers that implement the `String.normalize` function\n * (typically not Internet Explorer).\n * If you want to use this feature in a browser that does not implement `String.normalize`,\n * you will have to include a polyfill in your application (`unorm` for example).\n *\n * @since 9.1.0\n */\n this.accentSensitive = true;\n }\n ngOnChanges(changes) {\n if (!this.accentSensitive && !String.prototype.normalize) {\n console.warn('The `accentSensitive` input in `ngb-highlight` cannot be set to `false` in a browser ' +\n 'that does not implement the `String.normalize` function. ' +\n 'You will have to include a polyfill in your application to use this feature in the current browser.');\n this.accentSensitive = true;\n }\n const result = toString(this.result);\n const terms = Array.isArray(this.term) ? this.term : [this.term];\n const prepareTerm = (term) => (this.accentSensitive ? term : removeAccents(term));\n const escapedTerms = terms.map((term) => regExpEscape(prepareTerm(toString(term)))).filter((term) => term);\n const toSplit = this.accentSensitive ? result : removeAccents(result);\n const parts = escapedTerms.length ? toSplit.split(new RegExp(`(${escapedTerms.join('|')})`, 'gmi')) : [result];\n if (this.accentSensitive) {\n this.parts = parts;\n }\n else {\n let offset = 0;\n this.parts = parts.map((part) => result.substring(offset, (offset += part.length)));\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbHighlight, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbHighlight, isStandalone: true, selector: \"ngb-highlight\", inputs: { highlightClass: \"highlightClass\", result: \"result\", term: \"term\", accentSensitive: \"accentSensitive\" }, usesOnChanges: true, ngImport: i0, template: `\n\t\t@for (part of parts; track part; let odd = $odd) {\n\t\t\t@if (odd) {\n\t\t\t\t{{ part }}\n\t\t\t} @else {\n\t\t\t\t{{ part }}\n\t\t\t}\n\t\t}\n\t`, isInline: true, styles: [\".ngb-highlight{font-weight:700}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbHighlight, decorators: [{\n type: Component,\n args: [{ selector: 'ngb-highlight', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `\n\t\t@for (part of parts; track part; let odd = $odd) {\n\t\t\t@if (odd) {\n\t\t\t\t{{ part }}\n\t\t\t} @else {\n\t\t\t\t{{ part }}\n\t\t\t}\n\t\t}\n\t`, styles: [\".ngb-highlight{font-weight:700}\\n\"] }]\n }], propDecorators: { highlightClass: [{\n type: Input\n }], result: [{\n type: Input,\n args: [{ required: true }]\n }], term: [{\n type: Input,\n args: [{ required: true }]\n }], accentSensitive: [{\n type: Input\n }] } });\n\nconst ARIA_LIVE_DELAY = new InjectionToken('live announcer delay', {\n providedIn: 'root',\n factory: () => 100,\n});\nfunction getLiveElement(document, lazyCreate = false) {\n let element = document.body.querySelector('#ngb-live');\n if (element == null && lazyCreate) {\n element = document.createElement('div');\n element.setAttribute('id', 'ngb-live');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n element.classList.add('visually-hidden');\n document.body.appendChild(element);\n }\n return element;\n}\nclass Live {\n constructor() {\n this._document = inject(DOCUMENT);\n this._delay = inject(ARIA_LIVE_DELAY);\n }\n ngOnDestroy() {\n const element = getLiveElement(this._document);\n if (element) {\n // if exists, it will always be attached to the \n element.parentElement.removeChild(element);\n }\n }\n say(message) {\n const element = getLiveElement(this._document, true);\n const delay = this._delay;\n if (element != null) {\n element.textContent = '';\n const setText = () => (element.textContent = message);\n if (delay === null) {\n setText();\n }\n else {\n setTimeout(setText, delay);\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: Live, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: Live, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: Live, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the typeaheads used in the application.\n */\nclass NgbTypeaheadConfig {\n constructor() {\n this.editable = true;\n this.focusFirst = true;\n this.selectOnExact = false;\n this.showHint = false;\n this.placement = ['bottom-start', 'bottom-end', 'top-start', 'top-end'];\n this.popperOptions = (options) => options;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTypeaheadConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTypeaheadConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTypeaheadConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nclass NgbTypeaheadWindow {\n constructor() {\n this.activeIdx = 0;\n /**\n * Flag indicating if the first row should be active initially\n */\n this.focusFirst = true;\n /**\n * A function used to format a given result before display. This function should return a formatted string without any\n * HTML markup\n */\n this.formatter = toString;\n /**\n * Event raised when user selects a particular result row\n */\n this.selectEvent = new EventEmitter();\n this.activeChangeEvent = new EventEmitter();\n }\n hasActive() {\n return this.activeIdx > -1 && this.activeIdx < this.results.length;\n }\n getActive() {\n return this.results[this.activeIdx];\n }\n markActive(activeIdx) {\n this.activeIdx = activeIdx;\n this._activeChanged();\n }\n next() {\n if (this.activeIdx === this.results.length - 1) {\n this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1;\n }\n else {\n this.activeIdx++;\n }\n this._activeChanged();\n }\n prev() {\n if (this.activeIdx < 0) {\n this.activeIdx = this.results.length - 1;\n }\n else if (this.activeIdx === 0) {\n this.activeIdx = this.focusFirst ? this.results.length - 1 : -1;\n }\n else {\n this.activeIdx--;\n }\n this._activeChanged();\n }\n resetActive() {\n this.activeIdx = this.focusFirst ? 0 : -1;\n this._activeChanged();\n }\n select(item) {\n this.selectEvent.emit(item);\n }\n ngOnInit() {\n this.resetActive();\n }\n _activeChanged() {\n this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTypeaheadWindow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"17.0.0\", type: NgbTypeaheadWindow, isStandalone: true, selector: \"ngb-typeahead-window\", inputs: { id: \"id\", focusFirst: \"focusFirst\", results: \"results\", term: \"term\", formatter: \"formatter\", resultTemplate: \"resultTemplate\", popupClass: \"popupClass\" }, outputs: { selectEvent: \"select\", activeChangeEvent: \"activeChange\" }, host: { attributes: { \"role\": \"listbox\" }, listeners: { \"mousedown\": \"$event.preventDefault()\" }, properties: { \"class\": \"\\\"dropdown-menu show\\\" + (popupClass ? \\\" \\\" + popupClass : \\\"\\\")\", \"id\": \"id\" } }, exportAs: [\"ngbTypeaheadWindow\"], ngImport: i0, template: `\n\t\t\n\t\t\t\n\t\t\n\t\t@for (result of results; track result; let idx = $index) {\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t}\n\t`, isInline: true, dependencies: [{ kind: \"component\", type: NgbHighlight, selector: \"ngb-highlight\", inputs: [\"highlightClass\", \"result\", \"term\", \"accentSensitive\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTypeaheadWindow, decorators: [{\n type: Component,\n args: [{\n selector: 'ngb-typeahead-window',\n exportAs: 'ngbTypeaheadWindow',\n standalone: true,\n imports: [NgbHighlight, NgTemplateOutlet],\n encapsulation: ViewEncapsulation.None,\n host: {\n '(mousedown)': '$event.preventDefault()',\n '[class]': '\"dropdown-menu show\" + (popupClass ? \" \" + popupClass : \"\")',\n role: 'listbox',\n '[id]': 'id',\n },\n template: `\n\t\t\n\t\t\t\n\t\t\n\t\t@for (result of results; track result; let idx = $index) {\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t}\n\t`,\n }]\n }], propDecorators: { id: [{\n type: Input\n }], focusFirst: [{\n type: Input\n }], results: [{\n type: Input\n }], term: [{\n type: Input\n }], formatter: [{\n type: Input\n }], resultTemplate: [{\n type: Input\n }], popupClass: [{\n type: Input\n }], selectEvent: [{\n type: Output,\n args: ['select']\n }], activeChangeEvent: [{\n type: Output,\n args: ['activeChange']\n }] } });\n\nlet nextWindowId = 0;\n/**\n * A directive providing a simple way of creating powerful typeaheads from any text input.\n */\nclass NgbTypeahead {\n constructor() {\n this._nativeElement = inject(ElementRef).nativeElement;\n this._config = inject(NgbTypeaheadConfig);\n this._live = inject(Live);\n this._document = inject(DOCUMENT);\n this._ngZone = inject(NgZone);\n this._changeDetector = inject(ChangeDetectorRef);\n this._popupService = new PopupService(NgbTypeaheadWindow);\n this._positioning = ngbPositioning();\n this._subscription = null;\n this._closed$ = new Subject();\n this._inputValueBackup = null;\n this._inputValueForSelectOnExact = null;\n this._valueChanges$ = fromEvent(this._nativeElement, 'input').pipe(map(($event) => $event.target.value));\n this._resubscribeTypeahead$ = new BehaviorSubject(null);\n this._windowRef = null;\n /**\n * The value for the `autocomplete` attribute for the `` element.\n *\n * Defaults to `\"off\"` to disable the native browser autocomplete, but you can override it if necessary.\n *\n * @since 2.1.0\n */\n this.autocomplete = 'off';\n /**\n * A selector specifying the element the typeahead popup will be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n this.container = this._config.container;\n /**\n * If `true`, model values will not be restricted only to items selected from the popup.\n */\n this.editable = this._config.editable;\n /**\n * If `true`, the first item in the result list will always stay focused while typing.\n */\n this.focusFirst = this._config.focusFirst;\n /**\n * If `true`, automatically selects the item when it is the only one that exactly matches the user input\n *\n * @since 14.2.0\n */\n this.selectOnExact = this._config.selectOnExact;\n /**\n * If `true`, will show the hint in the `` when an item in the result list matches.\n */\n this.showHint = this._config.showHint;\n /**\n * The preferred placement of the typeahead, among the [possible values](#/guides/positioning#api).\n *\n * The default order of preference is `\"bottom-start bottom-end top-start top-end\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n this.placement = this._config.placement;\n /**\n * Allows to change default Popper options when positioning the typeahead.\n * Receives current popper options and returns modified ones.\n *\n * @since 13.1.0\n */\n this.popperOptions = this._config.popperOptions;\n /**\n * An event emitted right before an item is selected from the result list.\n *\n * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent).\n */\n this.selectItem = new EventEmitter();\n this.activeDescendant = null;\n this.popupId = `ngb-typeahead-${nextWindowId++}`;\n this._onTouched = () => { };\n this._onChange = (_) => { };\n }\n ngOnInit() {\n this._subscribeToUserInput();\n }\n ngOnChanges({ ngbTypeahead }) {\n if (ngbTypeahead && !ngbTypeahead.firstChange) {\n this._unsubscribeFromUserInput();\n this._subscribeToUserInput();\n }\n }\n ngOnDestroy() {\n this._closePopup();\n this._unsubscribeFromUserInput();\n }\n registerOnChange(fn) {\n this._onChange = fn;\n }\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n writeValue(value) {\n this._writeInputValue(this._formatItemForInput(value));\n if (this.showHint) {\n this._inputValueBackup = value;\n }\n }\n setDisabledState(isDisabled) {\n this._nativeElement.disabled = isDisabled;\n }\n /**\n * Dismisses typeahead popup window\n */\n dismissPopup() {\n if (this.isPopupOpen()) {\n this._resubscribeTypeahead$.next(null);\n this._closePopup();\n if (this.showHint && this._inputValueBackup !== null) {\n this._writeInputValue(this._inputValueBackup);\n }\n this._changeDetector.markForCheck();\n }\n }\n /**\n * Returns true if the typeahead popup window is displayed\n */\n isPopupOpen() {\n return this._windowRef != null;\n }\n handleBlur() {\n this._resubscribeTypeahead$.next(null);\n this._onTouched();\n }\n handleKeyDown(event) {\n if (!this.isPopupOpen()) {\n return;\n }\n /* eslint-disable-next-line deprecation/deprecation */\n switch (event.which) {\n case Key.ArrowDown:\n event.preventDefault();\n this._windowRef.instance.next();\n this._showHint();\n break;\n case Key.ArrowUp:\n event.preventDefault();\n this._windowRef.instance.prev();\n this._showHint();\n break;\n case Key.Enter:\n case Key.Tab: {\n const result = this._windowRef.instance.getActive();\n if (isDefined(result)) {\n event.preventDefault();\n event.stopPropagation();\n this._selectResult(result);\n }\n this._closePopup();\n break;\n }\n }\n }\n _openPopup() {\n if (!this.isPopupOpen()) {\n this._inputValueBackup = this._nativeElement.value;\n const { windowRef } = this._popupService.open();\n this._windowRef = windowRef;\n this._windowRef.setInput('id', this.popupId);\n this._windowRef.setInput('popupClass', this.popupClass);\n this._windowRef.instance.selectEvent.subscribe((result) => this._selectResultClosePopup(result));\n this._windowRef.instance.activeChangeEvent.subscribe((activeId) => (this.activeDescendant = activeId));\n if (this.container === 'body') {\n this._windowRef.location.nativeElement.style.zIndex = '1055';\n this._document.body.appendChild(this._windowRef.location.nativeElement);\n }\n this._changeDetector.markForCheck();\n // Setting up popper and scheduling updates when zone is stable\n this._ngZone.runOutsideAngular(() => {\n if (this._windowRef) {\n this._positioning.createPopper({\n hostElement: this._nativeElement,\n targetElement: this._windowRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n updatePopperOptions: (options) => this.popperOptions(addPopperOffset([0, 2])(options)),\n });\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n }\n });\n ngbAutoClose(this._ngZone, this._document, 'outside', () => this.dismissPopup(), this._closed$, [\n this._nativeElement,\n this._windowRef.location.nativeElement,\n ]);\n }\n }\n _closePopup() {\n this._popupService.close().subscribe(() => {\n this._positioning.destroy();\n this._zoneSubscription?.unsubscribe();\n this._closed$.next();\n this._windowRef = null;\n this.activeDescendant = null;\n });\n }\n _selectResult(result) {\n let defaultPrevented = false;\n this.selectItem.emit({\n item: result,\n preventDefault: () => {\n defaultPrevented = true;\n },\n });\n this._resubscribeTypeahead$.next(null);\n if (!defaultPrevented) {\n this.writeValue(result);\n this._onChange(result);\n }\n }\n _selectResultClosePopup(result) {\n this._selectResult(result);\n this._closePopup();\n }\n _showHint() {\n if (this.showHint && this._windowRef?.instance.hasActive() && this._inputValueBackup != null) {\n const userInputLowerCase = this._inputValueBackup.toLowerCase();\n const formattedVal = this._formatItemForInput(this._windowRef.instance.getActive());\n if (userInputLowerCase === formattedVal.substring(0, this._inputValueBackup.length).toLowerCase()) {\n this._writeInputValue(this._inputValueBackup + formattedVal.substring(this._inputValueBackup.length));\n this._nativeElement['setSelectionRange'].apply(this._nativeElement, [\n this._inputValueBackup.length,\n formattedVal.length,\n ]);\n }\n else {\n this._writeInputValue(formattedVal);\n }\n }\n }\n _formatItemForInput(item) {\n return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item);\n }\n _writeInputValue(value) {\n this._nativeElement.value = toString(value);\n }\n _subscribeToUserInput() {\n const results$ = this._valueChanges$.pipe(tap((value) => {\n this._inputValueBackup = this.showHint ? value : null;\n this._inputValueForSelectOnExact = this.selectOnExact ? value : null;\n this._onChange(this.editable ? value : undefined);\n }), this.ngbTypeahead ? this.ngbTypeahead : () => of([]));\n this._subscription = this._resubscribeTypeahead$.pipe(switchMap(() => results$)).subscribe((results) => {\n if (!results || results.length === 0) {\n this._closePopup();\n }\n else {\n // when there is only one result and this matches the input value\n if (this.selectOnExact &&\n results.length === 1 &&\n this._formatItemForInput(results[0]) === this._inputValueForSelectOnExact) {\n this._selectResult(results[0]);\n this._closePopup();\n }\n else {\n this._openPopup();\n this._windowRef.setInput('focusFirst', this.focusFirst);\n this._windowRef.setInput('results', results);\n this._windowRef.setInput('term', this._nativeElement.value);\n if (this.resultFormatter) {\n this._windowRef.setInput('formatter', this.resultFormatter);\n }\n if (this.resultTemplate) {\n this._windowRef.setInput('resultTemplate', this.resultTemplate);\n }\n this._windowRef.instance.resetActive();\n // The observable stream we are subscribing to might have async steps\n // and if a component containing typeahead is using the OnPush strategy\n // the change detection turn wouldn't be invoked automatically.\n this._windowRef.changeDetectorRef.detectChanges();\n this._showHint();\n }\n }\n // live announcer\n const count = results ? results.length : 0;\n this._live.say(count === 0 ? 'No results available' : `${count} result${count === 1 ? '' : 's'} available`);\n });\n }\n _unsubscribeFromUserInput() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n this._subscription = null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTypeahead, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbTypeahead, isStandalone: true, selector: \"input[ngbTypeahead]\", inputs: { autocomplete: \"autocomplete\", container: \"container\", editable: \"editable\", focusFirst: \"focusFirst\", inputFormatter: \"inputFormatter\", ngbTypeahead: \"ngbTypeahead\", resultFormatter: \"resultFormatter\", resultTemplate: \"resultTemplate\", selectOnExact: \"selectOnExact\", showHint: \"showHint\", placement: \"placement\", popperOptions: \"popperOptions\", popupClass: \"popupClass\" }, outputs: { selectItem: \"selectItem\" }, host: { attributes: { \"autocapitalize\": \"off\", \"autocorrect\": \"off\", \"role\": \"combobox\" }, listeners: { \"blur\": \"handleBlur()\", \"keydown\": \"handleKeyDown($event)\" }, properties: { \"class.open\": \"isPopupOpen()\", \"autocomplete\": \"autocomplete\", \"attr.aria-autocomplete\": \"showHint ? \\\"both\\\" : \\\"list\\\"\", \"attr.aria-activedescendant\": \"activeDescendant\", \"attr.aria-owns\": \"isPopupOpen() ? popupId : null\", \"attr.aria-expanded\": \"isPopupOpen()\" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgbTypeahead), multi: true }], exportAs: [\"ngbTypeahead\"], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTypeahead, decorators: [{\n type: Directive,\n args: [{\n selector: 'input[ngbTypeahead]',\n exportAs: 'ngbTypeahead',\n standalone: true,\n host: {\n '(blur)': 'handleBlur()',\n '[class.open]': 'isPopupOpen()',\n '(keydown)': 'handleKeyDown($event)',\n '[autocomplete]': 'autocomplete',\n autocapitalize: 'off',\n autocorrect: 'off',\n role: 'combobox',\n '[attr.aria-autocomplete]': 'showHint ? \"both\" : \"list\"',\n '[attr.aria-activedescendant]': 'activeDescendant',\n '[attr.aria-owns]': 'isPopupOpen() ? popupId : null',\n '[attr.aria-expanded]': 'isPopupOpen()',\n },\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgbTypeahead), multi: true }],\n }]\n }], propDecorators: { autocomplete: [{\n type: Input\n }], container: [{\n type: Input\n }], editable: [{\n type: Input\n }], focusFirst: [{\n type: Input\n }], inputFormatter: [{\n type: Input\n }], ngbTypeahead: [{\n type: Input\n }], resultFormatter: [{\n type: Input\n }], resultTemplate: [{\n type: Input\n }], selectOnExact: [{\n type: Input\n }], showHint: [{\n type: Input\n }], placement: [{\n type: Input\n }], popperOptions: [{\n type: Input\n }], popupClass: [{\n type: Input\n }], selectItem: [{\n type: Output\n }] } });\n\nclass NgbTypeaheadModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTypeaheadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTypeaheadModule, imports: [NgbHighlight, NgbTypeahead], exports: [NgbHighlight, NgbTypeahead] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTypeaheadModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbTypeaheadModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NgbHighlight, NgbTypeahead],\n exports: [NgbHighlight, NgbTypeahead],\n }]\n }] });\n\n/**\n * A configuration service for the [`NgbOffcanvas`](#/components/offcanvas/api#NgbOffcanvas) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all offcanvases used in the application.\n *\n * @since 12.1.0\n */\nclass NgbOffcanvasConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.backdrop = true;\n this.keyboard = true;\n this.position = 'start';\n this.scroll = false;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * A reference to the currently opened (active) offcanvas.\n *\n * Instances of this class can be injected into your component passed as offcanvas content.\n * So you can `.close()` or `.dismiss()` the offcanvas window from your component.\n *\n * @since 12.1.0\n */\nclass NgbActiveOffcanvas {\n /**\n * Closes the offcanvas with an optional `result` value.\n *\n * The `NgbOffcanvasRef.result` promise will be resolved with the provided value.\n */\n close(result) { }\n /**\n * Dismisses the offcanvas with an optional `reason` value.\n *\n * The `NgbOffcanvasRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason) { }\n}\n/**\n * A reference to the newly opened offcanvas returned by the `NgbOffcanvas.open()` method.\n *\n * @since 12.1.0\n */\nclass NgbOffcanvasRef {\n /**\n * The instance of a component used for the offcanvas content.\n *\n * When a `TemplateRef` is used as the content or when the offcanvas is closed, will return `undefined`.\n */\n get componentInstance() {\n if (this._contentRef && this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n /**\n * The observable that emits when the offcanvas is closed via the `.close()` method.\n *\n * It will emit the result passed to the `.close()` method.\n */\n get closed() {\n return this._closed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when the offcanvas is dismissed via the `.dismiss()` method.\n *\n * It will emit the reason passed to the `.dismissed()` method by the user, or one of the internal\n * reasons like backdrop click or ESC key press.\n */\n get dismissed() {\n return this._dismissed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when both offcanvas window and backdrop are closed and animations were finished.\n * At this point offcanvas and backdrop elements will be removed from the DOM tree.\n *\n * This observable will be completed after emitting.\n */\n get hidden() {\n return this._hidden.asObservable();\n }\n /**\n * The observable that emits when offcanvas is fully visible and animation was finished.\n * The offcanvas DOM element is always available synchronously after calling 'offcanvas.open()' service.\n *\n * This observable will be completed after emitting.\n * It will not emit, if offcanvas is closed before open animation is finished.\n */\n get shown() {\n return this._panelCmptRef.instance.shown.asObservable();\n }\n constructor(_panelCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) {\n this._panelCmptRef = _panelCmptRef;\n this._contentRef = _contentRef;\n this._backdropCmptRef = _backdropCmptRef;\n this._beforeDismiss = _beforeDismiss;\n this._closed = new Subject();\n this._dismissed = new Subject();\n this._hidden = new Subject();\n _panelCmptRef.instance.dismissEvent.subscribe((reason) => {\n this.dismiss(reason);\n });\n if (_backdropCmptRef) {\n _backdropCmptRef.instance.dismissEvent.subscribe((reason) => {\n this.dismiss(reason);\n });\n }\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => { });\n }\n /**\n * Closes the offcanvas with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result) {\n if (this._panelCmptRef) {\n this._closed.next(result);\n this._resolve(result);\n this._removeOffcanvasElements();\n }\n }\n _dismiss(reason) {\n this._dismissed.next(reason);\n this._reject(reason);\n this._removeOffcanvasElements();\n }\n /**\n * Dismisses the offcanvas with an optional `reason` value.\n *\n * The `NgbOffcanvasRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason) {\n if (this._panelCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n }\n else {\n const dismiss = this._beforeDismiss();\n if (isPromise(dismiss)) {\n dismiss.then((result) => {\n if (result !== false) {\n this._dismiss(reason);\n }\n }, () => { });\n }\n else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n _removeOffcanvasElements() {\n const panelTransition$ = this._panelCmptRef.instance.hide();\n const backdropTransition$ = this._backdropCmptRef ? this._backdropCmptRef.instance.hide() : of(undefined);\n // hiding panel\n panelTransition$.subscribe(() => {\n const { nativeElement } = this._panelCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n this._panelCmptRef.destroy();\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n this._panelCmptRef = null;\n this._contentRef = null;\n });\n // hiding backdrop\n backdropTransition$.subscribe(() => {\n if (this._backdropCmptRef) {\n const { nativeElement } = this._backdropCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n this._backdropCmptRef.destroy();\n this._backdropCmptRef = null;\n }\n });\n // all done\n zip(panelTransition$, backdropTransition$).subscribe(() => {\n this._hidden.next();\n this._hidden.complete();\n });\n }\n}\n\nvar OffcanvasDismissReasons;\n(function (OffcanvasDismissReasons) {\n OffcanvasDismissReasons[OffcanvasDismissReasons[\"BACKDROP_CLICK\"] = 0] = \"BACKDROP_CLICK\";\n OffcanvasDismissReasons[OffcanvasDismissReasons[\"ESC\"] = 1] = \"ESC\";\n})(OffcanvasDismissReasons || (OffcanvasDismissReasons = {}));\n\nclass NgbOffcanvasBackdrop {\n constructor() {\n this._nativeElement = inject(ElementRef).nativeElement;\n this._zone = inject(NgZone);\n this.dismissEvent = new EventEmitter();\n }\n ngOnInit() {\n this._zone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n ngbRunTransition(this._zone, this._nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n element.classList.add('show');\n }, { animation: this.animation, runningTransition: 'continue' });\n });\n }\n hide() {\n return ngbRunTransition(this._zone, this._nativeElement, ({ classList }) => classList.remove('show'), {\n animation: this.animation,\n runningTransition: 'stop',\n });\n }\n dismiss() {\n if (!this.static) {\n this.dismissEvent.emit(OffcanvasDismissReasons.BACKDROP_CLICK);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasBackdrop, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbOffcanvasBackdrop, isStandalone: true, selector: \"ngb-offcanvas-backdrop\", inputs: { animation: \"animation\", backdropClass: \"backdropClass\", static: \"static\" }, outputs: { dismissEvent: \"dismiss\" }, host: { listeners: { \"mousedown\": \"dismiss()\" }, properties: { \"class\": \"\\\"offcanvas-backdrop\\\" + (backdropClass ? \\\" \\\" + backdropClass : \\\"\\\")\", \"class.show\": \"!animation\", \"class.fade\": \"animation\" } }, ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasBackdrop, decorators: [{\n type: Component,\n args: [{\n selector: 'ngb-offcanvas-backdrop',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: '',\n host: {\n '[class]': '\"offcanvas-backdrop\" + (backdropClass ? \" \" + backdropClass : \"\")',\n '[class.show]': '!animation',\n '[class.fade]': 'animation',\n '(mousedown)': 'dismiss()',\n },\n }]\n }], propDecorators: { animation: [{\n type: Input\n }], backdropClass: [{\n type: Input\n }], static: [{\n type: Input\n }], dismissEvent: [{\n type: Output,\n args: ['dismiss']\n }] } });\n\nclass NgbOffcanvasPanel {\n constructor() {\n this._document = inject(DOCUMENT);\n this._elRef = inject((ElementRef));\n this._zone = inject(NgZone);\n this._closed$ = new Subject();\n this._elWithFocus = null; // element that is focused prior to offcanvas opening\n this.keyboard = true;\n this.position = 'start';\n this.dismissEvent = new EventEmitter();\n this.shown = new Subject();\n this.hidden = new Subject();\n }\n dismiss(reason) {\n this.dismissEvent.emit(reason);\n }\n ngOnInit() {\n this._elWithFocus = this._document.activeElement;\n this._zone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this._show();\n });\n }\n ngOnDestroy() {\n this._disableEventHandling();\n }\n hide() {\n const context = { animation: this.animation, runningTransition: 'stop' };\n const offcanvasTransition$ = ngbRunTransition(this._zone, this._elRef.nativeElement, (element) => {\n element.classList.remove('showing');\n element.classList.add('hiding');\n return () => element.classList.remove('show', 'hiding');\n }, context);\n offcanvasTransition$.subscribe(() => {\n this.hidden.next();\n this.hidden.complete();\n });\n this._disableEventHandling();\n this._restoreFocus();\n return offcanvasTransition$;\n }\n _show() {\n const context = { animation: this.animation, runningTransition: 'continue' };\n const offcanvasTransition$ = ngbRunTransition(this._zone, this._elRef.nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n element.classList.add('show', 'showing');\n return () => element.classList.remove('showing');\n }, context);\n offcanvasTransition$.subscribe(() => {\n this.shown.next();\n this.shown.complete();\n });\n this._enableEventHandling();\n this._setFocus();\n }\n _enableEventHandling() {\n const { nativeElement } = this._elRef;\n this._zone.runOutsideAngular(() => {\n fromEvent(nativeElement, 'keydown')\n .pipe(takeUntil(this._closed$), \n /* eslint-disable-next-line deprecation/deprecation */\n filter((e) => e.which === Key.Escape))\n .subscribe((event) => {\n if (this.keyboard) {\n requestAnimationFrame(() => {\n if (!event.defaultPrevented) {\n this._zone.run(() => this.dismiss(OffcanvasDismissReasons.ESC));\n }\n });\n }\n });\n });\n }\n _disableEventHandling() {\n this._closed$.next();\n }\n _setFocus() {\n const { nativeElement } = this._elRef;\n if (!nativeElement.contains(document.activeElement)) {\n const autoFocusable = nativeElement.querySelector(`[ngbAutofocus]`);\n const firstFocusable = getFocusableBoundaryElements(nativeElement)[0];\n const elementToFocus = autoFocusable || firstFocusable || nativeElement;\n elementToFocus.focus();\n }\n }\n _restoreFocus() {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n let elementToFocus;\n if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n }\n else {\n elementToFocus = body;\n }\n this._zone.runOutsideAngular(() => {\n setTimeout(() => elementToFocus.focus());\n this._elWithFocus = null;\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasPanel, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.0.0\", type: NgbOffcanvasPanel, isStandalone: true, selector: \"ngb-offcanvas-panel\", inputs: { animation: \"animation\", ariaLabelledBy: \"ariaLabelledBy\", ariaDescribedBy: \"ariaDescribedBy\", keyboard: \"keyboard\", panelClass: \"panelClass\", position: \"position\" }, outputs: { dismissEvent: \"dismiss\" }, host: { attributes: { \"role\": \"dialog\", \"tabindex\": \"-1\" }, properties: { \"class\": \"\\\"offcanvas offcanvas-\\\" + position + (panelClass ? \\\" \\\" + panelClass : \\\"\\\")\", \"attr.aria-modal\": \"true\", \"attr.aria-labelledby\": \"ariaLabelledBy\", \"attr.aria-describedby\": \"ariaDescribedBy\" } }, ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasPanel, decorators: [{\n type: Component,\n args: [{\n selector: 'ngb-offcanvas-panel',\n standalone: true,\n template: '',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': '\"offcanvas offcanvas-\" + position + (panelClass ? \" \" + panelClass : \"\")',\n role: 'dialog',\n tabindex: '-1',\n '[attr.aria-modal]': 'true',\n '[attr.aria-labelledby]': 'ariaLabelledBy',\n '[attr.aria-describedby]': 'ariaDescribedBy',\n },\n }]\n }], propDecorators: { animation: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], ariaDescribedBy: [{\n type: Input\n }], keyboard: [{\n type: Input\n }], panelClass: [{\n type: Input\n }], position: [{\n type: Input\n }], dismissEvent: [{\n type: Output,\n args: ['dismiss']\n }] } });\n\nclass NgbOffcanvasStack {\n constructor() {\n this._applicationRef = inject(ApplicationRef);\n this._injector = inject(Injector);\n this._document = inject(DOCUMENT);\n this._scrollBar = inject(ScrollBar);\n this._activePanelCmptHasChanged = new Subject();\n this._scrollBarRestoreFn = null;\n this._backdropAttributes = ['animation', 'backdropClass'];\n this._panelAttributes = ['animation', 'ariaDescribedBy', 'ariaLabelledBy', 'keyboard', 'panelClass', 'position'];\n this._activeInstance = new EventEmitter();\n const ngZone = inject(NgZone);\n // Trap focus on active PanelCmpt\n this._activePanelCmptHasChanged.subscribe(() => {\n if (this._panelCmpt) {\n ngbFocusTrap(ngZone, this._panelCmpt.location.nativeElement, this._activePanelCmptHasChanged);\n }\n });\n }\n _restoreScrollBar() {\n const scrollBarRestoreFn = this._scrollBarRestoreFn;\n if (scrollBarRestoreFn) {\n this._scrollBarRestoreFn = null;\n scrollBarRestoreFn();\n }\n }\n _hideScrollBar() {\n if (!this._scrollBarRestoreFn) {\n this._scrollBarRestoreFn = this._scrollBar.hide();\n }\n }\n open(contentInjector, content, options) {\n const containerEl = options.container instanceof HTMLElement\n ? options.container\n : isDefined(options.container)\n ? this._document.querySelector(options.container)\n : this._document.body;\n if (!containerEl) {\n throw new Error(`The specified offcanvas container \"${options.container || 'body'}\" was not found in the DOM.`);\n }\n if (!options.scroll) {\n this._hideScrollBar();\n }\n const activeOffcanvas = new NgbActiveOffcanvas();\n const contentRef = this._getContentRef(options.injector || contentInjector, content, activeOffcanvas);\n let backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(containerEl) : undefined;\n let panelCmptRef = this._attachWindowComponent(containerEl, contentRef.nodes);\n let ngbOffcanvasRef = new NgbOffcanvasRef(panelCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n this._registerOffcanvasRef(ngbOffcanvasRef);\n this._registerPanelCmpt(panelCmptRef);\n ngbOffcanvasRef.hidden.pipe(finalize(() => this._restoreScrollBar())).subscribe();\n activeOffcanvas.close = (result) => {\n ngbOffcanvasRef.close(result);\n };\n activeOffcanvas.dismiss = (reason) => {\n ngbOffcanvasRef.dismiss(reason);\n };\n this._applyPanelOptions(panelCmptRef.instance, options);\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackdropOptions(backdropCmptRef.instance, options);\n backdropCmptRef.changeDetectorRef.detectChanges();\n }\n panelCmptRef.changeDetectorRef.detectChanges();\n return ngbOffcanvasRef;\n }\n get activeInstance() {\n return this._activeInstance;\n }\n dismiss(reason) {\n this._offcanvasRef?.dismiss(reason);\n }\n hasOpenOffcanvas() {\n return !!this._offcanvasRef;\n }\n _attachBackdrop(containerEl) {\n let backdropCmptRef = createComponent(NgbOffcanvasBackdrop, {\n environmentInjector: this._applicationRef.injector,\n elementInjector: this._injector,\n });\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n _attachWindowComponent(containerEl, projectableNodes) {\n let panelCmptRef = createComponent(NgbOffcanvasPanel, {\n environmentInjector: this._applicationRef.injector,\n elementInjector: this._injector,\n projectableNodes,\n });\n this._applicationRef.attachView(panelCmptRef.hostView);\n containerEl.appendChild(panelCmptRef.location.nativeElement);\n return panelCmptRef;\n }\n _applyPanelOptions(windowInstance, options) {\n this._panelAttributes.forEach((optionName) => {\n if (isDefined(options[optionName])) {\n windowInstance[optionName] = options[optionName];\n }\n });\n }\n _applyBackdropOptions(backdropInstance, options) {\n this._backdropAttributes.forEach((optionName) => {\n if (isDefined(options[optionName])) {\n backdropInstance[optionName] = options[optionName];\n }\n });\n backdropInstance.static = options.backdrop === 'static';\n }\n _getContentRef(contentInjector, content, activeOffcanvas) {\n if (!content) {\n return new ContentRef([]);\n }\n else if (content instanceof TemplateRef) {\n return this._createFromTemplateRef(content, activeOffcanvas);\n }\n else if (isString(content)) {\n return this._createFromString(content);\n }\n else {\n return this._createFromComponent(contentInjector, content, activeOffcanvas);\n }\n }\n _createFromTemplateRef(templateRef, activeOffcanvas) {\n const context = {\n $implicit: activeOffcanvas,\n close(result) {\n activeOffcanvas.close(result);\n },\n dismiss(reason) {\n activeOffcanvas.dismiss(reason);\n },\n };\n const viewRef = templateRef.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n _createFromString(content) {\n const component = this._document.createTextNode(`${content}`);\n return new ContentRef([[component]]);\n }\n _createFromComponent(contentInjector, componentType, context) {\n const elementInjector = Injector.create({\n providers: [{ provide: NgbActiveOffcanvas, useValue: context }],\n parent: contentInjector,\n });\n const componentRef = createComponent(componentType, {\n environmentInjector: this._applicationRef.injector,\n elementInjector,\n });\n const componentNativeEl = componentRef.location.nativeElement;\n this._applicationRef.attachView(componentRef.hostView);\n return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);\n }\n _registerOffcanvasRef(ngbOffcanvasRef) {\n const unregisterOffcanvasRef = () => {\n this._offcanvasRef = undefined;\n this._activeInstance.emit(this._offcanvasRef);\n };\n this._offcanvasRef = ngbOffcanvasRef;\n this._activeInstance.emit(this._offcanvasRef);\n ngbOffcanvasRef.result.then(unregisterOffcanvasRef, unregisterOffcanvasRef);\n }\n _registerPanelCmpt(ngbPanelCmpt) {\n this._panelCmpt = ngbPanelCmpt;\n this._activePanelCmptHasChanged.next();\n ngbPanelCmpt.onDestroy(() => {\n this._panelCmpt = undefined;\n this._activePanelCmptHasChanged.next();\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasStack, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasStack, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasStack, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n\n/**\n * A service for opening an offcanvas.\n *\n * Creating an offcanvas is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n *\n * @since 12.1.0\n */\nclass NgbOffcanvas {\n constructor() {\n this._injector = inject(Injector);\n this._offcanvasStack = inject(NgbOffcanvasStack);\n this._config = inject(NgbOffcanvasConfig);\n }\n /**\n * Opens a new offcanvas panel with the specified content and supplied options.\n *\n * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n * then instances of those components can be injected with an instance of the `NgbActiveOffcanvas` class. You can then\n * use `NgbActiveOffcanvas` methods to close / dismiss offcanvas from \"inside\" of your component.\n *\n * Also see the [`NgbOffcanvasOptions`](#/components/offcanvas/api#NgbOffcanvasOptions) for the list of supported\n * options.\n */\n open(content, options = {}) {\n const combinedOptions = { ...this._config, animation: this._config.animation, ...options };\n return this._offcanvasStack.open(this._injector, content, combinedOptions);\n }\n /**\n * Returns an observable that holds the active offcanvas instance.\n */\n get activeInstance() {\n return this._offcanvasStack.activeInstance;\n }\n /**\n * Dismisses the currently displayed offcanvas with the supplied reason.\n */\n dismiss(reason) {\n this._offcanvasStack.dismiss(reason);\n }\n /**\n * Indicates if there is currently an open offcanvas in the application.\n */\n hasOpenOffcanvas() {\n return this._offcanvasStack.hasOpenOffcanvas();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvas, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvas, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvas, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nclass NgbOffcanvasModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbOffcanvasModule, decorators: [{\n type: NgModule,\n args: [{}]\n }] });\n\nconst NGB_MODULES = [\n NgbAccordionModule,\n NgbAlertModule,\n NgbCarouselModule,\n NgbCollapseModule,\n NgbDatepickerModule,\n NgbDropdownModule,\n NgbModalModule,\n NgbNavModule,\n NgbOffcanvasModule,\n NgbPaginationModule,\n NgbPopoverModule,\n NgbProgressbarModule,\n NgbRatingModule,\n NgbScrollSpyModule,\n NgbTimepickerModule,\n NgbToastModule,\n NgbTooltipModule,\n NgbTypeaheadModule,\n];\nclass NgbModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModule, imports: [NgbAccordionModule,\n NgbAlertModule,\n NgbCarouselModule,\n NgbCollapseModule,\n NgbDatepickerModule,\n NgbDropdownModule,\n NgbModalModule,\n NgbNavModule,\n NgbOffcanvasModule,\n NgbPaginationModule,\n NgbPopoverModule,\n NgbProgressbarModule,\n NgbRatingModule,\n NgbScrollSpyModule,\n NgbTimepickerModule,\n NgbToastModule,\n NgbTooltipModule,\n NgbTypeaheadModule], exports: [NgbAccordionModule,\n NgbAlertModule,\n NgbCarouselModule,\n NgbCollapseModule,\n NgbDatepickerModule,\n NgbDropdownModule,\n NgbModalModule,\n NgbNavModule,\n NgbOffcanvasModule,\n NgbPaginationModule,\n NgbPopoverModule,\n NgbProgressbarModule,\n NgbRatingModule,\n NgbScrollSpyModule,\n NgbTimepickerModule,\n NgbToastModule,\n NgbTooltipModule,\n NgbTypeaheadModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModule, imports: [NGB_MODULES, NgbAccordionModule,\n NgbAlertModule,\n NgbCarouselModule,\n NgbCollapseModule,\n NgbDatepickerModule,\n NgbDropdownModule,\n NgbModalModule,\n NgbNavModule,\n NgbOffcanvasModule,\n NgbPaginationModule,\n NgbPopoverModule,\n NgbProgressbarModule,\n NgbRatingModule,\n NgbScrollSpyModule,\n NgbTimepickerModule,\n NgbToastModule,\n NgbTooltipModule,\n NgbTypeaheadModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.0\", ngImport: i0, type: NgbModule, decorators: [{\n type: NgModule,\n args: [{ imports: NGB_MODULES, exports: NGB_MODULES }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ModalDismissReasons, NgbAccordionBody, NgbAccordionButton, NgbAccordionCollapse, NgbAccordionConfig, NgbAccordionDirective, NgbAccordionHeader, NgbAccordionItem, NgbAccordionModule, NgbAccordionToggle, NgbActiveModal, NgbActiveOffcanvas, NgbAlert, NgbAlertConfig, NgbAlertModule, NgbCalendar, NgbCalendarBuddhist, NgbCalendarEthiopian, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbCollapse, NgbCollapseConfig, NgbCollapseModule, NgbConfig, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDateStructAdapter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerContent, NgbDatepickerI18n, NgbDatepickerI18nAmharic, NgbDatepickerI18nDefault, NgbDatepickerI18nHebrew, NgbDatepickerKeyboardService, NgbDatepickerModule, NgbDatepickerMonth, NgbDropdown, NgbDropdownAnchor, NgbDropdownButtonItem, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle, NgbHighlight, NgbInputDatepicker, NgbInputDatepickerConfig, NgbModal, NgbModalConfig, NgbModalModule, NgbModalRef, NgbModule, NgbNav, NgbNavConfig, NgbNavContent, NgbNavItem, NgbNavItemRole, NgbNavLink, NgbNavLinkBase, NgbNavLinkButton, NgbNavModule, NgbNavOutlet, NgbNavPane, NgbOffcanvas, NgbOffcanvasConfig, NgbOffcanvasModule, NgbOffcanvasRef, NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPages, NgbPaginationPrevious, NgbPopover, NgbPopoverConfig, NgbPopoverModule, NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule, NgbProgressbarStacked, NgbRating, NgbRatingConfig, NgbRatingModule, NgbScrollSpy, NgbScrollSpyConfig, NgbScrollSpyFragment, NgbScrollSpyItem, NgbScrollSpyMenu, NgbScrollSpyModule, NgbScrollSpyService, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource, NgbTimeAdapter, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerI18n, NgbTimepickerModule, NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule, NgbTooltip, NgbTooltipConfig, NgbTooltipModule, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule, OffcanvasDismissReasons };\n","import { concat } from '../observable/concat';\nimport { of } from '../observable/of';\nexport function endWith(...values) {\n return (source) => concat(source, of(...values));\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { DomSanitizer, } from \"@angular/platform-browser\";\n\n@Pipe({ name: \"safeHtml\" })\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(value) {\n return this.sanitizer.bypassSecurityTrustHtml(value);\n }\n}\n","\n\n\n
\n\n \n
\n \n
\n
\n\n \n
\n

{{ 'general.pages.track.info1' | translate }}

\n

{{ 'general.pages.track.info2' | translate }}

\n

{{ 'general.pages.track.meetInfo2' | translate }}

\n

{{ 'general.pages.track.infoNoel' | translate }}

\n

5\" class=\"title\">{{ 'general.pages.track.info1' | translate }}

\n

{{ 'general.pages.track.info2' | translate }}

\n

{{ 'general.pages.track.meetInfo2' | translate }}

\n\n
\n

\n {{ ticket.locationName | uppercase}}\n

\n
\n\n
\n \n \n
\n\n \n \n {{ nikeAdsMsg }}\n \n \n\n
\n \n Use o cupom que será emitido no caixa
\n Converse com um dos atendentes para mais informações.\n
\n
\n\n
\n
\n
\n
\n \n
\n
\n\n \n
\n
\n

{{ 'general.pages.track.meetInfo3' | translate }}

\n
\n videocam\n
\n \n
\n
\n

{{ 'general.pages.track.itsYourTurn' | translate }}

\n\n

{{ticket.resource}}

\n\n

{{ 'general.pages.track.ticketCode' | translate }}

\n

{{ ticket.friendlyCode }}

\n
 
\n
\n
\n
\n \n \n keyboard_backspace\n {{ 'general.actions.backToStart' | translate }}\n \n
\n \n\n \n
\n
\n

{{ 'general.pages.track.feedback.title' | translate }}

\n \n \n \n \n \n {{ 'general.actions.send' | translate }}\n \n \n \n
\n
\n\n \n
\n \n
\n\n
\n \n {{ 'general.actions.cancel' | translate }}\n \n \n {{ 'general.actions.confirm' | translate }}\n \n \n {{ 'general.actions.getInLine' | translate }}\n \n
\n\n \n
\n \n
\n \n \n add\n {{ \"general.actions.enterNewQueue\" | translate }}\n \n
\n \n \n
\n\n
\n\n\n
\n

{{ 'general.pages.track.ticketWasCanceled' | translate }}

\n
\n \n
\n
\n\n\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { ExitAlertModalComponent } from 'src/app/components/exit-alert-modal/exit-alert-modal.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { TicketService, StorageService, NotificationService, FeedbackService, TerminalService } from '../../shared/services';\nimport { Ticket, Terminal, Notification, Customer, Service, Session, Location, Activity } from '../../shared/models';\nimport { Router } from '@angular/router';\nimport { brighten } from '../../shared/utils/colors';\nimport { finalize } from 'rxjs/operators';\nimport * as moment from 'moment';\nimport { environment } from 'src/environments/environment';\nimport { SoundAlertComponent } from 'src/app/components/sound-alert/sound-alert.component';\nimport { VidoconferenceAlertComponent } from '../../components/vidoconference-alert/vidoconference-alert.component';\nimport { DOCUMENT } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { PositionUtilService } from '../../shared/utils/position-util.service';\nimport { PresenceService } from '../../shared/services';\nimport { Template } from 'src/app/shared/models/template.model';\nimport { DeviceDetectorService } from 'ngx-device-detector';\n\nmoment.locale('pt-br');\n\n@Component({\n selector: 'app-track',\n templateUrl: './track.component.html',\n styleUrls: ['./track.component.scss']\n})\nexport class TrackComponent implements OnInit, OnDestroy {\n\n ticket: Ticket;\n terminal: Terminal;\n notification: Notification;\n accessKey: string;\n isLoading = false;\n isFeedbackLoading = false;\n audio: HTMLAudioElement;\n subscription: Subscription;\n feedbackForm: UntypedFormGroup;\n rateCtrl = new UntypedFormControl(null, Validators.required);\n customer: Customer;\n service: Service;\n location: Location;\n session: Session;\n childTicketId: number;\n userLocation: { latitude: number; longitude: number };\n watchPositionId: number;\n template: Template;\n slug: string;\n templateAux: Template;\n childTicketKey: string | null = null;\n canGoToChild = true;\n\n constructor(\n private router: Router,\n private storageService: StorageService,\n private ticketService: TicketService,\n private notificationService: NotificationService,\n private translateService: TranslateService,\n private feedbackService: FeedbackService,\n private positionUtil: PositionUtilService,\n private terminalService: TerminalService,\n private snackBar: MatSnackBar,\n private presenceService: PresenceService,\n public dialog: MatDialog,\n private deviceService: DeviceDetectorService,\n @Inject(DOCUMENT) private document: Document,\n ) {\n if (this.isSafari) {\n this.openSoundAlertModal();\n } else {\n this.audio = new Audio();\n }\n }\n\n ngOnInit() {\n this.feedbackForm = new UntypedFormGroup({comment: new UntypedFormControl('', [])});\n this.feedbackForm.addControl('rate', this.rateCtrl);\n\n this.terminal = this.storageService.currentTerminal;\n this.ticket = this.storageService.currentTicket;\n this.service = this.storageService.currentService;\n this.template = this.storageService.currentTemplate;\n this.getTicket();\n\n this.accessKey = localStorage.getItem('terminalKey');\n\n this.notificationService.add(this.ticket.id, this.ticket.serviceConfigId, [\n 'TicketConfirm',\n 'TicketCheckin',\n 'PrevisionChanged',\n 'TicketCalled',\n 'TicketStart',\n 'TicketComplete',\n 'TicketFeedback',\n 'TicketCancel',\n 'TicketReopened',\n 'TransferredTicket',\n ]);\n\n this.subscription = this.notificationService.notifications.subscribe(\n async (response) => {\n switch (response.eventName) {\n case 'TicketCheckin':\n this.getTicket();\n break;\n case 'TicketConfirm':\n this.getTicket();\n break;\n case 'PrevisionChanged':\n this.ticket.prevision = response.ticket.prevision;\n this.getPosition();\n break;\n case 'TicketCalled':\n if (this.ticket.id === response.ticket.id) {\n this.ticket.status = 'Called';\n this.ticket.resource = response.ticket.resource;\n this.playNotification();\n this.storageService.updateTicket(this.ticket);\n }\n break;\n case 'TicketStart':\n if (this.ticket.id === response.ticket.id) {\n this.ticket.status = 'Started';\n this.storageService.updateTicket(this.ticket);\n }\n break;\n case 'TicketComplete':\n if (response.ticket.id === this.ticket.id) {\n this.ticket = response.ticket;\n if (this.ticket.feedback === undefined) {\n setTimeout(\n () => {\n this.ticketService.getTicket(this.ticket.id).subscribe(ticket => {\n this.ticket.feedback = ticket.feedback;\n this.storageService.updateTicket(this.ticket);\n });\n }, 1000\n );\n }\n this.storageService.updateTicket(this.ticket);\n }\n break;\n case 'TicketFeedback':\n this.goToTickets()\n break;\n case 'TicketCancel':\n if (this.ticket.id === response.ticket.id) {\n this.ticket.status = 'Canceled';\n this.storageService.updateTicket(this.ticket);\n }\n break;\n case 'TicketReopened':\n this.ticket.status = 'Reopened';\n this.storageService.updateTicket(this.ticket);\n break;\n case 'TransferredTicket':\n this.addTransferredTicket(response.ticket);\n this.ticketService.getChildrenKey(this.ticket.id).subscribe(response=>{\n if(response) {\n this.childTicketKey = response;\n }\n });\n break;\n case 'ServiceConfigTicketStart':\n case 'ServiceConfigTicketCalled':\n case 'ServiceConfigTicketCheckin':\n if (this.ticket.serviceConfigId === response.ticket.serviceConfigId) {\n const positionEl = document.getElementById('queuePosition');\n const previsionEl = document.getElementById('prevision');\n\n this.ticket.position = await this.positionUtil.getNewPosition(this.ticket);\n this.storageService.updateTicket(this.ticket);\n this.storageService.updateTicketsPositions();\n\n if (this.isSafari) {\n this.forceRedraw(positionEl);\n this.forceRedraw(previsionEl);\n }\n }\n break;\n }\n }\n )\n this.ticketService.getChildrenKey(this.ticket.id).subscribe(response=>{\n if(response) {\n this.childTicketKey = response;\n }\n })\n }\n\n getChild() {\n this.ticketService.getChildrenKey(this.ticket.id).subscribe(response=>{\n if(response) {\n this.childTicketKey = response;\n }\n })\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n window.navigator.geolocation.clearWatch(this.watchPositionId);\n this.presenceService.dispose();\n this.presenceService.setPresence('offline', this.ticket);\n }\n\n openExitAlertModal() {\n this.dialog.open(ExitAlertModalComponent, {\n data: { ticketId: this.ticket.id, accessKey: this.accessKey, providerId: this.ticket.providerId }\n });\n }\n\n private async addTransferredTicket(ticket: Ticket): Promise{\n this.storageService.addTicket(ticket);\n this.storageService.updateTicketsPositions();\n this.childTicketId = ticket.id;\n }\n\n private trackChild(): void {\n const child = this.storageService.tickets.find(t => t.id === this.childTicketId);\n this.router.navigate([`/track/${child.accessKey}`]);\n }\n\n openSoundAlertModal() {\n const modal = this.dialog.open(SoundAlertComponent);\n\n modal.afterClosed().subscribe((audio: HTMLAudioElement) => {\n this.audio = audio;\n this.audio.src = '../../../assets/audio/no-sound.mp3';\n this.audio.load();\n this.audio.play();\n });\n }\n\n goToTickets() {\n this.storageService.removeTicket(this.ticket.id);\n\n if (this.childTicketId) {\n this.trackChild();\n } else {\n if (this.storageService.tickets.length > 0) {\n const ticket = this.storageService.tickets[0];\n this.storageService.setCurrentTicket(ticket);\n } else {\n this.storageService.setCurrentTicket(null);\n }\n this.router.navigate([`/tickets`]);\n }\n }\n\n get currentLang(): string {\n return this.translateService.currentLang;\n }\n\n private getTicket() {\n this.isLoading = true;\n this.ticketService.getTicket(this.ticket.id)\n .pipe(finalize(() => this.isLoading = false))\n .subscribe((response) => {\n\n const activitiesList: Activity[] = [];\n\n response.activities.forEach(activity=>{\n activitiesList.push({name: activity.name, at: activity.at})\n })\n this.slug = response.provider.slug;\n\n this.ticket = {\n id: response.id,\n prevision: response.estimatedServiceStart,\n status: response.status,\n resource: response.resource?.name,\n attendanceType: response.attendanceType,\n timezoneId: response.location.timezoneId,\n providerId: response.provider.id,\n position: this.ticket.position,\n serviceConfigId: response.session.serviceConfigId,\n friendlyCode: response.friendlyCode,\n accessKey: response.accessKey,\n locationId: response.location.id,\n locationName: response.location.name,\n locationAddress: response.location.address,\n locationCity: response.location.city,\n locationUF: response.location.state,\n providerName: response.provider.name,\n serviceName: response.service.name,\n feedback: response.feedback,\n smartCode: response.smartCode,\n priority: response.priority,\n activities: activitiesList\n };\n\n this.location = {\n id: response.location.id,\n name: response.location.name,\n address: {\n address: response.location.address,\n city: response.location.city,\n latitude: response.location.latitude,\n longitude: response.location.longitude,\n state: response.location.state,\n zipcode: response.location.zipcode\n }\n };\n\n this.session = {\n id: response.session.id,\n start: response.session.estimatedStart,\n end: response.session.estimatedEnd,\n name: '',\n hasSlotsLeft: false,\n checkinConfigEnabled: response.session.selfServiceCheckinEnabled,\n chekinStartDate: response.session.selfServiceChekinStartDate,\n chekinEndDate: response.session.selfServiceChekinEndDate\n };\n\n this.customer = {\n name: response.customer.name,\n email: response.customer.email,\n phone: response.customer.phone\n }\n\n if (this.feedbackDone) this.goToTickets();\n\n if (!this.isVideoConference) this.handlePermission();\n\n this.getPosition();\n this.showServiceGuidelines();\n if (this.isOlder || this.isOpened) {\n this.goToTickets();\n }\n this.presenceService.addVisibilityListener(this.ticket);\n this.presenceService.setPresence(this.document.visibilityState, this.ticket);\n this.getTemplate(this.slug);\n }\n );\n }\n\n private getTemplate(slug: string): void {\n this.terminalService.getTemplate(slug).subscribe((response) => {\n this.templateAux = response;\n //As linhas abaixo foram feitas para burlar o cache das cores pro caso do usuário estar utilizando duas empresas ao mesmo tempo.\n /* -> */ this.template.logoUrl != this.templateAux.logoUrl ? window.location.reload() : 0;\n /* -> */ this.template.templateColor != this.templateAux.templateColor ? window.location.reload() : 0;\n });\n }\n\n goToFeedback() {\n this.storageService.removeTicket(this.ticket.id);\n this.storageService.setCurrentTicket(null);\n this.document.location.href = `${environment.feedBackSiteUrl}ticket-details/${this.ticket.accessKey}`;\n }\n\n goHome() {\n this.router.navigate(['/home']);\n }\n\n getPosition() {\n const positionEl = document.getElementById('queuePosition');\n const previsionEl = document.getElementById('prevision');\n\n this.ticketService.getPosition(this.ticket.providerId, this.ticket.id).subscribe((response) => {\n if (response > 0) {\n this.ticket.position = response;\n\n if (this.isSafari) {\n this.forceRedraw(positionEl);\n this.forceRedraw(previsionEl);\n }\n }\n\n if (response === 1) {\n this.playNotification();\n }\n\n this.storageService.updateTicket(this.ticket);\n });\n }\n\n showServiceGuidelines() {\n if (this.isVideoConference && !this.deviceService.isDesktop() && this.service.isRecommendDesktop) {\n this.dialog.open(VidoconferenceAlertComponent);\n }\n\n }\n\n brighten(color: string, amount: number): string {\n return '#' + brighten(color, amount);\n }\n\n get nikeUrl() {\n const now = moment(Date.now()).startOf('day');\n let url = `https://www.nike.com.br/LandingPage/cyber-week/?utm_source=NFS&utm_campaign=FilaZero&utm_medium=${environment.nike.nikeStore[this.accessKey]}`;\n\n if (now.isBetween(moment('01/11/2020', 'DD/MM/YYYY'), moment('21/11/2020', 'DD/MM/YYYY')) || now.isAfter(moment('30/11/2020', 'DD/MM/YYYY'))) {\n url = `https://www.nike.com.br/Loja/Ofertas/Destaques/Todos/446-481-485?utm_source=NFS&utm_campaign=FilaZeroAgenda&utm_medium=${environment.nike.nikeStore[this.accessKey]}`;\n }\n\n return url;\n }\n\n get nikeAdsMsg() {\n const now = moment(Date.now()).startOf('day');\n let msg = '';\n\n // moment.isBetween() is exclusive.\n if (now.isBetween(moment('01/11/2020', 'DD/MM/YYYY'), moment('21/11/2020', 'DD/MM/YYYY'))) {\n msg = 'Junte-se a nós em Nike.com e use o Cupom NFS10 e aproveite 10% OFF*!';\n } else if (now.isBetween(moment('20/11/2020', 'DD/MM/YYYY'), moment('24/11/2020', 'DD/MM/YYYY'))) {\n msg = 'Junte-se a nós em Nike.com e use o Cupom CYBER25 e aproveite 25% OFF*!';\n } else if (now.isBetween(moment('23/11/2020', 'DD/MM/YYYY'), moment('01/12/2020', 'DD/MM/YYYY'))) {\n msg = 'Junte-se a nós em Nike.com e use o Cupom CYBER5 e aproveite 5% OFF*!';\n } else if (now.isBetween(moment('30/11/2020', 'DD/MM/YYYY'), moment('20/01/2021', 'DD/MM/YYYY'))) {\n msg = 'Junte-se a nós em Nike.com e use o Cupom NFS10 e aproveite 10% OFF*!';\n } else if (now.isAfter(moment('19/01/2021', 'DD/MM/YYYY'))) {\n msg = 'NAS COMPRAS ACIMA DE R$350 SUA COMPRA VIRA DESCONTO GANHE 20%OFF EM NIKE.COM';\n }\n\n return msg;\n }\n\n get isSafari() {\n return this.deviceService.getDeviceInfo().browser === 'Safari';\n }\n\n get isOlder() {\n const ticketPrevision = moment(this.ticket.prevision)\n .tz(this.ticket.timezoneId)\n .startOf('day');\n\n const now = moment(Date.now()).startOf('day');\n\n return now.diff(ticketPrevision, 'days') >= 1;\n }\n\n get message () {\n switch (this.ticket.status) {\n case 'Authorized':\n return 'general.pages.track.authorized.message';\n case 'Reopened':\n return 'general.pages.track.reopened.message';\n case 'Confirmed':\n return 'general.pages.track.confirmed.message';\n }\n }\n\n get feedbackDone(): boolean {\n return this.ticket.feedback && !!this.ticket.feedback.lastUpdate;\n }\n\n get isSessionClosed() {\n const now = moment(Date.now()).startOf('day');\n const sessionEnd = moment(this.session.end)\n .tz(this.ticket.timezoneId)\n .startOf('day');\n return sessionEnd.isBefore(now);\n }\n\n get isAuthorized () {\n return this.ticket.status === 'Authorized';\n }\n\n get isReopened () {\n return this.ticket.status === 'Reopened';\n }\n\n get isConfirmed () {\n return this.ticket.status === 'Confirmed';\n }\n\n get isCompleted() {\n return this.ticket.status === 'Completed';\n }\n\n get isOpened() {\n return this.ticket.status === 'Opened';\n }\n\n get isCanceled() {\n return this.ticket.status === 'Canceled';\n }\n\n get isValidStatus(): boolean {\n const statusList = [\n 'Opened', 'Authorized', 'Reopened', 'Confirmed', 'Checked',\n 'Called', 'Started', 'Completed', 'Canceled', 'Unauthorized'\n ];\n return statusList.includes(this.ticket.status);\n }\n\n get isNike() {\n return this.ticket.providerId === environment.nike.providerId;\n }\n\n get isQueuesNoel() {\n return this.ticket.providerId === environment.phoneNoelProviderId || this.ticket.providerId === environment.queueNoelProviderId;\n }\n\n get urlMeet(): string {\n return `${environment.urlMeet}${this.ticket.accessKey}?jwt=${this.jwt}&providerId=${this.ticket.providerId}&serviceConfigId=${this.ticket.serviceConfigId}&ticketId=${this.ticket.id}`;\n }\n\n get jwt() {\n let token = btoa('{\"alg\":\"HS256\",\"typ\":\"JWT\"}') + '.';\n if (this.customer) {\n token += btoa('{\"context\": {\"user\": {\"name\": \"' + this.customer.name + '\"}},\"aud\": \"jitsi\"}');\n } else {\n token += btoa('{\"context\": {\"user\": {\"name\": \"Usuário Filazero\"}},\"aud\": \"jitsi\"}');\n }\n return token;\n }\n\n get isVideoConference(): boolean {\n return this.ticket && this.ticket.attendanceType === 'VIDEO_CONFERENCE';\n }\n\n playNotification() {\n if (this.audio !== undefined) {\n this.audio.src = '../../../assets/audio/got-it-done.mp3';\n this.audio.load();\n this.audio.play();\n }\n }\n\n forceRedraw(element: HTMLElement) {\n if (!element) {\n return;\n }\n\n element.style.opacity = '0.9';\n\n setTimeout(() => {\n element.style.opacity = '1';\n }, 20);\n }\n\n onSubmitFeedback() {\n if (this.feedbackForm.valid) {\n this.ticket.feedback.rating = this.feedbackForm.controls['rate'].value;\n this.ticket.feedback.comment = this.feedbackForm.controls['comment'].value;\n\n this.isFeedbackLoading = true;\n\n this.feedbackService.update(this.ticket.feedback)\n .pipe(finalize(() => this.isFeedbackLoading = false))\n .subscribe((response: any) => {\n if (response.messages[0].code === '1040') {\n const snackRef = this.snackBar.open(\n this.translateService.instant('messages.success.1040'),\n this.translateService.instant('messages.success.success'),\n { duration: 3000 }\n );\n\n snackRef.afterDismissed().subscribe(() => {\n this.storageService.removeTicket(this.ticket.id);\n if (this.childTicketId) {\n this.trackChild();\n } else {\n if (this.storageService.tickets.length > 0) {\n const ticket = this.storageService.tickets[0];\n this.storageService.setCurrentTicket(ticket);\n } else {\n this.storageService.setCurrentTicket(null);\n }\n if(this.childTicketKey)\n this.router.navigate([`/track/${this.childTicketKey}`]);\n\n this.router.navigate([`/tickets`]);\n }\n });\n }\n })\n }\n }\n\n get inCheckinPeriod(): boolean {\n const chekinStartDate = moment(this.session.chekinStartDate);\n const chekinEndDate = moment(this.session.chekinEndDate);\n const now = moment(Date.now());\n return (chekinStartDate <= now) && (chekinEndDate >= now);\n }\n\n async check() {\n try {\n await this.ticketService.checkin(this.ticket.smartCode, this.ticket.providerId).toPromise();\n } catch (error) {\n }\n }\n\n async confirm() {\n try {\n await this.ticketService.confirm(this.ticket.id, this.ticket.providerId).toPromise();\n } catch (error) {\n if(error.error.messages[0].code === '2185') {\n this.snackBar.open(\n this.translateService.instant('messages.error.2185'),\n this.translateService.instant('messages.error.ok'),\n { duration: 3000, verticalPosition: 'top', horizontalPosition: 'right' }\n )}\n }\n }\n\n get canChekin(): boolean {\n if (!this.session.checkinConfigEnabled) return false;\n if (!this.inCheckinPeriod) return false;\n if (this.isVideoConference) return true;\n if (!this.userLocation || !this.location) return false;\n\n return (\n this.distanceBetween(\n this.userLocation.latitude,\n this.userLocation.longitude,\n +this.location.address.latitude,\n +this.location.address.longitude) <= 300\n );\n }\n\n /*\n * Code extracted from:\n * https://bitbucket.org/inventione/filazero-new-site/src/develop/src/app/modules/ticket/ticket-details/ticket-details.component.ts\n */\n distanceBetween(latFrom: number, lngFrom: number, latTo: number, lngTo: number) {\n const earthRadius = 6371e3; // meters\n const dLat = this.degreesToRadians(latTo - latFrom);\n const dLng = this.degreesToRadians(lngTo - lngFrom);\n\n const dLatFrom = this.degreesToRadians(latFrom);\n const dLatTo = this.degreesToRadians(latTo);\n\n const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.sin(dLng / 2) * Math.sin(dLng / 2) *\n Math.cos(dLatFrom) * Math.cos(dLatTo);\n\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\n return earthRadius * c;\n }\n\n degreesToRadians(degrees: number): number {\n return degrees * Math.PI / 180;\n }\n\n handlePermission(): void {\n const browser = this.deviceService.browser;\n const os = this.deviceService.os;\n if (browser !== 'Safari' && os !== 'iOS') {\n window.navigator.permissions.query({name:'geolocation'}).then((result) => {\n if (result.state == 'denied') return;\n this.currentLocation();\n });\n } else {\n this.currentLocation();\n }\n }\n\n currentLocation(): void {\n if (window.navigator && window.navigator.geolocation) {\n this.watchPositionId = window.navigator.geolocation.watchPosition(\n (position) => {\n this.userLocation = {\n latitude: position.coords.latitude,\n longitude: position.coords.longitude\n };\n }, (error) => {\n switch (error.code) {\n case 1:\n const snackRef = this.snackBar.open(\n 'Você não habilitou a localização',\n 'Habilitar',\n { verticalPosition: 'top' }\n );\n snackRef.onAction().subscribe(() => {\n this.handlePermission();\n });\n break;\n case 2:\n this.snackBar.open(\n 'Localização indisponível',\n 'Erro',\n { duration: 3000, verticalPosition: 'top' }\n );\n break;\n case 3:\n this.snackBar.open(\n 'Localização não habilitada',\n 'Erro',\n { duration: 3000, verticalPosition: 'top' }\n );\n break;\n }\n },\n {enableHighAccuracy:true}\n );\n }\n }\n goToChildTicket() {\n location.replace(`${environment.urlBase}track/${this.childTicketKey}`);\n }\n}\n","import { Routes } from '@angular/router';\nimport { HomeComponent } from './home/home.component';\nimport { QrCodeScanComponent } from './qr-code-scan/qr-code-scan.component';\nimport { ScheduleComponent } from './schedule/schedule.component';\nimport { StartComponent } from './start/start.component';\nimport { TicketComponent } from './ticket/ticket.component';\nimport { TrackComponent } from './track/track.component';\n\nexport const FilazeroRoutes: Routes = [\n { path: '', redirectTo: '/home', pathMatch: 'full' },\n { path: 'home', component: HomeComponent },\n { path: 'start/:accessKey', component: StartComponent },\n { path: 'schedule', component: ScheduleComponent },\n { path: 'track', component: TrackComponent },\n { path: 'track/:accessKey', component: TicketComponent },\n { path: 'qrcode-scan', component: QrCodeScanComponent },\n];","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HomeComponent } from './home/home.component';\nimport { RouterModule } from '@angular/router';\nimport { FilazeroRoutes } from './filazero.routing';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { HttpClient } from '@angular/common/http';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { ComponentsModule } from '../components/components.module';\nimport { MaterialModule } from '../material/material.module';\nimport { QrCodeScanComponent } from './qr-code-scan/qr-code-scan.component';\nimport { ZXingScannerModule } from '@zxing/ngx-scanner';\nimport { StartComponent } from './start/start.component';\nimport { PipeModule } from '../shared/pipe/pipe.module';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ScheduleComponent } from './schedule/schedule.component';\nimport { CustomFieldsModule } from '../modules/custom-fields/custom-fields.module';\nimport { TicketComponent } from './ticket/ticket.component';\nimport { TrackComponent } from './track/track.component';\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\nimport { LightboxModule } from 'ngx-lightbox';\n\nexport function HttpLoaderFactory(http: HttpClient) {\n return new TranslateHttpLoader(http);\n}\n\n@NgModule({\n declarations: [\n HomeComponent,\n StartComponent,\n ScheduleComponent,\n TrackComponent,\n TicketComponent,\n QrCodeScanComponent,\n ],\n imports: [\n CommonModule,\n ComponentsModule,\n MaterialModule,\n PipeModule,\n FormsModule,\n ReactiveFormsModule,\n ZXingScannerModule,\n CustomFieldsModule,\n NgbModule,\n RouterModule.forChild(FilazeroRoutes),\n LightboxModule,\n TranslateModule.forChild({\n loader: {\n provide: TranslateModule,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ]\n})\nexport class FilazeroModule { }\n","import { takeUntil, take } from 'rxjs/operators';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, inject, ElementRef, Directive, Inject, Optional, Input, ANIMATION_MODULE_TYPE, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, NgModule } from '@angular/core';\nimport { DOCUMENT, NgClass, CommonModule } from '@angular/common';\nimport * as i2 from '@angular/cdk/platform';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport * as i3 from '@angular/cdk/a11y';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport * as i4 from '@angular/cdk/bidi';\nimport * as i1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Subject } from 'rxjs';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** Time in ms to throttle repositioning after scroll events. */\nconst SCROLL_THROTTLE_MS = 20;\n/**\n * Creates an error to be thrown if the user supplied an invalid tooltip position.\n * @docs-private\n */\nfunction getMatTooltipInvalidPositionError(position) {\n return Error(`Tooltip position \"${position}\" is invalid.`);\n}\n/** Injection token that determines the scroll handling while a tooltip is visible. */\nconst MAT_TOOLTIP_SCROLL_STRATEGY = new InjectionToken('mat-tooltip-scroll-strategy', {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.reposition({ scrollThrottle: SCROLL_THROTTLE_MS });\n },\n});\n/** @docs-private */\nfunction MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition({ scrollThrottle: SCROLL_THROTTLE_MS });\n}\n/** @docs-private */\nconst MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_TOOLTIP_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY,\n};\n/** @docs-private */\nfunction MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY() {\n return {\n showDelay: 0,\n hideDelay: 0,\n touchendHideDelay: 1500,\n };\n}\n/** Injection token to be used to override the default options for `matTooltip`. */\nconst MAT_TOOLTIP_DEFAULT_OPTIONS = new InjectionToken('mat-tooltip-default-options', {\n providedIn: 'root',\n factory: MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY,\n});\n/**\n * CSS class that will be attached to the overlay panel.\n * @deprecated\n * @breaking-change 13.0.0 remove this variable\n */\nconst TOOLTIP_PANEL_CLASS = 'mat-mdc-tooltip-panel';\nconst PANEL_CLASS = 'tooltip-panel';\n/** Options used to bind passive event listeners. */\nconst passiveListenerOptions = normalizePassiveListenerOptions({ passive: true });\n// These constants were taken from MDC's `numbers` object. We can't import them from MDC,\n// because they have some top-level references to `window` which break during SSR.\nconst MIN_VIEWPORT_TOOLTIP_THRESHOLD = 8;\nconst UNBOUNDED_ANCHOR_GAP = 8;\nconst MIN_HEIGHT = 24;\nconst MAX_WIDTH = 200;\n/**\n * Directive that attaches a material design tooltip to the host element. Animates the showing and\n * hiding of a tooltip provided position (defaults to below the element).\n *\n * https://material.io/design/components/tooltips.html\n */\nclass MatTooltip {\n /** Allows the user to define the position of the tooltip relative to the parent element */\n get position() {\n return this._position;\n }\n set position(value) {\n if (value !== this._position) {\n this._position = value;\n if (this._overlayRef) {\n this._updatePosition(this._overlayRef);\n this._tooltipInstance?.show(0);\n this._overlayRef.updatePosition();\n }\n }\n }\n /**\n * Whether tooltip should be relative to the click or touch origin\n * instead of outside the element bounding box.\n */\n get positionAtOrigin() {\n return this._positionAtOrigin;\n }\n set positionAtOrigin(value) {\n this._positionAtOrigin = coerceBooleanProperty(value);\n this._detach();\n this._overlayRef = null;\n }\n /** Disables the display of the tooltip. */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n // If tooltip is disabled, hide immediately.\n if (this._disabled) {\n this.hide(0);\n }\n else {\n this._setupPointerEnterEventsIfNeeded();\n }\n }\n /** The default delay in ms before showing the tooltip after show is called */\n get showDelay() {\n return this._showDelay;\n }\n set showDelay(value) {\n this._showDelay = coerceNumberProperty(value);\n }\n /** The default delay in ms before hiding the tooltip after hide is called */\n get hideDelay() {\n return this._hideDelay;\n }\n set hideDelay(value) {\n this._hideDelay = coerceNumberProperty(value);\n if (this._tooltipInstance) {\n this._tooltipInstance._mouseLeaveHideDelay = this._hideDelay;\n }\n }\n /** The message to be displayed in the tooltip */\n get message() {\n return this._message;\n }\n set message(value) {\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this._message, 'tooltip');\n // If the message is not a string (e.g. number), convert it to a string and trim it.\n // Must convert with `String(value)`, not `${value}`, otherwise Closure Compiler optimises\n // away the string-conversion: https://github.com/angular/components/issues/20684\n this._message = value != null ? String(value).trim() : '';\n if (!this._message && this._isTooltipVisible()) {\n this.hide(0);\n }\n else {\n this._setupPointerEnterEventsIfNeeded();\n this._updateTooltipMessage();\n this._ngZone.runOutsideAngular(() => {\n // The `AriaDescriber` has some functionality that avoids adding a description if it's the\n // same as the `aria-label` of an element, however we can't know whether the tooltip trigger\n // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the\n // issue by deferring the description by a tick so Angular has time to set the `aria-label`.\n Promise.resolve().then(() => {\n this._ariaDescriber.describe(this._elementRef.nativeElement, this.message, 'tooltip');\n });\n });\n }\n }\n /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\n get tooltipClass() {\n return this._tooltipClass;\n }\n set tooltipClass(value) {\n this._tooltipClass = value;\n if (this._tooltipInstance) {\n this._setTooltipClass(this._tooltipClass);\n }\n }\n constructor(_overlay, _elementRef, _scrollDispatcher, _viewContainerRef, _ngZone, _platform, _ariaDescriber, _focusMonitor, scrollStrategy, _dir, _defaultOptions, _document) {\n this._overlay = _overlay;\n this._elementRef = _elementRef;\n this._scrollDispatcher = _scrollDispatcher;\n this._viewContainerRef = _viewContainerRef;\n this._ngZone = _ngZone;\n this._platform = _platform;\n this._ariaDescriber = _ariaDescriber;\n this._focusMonitor = _focusMonitor;\n this._dir = _dir;\n this._defaultOptions = _defaultOptions;\n this._position = 'below';\n this._positionAtOrigin = false;\n this._disabled = false;\n this._viewInitialized = false;\n this._pointerExitEventsInitialized = false;\n this._tooltipComponent = TooltipComponent;\n this._viewportMargin = 8;\n this._cssClassPrefix = 'mat-mdc';\n /**\n * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive\n * uses a long press gesture to show and hide, however it can conflict with the native browser\n * gestures. To work around the conflict, Angular Material disables native gestures on the\n * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable\n * elements). The different values for this option configure the touch event handling as follows:\n * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native\n * browser gestures on particular elements. In particular, it allows text selection on inputs\n * and textareas, and preserves the native browser dragging on elements marked as `draggable`.\n * - `on` - Enables touch gestures for all elements and disables native\n * browser gestures with no exceptions.\n * - `off` - Disables touch gestures. Note that this will prevent the tooltip from\n * showing on touch devices.\n */\n this.touchGestures = 'auto';\n this._message = '';\n /** Manually-bound passive event listeners. */\n this._passiveListeners = [];\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n this._scrollStrategy = scrollStrategy;\n this._document = _document;\n if (_defaultOptions) {\n this._showDelay = _defaultOptions.showDelay;\n this._hideDelay = _defaultOptions.hideDelay;\n if (_defaultOptions.position) {\n this.position = _defaultOptions.position;\n }\n if (_defaultOptions.positionAtOrigin) {\n this.positionAtOrigin = _defaultOptions.positionAtOrigin;\n }\n if (_defaultOptions.touchGestures) {\n this.touchGestures = _defaultOptions.touchGestures;\n }\n }\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (this._overlayRef) {\n this._updatePosition(this._overlayRef);\n }\n });\n this._viewportMargin = MIN_VIEWPORT_TOOLTIP_THRESHOLD;\n }\n ngAfterViewInit() {\n // This needs to happen after view init so the initial values for all inputs have been set.\n this._viewInitialized = true;\n this._setupPointerEnterEventsIfNeeded();\n this._focusMonitor\n .monitor(this._elementRef)\n .pipe(takeUntil(this._destroyed))\n .subscribe(origin => {\n // Note that the focus monitor runs outside the Angular zone.\n if (!origin) {\n this._ngZone.run(() => this.hide(0));\n }\n else if (origin === 'keyboard') {\n this._ngZone.run(() => this.show());\n }\n });\n }\n /**\n * Dispose the tooltip when destroyed.\n */\n ngOnDestroy() {\n const nativeElement = this._elementRef.nativeElement;\n clearTimeout(this._touchstartTimeout);\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._tooltipInstance = null;\n }\n // Clean up the event listeners set in the constructor\n this._passiveListeners.forEach(([event, listener]) => {\n nativeElement.removeEventListener(event, listener, passiveListenerOptions);\n });\n this._passiveListeners.length = 0;\n this._destroyed.next();\n this._destroyed.complete();\n this._ariaDescriber.removeDescription(nativeElement, this.message, 'tooltip');\n this._focusMonitor.stopMonitoring(nativeElement);\n }\n /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\n show(delay = this.showDelay, origin) {\n if (this.disabled || !this.message || this._isTooltipVisible()) {\n this._tooltipInstance?._cancelPendingAnimations();\n return;\n }\n const overlayRef = this._createOverlay(origin);\n this._detach();\n this._portal =\n this._portal || new ComponentPortal(this._tooltipComponent, this._viewContainerRef);\n const instance = (this._tooltipInstance = overlayRef.attach(this._portal).instance);\n instance._triggerElement = this._elementRef.nativeElement;\n instance._mouseLeaveHideDelay = this._hideDelay;\n instance\n .afterHidden()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._detach());\n this._setTooltipClass(this._tooltipClass);\n this._updateTooltipMessage();\n instance.show(delay);\n }\n /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\n hide(delay = this.hideDelay) {\n const instance = this._tooltipInstance;\n if (instance) {\n if (instance.isVisible()) {\n instance.hide(delay);\n }\n else {\n instance._cancelPendingAnimations();\n this._detach();\n }\n }\n }\n /** Shows/hides the tooltip */\n toggle(origin) {\n this._isTooltipVisible() ? this.hide() : this.show(undefined, origin);\n }\n /** Returns true if the tooltip is currently visible to the user */\n _isTooltipVisible() {\n return !!this._tooltipInstance && this._tooltipInstance.isVisible();\n }\n /** Create the overlay config and position strategy */\n _createOverlay(origin) {\n if (this._overlayRef) {\n const existingStrategy = this._overlayRef.getConfig()\n .positionStrategy;\n if ((!this.positionAtOrigin || !origin) && existingStrategy._origin instanceof ElementRef) {\n return this._overlayRef;\n }\n this._detach();\n }\n const scrollableAncestors = this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);\n // Create connected position strategy that listens for scroll events to reposition.\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this.positionAtOrigin ? origin || this._elementRef : this._elementRef)\n .withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`)\n .withFlexibleDimensions(false)\n .withViewportMargin(this._viewportMargin)\n .withScrollableContainers(scrollableAncestors);\n strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe(change => {\n this._updateCurrentPositionClass(change.connectionPair);\n if (this._tooltipInstance) {\n if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this._ngZone.run(() => this.hide(0));\n }\n }\n });\n this._overlayRef = this._overlay.create({\n direction: this._dir,\n positionStrategy: strategy,\n panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}`,\n scrollStrategy: this._scrollStrategy(),\n });\n this._updatePosition(this._overlayRef);\n this._overlayRef\n .detachments()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._detach());\n this._overlayRef\n .outsidePointerEvents()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._tooltipInstance?._handleBodyInteraction());\n this._overlayRef\n .keydownEvents()\n .pipe(takeUntil(this._destroyed))\n .subscribe(event => {\n if (this._isTooltipVisible() && event.keyCode === ESCAPE && !hasModifierKey(event)) {\n event.preventDefault();\n event.stopPropagation();\n this._ngZone.run(() => this.hide(0));\n }\n });\n if (this._defaultOptions?.disableTooltipInteractivity) {\n this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`);\n }\n return this._overlayRef;\n }\n /** Detaches the currently-attached tooltip. */\n _detach() {\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n }\n this._tooltipInstance = null;\n }\n /** Updates the position of the current tooltip. */\n _updatePosition(overlayRef) {\n const position = overlayRef.getConfig().positionStrategy;\n const origin = this._getOrigin();\n const overlay = this._getOverlayPosition();\n position.withPositions([\n this._addOffset({ ...origin.main, ...overlay.main }),\n this._addOffset({ ...origin.fallback, ...overlay.fallback }),\n ]);\n }\n /** Adds the configured offset to a position. Used as a hook for child classes. */\n _addOffset(position) {\n const offset = UNBOUNDED_ANCHOR_GAP;\n const isLtr = !this._dir || this._dir.value == 'ltr';\n if (position.originY === 'top') {\n position.offsetY = -offset;\n }\n else if (position.originY === 'bottom') {\n position.offsetY = offset;\n }\n else if (position.originX === 'start') {\n position.offsetX = isLtr ? -offset : offset;\n }\n else if (position.originX === 'end') {\n position.offsetX = isLtr ? offset : -offset;\n }\n return position;\n }\n /**\n * Returns the origin position and a fallback position based on the user's position preference.\n * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).\n */\n _getOrigin() {\n const isLtr = !this._dir || this._dir.value == 'ltr';\n const position = this.position;\n let originPosition;\n if (position == 'above' || position == 'below') {\n originPosition = { originX: 'center', originY: position == 'above' ? 'top' : 'bottom' };\n }\n else if (position == 'before' ||\n (position == 'left' && isLtr) ||\n (position == 'right' && !isLtr)) {\n originPosition = { originX: 'start', originY: 'center' };\n }\n else if (position == 'after' ||\n (position == 'right' && isLtr) ||\n (position == 'left' && !isLtr)) {\n originPosition = { originX: 'end', originY: 'center' };\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getMatTooltipInvalidPositionError(position);\n }\n const { x, y } = this._invertPosition(originPosition.originX, originPosition.originY);\n return {\n main: originPosition,\n fallback: { originX: x, originY: y },\n };\n }\n /** Returns the overlay position and a fallback position based on the user's preference */\n _getOverlayPosition() {\n const isLtr = !this._dir || this._dir.value == 'ltr';\n const position = this.position;\n let overlayPosition;\n if (position == 'above') {\n overlayPosition = { overlayX: 'center', overlayY: 'bottom' };\n }\n else if (position == 'below') {\n overlayPosition = { overlayX: 'center', overlayY: 'top' };\n }\n else if (position == 'before' ||\n (position == 'left' && isLtr) ||\n (position == 'right' && !isLtr)) {\n overlayPosition = { overlayX: 'end', overlayY: 'center' };\n }\n else if (position == 'after' ||\n (position == 'right' && isLtr) ||\n (position == 'left' && !isLtr)) {\n overlayPosition = { overlayX: 'start', overlayY: 'center' };\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getMatTooltipInvalidPositionError(position);\n }\n const { x, y } = this._invertPosition(overlayPosition.overlayX, overlayPosition.overlayY);\n return {\n main: overlayPosition,\n fallback: { overlayX: x, overlayY: y },\n };\n }\n /** Updates the tooltip message and repositions the overlay according to the new message length */\n _updateTooltipMessage() {\n // Must wait for the message to be painted to the tooltip so that the overlay can properly\n // calculate the correct positioning based on the size of the text.\n if (this._tooltipInstance) {\n this._tooltipInstance.message = this.message;\n this._tooltipInstance._markForCheck();\n this._ngZone.onMicrotaskEmpty.pipe(take(1), takeUntil(this._destroyed)).subscribe(() => {\n if (this._tooltipInstance) {\n this._overlayRef.updatePosition();\n }\n });\n }\n }\n /** Updates the tooltip class */\n _setTooltipClass(tooltipClass) {\n if (this._tooltipInstance) {\n this._tooltipInstance.tooltipClass = tooltipClass;\n this._tooltipInstance._markForCheck();\n }\n }\n /** Inverts an overlay position. */\n _invertPosition(x, y) {\n if (this.position === 'above' || this.position === 'below') {\n if (y === 'top') {\n y = 'bottom';\n }\n else if (y === 'bottom') {\n y = 'top';\n }\n }\n else {\n if (x === 'end') {\n x = 'start';\n }\n else if (x === 'start') {\n x = 'end';\n }\n }\n return { x, y };\n }\n /** Updates the class on the overlay panel based on the current position of the tooltip. */\n _updateCurrentPositionClass(connectionPair) {\n const { overlayY, originX, originY } = connectionPair;\n let newPosition;\n // If the overlay is in the middle along the Y axis,\n // it means that it's either before or after.\n if (overlayY === 'center') {\n // Note that since this information is used for styling, we want to\n // resolve `start` and `end` to their real values, otherwise consumers\n // would have to remember to do it themselves on each consumption.\n if (this._dir && this._dir.value === 'rtl') {\n newPosition = originX === 'end' ? 'left' : 'right';\n }\n else {\n newPosition = originX === 'start' ? 'left' : 'right';\n }\n }\n else {\n newPosition = overlayY === 'bottom' && originY === 'top' ? 'above' : 'below';\n }\n if (newPosition !== this._currentPosition) {\n const overlayRef = this._overlayRef;\n if (overlayRef) {\n const classPrefix = `${this._cssClassPrefix}-${PANEL_CLASS}-`;\n overlayRef.removePanelClass(classPrefix + this._currentPosition);\n overlayRef.addPanelClass(classPrefix + newPosition);\n }\n this._currentPosition = newPosition;\n }\n }\n /** Binds the pointer events to the tooltip trigger. */\n _setupPointerEnterEventsIfNeeded() {\n // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.\n if (this._disabled ||\n !this.message ||\n !this._viewInitialized ||\n this._passiveListeners.length) {\n return;\n }\n // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n // first tap from firing its click event or can cause the tooltip to open for clicks.\n if (this._platformSupportsMouseEvents()) {\n this._passiveListeners.push([\n 'mouseenter',\n event => {\n this._setupPointerExitEventsIfNeeded();\n let point = undefined;\n if (event.x !== undefined && event.y !== undefined) {\n point = event;\n }\n this.show(undefined, point);\n },\n ]);\n }\n else if (this.touchGestures !== 'off') {\n this._disableNativeGesturesIfNecessary();\n this._passiveListeners.push([\n 'touchstart',\n event => {\n const touch = event.targetTouches?.[0];\n const origin = touch ? { x: touch.clientX, y: touch.clientY } : undefined;\n // Note that it's important that we don't `preventDefault` here,\n // because it can prevent click events from firing on the element.\n this._setupPointerExitEventsIfNeeded();\n clearTimeout(this._touchstartTimeout);\n const DEFAULT_LONGPRESS_DELAY = 500;\n this._touchstartTimeout = setTimeout(() => this.show(undefined, origin), this._defaultOptions.touchLongPressShowDelay ?? DEFAULT_LONGPRESS_DELAY);\n },\n ]);\n }\n this._addListeners(this._passiveListeners);\n }\n _setupPointerExitEventsIfNeeded() {\n if (this._pointerExitEventsInitialized) {\n return;\n }\n this._pointerExitEventsInitialized = true;\n const exitListeners = [];\n if (this._platformSupportsMouseEvents()) {\n exitListeners.push([\n 'mouseleave',\n event => {\n const newTarget = event.relatedTarget;\n if (!newTarget || !this._overlayRef?.overlayElement.contains(newTarget)) {\n this.hide();\n }\n },\n ], ['wheel', event => this._wheelListener(event)]);\n }\n else if (this.touchGestures !== 'off') {\n this._disableNativeGesturesIfNecessary();\n const touchendListener = () => {\n clearTimeout(this._touchstartTimeout);\n this.hide(this._defaultOptions.touchendHideDelay);\n };\n exitListeners.push(['touchend', touchendListener], ['touchcancel', touchendListener]);\n }\n this._addListeners(exitListeners);\n this._passiveListeners.push(...exitListeners);\n }\n _addListeners(listeners) {\n listeners.forEach(([event, listener]) => {\n this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);\n });\n }\n _platformSupportsMouseEvents() {\n return !this._platform.IOS && !this._platform.ANDROID;\n }\n /** Listener for the `wheel` event on the element. */\n _wheelListener(event) {\n if (this._isTooltipVisible()) {\n const elementUnderPointer = this._document.elementFromPoint(event.clientX, event.clientY);\n const element = this._elementRef.nativeElement;\n // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it\n // won't fire if the user scrolls away using the wheel without moving their cursor. We\n // work around it by finding the element under the user's cursor and closing the tooltip\n // if it's not the trigger.\n if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {\n this.hide();\n }\n }\n }\n /** Disables the native browser gestures, based on how the tooltip has been configured. */\n _disableNativeGesturesIfNecessary() {\n const gestures = this.touchGestures;\n if (gestures !== 'off') {\n const element = this._elementRef.nativeElement;\n const style = element.style;\n // If gestures are set to `auto`, we don't disable text selection on inputs and\n // textareas, because it prevents the user from typing into them on iOS Safari.\n if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {\n style.userSelect =\n style.msUserSelect =\n style.webkitUserSelect =\n style.MozUserSelect =\n 'none';\n }\n // If we have `auto` gestures and the element uses native HTML dragging,\n // we don't set `-webkit-user-drag` because it prevents the native behavior.\n if (gestures === 'on' || !element.draggable) {\n style.webkitUserDrag = 'none';\n }\n style.touchAction = 'none';\n style.webkitTapHighlightColor = 'transparent';\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatTooltip, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i1.ScrollDispatcher }, { token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i2.Platform }, { token: i3.AriaDescriber }, { token: i3.FocusMonitor }, { token: MAT_TOOLTIP_SCROLL_STRATEGY }, { token: i4.Directionality }, { token: MAT_TOOLTIP_DEFAULT_OPTIONS, optional: true }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"17.2.0\", type: MatTooltip, isStandalone: true, selector: \"[matTooltip]\", inputs: { position: [\"matTooltipPosition\", \"position\"], positionAtOrigin: [\"matTooltipPositionAtOrigin\", \"positionAtOrigin\"], disabled: [\"matTooltipDisabled\", \"disabled\"], showDelay: [\"matTooltipShowDelay\", \"showDelay\"], hideDelay: [\"matTooltipHideDelay\", \"hideDelay\"], touchGestures: [\"matTooltipTouchGestures\", \"touchGestures\"], message: [\"matTooltip\", \"message\"], tooltipClass: [\"matTooltipClass\", \"tooltipClass\"] }, host: { properties: { \"class.mat-mdc-tooltip-disabled\": \"disabled\" }, classAttribute: \"mat-mdc-tooltip-trigger\" }, exportAs: [\"matTooltip\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatTooltip, decorators: [{\n type: Directive,\n args: [{\n selector: '[matTooltip]',\n exportAs: 'matTooltip',\n host: {\n 'class': 'mat-mdc-tooltip-trigger',\n '[class.mat-mdc-tooltip-disabled]': 'disabled',\n },\n standalone: true,\n }]\n }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ElementRef }, { type: i1.ScrollDispatcher }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i2.Platform }, { type: i3.AriaDescriber }, { type: i3.FocusMonitor }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TOOLTIP_SCROLL_STRATEGY]\n }] }, { type: i4.Directionality }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_TOOLTIP_DEFAULT_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }], propDecorators: { position: [{\n type: Input,\n args: ['matTooltipPosition']\n }], positionAtOrigin: [{\n type: Input,\n args: ['matTooltipPositionAtOrigin']\n }], disabled: [{\n type: Input,\n args: ['matTooltipDisabled']\n }], showDelay: [{\n type: Input,\n args: ['matTooltipShowDelay']\n }], hideDelay: [{\n type: Input,\n args: ['matTooltipHideDelay']\n }], touchGestures: [{\n type: Input,\n args: ['matTooltipTouchGestures']\n }], message: [{\n type: Input,\n args: ['matTooltip']\n }], tooltipClass: [{\n type: Input,\n args: ['matTooltipClass']\n }] } });\n/**\n * Internal component that wraps the tooltip's content.\n * @docs-private\n */\nclass TooltipComponent {\n constructor(_changeDetectorRef, _elementRef, animationMode) {\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n /* Whether the tooltip text overflows to multiple lines */\n this._isMultiline = false;\n /** Whether interactions on the page should close the tooltip */\n this._closeOnInteraction = false;\n /** Whether the tooltip is currently visible. */\n this._isVisible = false;\n /** Subject for notifying that the tooltip has been hidden from the view */\n this._onHide = new Subject();\n /** Name of the show animation and the class that toggles it. */\n this._showAnimation = 'mat-mdc-tooltip-show';\n /** Name of the hide animation and the class that toggles it. */\n this._hideAnimation = 'mat-mdc-tooltip-hide';\n this._animationsDisabled = animationMode === 'NoopAnimations';\n }\n /**\n * Shows the tooltip with an animation originating from the provided origin\n * @param delay Amount of milliseconds to the delay showing the tooltip.\n */\n show(delay) {\n // Cancel the delayed hide if it is scheduled\n if (this._hideTimeoutId != null) {\n clearTimeout(this._hideTimeoutId);\n }\n this._showTimeoutId = setTimeout(() => {\n this._toggleVisibility(true);\n this._showTimeoutId = undefined;\n }, delay);\n }\n /**\n * Begins the animation to hide the tooltip after the provided delay in ms.\n * @param delay Amount of milliseconds to delay showing the tooltip.\n */\n hide(delay) {\n // Cancel the delayed show if it is scheduled\n if (this._showTimeoutId != null) {\n clearTimeout(this._showTimeoutId);\n }\n this._hideTimeoutId = setTimeout(() => {\n this._toggleVisibility(false);\n this._hideTimeoutId = undefined;\n }, delay);\n }\n /** Returns an observable that notifies when the tooltip has been hidden from view. */\n afterHidden() {\n return this._onHide;\n }\n /** Whether the tooltip is being displayed. */\n isVisible() {\n return this._isVisible;\n }\n ngOnDestroy() {\n this._cancelPendingAnimations();\n this._onHide.complete();\n this._triggerElement = null;\n }\n /**\n * Interactions on the HTML body should close the tooltip immediately as defined in the\n * material design spec.\n * https://material.io/design/components/tooltips.html#behavior\n */\n _handleBodyInteraction() {\n if (this._closeOnInteraction) {\n this.hide(0);\n }\n }\n /**\n * Marks that the tooltip needs to be checked in the next change detection run.\n * Mainly used for rendering the initial text before positioning a tooltip, which\n * can be problematic in components with OnPush change detection.\n */\n _markForCheck() {\n this._changeDetectorRef.markForCheck();\n }\n _handleMouseLeave({ relatedTarget }) {\n if (!relatedTarget || !this._triggerElement.contains(relatedTarget)) {\n if (this.isVisible()) {\n this.hide(this._mouseLeaveHideDelay);\n }\n else {\n this._finalizeAnimation(false);\n }\n }\n }\n /**\n * Callback for when the timeout in this.show() gets completed.\n * This method is only needed by the mdc-tooltip, and so it is only implemented\n * in the mdc-tooltip, not here.\n */\n _onShow() {\n this._isMultiline = this._isTooltipMultiline();\n this._markForCheck();\n }\n /** Whether the tooltip text has overflown to the next line */\n _isTooltipMultiline() {\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n return rect.height > MIN_HEIGHT && rect.width >= MAX_WIDTH;\n }\n /** Event listener dispatched when an animation on the tooltip finishes. */\n _handleAnimationEnd({ animationName }) {\n if (animationName === this._showAnimation || animationName === this._hideAnimation) {\n this._finalizeAnimation(animationName === this._showAnimation);\n }\n }\n /** Cancels any pending animation sequences. */\n _cancelPendingAnimations() {\n if (this._showTimeoutId != null) {\n clearTimeout(this._showTimeoutId);\n }\n if (this._hideTimeoutId != null) {\n clearTimeout(this._hideTimeoutId);\n }\n this._showTimeoutId = this._hideTimeoutId = undefined;\n }\n /** Handles the cleanup after an animation has finished. */\n _finalizeAnimation(toVisible) {\n if (toVisible) {\n this._closeOnInteraction = true;\n }\n else if (!this.isVisible()) {\n this._onHide.next();\n }\n }\n /** Toggles the visibility of the tooltip element. */\n _toggleVisibility(isVisible) {\n // We set the classes directly here ourselves so that toggling the tooltip state\n // isn't bound by change detection. This allows us to hide it even if the\n // view ref has been detached from the CD tree.\n const tooltip = this._tooltip.nativeElement;\n const showClass = this._showAnimation;\n const hideClass = this._hideAnimation;\n tooltip.classList.remove(isVisible ? hideClass : showClass);\n tooltip.classList.add(isVisible ? showClass : hideClass);\n if (this._isVisible !== isVisible) {\n this._isVisible = isVisible;\n this._changeDetectorRef.markForCheck();\n }\n // It's common for internal apps to disable animations using `* { animation: none !important }`\n // which can break the opening sequence. Try to detect such cases and work around them.\n if (isVisible && !this._animationsDisabled && typeof getComputedStyle === 'function') {\n const styles = getComputedStyle(tooltip);\n // Use `getPropertyValue` to avoid issues with property renaming.\n if (styles.getPropertyValue('animation-duration') === '0s' ||\n styles.getPropertyValue('animation-name') === 'none') {\n this._animationsDisabled = true;\n }\n }\n if (isVisible) {\n this._onShow();\n }\n if (this._animationsDisabled) {\n tooltip.classList.add('_mat-animation-noopable');\n this._finalizeAnimation(isVisible);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: TooltipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"17.2.0\", type: TooltipComponent, isStandalone: true, selector: \"mat-tooltip-component\", host: { attributes: { \"aria-hidden\": \"true\" }, listeners: { \"mouseleave\": \"_handleMouseLeave($event)\" }, properties: { \"style.zoom\": \"isVisible() ? 1 : null\" } }, viewQueries: [{ propertyName: \"_tooltip\", first: true, predicate: [\"tooltip\"], descendants: true, static: true }], ngImport: i0, template: \"\\n
{{message}}
\\n\\n\", styles: [\".mdc-tooltip__surface{word-break:break-all;word-break:var(--mdc-tooltip-word-break, normal);overflow-wrap:anywhere}.mdc-tooltip--showing-transition .mdc-tooltip__surface-animation{transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-tooltip--hide-transition .mdc-tooltip__surface-animation{transition:opacity 75ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-tooltip{position:fixed;display:none;z-index:9}.mdc-tooltip-wrapper--rich{position:relative}.mdc-tooltip--shown,.mdc-tooltip--showing,.mdc-tooltip--hide{display:inline-flex}.mdc-tooltip--shown.mdc-tooltip--rich,.mdc-tooltip--showing.mdc-tooltip--rich,.mdc-tooltip--hide.mdc-tooltip--rich{display:inline-block;left:-320px;position:absolute}.mdc-tooltip__surface{line-height:16px;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center}.mdc-tooltip__surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:\\\"\\\";pointer-events:none}@media screen and (forced-colors: active){.mdc-tooltip__surface::before{border-color:CanvasText}}.mdc-tooltip--rich .mdc-tooltip__surface{align-items:flex-start;display:flex;flex-direction:column;min-height:24px;min-width:40px;max-width:320px;position:relative}.mdc-tooltip--multiline .mdc-tooltip__surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mdc-tooltip__surface,.mdc-tooltip--multiline .mdc-tooltip__surface[dir=rtl]{text-align:right}.mdc-tooltip__surface .mdc-tooltip__title{margin:0 8px}.mdc-tooltip__surface .mdc-tooltip__content{max-width:calc(200px - 2*8px);margin:8px;text-align:left}[dir=rtl] .mdc-tooltip__surface .mdc-tooltip__content,.mdc-tooltip__surface .mdc-tooltip__content[dir=rtl]{text-align:right}.mdc-tooltip--rich .mdc-tooltip__surface .mdc-tooltip__content{max-width:calc(320px - 2*8px);align-self:stretch}.mdc-tooltip__surface .mdc-tooltip__content-link{text-decoration:none}.mdc-tooltip--rich-actions,.mdc-tooltip__content,.mdc-tooltip__title{z-index:1}.mdc-tooltip__surface-animation{opacity:0;transform:scale(0.8);will-change:transform,opacity}.mdc-tooltip--shown .mdc-tooltip__surface-animation{transform:scale(1);opacity:1}.mdc-tooltip--hide .mdc-tooltip__surface-animation{transform:scale(1)}.mdc-tooltip__caret-surface-top,.mdc-tooltip__caret-surface-bottom{position:absolute;height:24px;width:24px;transform:rotate(35deg) skewY(20deg) scaleX(0.9396926208)}.mdc-tooltip__caret-surface-top .mdc-elevation-overlay,.mdc-tooltip__caret-surface-bottom .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-tooltip__caret-surface-bottom{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);outline:1px solid rgba(0,0,0,0);z-index:-1}@media screen and (forced-colors: active){.mdc-tooltip__caret-surface-bottom{outline-color:CanvasText}}.mat-mdc-tooltip .mdc-tooltip__surface{background-color:var(--mdc-plain-tooltip-container-color)}.mat-mdc-tooltip .mdc-tooltip__surface{border-radius:var(--mdc-plain-tooltip-container-shape)}.mat-mdc-tooltip .mdc-tooltip__caret-surface-top,.mat-mdc-tooltip .mdc-tooltip__caret-surface-bottom{border-radius:var(--mdc-plain-tooltip-container-shape)}.mat-mdc-tooltip .mdc-tooltip__surface{color:var(--mdc-plain-tooltip-supporting-text-color)}.mat-mdc-tooltip .mdc-tooltip__surface{font-family:var(--mdc-plain-tooltip-supporting-text-font);line-height:var(--mdc-plain-tooltip-supporting-text-line-height);font-size:var(--mdc-plain-tooltip-supporting-text-size);font-weight:var(--mdc-plain-tooltip-supporting-text-weight);letter-spacing:var(--mdc-plain-tooltip-supporting-text-tracking)}.mat-mdc-tooltip{position:relative;transform:scale(0)}.mat-mdc-tooltip::before{content:\\\"\\\";top:0;right:0;bottom:0;left:0;z-index:-1;position:absolute}.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before{top:-8px}.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before{bottom:-8px}.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before{left:-8px}.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before{right:-8px}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-panel.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards}\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: TooltipComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tooltip-component', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n // Forces the element to have a layout in IE and Edge. This fixes issues where the element\n // won't be rendered if the animations are disabled or there is no web animations polyfill.\n '[style.zoom]': 'isVisible() ? 1 : null',\n '(mouseleave)': '_handleMouseLeave($event)',\n 'aria-hidden': 'true',\n }, standalone: true, imports: [NgClass], template: \"\\n
{{message}}
\\n\\n\", styles: [\".mdc-tooltip__surface{word-break:break-all;word-break:var(--mdc-tooltip-word-break, normal);overflow-wrap:anywhere}.mdc-tooltip--showing-transition .mdc-tooltip__surface-animation{transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-tooltip--hide-transition .mdc-tooltip__surface-animation{transition:opacity 75ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-tooltip{position:fixed;display:none;z-index:9}.mdc-tooltip-wrapper--rich{position:relative}.mdc-tooltip--shown,.mdc-tooltip--showing,.mdc-tooltip--hide{display:inline-flex}.mdc-tooltip--shown.mdc-tooltip--rich,.mdc-tooltip--showing.mdc-tooltip--rich,.mdc-tooltip--hide.mdc-tooltip--rich{display:inline-block;left:-320px;position:absolute}.mdc-tooltip__surface{line-height:16px;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center}.mdc-tooltip__surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:\\\"\\\";pointer-events:none}@media screen and (forced-colors: active){.mdc-tooltip__surface::before{border-color:CanvasText}}.mdc-tooltip--rich .mdc-tooltip__surface{align-items:flex-start;display:flex;flex-direction:column;min-height:24px;min-width:40px;max-width:320px;position:relative}.mdc-tooltip--multiline .mdc-tooltip__surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mdc-tooltip__surface,.mdc-tooltip--multiline .mdc-tooltip__surface[dir=rtl]{text-align:right}.mdc-tooltip__surface .mdc-tooltip__title{margin:0 8px}.mdc-tooltip__surface .mdc-tooltip__content{max-width:calc(200px - 2*8px);margin:8px;text-align:left}[dir=rtl] .mdc-tooltip__surface .mdc-tooltip__content,.mdc-tooltip__surface .mdc-tooltip__content[dir=rtl]{text-align:right}.mdc-tooltip--rich .mdc-tooltip__surface .mdc-tooltip__content{max-width:calc(320px - 2*8px);align-self:stretch}.mdc-tooltip__surface .mdc-tooltip__content-link{text-decoration:none}.mdc-tooltip--rich-actions,.mdc-tooltip__content,.mdc-tooltip__title{z-index:1}.mdc-tooltip__surface-animation{opacity:0;transform:scale(0.8);will-change:transform,opacity}.mdc-tooltip--shown .mdc-tooltip__surface-animation{transform:scale(1);opacity:1}.mdc-tooltip--hide .mdc-tooltip__surface-animation{transform:scale(1)}.mdc-tooltip__caret-surface-top,.mdc-tooltip__caret-surface-bottom{position:absolute;height:24px;width:24px;transform:rotate(35deg) skewY(20deg) scaleX(0.9396926208)}.mdc-tooltip__caret-surface-top .mdc-elevation-overlay,.mdc-tooltip__caret-surface-bottom .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-tooltip__caret-surface-bottom{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);outline:1px solid rgba(0,0,0,0);z-index:-1}@media screen and (forced-colors: active){.mdc-tooltip__caret-surface-bottom{outline-color:CanvasText}}.mat-mdc-tooltip .mdc-tooltip__surface{background-color:var(--mdc-plain-tooltip-container-color)}.mat-mdc-tooltip .mdc-tooltip__surface{border-radius:var(--mdc-plain-tooltip-container-shape)}.mat-mdc-tooltip .mdc-tooltip__caret-surface-top,.mat-mdc-tooltip .mdc-tooltip__caret-surface-bottom{border-radius:var(--mdc-plain-tooltip-container-shape)}.mat-mdc-tooltip .mdc-tooltip__surface{color:var(--mdc-plain-tooltip-supporting-text-color)}.mat-mdc-tooltip .mdc-tooltip__surface{font-family:var(--mdc-plain-tooltip-supporting-text-font);line-height:var(--mdc-plain-tooltip-supporting-text-line-height);font-size:var(--mdc-plain-tooltip-supporting-text-size);font-weight:var(--mdc-plain-tooltip-supporting-text-weight);letter-spacing:var(--mdc-plain-tooltip-supporting-text-tracking)}.mat-mdc-tooltip{position:relative;transform:scale(0)}.mat-mdc-tooltip::before{content:\\\"\\\";top:0;right:0;bottom:0;left:0;z-index:-1;position:absolute}.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before{top:-8px}.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before{bottom:-8px}.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before{left:-8px}.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before{right:-8px}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-panel.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards}\"] }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }], propDecorators: { _tooltip: [{\n type: ViewChild,\n args: ['tooltip', {\n // Use a static query here since we interact directly with\n // the DOM which can happen before `ngAfterViewInit`.\n static: true,\n }]\n }] } });\n\n/**\n * Animations used by MatTooltip.\n * @docs-private\n */\nconst matTooltipAnimations = {\n /** Animation that transitions a tooltip in and out. */\n tooltipState: trigger('state', [\n // TODO(crisbeto): these values are based on MDC's CSS.\n // We should be able to use their styles directly once we land #19432.\n state('initial, void, hidden', style({ opacity: 0, transform: 'scale(0.8)' })),\n state('visible', style({ transform: 'scale(1)' })),\n transition('* => visible', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),\n transition('* => hidden', animate('75ms cubic-bezier(0.4, 0, 1, 1)')),\n ]),\n};\n\nclass MatTooltipModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatTooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.2.0\", ngImport: i0, type: MatTooltipModule, imports: [A11yModule, CommonModule, OverlayModule, MatCommonModule, MatTooltip, TooltipComponent], exports: [MatTooltip, TooltipComponent, MatCommonModule, CdkScrollableModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatTooltipModule, providers: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [A11yModule, CommonModule, OverlayModule, MatCommonModule, MatCommonModule, CdkScrollableModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.2.0\", ngImport: i0, type: MatTooltipModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [A11yModule, CommonModule, OverlayModule, MatCommonModule, MatTooltip, TooltipComponent],\n exports: [MatTooltip, TooltipComponent, MatCommonModule, CdkScrollableModule],\n providers: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_TOOLTIP_DEFAULT_OPTIONS, MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY, MAT_TOOLTIP_SCROLL_STRATEGY, MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY, MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER, MatTooltip, MatTooltipModule, SCROLL_THROTTLE_MS, TOOLTIP_PANEL_CLASS, TooltipComponent, getMatTooltipInvalidPositionError, matTooltipAnimations };\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatDialogModule,\n MatCheckboxModule,\n MatFormFieldModule,\n MatInputModule,\n MatSnackBarModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n MatSelectModule,\n MatCardModule\n ],\n exports: [\n MatButtonModule,\n MatIconModule,\n MatDialogModule,\n MatCheckboxModule,\n MatFormFieldModule,\n MatInputModule,\n MatSnackBarModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n MatSelectModule,\n MatCardModule\n ]\n})\nexport class MaterialModule { }\n","export class FieldBase {\n id: number;\n title: string;\n type: string;\n required: boolean;\n maxLength: number;\n\n constructor(obj: {\n id?: number;\n title?: string;\n type?: string;\n required?: boolean;\n maxLength?: number;\n } = {}) {\n this.id = obj.id;\n this.title = obj.title;\n this.type = obj.type;\n this.required = obj.required;\n this.maxLength = obj.maxLength;\n }\n}\n","import { FieldBase } from './field-base.model';\n\nexport class FieldInput extends FieldBase {\n constructor(obj: {} = {}) {\n super(obj);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { environment } from 'src/environments/environment';\nimport { Observable } from 'rxjs';\n\nimport { FieldBase } from './models/field-base.model';\nimport { FieldInput } from './models/field-input.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CustomFieldService {\n ENDPOINT = environment.urlApi + 'api/providers/';\n\n constructor(private readonly http: HttpClient) { }\n\n getCustomFields(locationId: number, serviceConfigList: number[]) {\n return new Observable(observer => {\n this.http.get(environment.urlApi + `v2/scheduling/self-service/locations/${locationId}/custom-fields`).subscribe((response) => {\n observer.next(this.buildFieldList(response));\n observer.complete();\n });\n });\n }\n\n getCustomFieldOptions(providerId: number, locationId: number, customFieldId: number): Observable {\n return this.http.get(`${this.ENDPOINT}${providerId}/locations/${locationId}/custom-fields/${customFieldId}/options`);\n }\n\n private buildFieldList(response: FieldBase[]): FieldBase[] {\n return response.map((field) => this.buildField(field));\n }\n\n private buildField(field: any): FieldBase {\n const data = new FieldInput({\n id: field.id,\n title: field.title,\n required: field.required,\n maxLength: field.maxLength\n });\n\n switch (field.type) {\n case 0:\n data.type = 'text';\n break;\n case 1:\n data.type = 'number';\n break;\n case 2:\n data.type = 'date';\n break;\n case 3:\n data.type = 'cpf';\n break;\n case 4:\n data.type = 'select';\n break;\n case 5:\n data.type = 'cnpj';\n break;\n default:\n data.type = 'text';\n break;\n }\n\n return data;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MaterialModule } from 'src/app/material/material.module';\nimport { NgxMaskDirective, NgxMaskPipe } from 'ngx-mask';\nimport { CustomFieldService } from './custom-field.service';\nimport { CustomFieldsComponent } from './components/custom-fields.component';\nimport { CustomFieldsFormComponent } from './components/custom-fields-form.component';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MaterialModule,\n NgxMaskDirective, NgxMaskPipe,\n TranslateModule\n ],\n declarations: [\n CustomFieldsComponent,\n CustomFieldsFormComponent\n ],\n providers: [\n CustomFieldService\n ],\n exports: [\n CustomFieldsComponent,\n CustomFieldsFormComponent\n ]\n})\nexport class CustomFieldsModule {\n constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-not-found',\n templateUrl: './not-found.component.html',\n styleUrls: ['./not-found.component.scss']\n})\nexport class NotFoundComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","\n\n
\n
\n \n
\n\n
\n

Que pena! :(

\n

Não conseguimos encontrar a página que você está procurando.

\n \n
\n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NotFoundComponent } from './not-found/not-found.component';\nimport { ComponentsModule } from 'src/app/components/components.module';\nimport { MaterialModule } from 'src/app/material/material.module';\nimport { RouterModule } from '@angular/router';\n\n\n\n@NgModule({\n declarations: [\n NotFoundComponent\n ],\n imports: [\n CommonModule,\n ComponentsModule,\n MaterialModule,\n RouterModule\n ],\n exports: [\n NotFoundComponent\n ]\n})\nexport class PagesModule { }\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\n@Pipe({\n name: 'dateFormat'\n})\nexport class DateFormatPipe implements PipeTransform {\n\n transform(date: string, args: { format: string, locale: string }): string {\n moment.locale(args.locale)\n return moment.utc(date).format(args.format);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TimezoneFormatPipe } from 'src/app/shared/pipe/timezone-format.pipe';\nimport { DateFormatPipe } from 'src/app/shared/pipe/date-format.pipe';\nimport { RelativeTimeFormatPipe } from 'src/app/shared/pipe/relative-time-format.pipe';\nimport { SafeHtmlPipe } from 'src/app/shared/pipe/safe-html.pipe';\nimport { SmartCodeFormatPipe } from './smart-code-format.pipe';\n\n@NgModule({\n declarations: [\n DateFormatPipe,\n TimezoneFormatPipe,\n RelativeTimeFormatPipe,\n SafeHtmlPipe,\n SmartCodeFormatPipe\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n DateFormatPipe,\n TimezoneFormatPipe,\n RelativeTimeFormatPipe,\n SafeHtmlPipe,\n SmartCodeFormatPipe\n ]\n})\nexport class PipeModule { }\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\nimport { interval, Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\nmoment.updateLocale('pt-br', {\n relativeTime: {\n future: (str) => str === 'Em instantes' ? str : `Em ${str}`,\n past: (str) => str === 'Em instantes' ? str : `Há ${str}`,\n s: 'Em instantes',\n m: '1 min',\n mm: '%d min',\n h: '1 hora',\n d: '1 dia',\n M: '1 mês',\n y: '1 ano'\n }\n});\n\nmoment.relativeTimeThreshold('s', 60);\nmoment.relativeTimeThreshold('ss', 59);\nmoment.relativeTimeThreshold('m', 60);\nmoment.relativeTimeThreshold('h', 24);\n\n@Pipe({\n name: 'relativeTimeFormat'\n})\nexport class RelativeTimeFormatPipe implements PipeTransform {\n\n transform(value: string): Observable {\n return interval(1000).pipe(\n map(() => moment(value).fromNow()),\n distinctUntilChanged()\n );\n }\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { timer } from './timer';\nexport function interval(period = 0, scheduler = asyncScheduler) {\n if (period < 0) {\n period = 0;\n }\n return timer(period, period, scheduler);\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment-timezone';\n\n@Pipe({\n name: 'timezoneFormat'\n})\nexport class TimezoneFormatPipe implements PipeTransform {\n\n transform(date: string, value: string): string {\n if (date && value) {\n return moment(date).tz(value).format('YYYY-MM-DD HH:mm');\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { environment } from 'src/environments/environment';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class FeedbackService {\n private urlApi: string = environment.urlApi;\n\n constructor(private http: HttpClient) { }\n\n update(feedback: any): Observable {\n const body = { feedbackId: feedback.id, guid: feedback.guid, comment: feedback.comment, rate: feedback.rating, platform: 'web' };\n\n return this.http.put(`${this.urlApi}v2/ticketing/feedbacks/${feedback.id}?guid=${feedback.guid}`, body);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class LocaleService {\n private key = 'locale';\n\n getUserLocale(): string {\n return localStorage.getItem(this.key);\n }\n\n storeUserLocale(locale: string) {\n localStorage.setItem(this.key, locale);\n }\n\n getBrowserLocales(options = {}): string[] {\n const defaultOptions = {\n languageCodeOnly: false,\n };\n\n const opt = {\n ...defaultOptions,\n ...options,\n };\n\n const browserLocales =\n navigator.languages === undefined\n ? [navigator.language]\n : navigator.languages;\n\n if (!browserLocales) {\n return undefined;\n }\n\n return browserLocales.map(locale => {\n const trimmedLocale = locale.trim();\n\n return opt.languageCodeOnly\n ? trimmedLocale.split(/-|_/)[0]\n : trimmedLocale;\n });\n }\n}\n","import * as i0 from '@angular/core';\nimport { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';\nimport * as i1 from '@angular/fire';\nimport { VERSION } from '@angular/fire';\nimport { ɵfirebaseAppFactory, ɵcacheInstance, ɵlazySDKProxy, FIREBASE_OPTIONS, FIREBASE_APP_NAME, ɵapplyMixins } from '@angular/fire/compat';\nimport { isSupported } from 'firebase/messaging';\nimport { EMPTY, of, Observable, concat } from 'rxjs';\nimport { subscribeOn, observeOn, switchMap, map, shareReplay, switchMapTo, catchError, mergeMap, defaultIfEmpty } from 'rxjs/operators';\nimport firebase from 'firebase/compat/app';\n\n// DO NOT MODIFY, this file is autogenerated by tools/build.ts\n// Export a null object with the same keys as firebase/compat/messaging, so Proxy can work with proxy-polyfill in Internet Explorer\nconst proxyPolyfillCompat = {\n deleteToken: null,\n getToken: null,\n onMessage: null,\n onBackgroundMessage: null,\n};\n\nconst VAPID_KEY = new InjectionToken('angularfire2.messaging.vapid-key');\nconst SERVICE_WORKER = new InjectionToken('angularfire2.messaging.service-worker-registeration');\nclass AngularFireMessaging {\n requestPermission;\n getToken;\n tokenChanges;\n messages;\n requestToken;\n deleteToken;\n constructor(options, name, \n // eslint-disable-next-line @typescript-eslint/ban-types\n platformId, zone, schedulers, vapidKey, _serviceWorker) {\n const serviceWorker = _serviceWorker;\n const messaging = of(undefined).pipe(subscribeOn(schedulers.outsideAngular), observeOn(schedulers.insideAngular), switchMap(isSupported), switchMap(supported => supported ? import('firebase/compat/messaging') : EMPTY), map(() => ɵfirebaseAppFactory(options, zone, name)), switchMap(app => ɵcacheInstance(`${app.name}.messaging`, 'AngularFireMessaging', app.name, () => {\n return of(app.messaging());\n }, [])), shareReplay({ bufferSize: 1, refCount: false }));\n this.requestPermission = messaging.pipe(subscribeOn(schedulers.outsideAngular), observeOn(schedulers.insideAngular), switchMap(() => Notification.requestPermission()));\n this.getToken = messaging.pipe(subscribeOn(schedulers.outsideAngular), observeOn(schedulers.insideAngular), switchMap(async (messaging) => {\n if (Notification.permission === 'granted') {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n const serviceWorkerRegistration = serviceWorker ? await serviceWorker : null;\n return await messaging.getToken({ vapidKey, serviceWorkerRegistration });\n }\n else {\n return null;\n }\n }));\n const notificationPermission$ = new Observable(emitter => {\n navigator.permissions.query({ name: 'notifications' }).then(notificationPerm => {\n notificationPerm.onchange = () => emitter.next();\n });\n });\n const tokenChange$ = messaging.pipe(subscribeOn(schedulers.outsideAngular), observeOn(schedulers.insideAngular), switchMapTo(notificationPermission$), switchMapTo(this.getToken));\n this.tokenChanges = messaging.pipe(subscribeOn(schedulers.outsideAngular), observeOn(schedulers.insideAngular), switchMap(() => concat(this.getToken, tokenChange$)));\n this.messages = messaging.pipe(subscribeOn(schedulers.outsideAngular), observeOn(schedulers.insideAngular), switchMap(messaging => new Observable(emitter => messaging.onMessage(emitter))));\n this.requestToken = messaging.pipe(subscribeOn(schedulers.outsideAngular), observeOn(schedulers.insideAngular), switchMap(() => this.requestPermission), catchError(() => of(null)), mergeMap(() => this.tokenChanges));\n this.deleteToken = () => messaging.pipe(subscribeOn(schedulers.outsideAngular), observeOn(schedulers.insideAngular), switchMap(messaging => messaging.deleteToken()), defaultIfEmpty(false));\n return ɵlazySDKProxy(this, messaging, zone);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireMessaging, deps: [{ token: FIREBASE_OPTIONS }, { token: FIREBASE_APP_NAME, optional: true }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: i1.ɵAngularFireSchedulers }, { token: VAPID_KEY, optional: true }, { token: SERVICE_WORKER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireMessaging, providedIn: 'any' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireMessaging, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'any'\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [FIREBASE_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [FIREBASE_APP_NAME]\n }] }, { type: Object, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: i0.NgZone }, { type: i1.ɵAngularFireSchedulers }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [VAPID_KEY]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [SERVICE_WORKER]\n }] }] });\nɵapplyMixins(AngularFireMessaging, [proxyPolyfillCompat]);\n\nclass AngularFireMessagingModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'fcm-compat');\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireMessagingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireMessagingModule });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireMessagingModule, providers: [AngularFireMessaging] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireMessagingModule, decorators: [{\n type: NgModule,\n args: [{\n providers: [AngularFireMessaging]\n }]\n }], ctorParameters: () => [] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AngularFireMessaging, AngularFireMessagingModule, SERVICE_WORKER, VAPID_KEY };\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable } from \"@angular/core\";\nimport { AngularFireMessaging } from '@angular/fire/compat/messaging';\nimport { BehaviorSubject } from \"rxjs\";\nimport { environment } from \"src/environments/environment\";\nimport { Device } from \"../models\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MessagingService {\n urlApi = environment.urlApi;\n currentMessage = new BehaviorSubject(null);\n\n constructor(private afm: AngularFireMessaging, private http: HttpClient) { }\n\n requestPermission() {\n this.afm.requestToken.subscribe((token) => {\n if (!token) return;\n this.registerToken(token);\n }, (error) => {\n console.error(\"Unable to get permission to notify\", error);\n }\n );\n }\n\n receiveMessage(): void {\n this.afm.messages.subscribe((payload) => {\n this.currentMessage.next(payload);\n })\n }\n\n private registerToken(token: string): void {\n const browserUuid = localStorage.getItem('browserUuid');\n const device: Device = {\n browserUuid,\n platform: 'web',\n registrationId: token\n };\n\n this.http.post(`${this.urlApi}api/me/express/devices`, device).subscribe();\n }\n}\n","import Pusher from 'pusher-js';\nimport * as PusherTypes from 'pusher-js';\n\nimport { Injectable } from '@angular/core';\nimport { environment } from 'src/environments/environment';\n\n@Injectable()\nexport class PusherService {\n\n channels: Map = new Map();\n pusher: Pusher;\n\n constructor() {\n this.pusher = new Pusher(environment.pusher.key, environment.pusher);\n }\n\n add(channelName: string, events: Map): void {\n if (!this.channels.has(channelName)) {\n this.channels.set(channelName, new ChannelEntry(this.pusher.subscribe(channelName)));\n }\n\n const channel = this.channels.get(channelName);\n\n events.forEach((value: Function, key: string) => {\n channel.bind(key, value);\n });\n\n }\n\n remove(channelName: string): void {\n if (this.channels.has(channelName)) {\n this.channels.get(channelName).clear();\n this.channels.delete(channelName);\n }\n\n this.pusher.unsubscribe(channelName);\n }\n\n addHandler(channelName: string, eventName: string, handler: Function): void {\n if (this.channels.has(channelName)) {\n this.channels.get(channelName).bind(eventName, handler);\n }\n }\n\n removeHandler(channelName: string, eventName: string): void {\n if (this.channels.has(channelName)) {\n this.channels.get(channelName).unbind(eventName);\n }\n }\n\n exists(channelName: string): boolean {\n return this.channels.has(channelName);\n }\n}\n\nclass ChannelEntry {\n channel: PusherTypes.Channel;\n events: string[] = [];\n\n constructor(channel: PusherTypes.Channel) {\n this.channel = channel;\n }\n\n bind(eventName: string, handler: Function): void {\n if (!this.events.includes(eventName)) {\n this.events.push(eventName);\n this.channel.bind(eventName, handler)\n }\n }\n\n unbind(eventName: string): void {\n if (this.events.includes(eventName)) {\n this.channel.unbind();\n const index = this.events.findIndex((e) => e === eventName);\n this.events.splice(index);\n }\n }\n\n clear(): void {\n this.channel.unbind_all();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Notification } from '../models';\nimport { PusherService } from './pusher.service';\nimport { TicketService } from './ticket.service';\n\n@Injectable()\nexport class NotificationService {\n private notifications$ = new Subject();\n\n notifications = this.notifications$.asObservable();\n\n constructor(\n private ticketService: TicketService,\n private pusherService: PusherService\n ) { }\n\n sendNotification(notification: Notification): void {\n this.notifications$.next(notification);\n }\n\n add(ticketId: number, serviceConfigId: number, eventNames: string[]): void {\n const events = new Map();\n const serviceConfigEvent = new Map();\n serviceConfigEvent.set('TicketStart', (data) => this.parseMessage(data, 'ServiceConfigTicketStart'));\n serviceConfigEvent.set('TicketCalled', (data) => this.parseMessage(data, 'ServiceConfigTicketCalled'));\n serviceConfigEvent.set('TicketCancel', (data) => this.parseMessage(data, 'ServiceConfigTicketCancel'));\n serviceConfigEvent.set('TicketCheckin', (data) => this.parseMessage(data, 'ServiceConfigTicketCheckin'));\n\n for (const eventName of eventNames) {\n events.set(eventName, (data) => this.parseMessage(data, eventName));\n }\n this.pusherService.add(`ticket-${ticketId}`, events);\n this.pusherService.add(`serviceConfig-${serviceConfigId}`, serviceConfigEvent);\n }\n\n parseMessage(data: any, eventName: string): void {\n const id = data.ticket ? data.ticket.id : data.TicketId;\n this.ticketService.getTicket(id).subscribe((response) => {\n const notification: Notification = {\n eventName,\n ticket: {\n id: response.id,\n prevision: response.estimatedServiceStart,\n status: response.status,\n resource: response.resource ? response.resource.name : null,\n attendanceType: response.attendanceType,\n position: null,\n timezoneId: response.location.timezoneId,\n providerId: response.provider.id,\n serviceConfigId: response.session.serviceConfigId,\n friendlyCode: response.friendlyCode,\n accessKey: response.accessKey,\n locationId: response.location.id,\n locationName: response.location.name,\n providerName: response.provider.name,\n serviceName: response.service.name,\n feedback: response.feedback,\n smartCode: response.smartCode\n },\n message: \"Chegou uma notificação\"\n }\n\n this.sendNotification(notification);\n });\n }\n\n remove(ticketId: number, serviceConfigId: number): void {\n this.pusherService.remove(`ticket-${ticketId}`);\n this.pusherService.remove(`serviceConfig-${serviceConfigId}`);\n }\n}\n","import { _getProvider, getApp, SDK_VERSION as SDK_VERSION$1, _registerComponent, registerVersion } from '@firebase/app';\nimport { Component, ComponentContainer, Provider } from '@firebase/component';\nimport { stringify, jsonEval, contains, assert, isNodeSdk, stringToByteArray, Sha1, base64, deepCopy, base64Encode, isMobileCordova, stringLength, Deferred, safeGet, isAdmin, isValidFormat, isEmpty, isReactNative, assertionError, map, querystring, errorPrefix, getModularInstance, getDefaultEmulatorHostnameAndPort, createMockUserToken } from '@firebase/util';\nimport { Logger, LogLevel } from '@firebase/logger';\n\nconst name = \"@firebase/database\";\nconst version = \"1.0.5\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** The semver (www.semver.org) version of the SDK. */\r\nlet SDK_VERSION = '';\r\n/**\r\n * SDK_VERSION should be set before any database instance is created\r\n * @internal\r\n */\r\nfunction setSDKVersion(version) {\r\n SDK_VERSION = version;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Wraps a DOM Storage object and:\r\n * - automatically encode objects as JSON strings before storing them to allow us to store arbitrary types.\r\n * - prefixes names with \"firebase:\" to avoid collisions with app data.\r\n *\r\n * We automatically (see storage.js) create two such wrappers, one for sessionStorage,\r\n * and one for localStorage.\r\n *\r\n */\r\nclass DOMStorageWrapper {\r\n /**\r\n * @param domStorage_ - The underlying storage object (e.g. localStorage or sessionStorage)\r\n */\r\n constructor(domStorage_) {\r\n this.domStorage_ = domStorage_;\r\n // Use a prefix to avoid collisions with other stuff saved by the app.\r\n this.prefix_ = 'firebase:';\r\n }\r\n /**\r\n * @param key - The key to save the value under\r\n * @param value - The value being stored, or null to remove the key.\r\n */\r\n set(key, value) {\r\n if (value == null) {\r\n this.domStorage_.removeItem(this.prefixedName_(key));\r\n }\r\n else {\r\n this.domStorage_.setItem(this.prefixedName_(key), stringify(value));\r\n }\r\n }\r\n /**\r\n * @returns The value that was stored under this key, or null\r\n */\r\n get(key) {\r\n const storedVal = this.domStorage_.getItem(this.prefixedName_(key));\r\n if (storedVal == null) {\r\n return null;\r\n }\r\n else {\r\n return jsonEval(storedVal);\r\n }\r\n }\r\n remove(key) {\r\n this.domStorage_.removeItem(this.prefixedName_(key));\r\n }\r\n prefixedName_(name) {\r\n return this.prefix_ + name;\r\n }\r\n toString() {\r\n return this.domStorage_.toString();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An in-memory storage implementation that matches the API of DOMStorageWrapper\r\n * (TODO: create interface for both to implement).\r\n */\r\nclass MemoryStorage {\r\n constructor() {\r\n this.cache_ = {};\r\n this.isInMemoryStorage = true;\r\n }\r\n set(key, value) {\r\n if (value == null) {\r\n delete this.cache_[key];\r\n }\r\n else {\r\n this.cache_[key] = value;\r\n }\r\n }\r\n get(key) {\r\n if (contains(this.cache_, key)) {\r\n return this.cache_[key];\r\n }\r\n return null;\r\n }\r\n remove(key) {\r\n delete this.cache_[key];\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Helper to create a DOMStorageWrapper or else fall back to MemoryStorage.\r\n * TODO: Once MemoryStorage and DOMStorageWrapper have a shared interface this method annotation should change\r\n * to reflect this type\r\n *\r\n * @param domStorageName - Name of the underlying storage object\r\n * (e.g. 'localStorage' or 'sessionStorage').\r\n * @returns Turning off type information until a common interface is defined.\r\n */\r\nconst createStoragefor = function (domStorageName) {\r\n try {\r\n // NOTE: just accessing \"localStorage\" or \"window['localStorage']\" may throw a security exception,\r\n // so it must be inside the try/catch.\r\n if (typeof window !== 'undefined' &&\r\n typeof window[domStorageName] !== 'undefined') {\r\n // Need to test cache. Just because it's here doesn't mean it works\r\n const domStorage = window[domStorageName];\r\n domStorage.setItem('firebase:sentinel', 'cache');\r\n domStorage.removeItem('firebase:sentinel');\r\n return new DOMStorageWrapper(domStorage);\r\n }\r\n }\r\n catch (e) { }\r\n // Failed to create wrapper. Just return in-memory storage.\r\n // TODO: log?\r\n return new MemoryStorage();\r\n};\r\n/** A storage object that lasts across sessions */\r\nconst PersistentStorage = createStoragefor('localStorage');\r\n/** A storage object that only lasts one session */\r\nconst SessionStorage = createStoragefor('sessionStorage');\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logClient = new Logger('@firebase/database');\r\n/**\r\n * Returns a locally-unique ID (generated by just incrementing up from 0 each time its called).\r\n */\r\nconst LUIDGenerator = (function () {\r\n let id = 1;\r\n return function () {\r\n return id++;\r\n };\r\n})();\r\n/**\r\n * Sha1 hash of the input string\r\n * @param str - The string to hash\r\n * @returns {!string} The resulting hash\r\n */\r\nconst sha1 = function (str) {\r\n const utf8Bytes = stringToByteArray(str);\r\n const sha1 = new Sha1();\r\n sha1.update(utf8Bytes);\r\n const sha1Bytes = sha1.digest();\r\n return base64.encodeByteArray(sha1Bytes);\r\n};\r\nconst buildLogMessage_ = function (...varArgs) {\r\n let message = '';\r\n for (let i = 0; i < varArgs.length; i++) {\r\n const arg = varArgs[i];\r\n if (Array.isArray(arg) ||\r\n (arg &&\r\n typeof arg === 'object' &&\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n typeof arg.length === 'number')) {\r\n message += buildLogMessage_.apply(null, arg);\r\n }\r\n else if (typeof arg === 'object') {\r\n message += stringify(arg);\r\n }\r\n else {\r\n message += arg;\r\n }\r\n message += ' ';\r\n }\r\n return message;\r\n};\r\n/**\r\n * Use this for all debug messages in Firebase.\r\n */\r\nlet logger = null;\r\n/**\r\n * Flag to check for log availability on first log message\r\n */\r\nlet firstLog_ = true;\r\n/**\r\n * The implementation of Firebase.enableLogging (defined here to break dependencies)\r\n * @param logger_ - A flag to turn on logging, or a custom logger\r\n * @param persistent - Whether or not to persist logging settings across refreshes\r\n */\r\nconst enableLogging$1 = function (logger_, persistent) {\r\n assert(!persistent || logger_ === true || logger_ === false, \"Can't turn on custom loggers persistently.\");\r\n if (logger_ === true) {\r\n logClient.logLevel = LogLevel.VERBOSE;\r\n logger = logClient.log.bind(logClient);\r\n if (persistent) {\r\n SessionStorage.set('logging_enabled', true);\r\n }\r\n }\r\n else if (typeof logger_ === 'function') {\r\n logger = logger_;\r\n }\r\n else {\r\n logger = null;\r\n SessionStorage.remove('logging_enabled');\r\n }\r\n};\r\nconst log = function (...varArgs) {\r\n if (firstLog_ === true) {\r\n firstLog_ = false;\r\n if (logger === null && SessionStorage.get('logging_enabled') === true) {\r\n enableLogging$1(true);\r\n }\r\n }\r\n if (logger) {\r\n const message = buildLogMessage_.apply(null, varArgs);\r\n logger(message);\r\n }\r\n};\r\nconst logWrapper = function (prefix) {\r\n return function (...varArgs) {\r\n log(prefix, ...varArgs);\r\n };\r\n};\r\nconst error = function (...varArgs) {\r\n const message = 'FIREBASE INTERNAL ERROR: ' + buildLogMessage_(...varArgs);\r\n logClient.error(message);\r\n};\r\nconst fatal = function (...varArgs) {\r\n const message = `FIREBASE FATAL ERROR: ${buildLogMessage_(...varArgs)}`;\r\n logClient.error(message);\r\n throw new Error(message);\r\n};\r\nconst warn = function (...varArgs) {\r\n const message = 'FIREBASE WARNING: ' + buildLogMessage_(...varArgs);\r\n logClient.warn(message);\r\n};\r\n/**\r\n * Logs a warning if the containing page uses https. Called when a call to new Firebase\r\n * does not use https.\r\n */\r\nconst warnIfPageIsSecure = function () {\r\n // Be very careful accessing browser globals. Who knows what may or may not exist.\r\n if (typeof window !== 'undefined' &&\r\n window.location &&\r\n window.location.protocol &&\r\n window.location.protocol.indexOf('https:') !== -1) {\r\n warn('Insecure Firebase access from a secure page. ' +\r\n 'Please use https in calls to new Firebase().');\r\n }\r\n};\r\n/**\r\n * Returns true if data is NaN, or +/- Infinity.\r\n */\r\nconst isInvalidJSONNumber = function (data) {\r\n return (typeof data === 'number' &&\r\n (data !== data || // NaN\r\n data === Number.POSITIVE_INFINITY ||\r\n data === Number.NEGATIVE_INFINITY));\r\n};\r\nconst executeWhenDOMReady = function (fn) {\r\n if (isNodeSdk() || document.readyState === 'complete') {\r\n fn();\r\n }\r\n else {\r\n // Modeled after jQuery. Try DOMContentLoaded and onreadystatechange (which\r\n // fire before onload), but fall back to onload.\r\n let called = false;\r\n const wrappedFn = function () {\r\n if (!document.body) {\r\n setTimeout(wrappedFn, Math.floor(10));\r\n return;\r\n }\r\n if (!called) {\r\n called = true;\r\n fn();\r\n }\r\n };\r\n if (document.addEventListener) {\r\n document.addEventListener('DOMContentLoaded', wrappedFn, false);\r\n // fallback to onload.\r\n window.addEventListener('load', wrappedFn, false);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }\r\n else if (document.attachEvent) {\r\n // IE.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n document.attachEvent('onreadystatechange', () => {\r\n if (document.readyState === 'complete') {\r\n wrappedFn();\r\n }\r\n });\r\n // fallback to onload.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n window.attachEvent('onload', wrappedFn);\r\n // jQuery has an extra hack for IE that we could employ (based on\r\n // http://javascript.nwbox.com/IEContentLoaded/) But it looks really old.\r\n // I'm hoping we don't need it.\r\n }\r\n }\r\n};\r\n/**\r\n * Minimum key name. Invalid for actual data, used as a marker to sort before any valid names\r\n */\r\nconst MIN_NAME = '[MIN_NAME]';\r\n/**\r\n * Maximum key name. Invalid for actual data, used as a marker to sort above any valid names\r\n */\r\nconst MAX_NAME = '[MAX_NAME]';\r\n/**\r\n * Compares valid Firebase key names, plus min and max name\r\n */\r\nconst nameCompare = function (a, b) {\r\n if (a === b) {\r\n return 0;\r\n }\r\n else if (a === MIN_NAME || b === MAX_NAME) {\r\n return -1;\r\n }\r\n else if (b === MIN_NAME || a === MAX_NAME) {\r\n return 1;\r\n }\r\n else {\r\n const aAsInt = tryParseInt(a), bAsInt = tryParseInt(b);\r\n if (aAsInt !== null) {\r\n if (bAsInt !== null) {\r\n return aAsInt - bAsInt === 0 ? a.length - b.length : aAsInt - bAsInt;\r\n }\r\n else {\r\n return -1;\r\n }\r\n }\r\n else if (bAsInt !== null) {\r\n return 1;\r\n }\r\n else {\r\n return a < b ? -1 : 1;\r\n }\r\n }\r\n};\r\n/**\r\n * @returns {!number} comparison result.\r\n */\r\nconst stringCompare = function (a, b) {\r\n if (a === b) {\r\n return 0;\r\n }\r\n else if (a < b) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n};\r\nconst requireKey = function (key, obj) {\r\n if (obj && key in obj) {\r\n return obj[key];\r\n }\r\n else {\r\n throw new Error('Missing required key (' + key + ') in object: ' + stringify(obj));\r\n }\r\n};\r\nconst ObjectToUniqueKey = function (obj) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return stringify(obj);\r\n }\r\n const keys = [];\r\n // eslint-disable-next-line guard-for-in\r\n for (const k in obj) {\r\n keys.push(k);\r\n }\r\n // Export as json, but with the keys sorted.\r\n keys.sort();\r\n let key = '{';\r\n for (let i = 0; i < keys.length; i++) {\r\n if (i !== 0) {\r\n key += ',';\r\n }\r\n key += stringify(keys[i]);\r\n key += ':';\r\n key += ObjectToUniqueKey(obj[keys[i]]);\r\n }\r\n key += '}';\r\n return key;\r\n};\r\n/**\r\n * Splits a string into a number of smaller segments of maximum size\r\n * @param str - The string\r\n * @param segsize - The maximum number of chars in the string.\r\n * @returns The string, split into appropriately-sized chunks\r\n */\r\nconst splitStringBySize = function (str, segsize) {\r\n const len = str.length;\r\n if (len <= segsize) {\r\n return [str];\r\n }\r\n const dataSegs = [];\r\n for (let c = 0; c < len; c += segsize) {\r\n if (c + segsize > len) {\r\n dataSegs.push(str.substring(c, len));\r\n }\r\n else {\r\n dataSegs.push(str.substring(c, c + segsize));\r\n }\r\n }\r\n return dataSegs;\r\n};\r\n/**\r\n * Apply a function to each (key, value) pair in an object or\r\n * apply a function to each (index, value) pair in an array\r\n * @param obj - The object or array to iterate over\r\n * @param fn - The function to apply\r\n */\r\nfunction each(obj, fn) {\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn(key, obj[key]);\r\n }\r\n }\r\n}\r\n/**\r\n * Borrowed from http://hg.secondlife.com/llsd/src/tip/js/typedarray.js (MIT License)\r\n * I made one modification at the end and removed the NaN / Infinity\r\n * handling (since it seemed broken [caused an overflow] and we don't need it). See MJL comments.\r\n * @param v - A double\r\n *\r\n */\r\nconst doubleToIEEE754String = function (v) {\r\n assert(!isInvalidJSONNumber(v), 'Invalid JSON number'); // MJL\r\n const ebits = 11, fbits = 52;\r\n const bias = (1 << (ebits - 1)) - 1;\r\n let s, e, f, ln, i;\r\n // Compute sign, exponent, fraction\r\n // Skip NaN / Infinity handling --MJL.\r\n if (v === 0) {\r\n e = 0;\r\n f = 0;\r\n s = 1 / v === -Infinity ? 1 : 0;\r\n }\r\n else {\r\n s = v < 0;\r\n v = Math.abs(v);\r\n if (v >= Math.pow(2, 1 - bias)) {\r\n // Normalized\r\n ln = Math.min(Math.floor(Math.log(v) / Math.LN2), bias);\r\n e = ln + bias;\r\n f = Math.round(v * Math.pow(2, fbits - ln) - Math.pow(2, fbits));\r\n }\r\n else {\r\n // Denormalized\r\n e = 0;\r\n f = Math.round(v / Math.pow(2, 1 - bias - fbits));\r\n }\r\n }\r\n // Pack sign, exponent, fraction\r\n const bits = [];\r\n for (i = fbits; i; i -= 1) {\r\n bits.push(f % 2 ? 1 : 0);\r\n f = Math.floor(f / 2);\r\n }\r\n for (i = ebits; i; i -= 1) {\r\n bits.push(e % 2 ? 1 : 0);\r\n e = Math.floor(e / 2);\r\n }\r\n bits.push(s ? 1 : 0);\r\n bits.reverse();\r\n const str = bits.join('');\r\n // Return the data as a hex string. --MJL\r\n let hexByteString = '';\r\n for (i = 0; i < 64; i += 8) {\r\n let hexByte = parseInt(str.substr(i, 8), 2).toString(16);\r\n if (hexByte.length === 1) {\r\n hexByte = '0' + hexByte;\r\n }\r\n hexByteString = hexByteString + hexByte;\r\n }\r\n return hexByteString.toLowerCase();\r\n};\r\n/**\r\n * Used to detect if we're in a Chrome content script (which executes in an\r\n * isolated environment where long-polling doesn't work).\r\n */\r\nconst isChromeExtensionContentScript = function () {\r\n return !!(typeof window === 'object' &&\r\n window['chrome'] &&\r\n window['chrome']['extension'] &&\r\n !/^chrome/.test(window.location.href));\r\n};\r\n/**\r\n * Used to detect if we're in a Windows 8 Store app.\r\n */\r\nconst isWindowsStoreApp = function () {\r\n // Check for the presence of a couple WinRT globals\r\n return typeof Windows === 'object' && typeof Windows.UI === 'object';\r\n};\r\n/**\r\n * Converts a server error code to a Javascript Error\r\n */\r\nfunction errorForServerCode(code, query) {\r\n let reason = 'Unknown Error';\r\n if (code === 'too_big') {\r\n reason =\r\n 'The data requested exceeds the maximum size ' +\r\n 'that can be accessed with a single request.';\r\n }\r\n else if (code === 'permission_denied') {\r\n reason = \"Client doesn't have permission to access the desired data.\";\r\n }\r\n else if (code === 'unavailable') {\r\n reason = 'The service is unavailable';\r\n }\r\n const error = new Error(code + ' at ' + query._path.toString() + ': ' + reason);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error.code = code.toUpperCase();\r\n return error;\r\n}\r\n/**\r\n * Used to test for integer-looking strings\r\n */\r\nconst INTEGER_REGEXP_ = new RegExp('^-?(0*)\\\\d{1,10}$');\r\n/**\r\n * For use in keys, the minimum possible 32-bit integer.\r\n */\r\nconst INTEGER_32_MIN = -2147483648;\r\n/**\r\n * For use in kyes, the maximum possible 32-bit integer.\r\n */\r\nconst INTEGER_32_MAX = 2147483647;\r\n/**\r\n * If the string contains a 32-bit integer, return it. Else return null.\r\n */\r\nconst tryParseInt = function (str) {\r\n if (INTEGER_REGEXP_.test(str)) {\r\n const intVal = Number(str);\r\n if (intVal >= INTEGER_32_MIN && intVal <= INTEGER_32_MAX) {\r\n return intVal;\r\n }\r\n }\r\n return null;\r\n};\r\n/**\r\n * Helper to run some code but catch any exceptions and re-throw them later.\r\n * Useful for preventing user callbacks from breaking internal code.\r\n *\r\n * Re-throwing the exception from a setTimeout is a little evil, but it's very\r\n * convenient (we don't have to try to figure out when is a safe point to\r\n * re-throw it), and the behavior seems reasonable:\r\n *\r\n * * If you aren't pausing on exceptions, you get an error in the console with\r\n * the correct stack trace.\r\n * * If you're pausing on all exceptions, the debugger will pause on your\r\n * exception and then again when we rethrow it.\r\n * * If you're only pausing on uncaught exceptions, the debugger will only pause\r\n * on us re-throwing it.\r\n *\r\n * @param fn - The code to guard.\r\n */\r\nconst exceptionGuard = function (fn) {\r\n try {\r\n fn();\r\n }\r\n catch (e) {\r\n // Re-throw exception when it's safe.\r\n setTimeout(() => {\r\n // It used to be that \"throw e\" would result in a good console error with\r\n // relevant context, but as of Chrome 39, you just get the firebase.js\r\n // file/line number where we re-throw it, which is useless. So we log\r\n // e.stack explicitly.\r\n const stack = e.stack || '';\r\n warn('Exception was thrown by user callback.', stack);\r\n throw e;\r\n }, Math.floor(0));\r\n }\r\n};\r\n/**\r\n * @returns {boolean} true if we think we're currently being crawled.\r\n */\r\nconst beingCrawled = function () {\r\n const userAgent = (typeof window === 'object' &&\r\n window['navigator'] &&\r\n window['navigator']['userAgent']) ||\r\n '';\r\n // For now we whitelist the most popular crawlers. We should refine this to be the set of crawlers we\r\n // believe to support JavaScript/AJAX rendering.\r\n // NOTE: Google Webmaster Tools doesn't really belong, but their \"This is how a visitor to your website\r\n // would have seen the page\" is flaky if we don't treat it as a crawler.\r\n return (userAgent.search(/googlebot|google webmaster tools|bingbot|yahoo! slurp|baiduspider|yandexbot|duckduckbot/i) >= 0);\r\n};\r\n/**\r\n * Same as setTimeout() except on Node.JS it will /not/ prevent the process from exiting.\r\n *\r\n * It is removed with clearTimeout() as normal.\r\n *\r\n * @param fn - Function to run.\r\n * @param time - Milliseconds to wait before running.\r\n * @returns The setTimeout() return value.\r\n */\r\nconst setTimeoutNonBlocking = function (fn, time) {\r\n const timeout = setTimeout(fn, time);\r\n // Note: at the time of this comment, unrefTimer is under the unstable set of APIs. Run with --unstable to enable the API.\r\n if (typeof timeout === 'number' &&\r\n // @ts-ignore Is only defined in Deno environments.\r\n typeof Deno !== 'undefined' &&\r\n // @ts-ignore Deno and unrefTimer are only defined in Deno environments.\r\n Deno['unrefTimer']) {\r\n // @ts-ignore Deno and unrefTimer are only defined in Deno environments.\r\n Deno.unrefTimer(timeout);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }\r\n else if (typeof timeout === 'object' && timeout['unref']) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n timeout['unref']();\r\n }\r\n return timeout;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Abstraction around AppCheck's token fetching capabilities.\r\n */\r\nclass AppCheckTokenProvider {\r\n constructor(appName_, appCheckProvider) {\r\n this.appName_ = appName_;\r\n this.appCheckProvider = appCheckProvider;\r\n this.appCheck = appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.getImmediate({ optional: true });\r\n if (!this.appCheck) {\r\n appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.get().then(appCheck => (this.appCheck = appCheck));\r\n }\r\n }\r\n getToken(forceRefresh) {\r\n if (!this.appCheck) {\r\n return new Promise((resolve, reject) => {\r\n // Support delayed initialization of FirebaseAppCheck. This allows our\r\n // customers to initialize the RTDB SDK before initializing Firebase\r\n // AppCheck and ensures that all requests are authenticated if a token\r\n // becomes available before the timoeout below expires.\r\n setTimeout(() => {\r\n if (this.appCheck) {\r\n this.getToken(forceRefresh).then(resolve, reject);\r\n }\r\n else {\r\n resolve(null);\r\n }\r\n }, 0);\r\n });\r\n }\r\n return this.appCheck.getToken(forceRefresh);\r\n }\r\n addTokenChangeListener(listener) {\r\n var _a;\r\n (_a = this.appCheckProvider) === null || _a === void 0 ? void 0 : _a.get().then(appCheck => appCheck.addTokenListener(listener));\r\n }\r\n notifyForInvalidToken() {\r\n warn(`Provided AppCheck credentials for the app named \"${this.appName_}\" ` +\r\n 'are invalid. This usually indicates your app was not initialized correctly.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Abstraction around FirebaseApp's token fetching capabilities.\r\n */\r\nclass FirebaseAuthTokenProvider {\r\n constructor(appName_, firebaseOptions_, authProvider_) {\r\n this.appName_ = appName_;\r\n this.firebaseOptions_ = firebaseOptions_;\r\n this.authProvider_ = authProvider_;\r\n this.auth_ = null;\r\n this.auth_ = authProvider_.getImmediate({ optional: true });\r\n if (!this.auth_) {\r\n authProvider_.onInit(auth => (this.auth_ = auth));\r\n }\r\n }\r\n getToken(forceRefresh) {\r\n if (!this.auth_) {\r\n return new Promise((resolve, reject) => {\r\n // Support delayed initialization of FirebaseAuth. This allows our\r\n // customers to initialize the RTDB SDK before initializing Firebase\r\n // Auth and ensures that all requests are authenticated if a token\r\n // becomes available before the timoeout below expires.\r\n setTimeout(() => {\r\n if (this.auth_) {\r\n this.getToken(forceRefresh).then(resolve, reject);\r\n }\r\n else {\r\n resolve(null);\r\n }\r\n }, 0);\r\n });\r\n }\r\n return this.auth_.getToken(forceRefresh).catch(error => {\r\n // TODO: Need to figure out all the cases this is raised and whether\r\n // this makes sense.\r\n if (error && error.code === 'auth/token-not-initialized') {\r\n log('Got auth/token-not-initialized error. Treating as null token.');\r\n return null;\r\n }\r\n else {\r\n return Promise.reject(error);\r\n }\r\n });\r\n }\r\n addTokenChangeListener(listener) {\r\n // TODO: We might want to wrap the listener and call it with no args to\r\n // avoid a leaky abstraction, but that makes removing the listener harder.\r\n if (this.auth_) {\r\n this.auth_.addAuthTokenListener(listener);\r\n }\r\n else {\r\n this.authProvider_\r\n .get()\r\n .then(auth => auth.addAuthTokenListener(listener));\r\n }\r\n }\r\n removeTokenChangeListener(listener) {\r\n this.authProvider_\r\n .get()\r\n .then(auth => auth.removeAuthTokenListener(listener));\r\n }\r\n notifyForInvalidToken() {\r\n let errorMessage = 'Provided authentication credentials for the app named \"' +\r\n this.appName_ +\r\n '\" are invalid. This usually indicates your app was not ' +\r\n 'initialized correctly. ';\r\n if ('credential' in this.firebaseOptions_) {\r\n errorMessage +=\r\n 'Make sure the \"credential\" property provided to initializeApp() ' +\r\n 'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n 'project.';\r\n }\r\n else if ('serviceAccount' in this.firebaseOptions_) {\r\n errorMessage +=\r\n 'Make sure the \"serviceAccount\" property provided to initializeApp() ' +\r\n 'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n 'project.';\r\n }\r\n else {\r\n errorMessage +=\r\n 'Make sure the \"apiKey\" and \"databaseURL\" properties provided to ' +\r\n 'initializeApp() match the values provided for your app at ' +\r\n 'https://console.firebase.google.com/.';\r\n }\r\n warn(errorMessage);\r\n }\r\n}\r\n/* AuthTokenProvider that supplies a constant token. Used by Admin SDK or mockUserToken with emulators. */\r\nclass EmulatorTokenProvider {\r\n constructor(accessToken) {\r\n this.accessToken = accessToken;\r\n }\r\n getToken(forceRefresh) {\r\n return Promise.resolve({\r\n accessToken: this.accessToken\r\n });\r\n }\r\n addTokenChangeListener(listener) {\r\n // Invoke the listener immediately to match the behavior in Firebase Auth\r\n // (see packages/auth/src/auth.js#L1807)\r\n listener(this.accessToken);\r\n }\r\n removeTokenChangeListener(listener) { }\r\n notifyForInvalidToken() { }\r\n}\r\n/** A string that is treated as an admin access token by the RTDB emulator. Used by Admin SDK. */\r\nEmulatorTokenProvider.OWNER = 'owner';\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PROTOCOL_VERSION = '5';\r\nconst VERSION_PARAM = 'v';\r\nconst TRANSPORT_SESSION_PARAM = 's';\r\nconst REFERER_PARAM = 'r';\r\nconst FORGE_REF = 'f';\r\n// Matches console.firebase.google.com, firebase-console-*.corp.google.com and\r\n// firebase.corp.google.com\r\nconst FORGE_DOMAIN_RE = /(console\\.firebase|firebase-console-\\w+\\.corp|firebase\\.corp)\\.google\\.com/;\r\nconst LAST_SESSION_PARAM = 'ls';\r\nconst APPLICATION_ID_PARAM = 'p';\r\nconst APP_CHECK_TOKEN_PARAM = 'ac';\r\nconst WEBSOCKET = 'websocket';\r\nconst LONG_POLLING = 'long_polling';\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A class that holds metadata about a Repo object\r\n */\r\nclass RepoInfo {\r\n /**\r\n * @param host - Hostname portion of the url for the repo\r\n * @param secure - Whether or not this repo is accessed over ssl\r\n * @param namespace - The namespace represented by the repo\r\n * @param webSocketOnly - Whether to prefer websockets over all other transports (used by Nest).\r\n * @param nodeAdmin - Whether this instance uses Admin SDK credentials\r\n * @param persistenceKey - Override the default session persistence storage key\r\n */\r\n constructor(host, secure, namespace, webSocketOnly, nodeAdmin = false, persistenceKey = '', includeNamespaceInQueryParams = false, isUsingEmulator = false) {\r\n this.secure = secure;\r\n this.namespace = namespace;\r\n this.webSocketOnly = webSocketOnly;\r\n this.nodeAdmin = nodeAdmin;\r\n this.persistenceKey = persistenceKey;\r\n this.includeNamespaceInQueryParams = includeNamespaceInQueryParams;\r\n this.isUsingEmulator = isUsingEmulator;\r\n this._host = host.toLowerCase();\r\n this._domain = this._host.substr(this._host.indexOf('.') + 1);\r\n this.internalHost =\r\n PersistentStorage.get('host:' + host) || this._host;\r\n }\r\n isCacheableHost() {\r\n return this.internalHost.substr(0, 2) === 's-';\r\n }\r\n isCustomHost() {\r\n return (this._domain !== 'firebaseio.com' &&\r\n this._domain !== 'firebaseio-demo.com');\r\n }\r\n get host() {\r\n return this._host;\r\n }\r\n set host(newHost) {\r\n if (newHost !== this.internalHost) {\r\n this.internalHost = newHost;\r\n if (this.isCacheableHost()) {\r\n PersistentStorage.set('host:' + this._host, this.internalHost);\r\n }\r\n }\r\n }\r\n toString() {\r\n let str = this.toURLString();\r\n if (this.persistenceKey) {\r\n str += '<' + this.persistenceKey + '>';\r\n }\r\n return str;\r\n }\r\n toURLString() {\r\n const protocol = this.secure ? 'https://' : 'http://';\r\n const query = this.includeNamespaceInQueryParams\r\n ? `?ns=${this.namespace}`\r\n : '';\r\n return `${protocol}${this.host}/${query}`;\r\n }\r\n}\r\nfunction repoInfoNeedsQueryParam(repoInfo) {\r\n return (repoInfo.host !== repoInfo.internalHost ||\r\n repoInfo.isCustomHost() ||\r\n repoInfo.includeNamespaceInQueryParams);\r\n}\r\n/**\r\n * Returns the websocket URL for this repo\r\n * @param repoInfo - RepoInfo object\r\n * @param type - of connection\r\n * @param params - list\r\n * @returns The URL for this repo\r\n */\r\nfunction repoInfoConnectionURL(repoInfo, type, params) {\r\n assert(typeof type === 'string', 'typeof type must == string');\r\n assert(typeof params === 'object', 'typeof params must == object');\r\n let connURL;\r\n if (type === WEBSOCKET) {\r\n connURL =\r\n (repoInfo.secure ? 'wss://' : 'ws://') + repoInfo.internalHost + '/.ws?';\r\n }\r\n else if (type === LONG_POLLING) {\r\n connURL =\r\n (repoInfo.secure ? 'https://' : 'http://') +\r\n repoInfo.internalHost +\r\n '/.lp?';\r\n }\r\n else {\r\n throw new Error('Unknown connection type: ' + type);\r\n }\r\n if (repoInfoNeedsQueryParam(repoInfo)) {\r\n params['ns'] = repoInfo.namespace;\r\n }\r\n const pairs = [];\r\n each(params, (key, value) => {\r\n pairs.push(key + '=' + value);\r\n });\r\n return connURL + pairs.join('&');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Tracks a collection of stats.\r\n */\r\nclass StatsCollection {\r\n constructor() {\r\n this.counters_ = {};\r\n }\r\n incrementCounter(name, amount = 1) {\r\n if (!contains(this.counters_, name)) {\r\n this.counters_[name] = 0;\r\n }\r\n this.counters_[name] += amount;\r\n }\r\n get() {\r\n return deepCopy(this.counters_);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst collections = {};\r\nconst reporters = {};\r\nfunction statsManagerGetCollection(repoInfo) {\r\n const hashString = repoInfo.toString();\r\n if (!collections[hashString]) {\r\n collections[hashString] = new StatsCollection();\r\n }\r\n return collections[hashString];\r\n}\r\nfunction statsManagerGetOrCreateReporter(repoInfo, creatorFunction) {\r\n const hashString = repoInfo.toString();\r\n if (!reporters[hashString]) {\r\n reporters[hashString] = creatorFunction();\r\n }\r\n return reporters[hashString];\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class ensures the packets from the server arrive in order\r\n * This class takes data from the server and ensures it gets passed into the callbacks in order.\r\n */\r\nclass PacketReceiver {\r\n /**\r\n * @param onMessage_\r\n */\r\n constructor(onMessage_) {\r\n this.onMessage_ = onMessage_;\r\n this.pendingResponses = [];\r\n this.currentResponseNum = 0;\r\n this.closeAfterResponse = -1;\r\n this.onClose = null;\r\n }\r\n closeAfter(responseNum, callback) {\r\n this.closeAfterResponse = responseNum;\r\n this.onClose = callback;\r\n if (this.closeAfterResponse < this.currentResponseNum) {\r\n this.onClose();\r\n this.onClose = null;\r\n }\r\n }\r\n /**\r\n * Each message from the server comes with a response number, and an array of data. The responseNumber\r\n * allows us to ensure that we process them in the right order, since we can't be guaranteed that all\r\n * browsers will respond in the same order as the requests we sent\r\n */\r\n handleResponse(requestNum, data) {\r\n this.pendingResponses[requestNum] = data;\r\n while (this.pendingResponses[this.currentResponseNum]) {\r\n const toProcess = this.pendingResponses[this.currentResponseNum];\r\n delete this.pendingResponses[this.currentResponseNum];\r\n for (let i = 0; i < toProcess.length; ++i) {\r\n if (toProcess[i]) {\r\n exceptionGuard(() => {\r\n this.onMessage_(toProcess[i]);\r\n });\r\n }\r\n }\r\n if (this.currentResponseNum === this.closeAfterResponse) {\r\n if (this.onClose) {\r\n this.onClose();\r\n this.onClose = null;\r\n }\r\n break;\r\n }\r\n this.currentResponseNum++;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// URL query parameters associated with longpolling\r\nconst FIREBASE_LONGPOLL_START_PARAM = 'start';\r\nconst FIREBASE_LONGPOLL_CLOSE_COMMAND = 'close';\r\nconst FIREBASE_LONGPOLL_COMMAND_CB_NAME = 'pLPCommand';\r\nconst FIREBASE_LONGPOLL_DATA_CB_NAME = 'pRTLPCB';\r\nconst FIREBASE_LONGPOLL_ID_PARAM = 'id';\r\nconst FIREBASE_LONGPOLL_PW_PARAM = 'pw';\r\nconst FIREBASE_LONGPOLL_SERIAL_PARAM = 'ser';\r\nconst FIREBASE_LONGPOLL_CALLBACK_ID_PARAM = 'cb';\r\nconst FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM = 'seg';\r\nconst FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET = 'ts';\r\nconst FIREBASE_LONGPOLL_DATA_PARAM = 'd';\r\nconst FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM = 'dframe';\r\n//Data size constants.\r\n//TODO: Perf: the maximum length actually differs from browser to browser.\r\n// We should check what browser we're on and set accordingly.\r\nconst MAX_URL_DATA_SIZE = 1870;\r\nconst SEG_HEADER_SIZE = 30; //ie: &seg=8299234&ts=982389123&d=\r\nconst MAX_PAYLOAD_SIZE = MAX_URL_DATA_SIZE - SEG_HEADER_SIZE;\r\n/**\r\n * Keepalive period\r\n * send a fresh request at minimum every 25 seconds. Opera has a maximum request\r\n * length of 30 seconds that we can't exceed.\r\n */\r\nconst KEEPALIVE_REQUEST_INTERVAL = 25000;\r\n/**\r\n * How long to wait before aborting a long-polling connection attempt.\r\n */\r\nconst LP_CONNECT_TIMEOUT = 30000;\r\n/**\r\n * This class manages a single long-polling connection.\r\n */\r\nclass BrowserPollConnection {\r\n /**\r\n * @param connId An identifier for this connection, used for logging\r\n * @param repoInfo The info for the endpoint to send data to.\r\n * @param applicationId The Firebase App ID for this project.\r\n * @param appCheckToken The AppCheck token for this client.\r\n * @param authToken The AuthToken to use for this connection.\r\n * @param transportSessionId Optional transportSessionid if we are\r\n * reconnecting for an existing transport session\r\n * @param lastSessionId Optional lastSessionId if the PersistentConnection has\r\n * already created a connection previously\r\n */\r\n constructor(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {\r\n this.connId = connId;\r\n this.repoInfo = repoInfo;\r\n this.applicationId = applicationId;\r\n this.appCheckToken = appCheckToken;\r\n this.authToken = authToken;\r\n this.transportSessionId = transportSessionId;\r\n this.lastSessionId = lastSessionId;\r\n this.bytesSent = 0;\r\n this.bytesReceived = 0;\r\n this.everConnected_ = false;\r\n this.log_ = logWrapper(connId);\r\n this.stats_ = statsManagerGetCollection(repoInfo);\r\n this.urlFn = (params) => {\r\n // Always add the token if we have one.\r\n if (this.appCheckToken) {\r\n params[APP_CHECK_TOKEN_PARAM] = this.appCheckToken;\r\n }\r\n return repoInfoConnectionURL(repoInfo, LONG_POLLING, params);\r\n };\r\n }\r\n /**\r\n * @param onMessage - Callback when messages arrive\r\n * @param onDisconnect - Callback with connection lost.\r\n */\r\n open(onMessage, onDisconnect) {\r\n this.curSegmentNum = 0;\r\n this.onDisconnect_ = onDisconnect;\r\n this.myPacketOrderer = new PacketReceiver(onMessage);\r\n this.isClosed_ = false;\r\n this.connectTimeoutTimer_ = setTimeout(() => {\r\n this.log_('Timed out trying to connect.');\r\n // Make sure we clear the host cache\r\n this.onClosed_();\r\n this.connectTimeoutTimer_ = null;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(LP_CONNECT_TIMEOUT));\r\n // Ensure we delay the creation of the iframe until the DOM is loaded.\r\n executeWhenDOMReady(() => {\r\n if (this.isClosed_) {\r\n return;\r\n }\r\n //Set up a callback that gets triggered once a connection is set up.\r\n this.scriptTagHolder = new FirebaseIFrameScriptHolder((...args) => {\r\n const [command, arg1, arg2, arg3, arg4] = args;\r\n this.incrementIncomingBytes_(args);\r\n if (!this.scriptTagHolder) {\r\n return; // we closed the connection.\r\n }\r\n if (this.connectTimeoutTimer_) {\r\n clearTimeout(this.connectTimeoutTimer_);\r\n this.connectTimeoutTimer_ = null;\r\n }\r\n this.everConnected_ = true;\r\n if (command === FIREBASE_LONGPOLL_START_PARAM) {\r\n this.id = arg1;\r\n this.password = arg2;\r\n }\r\n else if (command === FIREBASE_LONGPOLL_CLOSE_COMMAND) {\r\n // Don't clear the host cache. We got a response from the server, so we know it's reachable\r\n if (arg1) {\r\n // We aren't expecting any more data (other than what the server's already in the process of sending us\r\n // through our already open polls), so don't send any more.\r\n this.scriptTagHolder.sendNewPolls = false;\r\n // arg1 in this case is the last response number sent by the server. We should try to receive\r\n // all of the responses up to this one before closing\r\n this.myPacketOrderer.closeAfter(arg1, () => {\r\n this.onClosed_();\r\n });\r\n }\r\n else {\r\n this.onClosed_();\r\n }\r\n }\r\n else {\r\n throw new Error('Unrecognized command received: ' + command);\r\n }\r\n }, (...args) => {\r\n const [pN, data] = args;\r\n this.incrementIncomingBytes_(args);\r\n this.myPacketOrderer.handleResponse(pN, data);\r\n }, () => {\r\n this.onClosed_();\r\n }, this.urlFn);\r\n //Send the initial request to connect. The serial number is simply to keep the browser from pulling previous results\r\n //from cache.\r\n const urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_START_PARAM] = 't';\r\n urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = Math.floor(Math.random() * 100000000);\r\n if (this.scriptTagHolder.uniqueCallbackIdentifier) {\r\n urlParams[FIREBASE_LONGPOLL_CALLBACK_ID_PARAM] =\r\n this.scriptTagHolder.uniqueCallbackIdentifier;\r\n }\r\n urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n if (this.transportSessionId) {\r\n urlParams[TRANSPORT_SESSION_PARAM] = this.transportSessionId;\r\n }\r\n if (this.lastSessionId) {\r\n urlParams[LAST_SESSION_PARAM] = this.lastSessionId;\r\n }\r\n if (this.applicationId) {\r\n urlParams[APPLICATION_ID_PARAM] = this.applicationId;\r\n }\r\n if (this.appCheckToken) {\r\n urlParams[APP_CHECK_TOKEN_PARAM] = this.appCheckToken;\r\n }\r\n if (typeof location !== 'undefined' &&\r\n location.hostname &&\r\n FORGE_DOMAIN_RE.test(location.hostname)) {\r\n urlParams[REFERER_PARAM] = FORGE_REF;\r\n }\r\n const connectURL = this.urlFn(urlParams);\r\n this.log_('Connecting via long-poll to ' + connectURL);\r\n this.scriptTagHolder.addTag(connectURL, () => {\r\n /* do nothing */\r\n });\r\n });\r\n }\r\n /**\r\n * Call this when a handshake has completed successfully and we want to consider the connection established\r\n */\r\n start() {\r\n this.scriptTagHolder.startLongPoll(this.id, this.password);\r\n this.addDisconnectPingFrame(this.id, this.password);\r\n }\r\n /**\r\n * Forces long polling to be considered as a potential transport\r\n */\r\n static forceAllow() {\r\n BrowserPollConnection.forceAllow_ = true;\r\n }\r\n /**\r\n * Forces longpolling to not be considered as a potential transport\r\n */\r\n static forceDisallow() {\r\n BrowserPollConnection.forceDisallow_ = true;\r\n }\r\n // Static method, use string literal so it can be accessed in a generic way\r\n static isAvailable() {\r\n if (isNodeSdk()) {\r\n return false;\r\n }\r\n else if (BrowserPollConnection.forceAllow_) {\r\n return true;\r\n }\r\n else {\r\n // NOTE: In React-Native there's normally no 'document', but if you debug a React-Native app in\r\n // the Chrome debugger, 'document' is defined, but document.createElement is null (2015/06/08).\r\n return (!BrowserPollConnection.forceDisallow_ &&\r\n typeof document !== 'undefined' &&\r\n document.createElement != null &&\r\n !isChromeExtensionContentScript() &&\r\n !isWindowsStoreApp());\r\n }\r\n }\r\n /**\r\n * No-op for polling\r\n */\r\n markConnectionHealthy() { }\r\n /**\r\n * Stops polling and cleans up the iframe\r\n */\r\n shutdown_() {\r\n this.isClosed_ = true;\r\n if (this.scriptTagHolder) {\r\n this.scriptTagHolder.close();\r\n this.scriptTagHolder = null;\r\n }\r\n //remove the disconnect frame, which will trigger an XHR call to the server to tell it we're leaving.\r\n if (this.myDisconnFrame) {\r\n document.body.removeChild(this.myDisconnFrame);\r\n this.myDisconnFrame = null;\r\n }\r\n if (this.connectTimeoutTimer_) {\r\n clearTimeout(this.connectTimeoutTimer_);\r\n this.connectTimeoutTimer_ = null;\r\n }\r\n }\r\n /**\r\n * Triggered when this transport is closed\r\n */\r\n onClosed_() {\r\n if (!this.isClosed_) {\r\n this.log_('Longpoll is closing itself');\r\n this.shutdown_();\r\n if (this.onDisconnect_) {\r\n this.onDisconnect_(this.everConnected_);\r\n this.onDisconnect_ = null;\r\n }\r\n }\r\n }\r\n /**\r\n * External-facing close handler. RealTime has requested we shut down. Kill our connection and tell the server\r\n * that we've left.\r\n */\r\n close() {\r\n if (!this.isClosed_) {\r\n this.log_('Longpoll is being closed.');\r\n this.shutdown_();\r\n }\r\n }\r\n /**\r\n * Send the JSON object down to the server. It will need to be stringified, base64 encoded, and then\r\n * broken into chunks (since URLs have a small maximum length).\r\n * @param data - The JSON data to transmit.\r\n */\r\n send(data) {\r\n const dataStr = stringify(data);\r\n this.bytesSent += dataStr.length;\r\n this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n //first, lets get the base64-encoded data\r\n const base64data = base64Encode(dataStr);\r\n //We can only fit a certain amount in each URL, so we need to split this request\r\n //up into multiple pieces if it doesn't fit in one request.\r\n const dataSegs = splitStringBySize(base64data, MAX_PAYLOAD_SIZE);\r\n //Enqueue each segment for transmission. We assign each chunk a sequential ID and a total number\r\n //of segments so that we can reassemble the packet on the server.\r\n for (let i = 0; i < dataSegs.length; i++) {\r\n this.scriptTagHolder.enqueueSegment(this.curSegmentNum, dataSegs.length, dataSegs[i]);\r\n this.curSegmentNum++;\r\n }\r\n }\r\n /**\r\n * This is how we notify the server that we're leaving.\r\n * We aren't able to send requests with DHTML on a window close event, but we can\r\n * trigger XHR requests in some browsers (everything but Opera basically).\r\n */\r\n addDisconnectPingFrame(id, pw) {\r\n if (isNodeSdk()) {\r\n return;\r\n }\r\n this.myDisconnFrame = document.createElement('iframe');\r\n const urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM] = 't';\r\n urlParams[FIREBASE_LONGPOLL_ID_PARAM] = id;\r\n urlParams[FIREBASE_LONGPOLL_PW_PARAM] = pw;\r\n this.myDisconnFrame.src = this.urlFn(urlParams);\r\n this.myDisconnFrame.style.display = 'none';\r\n document.body.appendChild(this.myDisconnFrame);\r\n }\r\n /**\r\n * Used to track the bytes received by this client\r\n */\r\n incrementIncomingBytes_(args) {\r\n // TODO: This is an annoying perf hit just to track the number of incoming bytes. Maybe it should be opt-in.\r\n const bytesReceived = stringify(args).length;\r\n this.bytesReceived += bytesReceived;\r\n this.stats_.incrementCounter('bytes_received', bytesReceived);\r\n }\r\n}\r\n/*********************************************************************************************\r\n * A wrapper around an iframe that is used as a long-polling script holder.\r\n *********************************************************************************************/\r\nclass FirebaseIFrameScriptHolder {\r\n /**\r\n * @param commandCB - The callback to be called when control commands are recevied from the server.\r\n * @param onMessageCB - The callback to be triggered when responses arrive from the server.\r\n * @param onDisconnect - The callback to be triggered when this tag holder is closed\r\n * @param urlFn - A function that provides the URL of the endpoint to send data to.\r\n */\r\n constructor(commandCB, onMessageCB, onDisconnect, urlFn) {\r\n this.onDisconnect = onDisconnect;\r\n this.urlFn = urlFn;\r\n //We maintain a count of all of the outstanding requests, because if we have too many active at once it can cause\r\n //problems in some browsers.\r\n this.outstandingRequests = new Set();\r\n //A queue of the pending segments waiting for transmission to the server.\r\n this.pendingSegs = [];\r\n //A serial number. We use this for two things:\r\n // 1) A way to ensure the browser doesn't cache responses to polls\r\n // 2) A way to make the server aware when long-polls arrive in a different order than we started them. The\r\n // server needs to release both polls in this case or it will cause problems in Opera since Opera can only execute\r\n // JSONP code in the order it was added to the iframe.\r\n this.currentSerial = Math.floor(Math.random() * 100000000);\r\n // This gets set to false when we're \"closing down\" the connection (e.g. we're switching transports but there's still\r\n // incoming data from the server that we're waiting for).\r\n this.sendNewPolls = true;\r\n if (!isNodeSdk()) {\r\n //Each script holder registers a couple of uniquely named callbacks with the window. These are called from the\r\n //iframes where we put the long-polling script tags. We have two callbacks:\r\n // 1) Command Callback - Triggered for control issues, like starting a connection.\r\n // 2) Message Callback - Triggered when new data arrives.\r\n this.uniqueCallbackIdentifier = LUIDGenerator();\r\n window[FIREBASE_LONGPOLL_COMMAND_CB_NAME + this.uniqueCallbackIdentifier] = commandCB;\r\n window[FIREBASE_LONGPOLL_DATA_CB_NAME + this.uniqueCallbackIdentifier] =\r\n onMessageCB;\r\n //Create an iframe for us to add script tags to.\r\n this.myIFrame = FirebaseIFrameScriptHolder.createIFrame_();\r\n // Set the iframe's contents.\r\n let script = '';\r\n // if we set a javascript url, it's IE and we need to set the document domain. The javascript url is sufficient\r\n // for ie9, but ie8 needs to do it again in the document itself.\r\n if (this.myIFrame.src &&\r\n this.myIFrame.src.substr(0, 'javascript:'.length) === 'javascript:') {\r\n const currentDomain = document.domain;\r\n script = '';\r\n }\r\n const iframeContents = '' + script + '';\r\n try {\r\n this.myIFrame.doc.open();\r\n this.myIFrame.doc.write(iframeContents);\r\n this.myIFrame.doc.close();\r\n }\r\n catch (e) {\r\n log('frame writing exception');\r\n if (e.stack) {\r\n log(e.stack);\r\n }\r\n log(e);\r\n }\r\n }\r\n else {\r\n this.commandCB = commandCB;\r\n this.onMessageCB = onMessageCB;\r\n }\r\n }\r\n /**\r\n * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can\r\n * actually use.\r\n */\r\n static createIFrame_() {\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n // This is necessary in order to initialize the document inside the iframe\r\n if (document.body) {\r\n document.body.appendChild(iframe);\r\n try {\r\n // If document.domain has been modified in IE, this will throw an error, and we need to set the\r\n // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute\r\n // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.\r\n const a = iframe.contentWindow.document;\r\n if (!a) {\r\n // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.\r\n log('No IE domain setting required');\r\n }\r\n }\r\n catch (e) {\r\n const domain = document.domain;\r\n iframe.src =\r\n \"javascript:void((function(){document.open();document.domain='\" +\r\n domain +\r\n \"';document.close();})())\";\r\n }\r\n }\r\n else {\r\n // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this\r\n // never gets hit.\r\n throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';\r\n }\r\n // Get the document of the iframe in a browser-specific way.\r\n if (iframe.contentDocument) {\r\n iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari\r\n }\r\n else if (iframe.contentWindow) {\r\n iframe.doc = iframe.contentWindow.document; // Internet Explorer\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }\r\n else if (iframe.document) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n iframe.doc = iframe.document; //others?\r\n }\r\n return iframe;\r\n }\r\n /**\r\n * Cancel all outstanding queries and remove the frame.\r\n */\r\n close() {\r\n //Mark this iframe as dead, so no new requests are sent.\r\n this.alive = false;\r\n if (this.myIFrame) {\r\n //We have to actually remove all of the html inside this iframe before removing it from the\r\n //window, or IE will continue loading and executing the script tags we've already added, which\r\n //can lead to some errors being thrown. Setting textContent seems to be the safest way to do this.\r\n this.myIFrame.doc.body.textContent = '';\r\n setTimeout(() => {\r\n if (this.myIFrame !== null) {\r\n document.body.removeChild(this.myIFrame);\r\n this.myIFrame = null;\r\n }\r\n }, Math.floor(0));\r\n }\r\n // Protect from being called recursively.\r\n const onDisconnect = this.onDisconnect;\r\n if (onDisconnect) {\r\n this.onDisconnect = null;\r\n onDisconnect();\r\n }\r\n }\r\n /**\r\n * Actually start the long-polling session by adding the first script tag(s) to the iframe.\r\n * @param id - The ID of this connection\r\n * @param pw - The password for this connection\r\n */\r\n startLongPoll(id, pw) {\r\n this.myID = id;\r\n this.myPW = pw;\r\n this.alive = true;\r\n //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.\r\n while (this.newRequest_()) { }\r\n }\r\n /**\r\n * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't\r\n * too many outstanding requests and we are still alive.\r\n *\r\n * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if\r\n * needed.\r\n */\r\n newRequest_() {\r\n // We keep one outstanding request open all the time to receive data, but if we need to send data\r\n // (pendingSegs.length > 0) then we create a new request to send the data. The server will automatically\r\n // close the old request.\r\n if (this.alive &&\r\n this.sendNewPolls &&\r\n this.outstandingRequests.size < (this.pendingSegs.length > 0 ? 2 : 1)) {\r\n //construct our url\r\n this.currentSerial++;\r\n const urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\r\n urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\r\n urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;\r\n let theURL = this.urlFn(urlParams);\r\n //Now add as much data as we can.\r\n let curDataString = '';\r\n let i = 0;\r\n while (this.pendingSegs.length > 0) {\r\n //first, lets see if the next segment will fit.\r\n const nextSeg = this.pendingSegs[0];\r\n if (nextSeg.d.length +\r\n SEG_HEADER_SIZE +\r\n curDataString.length <=\r\n MAX_URL_DATA_SIZE) {\r\n //great, the segment will fit. Lets append it.\r\n const theSeg = this.pendingSegs.shift();\r\n curDataString =\r\n curDataString +\r\n '&' +\r\n FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM +\r\n i +\r\n '=' +\r\n theSeg.seg +\r\n '&' +\r\n FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET +\r\n i +\r\n '=' +\r\n theSeg.ts +\r\n '&' +\r\n FIREBASE_LONGPOLL_DATA_PARAM +\r\n i +\r\n '=' +\r\n theSeg.d;\r\n i++;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n theURL = theURL + curDataString;\r\n this.addLongPollTag_(theURL, this.currentSerial);\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n /**\r\n * Queue a packet for transmission to the server.\r\n * @param segnum - A sequential id for this packet segment used for reassembly\r\n * @param totalsegs - The total number of segments in this packet\r\n * @param data - The data for this segment.\r\n */\r\n enqueueSegment(segnum, totalsegs, data) {\r\n //add this to the queue of segments to send.\r\n this.pendingSegs.push({ seg: segnum, ts: totalsegs, d: data });\r\n //send the data immediately if there isn't already data being transmitted, unless\r\n //startLongPoll hasn't been called yet.\r\n if (this.alive) {\r\n this.newRequest_();\r\n }\r\n }\r\n /**\r\n * Add a script tag for a regular long-poll request.\r\n * @param url - The URL of the script tag.\r\n * @param serial - The serial number of the request.\r\n */\r\n addLongPollTag_(url, serial) {\r\n //remember that we sent this request.\r\n this.outstandingRequests.add(serial);\r\n const doNewRequest = () => {\r\n this.outstandingRequests.delete(serial);\r\n this.newRequest_();\r\n };\r\n // If this request doesn't return on its own accord (by the server sending us some data), we'll\r\n // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.\r\n const keepaliveTimeout = setTimeout(doNewRequest, Math.floor(KEEPALIVE_REQUEST_INTERVAL));\r\n const readyStateCB = () => {\r\n // Request completed. Cancel the keepalive.\r\n clearTimeout(keepaliveTimeout);\r\n // Trigger a new request so we can continue receiving data.\r\n doNewRequest();\r\n };\r\n this.addTag(url, readyStateCB);\r\n }\r\n /**\r\n * Add an arbitrary script tag to the iframe.\r\n * @param url - The URL for the script tag source.\r\n * @param loadCB - A callback to be triggered once the script has loaded.\r\n */\r\n addTag(url, loadCB) {\r\n if (isNodeSdk()) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.doNodeLongPoll(url, loadCB);\r\n }\r\n else {\r\n setTimeout(() => {\r\n try {\r\n // if we're already closed, don't add this poll\r\n if (!this.sendNewPolls) {\r\n return;\r\n }\r\n const newScript = this.myIFrame.doc.createElement('script');\r\n newScript.type = 'text/javascript';\r\n newScript.async = true;\r\n newScript.src = url;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n newScript.onload = newScript.onreadystatechange =\r\n function () {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const rstate = newScript.readyState;\r\n if (!rstate || rstate === 'loaded' || rstate === 'complete') {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n newScript.onload = newScript.onreadystatechange = null;\r\n if (newScript.parentNode) {\r\n newScript.parentNode.removeChild(newScript);\r\n }\r\n loadCB();\r\n }\r\n };\r\n newScript.onerror = () => {\r\n log('Long-poll script failed to load: ' + url);\r\n this.sendNewPolls = false;\r\n this.close();\r\n };\r\n this.myIFrame.doc.body.appendChild(newScript);\r\n }\r\n catch (e) {\r\n // TODO: we should make this error visible somehow\r\n }\r\n }, Math.floor(1));\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst WEBSOCKET_MAX_FRAME_SIZE = 16384;\r\nconst WEBSOCKET_KEEPALIVE_INTERVAL = 45000;\r\nlet WebSocketImpl = null;\r\nif (typeof MozWebSocket !== 'undefined') {\r\n WebSocketImpl = MozWebSocket;\r\n}\r\nelse if (typeof WebSocket !== 'undefined') {\r\n WebSocketImpl = WebSocket;\r\n}\r\n/**\r\n * Create a new websocket connection with the given callbacks.\r\n */\r\nclass WebSocketConnection {\r\n /**\r\n * @param connId identifier for this transport\r\n * @param repoInfo The info for the websocket endpoint.\r\n * @param applicationId The Firebase App ID for this project.\r\n * @param appCheckToken The App Check Token for this client.\r\n * @param authToken The Auth Token for this client.\r\n * @param transportSessionId Optional transportSessionId if this is connecting\r\n * to an existing transport session\r\n * @param lastSessionId Optional lastSessionId if there was a previous\r\n * connection\r\n */\r\n constructor(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {\r\n this.connId = connId;\r\n this.applicationId = applicationId;\r\n this.appCheckToken = appCheckToken;\r\n this.authToken = authToken;\r\n this.keepaliveTimer = null;\r\n this.frames = null;\r\n this.totalFrames = 0;\r\n this.bytesSent = 0;\r\n this.bytesReceived = 0;\r\n this.log_ = logWrapper(this.connId);\r\n this.stats_ = statsManagerGetCollection(repoInfo);\r\n this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId);\r\n this.nodeAdmin = repoInfo.nodeAdmin;\r\n }\r\n /**\r\n * @param repoInfo - The info for the websocket endpoint.\r\n * @param transportSessionId - Optional transportSessionId if this is connecting to an existing transport\r\n * session\r\n * @param lastSessionId - Optional lastSessionId if there was a previous connection\r\n * @returns connection url\r\n */\r\n static connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId) {\r\n const urlParams = {};\r\n urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n if (!isNodeSdk() &&\r\n typeof location !== 'undefined' &&\r\n location.hostname &&\r\n FORGE_DOMAIN_RE.test(location.hostname)) {\r\n urlParams[REFERER_PARAM] = FORGE_REF;\r\n }\r\n if (transportSessionId) {\r\n urlParams[TRANSPORT_SESSION_PARAM] = transportSessionId;\r\n }\r\n if (lastSessionId) {\r\n urlParams[LAST_SESSION_PARAM] = lastSessionId;\r\n }\r\n if (appCheckToken) {\r\n urlParams[APP_CHECK_TOKEN_PARAM] = appCheckToken;\r\n }\r\n if (applicationId) {\r\n urlParams[APPLICATION_ID_PARAM] = applicationId;\r\n }\r\n return repoInfoConnectionURL(repoInfo, WEBSOCKET, urlParams);\r\n }\r\n /**\r\n * @param onMessage - Callback when messages arrive\r\n * @param onDisconnect - Callback with connection lost.\r\n */\r\n open(onMessage, onDisconnect) {\r\n this.onDisconnect = onDisconnect;\r\n this.onMessage = onMessage;\r\n this.log_('Websocket connecting to ' + this.connURL);\r\n this.everConnected_ = false;\r\n // Assume failure until proven otherwise.\r\n PersistentStorage.set('previous_websocket_failure', true);\r\n try {\r\n let options;\r\n if (isNodeSdk()) {\r\n const device = this.nodeAdmin ? 'AdminNode' : 'Node';\r\n // UA Format: Firebase////\r\n options = {\r\n headers: {\r\n 'User-Agent': `Firebase/${PROTOCOL_VERSION}/${SDK_VERSION}/${process.platform}/${device}`,\r\n 'X-Firebase-GMPID': this.applicationId || ''\r\n }\r\n };\r\n // If using Node with admin creds, AppCheck-related checks are unnecessary.\r\n // Note that we send the credentials here even if they aren't admin credentials, which is\r\n // not a problem.\r\n // Note that this header is just used to bypass appcheck, and the token should still be sent\r\n // through the websocket connection once it is established.\r\n if (this.authToken) {\r\n options.headers['Authorization'] = `Bearer ${this.authToken}`;\r\n }\r\n if (this.appCheckToken) {\r\n options.headers['X-Firebase-AppCheck'] = this.appCheckToken;\r\n }\r\n // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.\r\n const env = process['env'];\r\n const proxy = this.connURL.indexOf('wss://') === 0\r\n ? env['HTTPS_PROXY'] || env['https_proxy']\r\n : env['HTTP_PROXY'] || env['http_proxy'];\r\n if (proxy) {\r\n options['proxy'] = { origin: proxy };\r\n }\r\n }\r\n this.mySock = new WebSocketImpl(this.connURL, [], options);\r\n }\r\n catch (e) {\r\n this.log_('Error instantiating WebSocket.');\r\n const error = e.message || e.data;\r\n if (error) {\r\n this.log_(error);\r\n }\r\n this.onClosed_();\r\n return;\r\n }\r\n this.mySock.onopen = () => {\r\n this.log_('Websocket connected.');\r\n this.everConnected_ = true;\r\n };\r\n this.mySock.onclose = () => {\r\n this.log_('Websocket connection was disconnected.');\r\n this.mySock = null;\r\n this.onClosed_();\r\n };\r\n this.mySock.onmessage = m => {\r\n this.handleIncomingFrame(m);\r\n };\r\n this.mySock.onerror = e => {\r\n this.log_('WebSocket error. Closing connection.');\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const error = e.message || e.data;\r\n if (error) {\r\n this.log_(error);\r\n }\r\n this.onClosed_();\r\n };\r\n }\r\n /**\r\n * No-op for websockets, we don't need to do anything once the connection is confirmed as open\r\n */\r\n start() { }\r\n static forceDisallow() {\r\n WebSocketConnection.forceDisallow_ = true;\r\n }\r\n static isAvailable() {\r\n let isOldAndroid = false;\r\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\r\n const oldAndroidRegex = /Android ([0-9]{0,}\\.[0-9]{0,})/;\r\n const oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);\r\n if (oldAndroidMatch && oldAndroidMatch.length > 1) {\r\n if (parseFloat(oldAndroidMatch[1]) < 4.4) {\r\n isOldAndroid = true;\r\n }\r\n }\r\n }\r\n return (!isOldAndroid &&\r\n WebSocketImpl !== null &&\r\n !WebSocketConnection.forceDisallow_);\r\n }\r\n /**\r\n * Returns true if we previously failed to connect with this transport.\r\n */\r\n static previouslyFailed() {\r\n // If our persistent storage is actually only in-memory storage,\r\n // we default to assuming that it previously failed to be safe.\r\n return (PersistentStorage.isInMemoryStorage ||\r\n PersistentStorage.get('previous_websocket_failure') === true);\r\n }\r\n markConnectionHealthy() {\r\n PersistentStorage.remove('previous_websocket_failure');\r\n }\r\n appendFrame_(data) {\r\n this.frames.push(data);\r\n if (this.frames.length === this.totalFrames) {\r\n const fullMess = this.frames.join('');\r\n this.frames = null;\r\n const jsonMess = jsonEval(fullMess);\r\n //handle the message\r\n this.onMessage(jsonMess);\r\n }\r\n }\r\n /**\r\n * @param frameCount - The number of frames we are expecting from the server\r\n */\r\n handleNewFrameCount_(frameCount) {\r\n this.totalFrames = frameCount;\r\n this.frames = [];\r\n }\r\n /**\r\n * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1\r\n * @returns Any remaining data to be process, or null if there is none\r\n */\r\n extractFrameCount_(data) {\r\n assert(this.frames === null, 'We already have a frame buffer');\r\n // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced\r\n // currently. So allowing larger frame counts (length <= 6). See https://app.asana.com/0/search/8688598998380/8237608042508\r\n if (data.length <= 6) {\r\n const frameCount = Number(data);\r\n if (!isNaN(frameCount)) {\r\n this.handleNewFrameCount_(frameCount);\r\n return null;\r\n }\r\n }\r\n this.handleNewFrameCount_(1);\r\n return data;\r\n }\r\n /**\r\n * Process a websocket frame that has arrived from the server.\r\n * @param mess - The frame data\r\n */\r\n handleIncomingFrame(mess) {\r\n if (this.mySock === null) {\r\n return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.\r\n }\r\n const data = mess['data'];\r\n this.bytesReceived += data.length;\r\n this.stats_.incrementCounter('bytes_received', data.length);\r\n this.resetKeepAlive();\r\n if (this.frames !== null) {\r\n // we're buffering\r\n this.appendFrame_(data);\r\n }\r\n else {\r\n // try to parse out a frame count, otherwise, assume 1 and process it\r\n const remainingData = this.extractFrameCount_(data);\r\n if (remainingData !== null) {\r\n this.appendFrame_(remainingData);\r\n }\r\n }\r\n }\r\n /**\r\n * Send a message to the server\r\n * @param data - The JSON object to transmit\r\n */\r\n send(data) {\r\n this.resetKeepAlive();\r\n const dataStr = stringify(data);\r\n this.bytesSent += dataStr.length;\r\n this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n //We can only fit a certain amount in each websocket frame, so we need to split this request\r\n //up into multiple pieces if it doesn't fit in one request.\r\n const dataSegs = splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE);\r\n //Send the length header\r\n if (dataSegs.length > 1) {\r\n this.sendString_(String(dataSegs.length));\r\n }\r\n //Send the actual data in segments.\r\n for (let i = 0; i < dataSegs.length; i++) {\r\n this.sendString_(dataSegs[i]);\r\n }\r\n }\r\n shutdown_() {\r\n this.isClosed_ = true;\r\n if (this.keepaliveTimer) {\r\n clearInterval(this.keepaliveTimer);\r\n this.keepaliveTimer = null;\r\n }\r\n if (this.mySock) {\r\n this.mySock.close();\r\n this.mySock = null;\r\n }\r\n }\r\n onClosed_() {\r\n if (!this.isClosed_) {\r\n this.log_('WebSocket is closing itself');\r\n this.shutdown_();\r\n // since this is an internal close, trigger the close listener\r\n if (this.onDisconnect) {\r\n this.onDisconnect(this.everConnected_);\r\n this.onDisconnect = null;\r\n }\r\n }\r\n }\r\n /**\r\n * External-facing close handler.\r\n * Close the websocket and kill the connection.\r\n */\r\n close() {\r\n if (!this.isClosed_) {\r\n this.log_('WebSocket is being closed');\r\n this.shutdown_();\r\n }\r\n }\r\n /**\r\n * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after\r\n * the last activity.\r\n */\r\n resetKeepAlive() {\r\n clearInterval(this.keepaliveTimer);\r\n this.keepaliveTimer = setInterval(() => {\r\n //If there has been no websocket activity for a while, send a no-op\r\n if (this.mySock) {\r\n this.sendString_('0');\r\n }\r\n this.resetKeepAlive();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL));\r\n }\r\n /**\r\n * Send a string over the websocket.\r\n *\r\n * @param str - String to send.\r\n */\r\n sendString_(str) {\r\n // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()\r\n // calls for some unknown reason. We treat these as an error and disconnect.\r\n // See https://app.asana.com/0/58926111402292/68021340250410\r\n try {\r\n this.mySock.send(str);\r\n }\r\n catch (e) {\r\n this.log_('Exception thrown from WebSocket.send():', e.message || e.data, 'Closing connection.');\r\n setTimeout(this.onClosed_.bind(this), 0);\r\n }\r\n }\r\n}\r\n/**\r\n * Number of response before we consider the connection \"healthy.\"\r\n */\r\nWebSocketConnection.responsesRequiredToBeHealthy = 2;\r\n/**\r\n * Time to wait for the connection te become healthy before giving up.\r\n */\r\nWebSocketConnection.healthyTimeout = 30000;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Currently simplistic, this class manages what transport a Connection should use at various stages of its\r\n * lifecycle.\r\n *\r\n * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if\r\n * they are available.\r\n */\r\nclass TransportManager {\r\n /**\r\n * @param repoInfo - Metadata around the namespace we're connecting to\r\n */\r\n constructor(repoInfo) {\r\n this.initTransports_(repoInfo);\r\n }\r\n static get ALL_TRANSPORTS() {\r\n return [BrowserPollConnection, WebSocketConnection];\r\n }\r\n /**\r\n * Returns whether transport has been selected to ensure WebSocketConnection or BrowserPollConnection are not called after\r\n * TransportManager has already set up transports_\r\n */\r\n static get IS_TRANSPORT_INITIALIZED() {\r\n return this.globalTransportInitialized_;\r\n }\r\n initTransports_(repoInfo) {\r\n const isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();\r\n let isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();\r\n if (repoInfo.webSocketOnly) {\r\n if (!isWebSocketsAvailable) {\r\n warn(\"wss:// URL used, but browser isn't known to support websockets. Trying anyway.\");\r\n }\r\n isSkipPollConnection = true;\r\n }\r\n if (isSkipPollConnection) {\r\n this.transports_ = [WebSocketConnection];\r\n }\r\n else {\r\n const transports = (this.transports_ = []);\r\n for (const transport of TransportManager.ALL_TRANSPORTS) {\r\n if (transport && transport['isAvailable']()) {\r\n transports.push(transport);\r\n }\r\n }\r\n TransportManager.globalTransportInitialized_ = true;\r\n }\r\n }\r\n /**\r\n * @returns The constructor for the initial transport to use\r\n */\r\n initialTransport() {\r\n if (this.transports_.length > 0) {\r\n return this.transports_[0];\r\n }\r\n else {\r\n throw new Error('No transports available');\r\n }\r\n }\r\n /**\r\n * @returns The constructor for the next transport, or null\r\n */\r\n upgradeTransport() {\r\n if (this.transports_.length > 1) {\r\n return this.transports_[1];\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}\r\n// Keeps track of whether the TransportManager has already chosen a transport to use\r\nTransportManager.globalTransportInitialized_ = false;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Abort upgrade attempt if it takes longer than 60s.\r\nconst UPGRADE_TIMEOUT = 60000;\r\n// For some transports (WebSockets), we need to \"validate\" the transport by exchanging a few requests and responses.\r\n// If we haven't sent enough requests within 5s, we'll start sending noop ping requests.\r\nconst DELAY_BEFORE_SENDING_EXTRA_REQUESTS = 5000;\r\n// If the initial data sent triggers a lot of bandwidth (i.e. it's a large put or a listen for a large amount of data)\r\n// then we may not be able to exchange our ping/pong requests within the healthy timeout. So if we reach the timeout\r\n// but we've sent/received enough bytes, we don't cancel the connection.\r\nconst BYTES_SENT_HEALTHY_OVERRIDE = 10 * 1024;\r\nconst BYTES_RECEIVED_HEALTHY_OVERRIDE = 100 * 1024;\r\nconst MESSAGE_TYPE = 't';\r\nconst MESSAGE_DATA = 'd';\r\nconst CONTROL_SHUTDOWN = 's';\r\nconst CONTROL_RESET = 'r';\r\nconst CONTROL_ERROR = 'e';\r\nconst CONTROL_PONG = 'o';\r\nconst SWITCH_ACK = 'a';\r\nconst END_TRANSMISSION = 'n';\r\nconst PING = 'p';\r\nconst SERVER_HELLO = 'h';\r\n/**\r\n * Creates a new real-time connection to the server using whichever method works\r\n * best in the current browser.\r\n */\r\nclass Connection {\r\n /**\r\n * @param id - an id for this connection\r\n * @param repoInfo_ - the info for the endpoint to connect to\r\n * @param applicationId_ - the Firebase App ID for this project\r\n * @param appCheckToken_ - The App Check Token for this device.\r\n * @param authToken_ - The auth token for this session.\r\n * @param onMessage_ - the callback to be triggered when a server-push message arrives\r\n * @param onReady_ - the callback to be triggered when this connection is ready to send messages.\r\n * @param onDisconnect_ - the callback to be triggered when a connection was lost\r\n * @param onKill_ - the callback to be triggered when this connection has permanently shut down.\r\n * @param lastSessionId - last session id in persistent connection. is used to clean up old session in real-time server\r\n */\r\n constructor(id, repoInfo_, applicationId_, appCheckToken_, authToken_, onMessage_, onReady_, onDisconnect_, onKill_, lastSessionId) {\r\n this.id = id;\r\n this.repoInfo_ = repoInfo_;\r\n this.applicationId_ = applicationId_;\r\n this.appCheckToken_ = appCheckToken_;\r\n this.authToken_ = authToken_;\r\n this.onMessage_ = onMessage_;\r\n this.onReady_ = onReady_;\r\n this.onDisconnect_ = onDisconnect_;\r\n this.onKill_ = onKill_;\r\n this.lastSessionId = lastSessionId;\r\n this.connectionCount = 0;\r\n this.pendingDataMessages = [];\r\n this.state_ = 0 /* RealtimeState.CONNECTING */;\r\n this.log_ = logWrapper('c:' + this.id + ':');\r\n this.transportManager_ = new TransportManager(repoInfo_);\r\n this.log_('Connection created');\r\n this.start_();\r\n }\r\n /**\r\n * Starts a connection attempt\r\n */\r\n start_() {\r\n const conn = this.transportManager_.initialTransport();\r\n this.conn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, null, this.lastSessionId);\r\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n // can consider the transport healthy.\r\n this.primaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;\r\n const onMessageReceived = this.connReceiver_(this.conn_);\r\n const onConnectionLost = this.disconnReceiver_(this.conn_);\r\n this.tx_ = this.conn_;\r\n this.rx_ = this.conn_;\r\n this.secondaryConn_ = null;\r\n this.isHealthy_ = false;\r\n /*\r\n * Firefox doesn't like when code from one iframe tries to create another iframe by way of the parent frame.\r\n * This can occur in the case of a redirect, i.e. we guessed wrong on what server to connect to and received a reset.\r\n * Somehow, setTimeout seems to make this ok. That doesn't make sense from a security perspective, since you should\r\n * still have the context of your originating frame.\r\n */\r\n setTimeout(() => {\r\n // this.conn_ gets set to null in some of the tests. Check to make sure it still exists before using it\r\n this.conn_ && this.conn_.open(onMessageReceived, onConnectionLost);\r\n }, Math.floor(0));\r\n const healthyTimeoutMS = conn['healthyTimeout'] || 0;\r\n if (healthyTimeoutMS > 0) {\r\n this.healthyTimeout_ = setTimeoutNonBlocking(() => {\r\n this.healthyTimeout_ = null;\r\n if (!this.isHealthy_) {\r\n if (this.conn_ &&\r\n this.conn_.bytesReceived > BYTES_RECEIVED_HEALTHY_OVERRIDE) {\r\n this.log_('Connection exceeded healthy timeout but has received ' +\r\n this.conn_.bytesReceived +\r\n ' bytes. Marking connection healthy.');\r\n this.isHealthy_ = true;\r\n this.conn_.markConnectionHealthy();\r\n }\r\n else if (this.conn_ &&\r\n this.conn_.bytesSent > BYTES_SENT_HEALTHY_OVERRIDE) {\r\n this.log_('Connection exceeded healthy timeout but has sent ' +\r\n this.conn_.bytesSent +\r\n ' bytes. Leaving connection alive.');\r\n // NOTE: We don't want to mark it healthy, since we have no guarantee that the bytes have made it to\r\n // the server.\r\n }\r\n else {\r\n this.log_('Closing unhealthy connection after timeout.');\r\n this.close();\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(healthyTimeoutMS));\r\n }\r\n }\r\n nextTransportId_() {\r\n return 'c:' + this.id + ':' + this.connectionCount++;\r\n }\r\n disconnReceiver_(conn) {\r\n return everConnected => {\r\n if (conn === this.conn_) {\r\n this.onConnectionLost_(everConnected);\r\n }\r\n else if (conn === this.secondaryConn_) {\r\n this.log_('Secondary connection lost.');\r\n this.onSecondaryConnectionLost_();\r\n }\r\n else {\r\n this.log_('closing an old connection');\r\n }\r\n };\r\n }\r\n connReceiver_(conn) {\r\n return (message) => {\r\n if (this.state_ !== 2 /* RealtimeState.DISCONNECTED */) {\r\n if (conn === this.rx_) {\r\n this.onPrimaryMessageReceived_(message);\r\n }\r\n else if (conn === this.secondaryConn_) {\r\n this.onSecondaryMessageReceived_(message);\r\n }\r\n else {\r\n this.log_('message on old connection');\r\n }\r\n }\r\n };\r\n }\r\n /**\r\n * @param dataMsg - An arbitrary data message to be sent to the server\r\n */\r\n sendRequest(dataMsg) {\r\n // wrap in a data message envelope and send it on\r\n const msg = { t: 'd', d: dataMsg };\r\n this.sendData_(msg);\r\n }\r\n tryCleanupConnection() {\r\n if (this.tx_ === this.secondaryConn_ && this.rx_ === this.secondaryConn_) {\r\n this.log_('cleaning up and promoting a connection: ' + this.secondaryConn_.connId);\r\n this.conn_ = this.secondaryConn_;\r\n this.secondaryConn_ = null;\r\n // the server will shutdown the old connection\r\n }\r\n }\r\n onSecondaryControl_(controlData) {\r\n if (MESSAGE_TYPE in controlData) {\r\n const cmd = controlData[MESSAGE_TYPE];\r\n if (cmd === SWITCH_ACK) {\r\n this.upgradeIfSecondaryHealthy_();\r\n }\r\n else if (cmd === CONTROL_RESET) {\r\n // Most likely the session wasn't valid. Abandon the switch attempt\r\n this.log_('Got a reset on secondary, closing it');\r\n this.secondaryConn_.close();\r\n // If we were already using this connection for something, than we need to fully close\r\n if (this.tx_ === this.secondaryConn_ ||\r\n this.rx_ === this.secondaryConn_) {\r\n this.close();\r\n }\r\n }\r\n else if (cmd === CONTROL_PONG) {\r\n this.log_('got pong on secondary.');\r\n this.secondaryResponsesRequired_--;\r\n this.upgradeIfSecondaryHealthy_();\r\n }\r\n }\r\n }\r\n onSecondaryMessageReceived_(parsedData) {\r\n const layer = requireKey('t', parsedData);\r\n const data = requireKey('d', parsedData);\r\n if (layer === 'c') {\r\n this.onSecondaryControl_(data);\r\n }\r\n else if (layer === 'd') {\r\n // got a data message, but we're still second connection. Need to buffer it up\r\n this.pendingDataMessages.push(data);\r\n }\r\n else {\r\n throw new Error('Unknown protocol layer: ' + layer);\r\n }\r\n }\r\n upgradeIfSecondaryHealthy_() {\r\n if (this.secondaryResponsesRequired_ <= 0) {\r\n this.log_('Secondary connection is healthy.');\r\n this.isHealthy_ = true;\r\n this.secondaryConn_.markConnectionHealthy();\r\n this.proceedWithUpgrade_();\r\n }\r\n else {\r\n // Send a ping to make sure the connection is healthy.\r\n this.log_('sending ping on secondary.');\r\n this.secondaryConn_.send({ t: 'c', d: { t: PING, d: {} } });\r\n }\r\n }\r\n proceedWithUpgrade_() {\r\n // tell this connection to consider itself open\r\n this.secondaryConn_.start();\r\n // send ack\r\n this.log_('sending client ack on secondary');\r\n this.secondaryConn_.send({ t: 'c', d: { t: SWITCH_ACK, d: {} } });\r\n // send end packet on primary transport, switch to sending on this one\r\n // can receive on this one, buffer responses until end received on primary transport\r\n this.log_('Ending transmission on primary');\r\n this.conn_.send({ t: 'c', d: { t: END_TRANSMISSION, d: {} } });\r\n this.tx_ = this.secondaryConn_;\r\n this.tryCleanupConnection();\r\n }\r\n onPrimaryMessageReceived_(parsedData) {\r\n // Must refer to parsedData properties in quotes, so closure doesn't touch them.\r\n const layer = requireKey('t', parsedData);\r\n const data = requireKey('d', parsedData);\r\n if (layer === 'c') {\r\n this.onControl_(data);\r\n }\r\n else if (layer === 'd') {\r\n this.onDataMessage_(data);\r\n }\r\n }\r\n onDataMessage_(message) {\r\n this.onPrimaryResponse_();\r\n // We don't do anything with data messages, just kick them up a level\r\n this.onMessage_(message);\r\n }\r\n onPrimaryResponse_() {\r\n if (!this.isHealthy_) {\r\n this.primaryResponsesRequired_--;\r\n if (this.primaryResponsesRequired_ <= 0) {\r\n this.log_('Primary connection is healthy.');\r\n this.isHealthy_ = true;\r\n this.conn_.markConnectionHealthy();\r\n }\r\n }\r\n }\r\n onControl_(controlData) {\r\n const cmd = requireKey(MESSAGE_TYPE, controlData);\r\n if (MESSAGE_DATA in controlData) {\r\n const payload = controlData[MESSAGE_DATA];\r\n if (cmd === SERVER_HELLO) {\r\n const handshakePayload = Object.assign({}, payload);\r\n if (this.repoInfo_.isUsingEmulator) {\r\n // Upon connecting, the emulator will pass the hostname that it's aware of, but we prefer the user's set hostname via `connectDatabaseEmulator` over what the emulator passes.\r\n handshakePayload.h = this.repoInfo_.host;\r\n }\r\n this.onHandshake_(handshakePayload);\r\n }\r\n else if (cmd === END_TRANSMISSION) {\r\n this.log_('recvd end transmission on primary');\r\n this.rx_ = this.secondaryConn_;\r\n for (let i = 0; i < this.pendingDataMessages.length; ++i) {\r\n this.onDataMessage_(this.pendingDataMessages[i]);\r\n }\r\n this.pendingDataMessages = [];\r\n this.tryCleanupConnection();\r\n }\r\n else if (cmd === CONTROL_SHUTDOWN) {\r\n // This was previously the 'onKill' callback passed to the lower-level connection\r\n // payload in this case is the reason for the shutdown. Generally a human-readable error\r\n this.onConnectionShutdown_(payload);\r\n }\r\n else if (cmd === CONTROL_RESET) {\r\n // payload in this case is the host we should contact\r\n this.onReset_(payload);\r\n }\r\n else if (cmd === CONTROL_ERROR) {\r\n error('Server Error: ' + payload);\r\n }\r\n else if (cmd === CONTROL_PONG) {\r\n this.log_('got pong on primary.');\r\n this.onPrimaryResponse_();\r\n this.sendPingOnPrimaryIfNecessary_();\r\n }\r\n else {\r\n error('Unknown control packet command: ' + cmd);\r\n }\r\n }\r\n }\r\n /**\r\n * @param handshake - The handshake data returned from the server\r\n */\r\n onHandshake_(handshake) {\r\n const timestamp = handshake.ts;\r\n const version = handshake.v;\r\n const host = handshake.h;\r\n this.sessionId = handshake.s;\r\n this.repoInfo_.host = host;\r\n // if we've already closed the connection, then don't bother trying to progress further\r\n if (this.state_ === 0 /* RealtimeState.CONNECTING */) {\r\n this.conn_.start();\r\n this.onConnectionEstablished_(this.conn_, timestamp);\r\n if (PROTOCOL_VERSION !== version) {\r\n warn('Protocol version mismatch detected');\r\n }\r\n // TODO: do we want to upgrade? when? maybe a delay?\r\n this.tryStartUpgrade_();\r\n }\r\n }\r\n tryStartUpgrade_() {\r\n const conn = this.transportManager_.upgradeTransport();\r\n if (conn) {\r\n this.startUpgrade_(conn);\r\n }\r\n }\r\n startUpgrade_(conn) {\r\n this.secondaryConn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, this.sessionId);\r\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n // can consider the transport healthy.\r\n this.secondaryResponsesRequired_ =\r\n conn['responsesRequiredToBeHealthy'] || 0;\r\n const onMessage = this.connReceiver_(this.secondaryConn_);\r\n const onDisconnect = this.disconnReceiver_(this.secondaryConn_);\r\n this.secondaryConn_.open(onMessage, onDisconnect);\r\n // If we haven't successfully upgraded after UPGRADE_TIMEOUT, give up and kill the secondary.\r\n setTimeoutNonBlocking(() => {\r\n if (this.secondaryConn_) {\r\n this.log_('Timed out trying to upgrade.');\r\n this.secondaryConn_.close();\r\n }\r\n }, Math.floor(UPGRADE_TIMEOUT));\r\n }\r\n onReset_(host) {\r\n this.log_('Reset packet received. New host: ' + host);\r\n this.repoInfo_.host = host;\r\n // TODO: if we're already \"connected\", we need to trigger a disconnect at the next layer up.\r\n // We don't currently support resets after the connection has already been established\r\n if (this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.close();\r\n }\r\n else {\r\n // Close whatever connections we have open and start again.\r\n this.closeConnections_();\r\n this.start_();\r\n }\r\n }\r\n onConnectionEstablished_(conn, timestamp) {\r\n this.log_('Realtime connection established.');\r\n this.conn_ = conn;\r\n this.state_ = 1 /* RealtimeState.CONNECTED */;\r\n if (this.onReady_) {\r\n this.onReady_(timestamp, this.sessionId);\r\n this.onReady_ = null;\r\n }\r\n // If after 5 seconds we haven't sent enough requests to the server to get the connection healthy,\r\n // send some pings.\r\n if (this.primaryResponsesRequired_ === 0) {\r\n this.log_('Primary connection is healthy.');\r\n this.isHealthy_ = true;\r\n }\r\n else {\r\n setTimeoutNonBlocking(() => {\r\n this.sendPingOnPrimaryIfNecessary_();\r\n }, Math.floor(DELAY_BEFORE_SENDING_EXTRA_REQUESTS));\r\n }\r\n }\r\n sendPingOnPrimaryIfNecessary_() {\r\n // If the connection isn't considered healthy yet, we'll send a noop ping packet request.\r\n if (!this.isHealthy_ && this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.log_('sending ping on primary.');\r\n this.sendData_({ t: 'c', d: { t: PING, d: {} } });\r\n }\r\n }\r\n onSecondaryConnectionLost_() {\r\n const conn = this.secondaryConn_;\r\n this.secondaryConn_ = null;\r\n if (this.tx_ === conn || this.rx_ === conn) {\r\n // we are relying on this connection already in some capacity. Therefore, a failure is real\r\n this.close();\r\n }\r\n }\r\n /**\r\n * @param everConnected - Whether or not the connection ever reached a server. Used to determine if\r\n * we should flush the host cache\r\n */\r\n onConnectionLost_(everConnected) {\r\n this.conn_ = null;\r\n // NOTE: IF you're seeing a Firefox error for this line, I think it might be because it's getting\r\n // called on window close and RealtimeState.CONNECTING is no longer defined. Just a guess.\r\n if (!everConnected && this.state_ === 0 /* RealtimeState.CONNECTING */) {\r\n this.log_('Realtime connection failed.');\r\n // Since we failed to connect at all, clear any cached entry for this namespace in case the machine went away\r\n if (this.repoInfo_.isCacheableHost()) {\r\n PersistentStorage.remove('host:' + this.repoInfo_.host);\r\n // reset the internal host to what we would show the user, i.e. .firebaseio.com\r\n this.repoInfo_.internalHost = this.repoInfo_.host;\r\n }\r\n }\r\n else if (this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.log_('Realtime connection lost.');\r\n }\r\n this.close();\r\n }\r\n onConnectionShutdown_(reason) {\r\n this.log_('Connection shutdown command received. Shutting down...');\r\n if (this.onKill_) {\r\n this.onKill_(reason);\r\n this.onKill_ = null;\r\n }\r\n // We intentionally don't want to fire onDisconnect (kill is a different case),\r\n // so clear the callback.\r\n this.onDisconnect_ = null;\r\n this.close();\r\n }\r\n sendData_(data) {\r\n if (this.state_ !== 1 /* RealtimeState.CONNECTED */) {\r\n throw 'Connection is not connected';\r\n }\r\n else {\r\n this.tx_.send(data);\r\n }\r\n }\r\n /**\r\n * Cleans up this connection, calling the appropriate callbacks\r\n */\r\n close() {\r\n if (this.state_ !== 2 /* RealtimeState.DISCONNECTED */) {\r\n this.log_('Closing realtime connection.');\r\n this.state_ = 2 /* RealtimeState.DISCONNECTED */;\r\n this.closeConnections_();\r\n if (this.onDisconnect_) {\r\n this.onDisconnect_();\r\n this.onDisconnect_ = null;\r\n }\r\n }\r\n }\r\n closeConnections_() {\r\n this.log_('Shutting down all connections');\r\n if (this.conn_) {\r\n this.conn_.close();\r\n this.conn_ = null;\r\n }\r\n if (this.secondaryConn_) {\r\n this.secondaryConn_.close();\r\n this.secondaryConn_ = null;\r\n }\r\n if (this.healthyTimeout_) {\r\n clearTimeout(this.healthyTimeout_);\r\n this.healthyTimeout_ = null;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface defining the set of actions that can be performed against the Firebase server\r\n * (basically corresponds to our wire protocol).\r\n *\r\n * @interface\r\n */\r\nclass ServerActions {\r\n put(pathString, data, onComplete, hash) { }\r\n merge(pathString, data, onComplete, hash) { }\r\n /**\r\n * Refreshes the auth token for the current connection.\r\n * @param token - The authentication token\r\n */\r\n refreshAuthToken(token) { }\r\n /**\r\n * Refreshes the app check token for the current connection.\r\n * @param token The app check token\r\n */\r\n refreshAppCheckToken(token) { }\r\n onDisconnectPut(pathString, data, onComplete) { }\r\n onDisconnectMerge(pathString, data, onComplete) { }\r\n onDisconnectCancel(pathString, onComplete) { }\r\n reportStats(stats) { }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Base class to be used if you want to emit events. Call the constructor with\r\n * the set of allowed event names.\r\n */\r\nclass EventEmitter {\r\n constructor(allowedEvents_) {\r\n this.allowedEvents_ = allowedEvents_;\r\n this.listeners_ = {};\r\n assert(Array.isArray(allowedEvents_) && allowedEvents_.length > 0, 'Requires a non-empty array');\r\n }\r\n /**\r\n * To be called by derived classes to trigger events.\r\n */\r\n trigger(eventType, ...varArgs) {\r\n if (Array.isArray(this.listeners_[eventType])) {\r\n // Clone the list, since callbacks could add/remove listeners.\r\n const listeners = [...this.listeners_[eventType]];\r\n for (let i = 0; i < listeners.length; i++) {\r\n listeners[i].callback.apply(listeners[i].context, varArgs);\r\n }\r\n }\r\n }\r\n on(eventType, callback, context) {\r\n this.validateEventType_(eventType);\r\n this.listeners_[eventType] = this.listeners_[eventType] || [];\r\n this.listeners_[eventType].push({ callback, context });\r\n const eventData = this.getInitialEvent(eventType);\r\n if (eventData) {\r\n callback.apply(context, eventData);\r\n }\r\n }\r\n off(eventType, callback, context) {\r\n this.validateEventType_(eventType);\r\n const listeners = this.listeners_[eventType] || [];\r\n for (let i = 0; i < listeners.length; i++) {\r\n if (listeners[i].callback === callback &&\r\n (!context || context === listeners[i].context)) {\r\n listeners.splice(i, 1);\r\n return;\r\n }\r\n }\r\n }\r\n validateEventType_(eventType) {\r\n assert(this.allowedEvents_.find(et => {\r\n return et === eventType;\r\n }), 'Unknown event: ' + eventType);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Monitors online state (as reported by window.online/offline events).\r\n *\r\n * The expectation is that this could have many false positives (thinks we are online\r\n * when we're not), but no false negatives. So we can safely use it to determine when\r\n * we definitely cannot reach the internet.\r\n */\r\nclass OnlineMonitor extends EventEmitter {\r\n constructor() {\r\n super(['online']);\r\n this.online_ = true;\r\n // We've had repeated complaints that Cordova apps can get stuck \"offline\", e.g.\r\n // https://forum.ionicframework.com/t/firebase-connection-is-lost-and-never-come-back/43810\r\n // It would seem that the 'online' event does not always fire consistently. So we disable it\r\n // for Cordova.\r\n if (typeof window !== 'undefined' &&\r\n typeof window.addEventListener !== 'undefined' &&\r\n !isMobileCordova()) {\r\n window.addEventListener('online', () => {\r\n if (!this.online_) {\r\n this.online_ = true;\r\n this.trigger('online', true);\r\n }\r\n }, false);\r\n window.addEventListener('offline', () => {\r\n if (this.online_) {\r\n this.online_ = false;\r\n this.trigger('online', false);\r\n }\r\n }, false);\r\n }\r\n }\r\n static getInstance() {\r\n return new OnlineMonitor();\r\n }\r\n getInitialEvent(eventType) {\r\n assert(eventType === 'online', 'Unknown event type: ' + eventType);\r\n return [this.online_];\r\n }\r\n currentlyOnline() {\r\n return this.online_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Maximum key depth. */\r\nconst MAX_PATH_DEPTH = 32;\r\n/** Maximum number of (UTF8) bytes in a Firebase path. */\r\nconst MAX_PATH_LENGTH_BYTES = 768;\r\n/**\r\n * An immutable object representing a parsed path. It's immutable so that you\r\n * can pass them around to other functions without worrying about them changing\r\n * it.\r\n */\r\nclass Path {\r\n /**\r\n * @param pathOrString - Path string to parse, or another path, or the raw\r\n * tokens array\r\n */\r\n constructor(pathOrString, pieceNum) {\r\n if (pieceNum === void 0) {\r\n this.pieces_ = pathOrString.split('/');\r\n // Remove empty pieces.\r\n let copyTo = 0;\r\n for (let i = 0; i < this.pieces_.length; i++) {\r\n if (this.pieces_[i].length > 0) {\r\n this.pieces_[copyTo] = this.pieces_[i];\r\n copyTo++;\r\n }\r\n }\r\n this.pieces_.length = copyTo;\r\n this.pieceNum_ = 0;\r\n }\r\n else {\r\n this.pieces_ = pathOrString;\r\n this.pieceNum_ = pieceNum;\r\n }\r\n }\r\n toString() {\r\n let pathString = '';\r\n for (let i = this.pieceNum_; i < this.pieces_.length; i++) {\r\n if (this.pieces_[i] !== '') {\r\n pathString += '/' + this.pieces_[i];\r\n }\r\n }\r\n return pathString || '/';\r\n }\r\n}\r\nfunction newEmptyPath() {\r\n return new Path('');\r\n}\r\nfunction pathGetFront(path) {\r\n if (path.pieceNum_ >= path.pieces_.length) {\r\n return null;\r\n }\r\n return path.pieces_[path.pieceNum_];\r\n}\r\n/**\r\n * @returns The number of segments in this path\r\n */\r\nfunction pathGetLength(path) {\r\n return path.pieces_.length - path.pieceNum_;\r\n}\r\nfunction pathPopFront(path) {\r\n let pieceNum = path.pieceNum_;\r\n if (pieceNum < path.pieces_.length) {\r\n pieceNum++;\r\n }\r\n return new Path(path.pieces_, pieceNum);\r\n}\r\nfunction pathGetBack(path) {\r\n if (path.pieceNum_ < path.pieces_.length) {\r\n return path.pieces_[path.pieces_.length - 1];\r\n }\r\n return null;\r\n}\r\nfunction pathToUrlEncodedString(path) {\r\n let pathString = '';\r\n for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\r\n if (path.pieces_[i] !== '') {\r\n pathString += '/' + encodeURIComponent(String(path.pieces_[i]));\r\n }\r\n }\r\n return pathString || '/';\r\n}\r\n/**\r\n * Shallow copy of the parts of the path.\r\n *\r\n */\r\nfunction pathSlice(path, begin = 0) {\r\n return path.pieces_.slice(path.pieceNum_ + begin);\r\n}\r\nfunction pathParent(path) {\r\n if (path.pieceNum_ >= path.pieces_.length) {\r\n return null;\r\n }\r\n const pieces = [];\r\n for (let i = path.pieceNum_; i < path.pieces_.length - 1; i++) {\r\n pieces.push(path.pieces_[i]);\r\n }\r\n return new Path(pieces, 0);\r\n}\r\nfunction pathChild(path, childPathObj) {\r\n const pieces = [];\r\n for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\r\n pieces.push(path.pieces_[i]);\r\n }\r\n if (childPathObj instanceof Path) {\r\n for (let i = childPathObj.pieceNum_; i < childPathObj.pieces_.length; i++) {\r\n pieces.push(childPathObj.pieces_[i]);\r\n }\r\n }\r\n else {\r\n const childPieces = childPathObj.split('/');\r\n for (let i = 0; i < childPieces.length; i++) {\r\n if (childPieces[i].length > 0) {\r\n pieces.push(childPieces[i]);\r\n }\r\n }\r\n }\r\n return new Path(pieces, 0);\r\n}\r\n/**\r\n * @returns True if there are no segments in this path\r\n */\r\nfunction pathIsEmpty(path) {\r\n return path.pieceNum_ >= path.pieces_.length;\r\n}\r\n/**\r\n * @returns The path from outerPath to innerPath\r\n */\r\nfunction newRelativePath(outerPath, innerPath) {\r\n const outer = pathGetFront(outerPath), inner = pathGetFront(innerPath);\r\n if (outer === null) {\r\n return innerPath;\r\n }\r\n else if (outer === inner) {\r\n return newRelativePath(pathPopFront(outerPath), pathPopFront(innerPath));\r\n }\r\n else {\r\n throw new Error('INTERNAL ERROR: innerPath (' +\r\n innerPath +\r\n ') is not within ' +\r\n 'outerPath (' +\r\n outerPath +\r\n ')');\r\n }\r\n}\r\n/**\r\n * @returns -1, 0, 1 if left is less, equal, or greater than the right.\r\n */\r\nfunction pathCompare(left, right) {\r\n const leftKeys = pathSlice(left, 0);\r\n const rightKeys = pathSlice(right, 0);\r\n for (let i = 0; i < leftKeys.length && i < rightKeys.length; i++) {\r\n const cmp = nameCompare(leftKeys[i], rightKeys[i]);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n }\r\n if (leftKeys.length === rightKeys.length) {\r\n return 0;\r\n }\r\n return leftKeys.length < rightKeys.length ? -1 : 1;\r\n}\r\n/**\r\n * @returns true if paths are the same.\r\n */\r\nfunction pathEquals(path, other) {\r\n if (pathGetLength(path) !== pathGetLength(other)) {\r\n return false;\r\n }\r\n for (let i = path.pieceNum_, j = other.pieceNum_; i <= path.pieces_.length; i++, j++) {\r\n if (path.pieces_[i] !== other.pieces_[j]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * @returns True if this path is a parent of (or the same as) other\r\n */\r\nfunction pathContains(path, other) {\r\n let i = path.pieceNum_;\r\n let j = other.pieceNum_;\r\n if (pathGetLength(path) > pathGetLength(other)) {\r\n return false;\r\n }\r\n while (i < path.pieces_.length) {\r\n if (path.pieces_[i] !== other.pieces_[j]) {\r\n return false;\r\n }\r\n ++i;\r\n ++j;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Dynamic (mutable) path used to count path lengths.\r\n *\r\n * This class is used to efficiently check paths for valid\r\n * length (in UTF8 bytes) and depth (used in path validation).\r\n *\r\n * Throws Error exception if path is ever invalid.\r\n *\r\n * The definition of a path always begins with '/'.\r\n */\r\nclass ValidationPath {\r\n /**\r\n * @param path - Initial Path.\r\n * @param errorPrefix_ - Prefix for any error messages.\r\n */\r\n constructor(path, errorPrefix_) {\r\n this.errorPrefix_ = errorPrefix_;\r\n this.parts_ = pathSlice(path, 0);\r\n /** Initialize to number of '/' chars needed in path. */\r\n this.byteLength_ = Math.max(1, this.parts_.length);\r\n for (let i = 0; i < this.parts_.length; i++) {\r\n this.byteLength_ += stringLength(this.parts_[i]);\r\n }\r\n validationPathCheckValid(this);\r\n }\r\n}\r\nfunction validationPathPush(validationPath, child) {\r\n // Count the needed '/'\r\n if (validationPath.parts_.length > 0) {\r\n validationPath.byteLength_ += 1;\r\n }\r\n validationPath.parts_.push(child);\r\n validationPath.byteLength_ += stringLength(child);\r\n validationPathCheckValid(validationPath);\r\n}\r\nfunction validationPathPop(validationPath) {\r\n const last = validationPath.parts_.pop();\r\n validationPath.byteLength_ -= stringLength(last);\r\n // Un-count the previous '/'\r\n if (validationPath.parts_.length > 0) {\r\n validationPath.byteLength_ -= 1;\r\n }\r\n}\r\nfunction validationPathCheckValid(validationPath) {\r\n if (validationPath.byteLength_ > MAX_PATH_LENGTH_BYTES) {\r\n throw new Error(validationPath.errorPrefix_ +\r\n 'has a key path longer than ' +\r\n MAX_PATH_LENGTH_BYTES +\r\n ' bytes (' +\r\n validationPath.byteLength_ +\r\n ').');\r\n }\r\n if (validationPath.parts_.length > MAX_PATH_DEPTH) {\r\n throw new Error(validationPath.errorPrefix_ +\r\n 'path specified exceeds the maximum depth that can be written (' +\r\n MAX_PATH_DEPTH +\r\n ') or object contains a cycle ' +\r\n validationPathToErrorString(validationPath));\r\n }\r\n}\r\n/**\r\n * String for use in error messages - uses '.' notation for path.\r\n */\r\nfunction validationPathToErrorString(validationPath) {\r\n if (validationPath.parts_.length === 0) {\r\n return '';\r\n }\r\n return \"in property '\" + validationPath.parts_.join('.') + \"'\";\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass VisibilityMonitor extends EventEmitter {\r\n constructor() {\r\n super(['visible']);\r\n let hidden;\r\n let visibilityChange;\r\n if (typeof document !== 'undefined' &&\r\n typeof document.addEventListener !== 'undefined') {\r\n if (typeof document['hidden'] !== 'undefined') {\r\n // Opera 12.10 and Firefox 18 and later support\r\n visibilityChange = 'visibilitychange';\r\n hidden = 'hidden';\r\n }\r\n else if (typeof document['mozHidden'] !== 'undefined') {\r\n visibilityChange = 'mozvisibilitychange';\r\n hidden = 'mozHidden';\r\n }\r\n else if (typeof document['msHidden'] !== 'undefined') {\r\n visibilityChange = 'msvisibilitychange';\r\n hidden = 'msHidden';\r\n }\r\n else if (typeof document['webkitHidden'] !== 'undefined') {\r\n visibilityChange = 'webkitvisibilitychange';\r\n hidden = 'webkitHidden';\r\n }\r\n }\r\n // Initially, we always assume we are visible. This ensures that in browsers\r\n // without page visibility support or in cases where we are never visible\r\n // (e.g. chrome extension), we act as if we are visible, i.e. don't delay\r\n // reconnects\r\n this.visible_ = true;\r\n if (visibilityChange) {\r\n document.addEventListener(visibilityChange, () => {\r\n const visible = !document[hidden];\r\n if (visible !== this.visible_) {\r\n this.visible_ = visible;\r\n this.trigger('visible', visible);\r\n }\r\n }, false);\r\n }\r\n }\r\n static getInstance() {\r\n return new VisibilityMonitor();\r\n }\r\n getInitialEvent(eventType) {\r\n assert(eventType === 'visible', 'Unknown event type: ' + eventType);\r\n return [this.visible_];\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst RECONNECT_MIN_DELAY = 1000;\r\nconst RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858)\r\nconst RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server)\r\nconst RECONNECT_DELAY_MULTIPLIER = 1.3;\r\nconst RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec.\r\nconst SERVER_KILL_INTERRUPT_REASON = 'server_kill';\r\n// If auth fails repeatedly, we'll assume something is wrong and log a warning / back off.\r\nconst INVALID_TOKEN_THRESHOLD = 3;\r\n/**\r\n * Firebase connection. Abstracts wire protocol and handles reconnecting.\r\n *\r\n * NOTE: All JSON objects sent to the realtime connection must have property names enclosed\r\n * in quotes to make sure the closure compiler does not minify them.\r\n */\r\nclass PersistentConnection extends ServerActions {\r\n /**\r\n * @param repoInfo_ - Data about the namespace we are connecting to\r\n * @param applicationId_ - The Firebase App ID for this project\r\n * @param onDataUpdate_ - A callback for new data from the server\r\n */\r\n constructor(repoInfo_, applicationId_, onDataUpdate_, onConnectStatus_, onServerInfoUpdate_, authTokenProvider_, appCheckTokenProvider_, authOverride_) {\r\n super();\r\n this.repoInfo_ = repoInfo_;\r\n this.applicationId_ = applicationId_;\r\n this.onDataUpdate_ = onDataUpdate_;\r\n this.onConnectStatus_ = onConnectStatus_;\r\n this.onServerInfoUpdate_ = onServerInfoUpdate_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckTokenProvider_ = appCheckTokenProvider_;\r\n this.authOverride_ = authOverride_;\r\n // Used for diagnostic logging.\r\n this.id = PersistentConnection.nextPersistentConnectionId_++;\r\n this.log_ = logWrapper('p:' + this.id + ':');\r\n this.interruptReasons_ = {};\r\n this.listens = new Map();\r\n this.outstandingPuts_ = [];\r\n this.outstandingGets_ = [];\r\n this.outstandingPutCount_ = 0;\r\n this.outstandingGetCount_ = 0;\r\n this.onDisconnectRequestQueue_ = [];\r\n this.connected_ = false;\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_DEFAULT;\r\n this.securityDebugCallback_ = null;\r\n this.lastSessionId = null;\r\n this.establishConnectionTimer_ = null;\r\n this.visible_ = false;\r\n // Before we get connected, we keep a queue of pending messages to send.\r\n this.requestCBHash_ = {};\r\n this.requestNumber_ = 0;\r\n this.realtime_ = null;\r\n this.authToken_ = null;\r\n this.appCheckToken_ = null;\r\n this.forceTokenRefresh_ = false;\r\n this.invalidAuthTokenCount_ = 0;\r\n this.invalidAppCheckTokenCount_ = 0;\r\n this.firstConnection_ = true;\r\n this.lastConnectionAttemptTime_ = null;\r\n this.lastConnectionEstablishedTime_ = null;\r\n if (authOverride_ && !isNodeSdk()) {\r\n throw new Error('Auth override specified in options, but not supported on non Node.js platforms');\r\n }\r\n VisibilityMonitor.getInstance().on('visible', this.onVisible_, this);\r\n if (repoInfo_.host.indexOf('fblocal') === -1) {\r\n OnlineMonitor.getInstance().on('online', this.onOnline_, this);\r\n }\r\n }\r\n sendRequest(action, body, onResponse) {\r\n const curReqNum = ++this.requestNumber_;\r\n const msg = { r: curReqNum, a: action, b: body };\r\n this.log_(stringify(msg));\r\n assert(this.connected_, \"sendRequest call when we're not connected not allowed.\");\r\n this.realtime_.sendRequest(msg);\r\n if (onResponse) {\r\n this.requestCBHash_[curReqNum] = onResponse;\r\n }\r\n }\r\n get(query) {\r\n this.initConnection_();\r\n const deferred = new Deferred();\r\n const request = {\r\n p: query._path.toString(),\r\n q: query._queryObject\r\n };\r\n const outstandingGet = {\r\n action: 'g',\r\n request,\r\n onComplete: (message) => {\r\n const payload = message['d'];\r\n if (message['s'] === 'ok') {\r\n deferred.resolve(payload);\r\n }\r\n else {\r\n deferred.reject(payload);\r\n }\r\n }\r\n };\r\n this.outstandingGets_.push(outstandingGet);\r\n this.outstandingGetCount_++;\r\n const index = this.outstandingGets_.length - 1;\r\n if (this.connected_) {\r\n this.sendGet_(index);\r\n }\r\n return deferred.promise;\r\n }\r\n listen(query, currentHashFn, tag, onComplete) {\r\n this.initConnection_();\r\n const queryId = query._queryIdentifier;\r\n const pathString = query._path.toString();\r\n this.log_('Listen called for ' + pathString + ' ' + queryId);\r\n if (!this.listens.has(pathString)) {\r\n this.listens.set(pathString, new Map());\r\n }\r\n assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'listen() called for non-default but complete query');\r\n assert(!this.listens.get(pathString).has(queryId), `listen() called twice for same path/queryId.`);\r\n const listenSpec = {\r\n onComplete,\r\n hashFn: currentHashFn,\r\n query,\r\n tag\r\n };\r\n this.listens.get(pathString).set(queryId, listenSpec);\r\n if (this.connected_) {\r\n this.sendListen_(listenSpec);\r\n }\r\n }\r\n sendGet_(index) {\r\n const get = this.outstandingGets_[index];\r\n this.sendRequest('g', get.request, (message) => {\r\n delete this.outstandingGets_[index];\r\n this.outstandingGetCount_--;\r\n if (this.outstandingGetCount_ === 0) {\r\n this.outstandingGets_ = [];\r\n }\r\n if (get.onComplete) {\r\n get.onComplete(message);\r\n }\r\n });\r\n }\r\n sendListen_(listenSpec) {\r\n const query = listenSpec.query;\r\n const pathString = query._path.toString();\r\n const queryId = query._queryIdentifier;\r\n this.log_('Listen on ' + pathString + ' for ' + queryId);\r\n const req = { /*path*/ p: pathString };\r\n const action = 'q';\r\n // Only bother to send query if it's non-default.\r\n if (listenSpec.tag) {\r\n req['q'] = query._queryObject;\r\n req['t'] = listenSpec.tag;\r\n }\r\n req[ /*hash*/'h'] = listenSpec.hashFn();\r\n this.sendRequest(action, req, (message) => {\r\n const payload = message[ /*data*/'d'];\r\n const status = message[ /*status*/'s'];\r\n // print warnings in any case...\r\n PersistentConnection.warnOnListenWarnings_(payload, query);\r\n const currentListenSpec = this.listens.get(pathString) &&\r\n this.listens.get(pathString).get(queryId);\r\n // only trigger actions if the listen hasn't been removed and readded\r\n if (currentListenSpec === listenSpec) {\r\n this.log_('listen response', message);\r\n if (status !== 'ok') {\r\n this.removeListen_(pathString, queryId);\r\n }\r\n if (listenSpec.onComplete) {\r\n listenSpec.onComplete(status, payload);\r\n }\r\n }\r\n });\r\n }\r\n static warnOnListenWarnings_(payload, query) {\r\n if (payload && typeof payload === 'object' && contains(payload, 'w')) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const warnings = safeGet(payload, 'w');\r\n if (Array.isArray(warnings) && ~warnings.indexOf('no_index')) {\r\n const indexSpec = '\".indexOn\": \"' + query._queryParams.getIndex().toString() + '\"';\r\n const indexPath = query._path.toString();\r\n warn(`Using an unspecified index. Your data will be downloaded and ` +\r\n `filtered on the client. Consider adding ${indexSpec} at ` +\r\n `${indexPath} to your security rules for better performance.`);\r\n }\r\n }\r\n }\r\n refreshAuthToken(token) {\r\n this.authToken_ = token;\r\n this.log_('Auth token refreshed');\r\n if (this.authToken_) {\r\n this.tryAuth();\r\n }\r\n else {\r\n //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete\r\n //the credential so we dont become authenticated next time we connect.\r\n if (this.connected_) {\r\n this.sendRequest('unauth', {}, () => { });\r\n }\r\n }\r\n this.reduceReconnectDelayIfAdminCredential_(token);\r\n }\r\n reduceReconnectDelayIfAdminCredential_(credential) {\r\n // NOTE: This isn't intended to be bulletproof (a malicious developer can always just modify the client).\r\n // Additionally, we don't bother resetting the max delay back to the default if auth fails / expires.\r\n const isFirebaseSecret = credential && credential.length === 40;\r\n if (isFirebaseSecret || isAdmin(credential)) {\r\n this.log_('Admin auth credential detected. Reducing max reconnect time.');\r\n this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n }\r\n }\r\n refreshAppCheckToken(token) {\r\n this.appCheckToken_ = token;\r\n this.log_('App check token refreshed');\r\n if (this.appCheckToken_) {\r\n this.tryAppCheck();\r\n }\r\n else {\r\n //If we're connected we want to let the server know to unauthenticate us.\r\n //If we're not connected, simply delete the credential so we dont become\r\n // authenticated next time we connect.\r\n if (this.connected_) {\r\n this.sendRequest('unappeck', {}, () => { });\r\n }\r\n }\r\n }\r\n /**\r\n * Attempts to authenticate with the given credentials. If the authentication attempt fails, it's triggered like\r\n * a auth revoked (the connection is closed).\r\n */\r\n tryAuth() {\r\n if (this.connected_ && this.authToken_) {\r\n const token = this.authToken_;\r\n const authMethod = isValidFormat(token) ? 'auth' : 'gauth';\r\n const requestData = { cred: token };\r\n if (this.authOverride_ === null) {\r\n requestData['noauth'] = true;\r\n }\r\n else if (typeof this.authOverride_ === 'object') {\r\n requestData['authvar'] = this.authOverride_;\r\n }\r\n this.sendRequest(authMethod, requestData, (res) => {\r\n const status = res[ /*status*/'s'];\r\n const data = res[ /*data*/'d'] || 'error';\r\n if (this.authToken_ === token) {\r\n if (status === 'ok') {\r\n this.invalidAuthTokenCount_ = 0;\r\n }\r\n else {\r\n // Triggers reconnect and force refresh for auth token\r\n this.onAuthRevoked_(status, data);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Attempts to authenticate with the given token. If the authentication\r\n * attempt fails, it's triggered like the token was revoked (the connection is\r\n * closed).\r\n */\r\n tryAppCheck() {\r\n if (this.connected_ && this.appCheckToken_) {\r\n this.sendRequest('appcheck', { 'token': this.appCheckToken_ }, (res) => {\r\n const status = res[ /*status*/'s'];\r\n const data = res[ /*data*/'d'] || 'error';\r\n if (status === 'ok') {\r\n this.invalidAppCheckTokenCount_ = 0;\r\n }\r\n else {\r\n this.onAppCheckRevoked_(status, data);\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * @inheritDoc\r\n */\r\n unlisten(query, tag) {\r\n const pathString = query._path.toString();\r\n const queryId = query._queryIdentifier;\r\n this.log_('Unlisten called for ' + pathString + ' ' + queryId);\r\n assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'unlisten() called for non-default but complete query');\r\n const listen = this.removeListen_(pathString, queryId);\r\n if (listen && this.connected_) {\r\n this.sendUnlisten_(pathString, queryId, query._queryObject, tag);\r\n }\r\n }\r\n sendUnlisten_(pathString, queryId, queryObj, tag) {\r\n this.log_('Unlisten on ' + pathString + ' for ' + queryId);\r\n const req = { /*path*/ p: pathString };\r\n const action = 'n';\r\n // Only bother sending queryId if it's non-default.\r\n if (tag) {\r\n req['q'] = queryObj;\r\n req['t'] = tag;\r\n }\r\n this.sendRequest(action, req);\r\n }\r\n onDisconnectPut(pathString, data, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('o', pathString, data, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'o',\r\n data,\r\n onComplete\r\n });\r\n }\r\n }\r\n onDisconnectMerge(pathString, data, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('om', pathString, data, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'om',\r\n data,\r\n onComplete\r\n });\r\n }\r\n }\r\n onDisconnectCancel(pathString, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('oc', pathString, null, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'oc',\r\n data: null,\r\n onComplete\r\n });\r\n }\r\n }\r\n sendOnDisconnect_(action, pathString, data, onComplete) {\r\n const request = { /*path*/ p: pathString, /*data*/ d: data };\r\n this.log_('onDisconnect ' + action, request);\r\n this.sendRequest(action, request, (response) => {\r\n if (onComplete) {\r\n setTimeout(() => {\r\n onComplete(response[ /*status*/'s'], response[ /* data */'d']);\r\n }, Math.floor(0));\r\n }\r\n });\r\n }\r\n put(pathString, data, onComplete, hash) {\r\n this.putInternal('p', pathString, data, onComplete, hash);\r\n }\r\n merge(pathString, data, onComplete, hash) {\r\n this.putInternal('m', pathString, data, onComplete, hash);\r\n }\r\n putInternal(action, pathString, data, onComplete, hash) {\r\n this.initConnection_();\r\n const request = {\r\n /*path*/ p: pathString,\r\n /*data*/ d: data\r\n };\r\n if (hash !== undefined) {\r\n request[ /*hash*/'h'] = hash;\r\n }\r\n // TODO: Only keep track of the most recent put for a given path?\r\n this.outstandingPuts_.push({\r\n action,\r\n request,\r\n onComplete\r\n });\r\n this.outstandingPutCount_++;\r\n const index = this.outstandingPuts_.length - 1;\r\n if (this.connected_) {\r\n this.sendPut_(index);\r\n }\r\n else {\r\n this.log_('Buffering put: ' + pathString);\r\n }\r\n }\r\n sendPut_(index) {\r\n const action = this.outstandingPuts_[index].action;\r\n const request = this.outstandingPuts_[index].request;\r\n const onComplete = this.outstandingPuts_[index].onComplete;\r\n this.outstandingPuts_[index].queued = this.connected_;\r\n this.sendRequest(action, request, (message) => {\r\n this.log_(action + ' response', message);\r\n delete this.outstandingPuts_[index];\r\n this.outstandingPutCount_--;\r\n // Clean up array occasionally.\r\n if (this.outstandingPutCount_ === 0) {\r\n this.outstandingPuts_ = [];\r\n }\r\n if (onComplete) {\r\n onComplete(message[ /*status*/'s'], message[ /* data */'d']);\r\n }\r\n });\r\n }\r\n reportStats(stats) {\r\n // If we're not connected, we just drop the stats.\r\n if (this.connected_) {\r\n const request = { /*counters*/ c: stats };\r\n this.log_('reportStats', request);\r\n this.sendRequest(/*stats*/ 's', request, result => {\r\n const status = result[ /*status*/'s'];\r\n if (status !== 'ok') {\r\n const errorReason = result[ /* data */'d'];\r\n this.log_('reportStats', 'Error sending stats: ' + errorReason);\r\n }\r\n });\r\n }\r\n }\r\n onDataMessage_(message) {\r\n if ('r' in message) {\r\n // this is a response\r\n this.log_('from server: ' + stringify(message));\r\n const reqNum = message['r'];\r\n const onResponse = this.requestCBHash_[reqNum];\r\n if (onResponse) {\r\n delete this.requestCBHash_[reqNum];\r\n onResponse(message[ /*body*/'b']);\r\n }\r\n }\r\n else if ('error' in message) {\r\n throw 'A server-side error has occurred: ' + message['error'];\r\n }\r\n else if ('a' in message) {\r\n // a and b are action and body, respectively\r\n this.onDataPush_(message['a'], message['b']);\r\n }\r\n }\r\n onDataPush_(action, body) {\r\n this.log_('handleServerMessage', action, body);\r\n if (action === 'd') {\r\n this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n /*isMerge*/ false, body['t']);\r\n }\r\n else if (action === 'm') {\r\n this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n /*isMerge=*/ true, body['t']);\r\n }\r\n else if (action === 'c') {\r\n this.onListenRevoked_(body[ /*path*/'p'], body[ /*query*/'q']);\r\n }\r\n else if (action === 'ac') {\r\n this.onAuthRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n }\r\n else if (action === 'apc') {\r\n this.onAppCheckRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n }\r\n else if (action === 'sd') {\r\n this.onSecurityDebugPacket_(body);\r\n }\r\n else {\r\n error('Unrecognized action received from server: ' +\r\n stringify(action) +\r\n '\\nAre you using the latest client?');\r\n }\r\n }\r\n onReady_(timestamp, sessionId) {\r\n this.log_('connection ready');\r\n this.connected_ = true;\r\n this.lastConnectionEstablishedTime_ = new Date().getTime();\r\n this.handleTimestamp_(timestamp);\r\n this.lastSessionId = sessionId;\r\n if (this.firstConnection_) {\r\n this.sendConnectStats_();\r\n }\r\n this.restoreState_();\r\n this.firstConnection_ = false;\r\n this.onConnectStatus_(true);\r\n }\r\n scheduleConnect_(timeout) {\r\n assert(!this.realtime_, \"Scheduling a connect when we're already connected/ing?\");\r\n if (this.establishConnectionTimer_) {\r\n clearTimeout(this.establishConnectionTimer_);\r\n }\r\n // NOTE: Even when timeout is 0, it's important to do a setTimeout to work around an infuriating \"Security Error\" in\r\n // Firefox when trying to write to our long-polling iframe in some scenarios (e.g. Forge or our unit tests).\r\n this.establishConnectionTimer_ = setTimeout(() => {\r\n this.establishConnectionTimer_ = null;\r\n this.establishConnection_();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(timeout));\r\n }\r\n initConnection_() {\r\n if (!this.realtime_ && this.firstConnection_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n onVisible_(visible) {\r\n // NOTE: Tabbing away and back to a window will defeat our reconnect backoff, but I think that's fine.\r\n if (visible &&\r\n !this.visible_ &&\r\n this.reconnectDelay_ === this.maxReconnectDelay_) {\r\n this.log_('Window became visible. Reducing delay.');\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n this.visible_ = visible;\r\n }\r\n onOnline_(online) {\r\n if (online) {\r\n this.log_('Browser went online.');\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n else {\r\n this.log_('Browser went offline. Killing connection.');\r\n if (this.realtime_) {\r\n this.realtime_.close();\r\n }\r\n }\r\n }\r\n onRealtimeDisconnect_() {\r\n this.log_('data client disconnected');\r\n this.connected_ = false;\r\n this.realtime_ = null;\r\n // Since we don't know if our sent transactions succeeded or not, we need to cancel them.\r\n this.cancelSentTransactions_();\r\n // Clear out the pending requests.\r\n this.requestCBHash_ = {};\r\n if (this.shouldReconnect_()) {\r\n if (!this.visible_) {\r\n this.log_(\"Window isn't visible. Delaying reconnect.\");\r\n this.reconnectDelay_ = this.maxReconnectDelay_;\r\n this.lastConnectionAttemptTime_ = new Date().getTime();\r\n }\r\n else if (this.lastConnectionEstablishedTime_) {\r\n // If we've been connected long enough, reset reconnect delay to minimum.\r\n const timeSinceLastConnectSucceeded = new Date().getTime() - this.lastConnectionEstablishedTime_;\r\n if (timeSinceLastConnectSucceeded > RECONNECT_DELAY_RESET_TIMEOUT) {\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n }\r\n this.lastConnectionEstablishedTime_ = null;\r\n }\r\n const timeSinceLastConnectAttempt = new Date().getTime() - this.lastConnectionAttemptTime_;\r\n let reconnectDelay = Math.max(0, this.reconnectDelay_ - timeSinceLastConnectAttempt);\r\n reconnectDelay = Math.random() * reconnectDelay;\r\n this.log_('Trying to reconnect in ' + reconnectDelay + 'ms');\r\n this.scheduleConnect_(reconnectDelay);\r\n // Adjust reconnect delay for next time.\r\n this.reconnectDelay_ = Math.min(this.maxReconnectDelay_, this.reconnectDelay_ * RECONNECT_DELAY_MULTIPLIER);\r\n }\r\n this.onConnectStatus_(false);\r\n }\r\n async establishConnection_() {\r\n if (this.shouldReconnect_()) {\r\n this.log_('Making a connection attempt');\r\n this.lastConnectionAttemptTime_ = new Date().getTime();\r\n this.lastConnectionEstablishedTime_ = null;\r\n const onDataMessage = this.onDataMessage_.bind(this);\r\n const onReady = this.onReady_.bind(this);\r\n const onDisconnect = this.onRealtimeDisconnect_.bind(this);\r\n const connId = this.id + ':' + PersistentConnection.nextConnectionId_++;\r\n const lastSessionId = this.lastSessionId;\r\n let canceled = false;\r\n let connection = null;\r\n const closeFn = function () {\r\n if (connection) {\r\n connection.close();\r\n }\r\n else {\r\n canceled = true;\r\n onDisconnect();\r\n }\r\n };\r\n const sendRequestFn = function (msg) {\r\n assert(connection, \"sendRequest call when we're not connected not allowed.\");\r\n connection.sendRequest(msg);\r\n };\r\n this.realtime_ = {\r\n close: closeFn,\r\n sendRequest: sendRequestFn\r\n };\r\n const forceRefresh = this.forceTokenRefresh_;\r\n this.forceTokenRefresh_ = false;\r\n try {\r\n // First fetch auth and app check token, and establish connection after\r\n // fetching the token was successful\r\n const [authToken, appCheckToken] = await Promise.all([\r\n this.authTokenProvider_.getToken(forceRefresh),\r\n this.appCheckTokenProvider_.getToken(forceRefresh)\r\n ]);\r\n if (!canceled) {\r\n log('getToken() completed. Creating connection.');\r\n this.authToken_ = authToken && authToken.accessToken;\r\n this.appCheckToken_ = appCheckToken && appCheckToken.token;\r\n connection = new Connection(connId, this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, onDataMessage, onReady, onDisconnect, \r\n /* onKill= */ reason => {\r\n warn(reason + ' (' + this.repoInfo_.toString() + ')');\r\n this.interrupt(SERVER_KILL_INTERRUPT_REASON);\r\n }, lastSessionId);\r\n }\r\n else {\r\n log('getToken() completed but was canceled');\r\n }\r\n }\r\n catch (error) {\r\n this.log_('Failed to get token: ' + error);\r\n if (!canceled) {\r\n if (this.repoInfo_.nodeAdmin) {\r\n // This may be a critical error for the Admin Node.js SDK, so log a warning.\r\n // But getToken() may also just have temporarily failed, so we still want to\r\n // continue retrying.\r\n warn(error);\r\n }\r\n closeFn();\r\n }\r\n }\r\n }\r\n }\r\n interrupt(reason) {\r\n log('Interrupting connection for reason: ' + reason);\r\n this.interruptReasons_[reason] = true;\r\n if (this.realtime_) {\r\n this.realtime_.close();\r\n }\r\n else {\r\n if (this.establishConnectionTimer_) {\r\n clearTimeout(this.establishConnectionTimer_);\r\n this.establishConnectionTimer_ = null;\r\n }\r\n if (this.connected_) {\r\n this.onRealtimeDisconnect_();\r\n }\r\n }\r\n }\r\n resume(reason) {\r\n log('Resuming connection for reason: ' + reason);\r\n delete this.interruptReasons_[reason];\r\n if (isEmpty(this.interruptReasons_)) {\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n }\r\n handleTimestamp_(timestamp) {\r\n const delta = timestamp - new Date().getTime();\r\n this.onServerInfoUpdate_({ serverTimeOffset: delta });\r\n }\r\n cancelSentTransactions_() {\r\n for (let i = 0; i < this.outstandingPuts_.length; i++) {\r\n const put = this.outstandingPuts_[i];\r\n if (put && /*hash*/ 'h' in put.request && put.queued) {\r\n if (put.onComplete) {\r\n put.onComplete('disconnect');\r\n }\r\n delete this.outstandingPuts_[i];\r\n this.outstandingPutCount_--;\r\n }\r\n }\r\n // Clean up array occasionally.\r\n if (this.outstandingPutCount_ === 0) {\r\n this.outstandingPuts_ = [];\r\n }\r\n }\r\n onListenRevoked_(pathString, query) {\r\n // Remove the listen and manufacture a \"permission_denied\" error for the failed listen.\r\n let queryId;\r\n if (!query) {\r\n queryId = 'default';\r\n }\r\n else {\r\n queryId = query.map(q => ObjectToUniqueKey(q)).join('$');\r\n }\r\n const listen = this.removeListen_(pathString, queryId);\r\n if (listen && listen.onComplete) {\r\n listen.onComplete('permission_denied');\r\n }\r\n }\r\n removeListen_(pathString, queryId) {\r\n const normalizedPathString = new Path(pathString).toString(); // normalize path.\r\n let listen;\r\n if (this.listens.has(normalizedPathString)) {\r\n const map = this.listens.get(normalizedPathString);\r\n listen = map.get(queryId);\r\n map.delete(queryId);\r\n if (map.size === 0) {\r\n this.listens.delete(normalizedPathString);\r\n }\r\n }\r\n else {\r\n // all listens for this path has already been removed\r\n listen = undefined;\r\n }\r\n return listen;\r\n }\r\n onAuthRevoked_(statusCode, explanation) {\r\n log('Auth token revoked: ' + statusCode + '/' + explanation);\r\n this.authToken_ = null;\r\n this.forceTokenRefresh_ = true;\r\n this.realtime_.close();\r\n if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n // We'll wait a couple times before logging the warning / increasing the\r\n // retry period since oauth tokens will report as \"invalid\" if they're\r\n // just expired. Plus there may be transient issues that resolve themselves.\r\n this.invalidAuthTokenCount_++;\r\n if (this.invalidAuthTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\r\n // Set a long reconnect delay because recovery is unlikely\r\n this.reconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n // Notify the auth token provider that the token is invalid, which will log\r\n // a warning\r\n this.authTokenProvider_.notifyForInvalidToken();\r\n }\r\n }\r\n }\r\n onAppCheckRevoked_(statusCode, explanation) {\r\n log('App check token revoked: ' + statusCode + '/' + explanation);\r\n this.appCheckToken_ = null;\r\n this.forceTokenRefresh_ = true;\r\n // Note: We don't close the connection as the developer may not have\r\n // enforcement enabled. The backend closes connections with enforcements.\r\n if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n // We'll wait a couple times before logging the warning / increasing the\r\n // retry period since oauth tokens will report as \"invalid\" if they're\r\n // just expired. Plus there may be transient issues that resolve themselves.\r\n this.invalidAppCheckTokenCount_++;\r\n if (this.invalidAppCheckTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\r\n this.appCheckTokenProvider_.notifyForInvalidToken();\r\n }\r\n }\r\n }\r\n onSecurityDebugPacket_(body) {\r\n if (this.securityDebugCallback_) {\r\n this.securityDebugCallback_(body);\r\n }\r\n else {\r\n if ('msg' in body) {\r\n console.log('FIREBASE: ' + body['msg'].replace('\\n', '\\nFIREBASE: '));\r\n }\r\n }\r\n }\r\n restoreState_() {\r\n //Re-authenticate ourselves if we have a credential stored.\r\n this.tryAuth();\r\n this.tryAppCheck();\r\n // Puts depend on having received the corresponding data update from the server before they complete, so we must\r\n // make sure to send listens before puts.\r\n for (const queries of this.listens.values()) {\r\n for (const listenSpec of queries.values()) {\r\n this.sendListen_(listenSpec);\r\n }\r\n }\r\n for (let i = 0; i < this.outstandingPuts_.length; i++) {\r\n if (this.outstandingPuts_[i]) {\r\n this.sendPut_(i);\r\n }\r\n }\r\n while (this.onDisconnectRequestQueue_.length) {\r\n const request = this.onDisconnectRequestQueue_.shift();\r\n this.sendOnDisconnect_(request.action, request.pathString, request.data, request.onComplete);\r\n }\r\n for (let i = 0; i < this.outstandingGets_.length; i++) {\r\n if (this.outstandingGets_[i]) {\r\n this.sendGet_(i);\r\n }\r\n }\r\n }\r\n /**\r\n * Sends client stats for first connection\r\n */\r\n sendConnectStats_() {\r\n const stats = {};\r\n let clientName = 'js';\r\n if (isNodeSdk()) {\r\n if (this.repoInfo_.nodeAdmin) {\r\n clientName = 'admin_node';\r\n }\r\n else {\r\n clientName = 'node';\r\n }\r\n }\r\n stats['sdk.' + clientName + '.' + SDK_VERSION.replace(/\\./g, '-')] = 1;\r\n if (isMobileCordova()) {\r\n stats['framework.cordova'] = 1;\r\n }\r\n else if (isReactNative()) {\r\n stats['framework.reactnative'] = 1;\r\n }\r\n this.reportStats(stats);\r\n }\r\n shouldReconnect_() {\r\n const online = OnlineMonitor.getInstance().currentlyOnline();\r\n return isEmpty(this.interruptReasons_) && online;\r\n }\r\n}\r\nPersistentConnection.nextPersistentConnectionId_ = 0;\r\n/**\r\n * Counter for number of connections created. Mainly used for tagging in the logs\r\n */\r\nPersistentConnection.nextConnectionId_ = 0;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass NamedNode {\r\n constructor(name, node) {\r\n this.name = name;\r\n this.node = node;\r\n }\r\n static Wrap(name, node) {\r\n return new NamedNode(name, node);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Index {\r\n /**\r\n * @returns A standalone comparison function for\r\n * this index\r\n */\r\n getCompare() {\r\n return this.compare.bind(this);\r\n }\r\n /**\r\n * Given a before and after value for a node, determine if the indexed value has changed. Even if they are different,\r\n * it's possible that the changes are isolated to parts of the snapshot that are not indexed.\r\n *\r\n *\r\n * @returns True if the portion of the snapshot being indexed changed between oldNode and newNode\r\n */\r\n indexedValueChanged(oldNode, newNode) {\r\n const oldWrapped = new NamedNode(MIN_NAME, oldNode);\r\n const newWrapped = new NamedNode(MIN_NAME, newNode);\r\n return this.compare(oldWrapped, newWrapped) !== 0;\r\n }\r\n /**\r\n * @returns a node wrapper that will sort equal to or less than\r\n * any other node wrapper, using this index\r\n */\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet __EMPTY_NODE;\r\nclass KeyIndex extends Index {\r\n static get __EMPTY_NODE() {\r\n return __EMPTY_NODE;\r\n }\r\n static set __EMPTY_NODE(val) {\r\n __EMPTY_NODE = val;\r\n }\r\n compare(a, b) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n isDefinedOn(node) {\r\n // We could probably return true here (since every node has a key), but it's never called\r\n // so just leaving unimplemented for now.\r\n throw assertionError('KeyIndex.isDefinedOn not expected to be called.');\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return false; // The key for a node never changes.\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n // TODO: This should really be created once and cached in a static property, but\r\n // NamedNode isn't defined yet, so I can't use it in a static. Bleh.\r\n return new NamedNode(MAX_NAME, __EMPTY_NODE);\r\n }\r\n makePost(indexValue, name) {\r\n assert(typeof indexValue === 'string', 'KeyIndex indexValue must always be a string.');\r\n // We just use empty node, but it'll never be compared, since our comparator only looks at name.\r\n return new NamedNode(indexValue, __EMPTY_NODE);\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.key';\r\n }\r\n}\r\nconst KEY_INDEX = new KeyIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An iterator over an LLRBNode.\r\n */\r\nclass SortedMapIterator {\r\n /**\r\n * @param node - Node to iterate.\r\n * @param isReverse_ - Whether or not to iterate in reverse\r\n */\r\n constructor(node, startKey, comparator, isReverse_, resultGenerator_ = null) {\r\n this.isReverse_ = isReverse_;\r\n this.resultGenerator_ = resultGenerator_;\r\n this.nodeStack_ = [];\r\n let cmp = 1;\r\n while (!node.isEmpty()) {\r\n node = node;\r\n cmp = startKey ? comparator(node.key, startKey) : 1;\r\n // flip the comparison if we're going in reverse\r\n if (isReverse_) {\r\n cmp *= -1;\r\n }\r\n if (cmp < 0) {\r\n // This node is less than our start key. ignore it\r\n if (this.isReverse_) {\r\n node = node.left;\r\n }\r\n else {\r\n node = node.right;\r\n }\r\n }\r\n else if (cmp === 0) {\r\n // This node is exactly equal to our start key. Push it on the stack, but stop iterating;\r\n this.nodeStack_.push(node);\r\n break;\r\n }\r\n else {\r\n // This node is greater than our start key, add it to the stack and move to the next one\r\n this.nodeStack_.push(node);\r\n if (this.isReverse_) {\r\n node = node.right;\r\n }\r\n else {\r\n node = node.left;\r\n }\r\n }\r\n }\r\n }\r\n getNext() {\r\n if (this.nodeStack_.length === 0) {\r\n return null;\r\n }\r\n let node = this.nodeStack_.pop();\r\n let result;\r\n if (this.resultGenerator_) {\r\n result = this.resultGenerator_(node.key, node.value);\r\n }\r\n else {\r\n result = { key: node.key, value: node.value };\r\n }\r\n if (this.isReverse_) {\r\n node = node.left;\r\n while (!node.isEmpty()) {\r\n this.nodeStack_.push(node);\r\n node = node.right;\r\n }\r\n }\r\n else {\r\n node = node.right;\r\n while (!node.isEmpty()) {\r\n this.nodeStack_.push(node);\r\n node = node.left;\r\n }\r\n }\r\n return result;\r\n }\r\n hasNext() {\r\n return this.nodeStack_.length > 0;\r\n }\r\n peek() {\r\n if (this.nodeStack_.length === 0) {\r\n return null;\r\n }\r\n const node = this.nodeStack_[this.nodeStack_.length - 1];\r\n if (this.resultGenerator_) {\r\n return this.resultGenerator_(node.key, node.value);\r\n }\r\n else {\r\n return { key: node.key, value: node.value };\r\n }\r\n }\r\n}\r\n/**\r\n * Represents a node in a Left-leaning Red-Black tree.\r\n */\r\nclass LLRBNode {\r\n /**\r\n * @param key - Key associated with this node.\r\n * @param value - Value associated with this node.\r\n * @param color - Whether this node is red.\r\n * @param left - Left child.\r\n * @param right - Right child.\r\n */\r\n constructor(key, value, color, left, right) {\r\n this.key = key;\r\n this.value = value;\r\n this.color = color != null ? color : LLRBNode.RED;\r\n this.left =\r\n left != null ? left : SortedMap.EMPTY_NODE;\r\n this.right =\r\n right != null ? right : SortedMap.EMPTY_NODE;\r\n }\r\n /**\r\n * Returns a copy of the current node, optionally replacing pieces of it.\r\n *\r\n * @param key - New key for the node, or null.\r\n * @param value - New value for the node, or null.\r\n * @param color - New color for the node, or null.\r\n * @param left - New left child for the node, or null.\r\n * @param right - New right child for the node, or null.\r\n * @returns The node copy.\r\n */\r\n copy(key, value, color, left, right) {\r\n return new LLRBNode(key != null ? key : this.key, value != null ? value : this.value, color != null ? color : this.color, left != null ? left : this.left, right != null ? right : this.right);\r\n }\r\n /**\r\n * @returns The total number of nodes in the tree.\r\n */\r\n count() {\r\n return this.left.count() + 1 + this.right.count();\r\n }\r\n /**\r\n * @returns True if the tree is empty.\r\n */\r\n isEmpty() {\r\n return false;\r\n }\r\n /**\r\n * Traverses the tree in key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns The first truthy value returned by action, or the last falsey\r\n * value returned by action\r\n */\r\n inorderTraversal(action) {\r\n return (this.left.inorderTraversal(action) ||\r\n !!action(this.key, this.value) ||\r\n this.right.inorderTraversal(action));\r\n }\r\n /**\r\n * Traverses the tree in reverse key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return (this.right.reverseTraversal(action) ||\r\n action(this.key, this.value) ||\r\n this.left.reverseTraversal(action));\r\n }\r\n /**\r\n * @returns The minimum node in the tree.\r\n */\r\n min_() {\r\n if (this.left.isEmpty()) {\r\n return this;\r\n }\r\n else {\r\n return this.left.min_();\r\n }\r\n }\r\n /**\r\n * @returns The maximum key in the tree.\r\n */\r\n minKey() {\r\n return this.min_().key;\r\n }\r\n /**\r\n * @returns The maximum key in the tree.\r\n */\r\n maxKey() {\r\n if (this.right.isEmpty()) {\r\n return this.key;\r\n }\r\n else {\r\n return this.right.maxKey();\r\n }\r\n }\r\n /**\r\n * @param key - Key to insert.\r\n * @param value - Value to insert.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with the key/value added.\r\n */\r\n insert(key, value, comparator) {\r\n let n = this;\r\n const cmp = comparator(key, n.key);\r\n if (cmp < 0) {\r\n n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);\r\n }\r\n else if (cmp === 0) {\r\n n = n.copy(null, value, null, null, null);\r\n }\r\n else {\r\n n = n.copy(null, null, null, null, n.right.insert(key, value, comparator));\r\n }\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @returns New tree, with the minimum key removed.\r\n */\r\n removeMin_() {\r\n if (this.left.isEmpty()) {\r\n return SortedMap.EMPTY_NODE;\r\n }\r\n let n = this;\r\n if (!n.left.isRed_() && !n.left.left.isRed_()) {\r\n n = n.moveRedLeft_();\r\n }\r\n n = n.copy(null, null, null, n.left.removeMin_(), null);\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @param key - The key of the item to remove.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with the specified item removed.\r\n */\r\n remove(key, comparator) {\r\n let n, smallest;\r\n n = this;\r\n if (comparator(key, n.key) < 0) {\r\n if (!n.left.isEmpty() && !n.left.isRed_() && !n.left.left.isRed_()) {\r\n n = n.moveRedLeft_();\r\n }\r\n n = n.copy(null, null, null, n.left.remove(key, comparator), null);\r\n }\r\n else {\r\n if (n.left.isRed_()) {\r\n n = n.rotateRight_();\r\n }\r\n if (!n.right.isEmpty() && !n.right.isRed_() && !n.right.left.isRed_()) {\r\n n = n.moveRedRight_();\r\n }\r\n if (comparator(key, n.key) === 0) {\r\n if (n.right.isEmpty()) {\r\n return SortedMap.EMPTY_NODE;\r\n }\r\n else {\r\n smallest = n.right.min_();\r\n n = n.copy(smallest.key, smallest.value, null, null, n.right.removeMin_());\r\n }\r\n }\r\n n = n.copy(null, null, null, null, n.right.remove(key, comparator));\r\n }\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @returns Whether this is a RED node.\r\n */\r\n isRed_() {\r\n return this.color;\r\n }\r\n /**\r\n * @returns New tree after performing any needed rotations.\r\n */\r\n fixUp_() {\r\n let n = this;\r\n if (n.right.isRed_() && !n.left.isRed_()) {\r\n n = n.rotateLeft_();\r\n }\r\n if (n.left.isRed_() && n.left.left.isRed_()) {\r\n n = n.rotateRight_();\r\n }\r\n if (n.left.isRed_() && n.right.isRed_()) {\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after moveRedLeft.\r\n */\r\n moveRedLeft_() {\r\n let n = this.colorFlip_();\r\n if (n.right.left.isRed_()) {\r\n n = n.copy(null, null, null, null, n.right.rotateRight_());\r\n n = n.rotateLeft_();\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after moveRedRight.\r\n */\r\n moveRedRight_() {\r\n let n = this.colorFlip_();\r\n if (n.left.left.isRed_()) {\r\n n = n.rotateRight_();\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after rotateLeft.\r\n */\r\n rotateLeft_() {\r\n const nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);\r\n return this.right.copy(null, null, this.color, nl, null);\r\n }\r\n /**\r\n * @returns New tree, after rotateRight.\r\n */\r\n rotateRight_() {\r\n const nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);\r\n return this.left.copy(null, null, this.color, null, nr);\r\n }\r\n /**\r\n * @returns Newt ree, after colorFlip.\r\n */\r\n colorFlip_() {\r\n const left = this.left.copy(null, null, !this.left.color, null, null);\r\n const right = this.right.copy(null, null, !this.right.color, null, null);\r\n return this.copy(null, null, !this.color, left, right);\r\n }\r\n /**\r\n * For testing.\r\n *\r\n * @returns True if all is well.\r\n */\r\n checkMaxDepth_() {\r\n const blackDepth = this.check_();\r\n return Math.pow(2.0, blackDepth) <= this.count() + 1;\r\n }\r\n check_() {\r\n if (this.isRed_() && this.left.isRed_()) {\r\n throw new Error('Red node has red child(' + this.key + ',' + this.value + ')');\r\n }\r\n if (this.right.isRed_()) {\r\n throw new Error('Right child of (' + this.key + ',' + this.value + ') is red');\r\n }\r\n const blackDepth = this.left.check_();\r\n if (blackDepth !== this.right.check_()) {\r\n throw new Error('Black depths differ');\r\n }\r\n else {\r\n return blackDepth + (this.isRed_() ? 0 : 1);\r\n }\r\n }\r\n}\r\nLLRBNode.RED = true;\r\nLLRBNode.BLACK = false;\r\n/**\r\n * Represents an empty node (a leaf node in the Red-Black Tree).\r\n */\r\nclass LLRBEmptyNode {\r\n /**\r\n * Returns a copy of the current node.\r\n *\r\n * @returns The node copy.\r\n */\r\n copy(key, value, color, left, right) {\r\n return this;\r\n }\r\n /**\r\n * Returns a copy of the tree, with the specified key/value added.\r\n *\r\n * @param key - Key to be added.\r\n * @param value - Value to be added.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with item added.\r\n */\r\n insert(key, value, comparator) {\r\n return new LLRBNode(key, value, null);\r\n }\r\n /**\r\n * Returns a copy of the tree, with the specified key removed.\r\n *\r\n * @param key - The key to remove.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with item removed.\r\n */\r\n remove(key, comparator) {\r\n return this;\r\n }\r\n /**\r\n * @returns The total number of nodes in the tree.\r\n */\r\n count() {\r\n return 0;\r\n }\r\n /**\r\n * @returns True if the tree is empty.\r\n */\r\n isEmpty() {\r\n return true;\r\n }\r\n /**\r\n * Traverses the tree in key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n inorderTraversal(action) {\r\n return false;\r\n }\r\n /**\r\n * Traverses the tree in reverse key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return false;\r\n }\r\n minKey() {\r\n return null;\r\n }\r\n maxKey() {\r\n return null;\r\n }\r\n check_() {\r\n return 0;\r\n }\r\n /**\r\n * @returns Whether this node is red.\r\n */\r\n isRed_() {\r\n return false;\r\n }\r\n}\r\n/**\r\n * An immutable sorted map implementation, based on a Left-leaning Red-Black\r\n * tree.\r\n */\r\nclass SortedMap {\r\n /**\r\n * @param comparator_ - Key comparator.\r\n * @param root_ - Optional root node for the map.\r\n */\r\n constructor(comparator_, root_ = SortedMap.EMPTY_NODE) {\r\n this.comparator_ = comparator_;\r\n this.root_ = root_;\r\n }\r\n /**\r\n * Returns a copy of the map, with the specified key/value added or replaced.\r\n * (TODO: We should perhaps rename this method to 'put')\r\n *\r\n * @param key - Key to be added.\r\n * @param value - Value to be added.\r\n * @returns New map, with item added.\r\n */\r\n insert(key, value) {\r\n return new SortedMap(this.comparator_, this.root_\r\n .insert(key, value, this.comparator_)\r\n .copy(null, null, LLRBNode.BLACK, null, null));\r\n }\r\n /**\r\n * Returns a copy of the map, with the specified key removed.\r\n *\r\n * @param key - The key to remove.\r\n * @returns New map, with item removed.\r\n */\r\n remove(key) {\r\n return new SortedMap(this.comparator_, this.root_\r\n .remove(key, this.comparator_)\r\n .copy(null, null, LLRBNode.BLACK, null, null));\r\n }\r\n /**\r\n * Returns the value of the node with the given key, or null.\r\n *\r\n * @param key - The key to look up.\r\n * @returns The value of the node with the given key, or null if the\r\n * key doesn't exist.\r\n */\r\n get(key) {\r\n let cmp;\r\n let node = this.root_;\r\n while (!node.isEmpty()) {\r\n cmp = this.comparator_(key, node.key);\r\n if (cmp === 0) {\r\n return node.value;\r\n }\r\n else if (cmp < 0) {\r\n node = node.left;\r\n }\r\n else if (cmp > 0) {\r\n node = node.right;\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Returns the key of the item *before* the specified key, or null if key is the first item.\r\n * @param key - The key to find the predecessor of\r\n * @returns The predecessor key.\r\n */\r\n getPredecessorKey(key) {\r\n let cmp, node = this.root_, rightParent = null;\r\n while (!node.isEmpty()) {\r\n cmp = this.comparator_(key, node.key);\r\n if (cmp === 0) {\r\n if (!node.left.isEmpty()) {\r\n node = node.left;\r\n while (!node.right.isEmpty()) {\r\n node = node.right;\r\n }\r\n return node.key;\r\n }\r\n else if (rightParent) {\r\n return rightParent.key;\r\n }\r\n else {\r\n return null; // first item.\r\n }\r\n }\r\n else if (cmp < 0) {\r\n node = node.left;\r\n }\r\n else if (cmp > 0) {\r\n rightParent = node;\r\n node = node.right;\r\n }\r\n }\r\n throw new Error('Attempted to find predecessor key for a nonexistent key. What gives?');\r\n }\r\n /**\r\n * @returns True if the map is empty.\r\n */\r\n isEmpty() {\r\n return this.root_.isEmpty();\r\n }\r\n /**\r\n * @returns The total number of nodes in the map.\r\n */\r\n count() {\r\n return this.root_.count();\r\n }\r\n /**\r\n * @returns The minimum key in the map.\r\n */\r\n minKey() {\r\n return this.root_.minKey();\r\n }\r\n /**\r\n * @returns The maximum key in the map.\r\n */\r\n maxKey() {\r\n return this.root_.maxKey();\r\n }\r\n /**\r\n * Traverses the map in key order and calls the specified action function\r\n * for each key/value pair.\r\n *\r\n * @param action - Callback function to be called\r\n * for each key/value pair. If action returns true, traversal is aborted.\r\n * @returns The first truthy value returned by action, or the last falsey\r\n * value returned by action\r\n */\r\n inorderTraversal(action) {\r\n return this.root_.inorderTraversal(action);\r\n }\r\n /**\r\n * Traverses the map in reverse key order and calls the specified action function\r\n * for each key/value pair.\r\n *\r\n * @param action - Callback function to be called\r\n * for each key/value pair. If action returns true, traversal is aborted.\r\n * @returns True if the traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return this.root_.reverseTraversal(action);\r\n }\r\n /**\r\n * Returns an iterator over the SortedMap.\r\n * @returns The iterator.\r\n */\r\n getIterator(resultGenerator) {\r\n return new SortedMapIterator(this.root_, null, this.comparator_, false, resultGenerator);\r\n }\r\n getIteratorFrom(key, resultGenerator) {\r\n return new SortedMapIterator(this.root_, key, this.comparator_, false, resultGenerator);\r\n }\r\n getReverseIteratorFrom(key, resultGenerator) {\r\n return new SortedMapIterator(this.root_, key, this.comparator_, true, resultGenerator);\r\n }\r\n getReverseIterator(resultGenerator) {\r\n return new SortedMapIterator(this.root_, null, this.comparator_, true, resultGenerator);\r\n }\r\n}\r\n/**\r\n * Always use the same empty node, to reduce memory.\r\n */\r\nSortedMap.EMPTY_NODE = new LLRBEmptyNode();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction NAME_ONLY_COMPARATOR(left, right) {\r\n return nameCompare(left.name, right.name);\r\n}\r\nfunction NAME_COMPARATOR(left, right) {\r\n return nameCompare(left, right);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet MAX_NODE$2;\r\nfunction setMaxNode$1(val) {\r\n MAX_NODE$2 = val;\r\n}\r\nconst priorityHashText = function (priority) {\r\n if (typeof priority === 'number') {\r\n return 'number:' + doubleToIEEE754String(priority);\r\n }\r\n else {\r\n return 'string:' + priority;\r\n }\r\n};\r\n/**\r\n * Validates that a priority snapshot Node is valid.\r\n */\r\nconst validatePriorityNode = function (priorityNode) {\r\n if (priorityNode.isLeafNode()) {\r\n const val = priorityNode.val();\r\n assert(typeof val === 'string' ||\r\n typeof val === 'number' ||\r\n (typeof val === 'object' && contains(val, '.sv')), 'Priority must be a string or number.');\r\n }\r\n else {\r\n assert(priorityNode === MAX_NODE$2 || priorityNode.isEmpty(), 'priority of unexpected type.');\r\n }\r\n // Don't call getPriority() on MAX_NODE to avoid hitting assertion.\r\n assert(priorityNode === MAX_NODE$2 || priorityNode.getPriority().isEmpty(), \"Priority nodes can't have a priority of their own.\");\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet __childrenNodeConstructor;\r\n/**\r\n * LeafNode is a class for storing leaf nodes in a DataSnapshot. It\r\n * implements Node and stores the value of the node (a string,\r\n * number, or boolean) accessible via getValue().\r\n */\r\nclass LeafNode {\r\n /**\r\n * @param value_ - The value to store in this leaf node. The object type is\r\n * possible in the event of a deferred value\r\n * @param priorityNode_ - The priority of this node.\r\n */\r\n constructor(value_, priorityNode_ = LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n this.value_ = value_;\r\n this.priorityNode_ = priorityNode_;\r\n this.lazyHash_ = null;\r\n assert(this.value_ !== undefined && this.value_ !== null, \"LeafNode shouldn't be created with null/undefined value.\");\r\n validatePriorityNode(this.priorityNode_);\r\n }\r\n static set __childrenNodeConstructor(val) {\r\n __childrenNodeConstructor = val;\r\n }\r\n static get __childrenNodeConstructor() {\r\n return __childrenNodeConstructor;\r\n }\r\n /** @inheritDoc */\r\n isLeafNode() {\r\n return true;\r\n }\r\n /** @inheritDoc */\r\n getPriority() {\r\n return this.priorityNode_;\r\n }\r\n /** @inheritDoc */\r\n updatePriority(newPriorityNode) {\r\n return new LeafNode(this.value_, newPriorityNode);\r\n }\r\n /** @inheritDoc */\r\n getImmediateChild(childName) {\r\n // Hack to treat priority as a regular child\r\n if (childName === '.priority') {\r\n return this.priorityNode_;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n }\r\n }\r\n /** @inheritDoc */\r\n getChild(path) {\r\n if (pathIsEmpty(path)) {\r\n return this;\r\n }\r\n else if (pathGetFront(path) === '.priority') {\r\n return this.priorityNode_;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n }\r\n }\r\n hasChild() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n getPredecessorChildName(childName, childNode) {\r\n return null;\r\n }\r\n /** @inheritDoc */\r\n updateImmediateChild(childName, newChildNode) {\r\n if (childName === '.priority') {\r\n return this.updatePriority(newChildNode);\r\n }\r\n else if (newChildNode.isEmpty() && childName !== '.priority') {\r\n return this;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateImmediateChild(childName, newChildNode).updatePriority(this.priorityNode_);\r\n }\r\n }\r\n /** @inheritDoc */\r\n updateChild(path, newChildNode) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return newChildNode;\r\n }\r\n else if (newChildNode.isEmpty() && front !== '.priority') {\r\n return this;\r\n }\r\n else {\r\n assert(front !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\r\n return this.updateImmediateChild(front, LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateChild(pathPopFront(path), newChildNode));\r\n }\r\n }\r\n /** @inheritDoc */\r\n isEmpty() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n numChildren() {\r\n return 0;\r\n }\r\n /** @inheritDoc */\r\n forEachChild(index, action) {\r\n return false;\r\n }\r\n val(exportFormat) {\r\n if (exportFormat && !this.getPriority().isEmpty()) {\r\n return {\r\n '.value': this.getValue(),\r\n '.priority': this.getPriority().val()\r\n };\r\n }\r\n else {\r\n return this.getValue();\r\n }\r\n }\r\n /** @inheritDoc */\r\n hash() {\r\n if (this.lazyHash_ === null) {\r\n let toHash = '';\r\n if (!this.priorityNode_.isEmpty()) {\r\n toHash +=\r\n 'priority:' +\r\n priorityHashText(this.priorityNode_.val()) +\r\n ':';\r\n }\r\n const type = typeof this.value_;\r\n toHash += type + ':';\r\n if (type === 'number') {\r\n toHash += doubleToIEEE754String(this.value_);\r\n }\r\n else {\r\n toHash += this.value_;\r\n }\r\n this.lazyHash_ = sha1(toHash);\r\n }\r\n return this.lazyHash_;\r\n }\r\n /**\r\n * Returns the value of the leaf node.\r\n * @returns The value of the node.\r\n */\r\n getValue() {\r\n return this.value_;\r\n }\r\n compareTo(other) {\r\n if (other === LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n return 1;\r\n }\r\n else if (other instanceof LeafNode.__childrenNodeConstructor) {\r\n return -1;\r\n }\r\n else {\r\n assert(other.isLeafNode(), 'Unknown node type');\r\n return this.compareToLeafNode_(other);\r\n }\r\n }\r\n /**\r\n * Comparison specifically for two leaf nodes\r\n */\r\n compareToLeafNode_(otherLeaf) {\r\n const otherLeafType = typeof otherLeaf.value_;\r\n const thisLeafType = typeof this.value_;\r\n const otherIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(otherLeafType);\r\n const thisIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(thisLeafType);\r\n assert(otherIndex >= 0, 'Unknown leaf type: ' + otherLeafType);\r\n assert(thisIndex >= 0, 'Unknown leaf type: ' + thisLeafType);\r\n if (otherIndex === thisIndex) {\r\n // Same type, compare values\r\n if (thisLeafType === 'object') {\r\n // Deferred value nodes are all equal, but we should also never get to this point...\r\n return 0;\r\n }\r\n else {\r\n // Note that this works because true > false, all others are number or string comparisons\r\n if (this.value_ < otherLeaf.value_) {\r\n return -1;\r\n }\r\n else if (this.value_ === otherLeaf.value_) {\r\n return 0;\r\n }\r\n else {\r\n return 1;\r\n }\r\n }\r\n }\r\n else {\r\n return thisIndex - otherIndex;\r\n }\r\n }\r\n withIndex() {\r\n return this;\r\n }\r\n isIndexed() {\r\n return true;\r\n }\r\n equals(other) {\r\n if (other === this) {\r\n return true;\r\n }\r\n else if (other.isLeafNode()) {\r\n const otherLeaf = other;\r\n return (this.value_ === otherLeaf.value_ &&\r\n this.priorityNode_.equals(otherLeaf.priorityNode_));\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n}\r\n/**\r\n * The sort order for comparing leaf nodes of different types. If two leaf nodes have\r\n * the same type, the comparison falls back to their value\r\n */\r\nLeafNode.VALUE_TYPE_ORDER = ['object', 'boolean', 'number', 'string'];\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet nodeFromJSON$1;\r\nlet MAX_NODE$1;\r\nfunction setNodeFromJSON(val) {\r\n nodeFromJSON$1 = val;\r\n}\r\nfunction setMaxNode(val) {\r\n MAX_NODE$1 = val;\r\n}\r\nclass PriorityIndex extends Index {\r\n compare(a, b) {\r\n const aPriority = a.node.getPriority();\r\n const bPriority = b.node.getPriority();\r\n const indexCmp = aPriority.compareTo(bPriority);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n isDefinedOn(node) {\r\n return !node.getPriority().isEmpty();\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return !oldNode.getPriority().equals(newNode.getPriority());\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n return new NamedNode(MAX_NAME, new LeafNode('[PRIORITY-POST]', MAX_NODE$1));\r\n }\r\n makePost(indexValue, name) {\r\n const priorityNode = nodeFromJSON$1(indexValue);\r\n return new NamedNode(name, new LeafNode('[PRIORITY-POST]', priorityNode));\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.priority';\r\n }\r\n}\r\nconst PRIORITY_INDEX = new PriorityIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_2 = Math.log(2);\r\nclass Base12Num {\r\n constructor(length) {\r\n const logBase2 = (num) => \r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n parseInt((Math.log(num) / LOG_2), 10);\r\n const bitMask = (bits) => parseInt(Array(bits + 1).join('1'), 2);\r\n this.count = logBase2(length + 1);\r\n this.current_ = this.count - 1;\r\n const mask = bitMask(this.count);\r\n this.bits_ = (length + 1) & mask;\r\n }\r\n nextBitIsOne() {\r\n //noinspection JSBitwiseOperatorUsage\r\n const result = !(this.bits_ & (0x1 << this.current_));\r\n this.current_--;\r\n return result;\r\n }\r\n}\r\n/**\r\n * Takes a list of child nodes and constructs a SortedSet using the given comparison\r\n * function\r\n *\r\n * Uses the algorithm described in the paper linked here:\r\n * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458\r\n *\r\n * @param childList - Unsorted list of children\r\n * @param cmp - The comparison method to be used\r\n * @param keyFn - An optional function to extract K from a node wrapper, if K's\r\n * type is not NamedNode\r\n * @param mapSortFn - An optional override for comparator used by the generated sorted map\r\n */\r\nconst buildChildSet = function (childList, cmp, keyFn, mapSortFn) {\r\n childList.sort(cmp);\r\n const buildBalancedTree = function (low, high) {\r\n const length = high - low;\r\n let namedNode;\r\n let key;\r\n if (length === 0) {\r\n return null;\r\n }\r\n else if (length === 1) {\r\n namedNode = childList[low];\r\n key = keyFn ? keyFn(namedNode) : namedNode;\r\n return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, null, null);\r\n }\r\n else {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const middle = parseInt((length / 2), 10) + low;\r\n const left = buildBalancedTree(low, middle);\r\n const right = buildBalancedTree(middle + 1, high);\r\n namedNode = childList[middle];\r\n key = keyFn ? keyFn(namedNode) : namedNode;\r\n return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, left, right);\r\n }\r\n };\r\n const buildFrom12Array = function (base12) {\r\n let node = null;\r\n let root = null;\r\n let index = childList.length;\r\n const buildPennant = function (chunkSize, color) {\r\n const low = index - chunkSize;\r\n const high = index;\r\n index -= chunkSize;\r\n const childTree = buildBalancedTree(low + 1, high);\r\n const namedNode = childList[low];\r\n const key = keyFn ? keyFn(namedNode) : namedNode;\r\n attachPennant(new LLRBNode(key, namedNode.node, color, null, childTree));\r\n };\r\n const attachPennant = function (pennant) {\r\n if (node) {\r\n node.left = pennant;\r\n node = pennant;\r\n }\r\n else {\r\n root = pennant;\r\n node = pennant;\r\n }\r\n };\r\n for (let i = 0; i < base12.count; ++i) {\r\n const isOne = base12.nextBitIsOne();\r\n // The number of nodes taken in each slice is 2^(arr.length - (i + 1))\r\n const chunkSize = Math.pow(2, base12.count - (i + 1));\r\n if (isOne) {\r\n buildPennant(chunkSize, LLRBNode.BLACK);\r\n }\r\n else {\r\n // current == 2\r\n buildPennant(chunkSize, LLRBNode.BLACK);\r\n buildPennant(chunkSize, LLRBNode.RED);\r\n }\r\n }\r\n return root;\r\n };\r\n const base12 = new Base12Num(childList.length);\r\n const root = buildFrom12Array(base12);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return new SortedMap(mapSortFn || cmp, root);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet _defaultIndexMap;\r\nconst fallbackObject = {};\r\nclass IndexMap {\r\n constructor(indexes_, indexSet_) {\r\n this.indexes_ = indexes_;\r\n this.indexSet_ = indexSet_;\r\n }\r\n /**\r\n * The default IndexMap for nodes without a priority\r\n */\r\n static get Default() {\r\n assert(fallbackObject && PRIORITY_INDEX, 'ChildrenNode.ts has not been loaded');\r\n _defaultIndexMap =\r\n _defaultIndexMap ||\r\n new IndexMap({ '.priority': fallbackObject }, { '.priority': PRIORITY_INDEX });\r\n return _defaultIndexMap;\r\n }\r\n get(indexKey) {\r\n const sortedMap = safeGet(this.indexes_, indexKey);\r\n if (!sortedMap) {\r\n throw new Error('No index defined for ' + indexKey);\r\n }\r\n if (sortedMap instanceof SortedMap) {\r\n return sortedMap;\r\n }\r\n else {\r\n // The index exists, but it falls back to just name comparison. Return null so that the calling code uses the\r\n // regular child map\r\n return null;\r\n }\r\n }\r\n hasIndex(indexDefinition) {\r\n return contains(this.indexSet_, indexDefinition.toString());\r\n }\r\n addIndex(indexDefinition, existingChildren) {\r\n assert(indexDefinition !== KEY_INDEX, \"KeyIndex always exists and isn't meant to be added to the IndexMap.\");\r\n const childList = [];\r\n let sawIndexedValue = false;\r\n const iter = existingChildren.getIterator(NamedNode.Wrap);\r\n let next = iter.getNext();\r\n while (next) {\r\n sawIndexedValue =\r\n sawIndexedValue || indexDefinition.isDefinedOn(next.node);\r\n childList.push(next);\r\n next = iter.getNext();\r\n }\r\n let newIndex;\r\n if (sawIndexedValue) {\r\n newIndex = buildChildSet(childList, indexDefinition.getCompare());\r\n }\r\n else {\r\n newIndex = fallbackObject;\r\n }\r\n const indexName = indexDefinition.toString();\r\n const newIndexSet = Object.assign({}, this.indexSet_);\r\n newIndexSet[indexName] = indexDefinition;\r\n const newIndexes = Object.assign({}, this.indexes_);\r\n newIndexes[indexName] = newIndex;\r\n return new IndexMap(newIndexes, newIndexSet);\r\n }\r\n /**\r\n * Ensure that this node is properly tracked in any indexes that we're maintaining\r\n */\r\n addToIndexes(namedNode, existingChildren) {\r\n const newIndexes = map(this.indexes_, (indexedChildren, indexName) => {\r\n const index = safeGet(this.indexSet_, indexName);\r\n assert(index, 'Missing index implementation for ' + indexName);\r\n if (indexedChildren === fallbackObject) {\r\n // Check to see if we need to index everything\r\n if (index.isDefinedOn(namedNode.node)) {\r\n // We need to build this index\r\n const childList = [];\r\n const iter = existingChildren.getIterator(NamedNode.Wrap);\r\n let next = iter.getNext();\r\n while (next) {\r\n if (next.name !== namedNode.name) {\r\n childList.push(next);\r\n }\r\n next = iter.getNext();\r\n }\r\n childList.push(namedNode);\r\n return buildChildSet(childList, index.getCompare());\r\n }\r\n else {\r\n // No change, this remains a fallback\r\n return fallbackObject;\r\n }\r\n }\r\n else {\r\n const existingSnap = existingChildren.get(namedNode.name);\r\n let newChildren = indexedChildren;\r\n if (existingSnap) {\r\n newChildren = newChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n }\r\n return newChildren.insert(namedNode, namedNode.node);\r\n }\r\n });\r\n return new IndexMap(newIndexes, this.indexSet_);\r\n }\r\n /**\r\n * Create a new IndexMap instance with the given value removed\r\n */\r\n removeFromIndexes(namedNode, existingChildren) {\r\n const newIndexes = map(this.indexes_, (indexedChildren) => {\r\n if (indexedChildren === fallbackObject) {\r\n // This is the fallback. Just return it, nothing to do in this case\r\n return indexedChildren;\r\n }\r\n else {\r\n const existingSnap = existingChildren.get(namedNode.name);\r\n if (existingSnap) {\r\n return indexedChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n }\r\n else {\r\n // No record of this child\r\n return indexedChildren;\r\n }\r\n }\r\n });\r\n return new IndexMap(newIndexes, this.indexSet_);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// TODO: For memory savings, don't store priorityNode_ if it's empty.\r\nlet EMPTY_NODE;\r\n/**\r\n * ChildrenNode is a class for storing internal nodes in a DataSnapshot\r\n * (i.e. nodes with children). It implements Node and stores the\r\n * list of children in the children property, sorted by child name.\r\n */\r\nclass ChildrenNode {\r\n /**\r\n * @param children_ - List of children of this node..\r\n * @param priorityNode_ - The priority of this node (as a snapshot node).\r\n */\r\n constructor(children_, priorityNode_, indexMap_) {\r\n this.children_ = children_;\r\n this.priorityNode_ = priorityNode_;\r\n this.indexMap_ = indexMap_;\r\n this.lazyHash_ = null;\r\n /**\r\n * Note: The only reason we allow null priority is for EMPTY_NODE, since we can't use\r\n * EMPTY_NODE as the priority of EMPTY_NODE. We might want to consider making EMPTY_NODE its own\r\n * class instead of an empty ChildrenNode.\r\n */\r\n if (this.priorityNode_) {\r\n validatePriorityNode(this.priorityNode_);\r\n }\r\n if (this.children_.isEmpty()) {\r\n assert(!this.priorityNode_ || this.priorityNode_.isEmpty(), 'An empty node cannot have a priority');\r\n }\r\n }\r\n static get EMPTY_NODE() {\r\n return (EMPTY_NODE ||\r\n (EMPTY_NODE = new ChildrenNode(new SortedMap(NAME_COMPARATOR), null, IndexMap.Default)));\r\n }\r\n /** @inheritDoc */\r\n isLeafNode() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n getPriority() {\r\n return this.priorityNode_ || EMPTY_NODE;\r\n }\r\n /** @inheritDoc */\r\n updatePriority(newPriorityNode) {\r\n if (this.children_.isEmpty()) {\r\n // Don't allow priorities on empty nodes\r\n return this;\r\n }\r\n else {\r\n return new ChildrenNode(this.children_, newPriorityNode, this.indexMap_);\r\n }\r\n }\r\n /** @inheritDoc */\r\n getImmediateChild(childName) {\r\n // Hack to treat priority as a regular child\r\n if (childName === '.priority') {\r\n return this.getPriority();\r\n }\r\n else {\r\n const child = this.children_.get(childName);\r\n return child === null ? EMPTY_NODE : child;\r\n }\r\n }\r\n /** @inheritDoc */\r\n getChild(path) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return this;\r\n }\r\n return this.getImmediateChild(front).getChild(pathPopFront(path));\r\n }\r\n /** @inheritDoc */\r\n hasChild(childName) {\r\n return this.children_.get(childName) !== null;\r\n }\r\n /** @inheritDoc */\r\n updateImmediateChild(childName, newChildNode) {\r\n assert(newChildNode, 'We should always be passing snapshot nodes');\r\n if (childName === '.priority') {\r\n return this.updatePriority(newChildNode);\r\n }\r\n else {\r\n const namedNode = new NamedNode(childName, newChildNode);\r\n let newChildren, newIndexMap;\r\n if (newChildNode.isEmpty()) {\r\n newChildren = this.children_.remove(childName);\r\n newIndexMap = this.indexMap_.removeFromIndexes(namedNode, this.children_);\r\n }\r\n else {\r\n newChildren = this.children_.insert(childName, newChildNode);\r\n newIndexMap = this.indexMap_.addToIndexes(namedNode, this.children_);\r\n }\r\n const newPriority = newChildren.isEmpty()\r\n ? EMPTY_NODE\r\n : this.priorityNode_;\r\n return new ChildrenNode(newChildren, newPriority, newIndexMap);\r\n }\r\n }\r\n /** @inheritDoc */\r\n updateChild(path, newChildNode) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return newChildNode;\r\n }\r\n else {\r\n assert(pathGetFront(path) !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\r\n const newImmediateChild = this.getImmediateChild(front).updateChild(pathPopFront(path), newChildNode);\r\n return this.updateImmediateChild(front, newImmediateChild);\r\n }\r\n }\r\n /** @inheritDoc */\r\n isEmpty() {\r\n return this.children_.isEmpty();\r\n }\r\n /** @inheritDoc */\r\n numChildren() {\r\n return this.children_.count();\r\n }\r\n /** @inheritDoc */\r\n val(exportFormat) {\r\n if (this.isEmpty()) {\r\n return null;\r\n }\r\n const obj = {};\r\n let numKeys = 0, maxKey = 0, allIntegerKeys = true;\r\n this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n obj[key] = childNode.val(exportFormat);\r\n numKeys++;\r\n if (allIntegerKeys && ChildrenNode.INTEGER_REGEXP_.test(key)) {\r\n maxKey = Math.max(maxKey, Number(key));\r\n }\r\n else {\r\n allIntegerKeys = false;\r\n }\r\n });\r\n if (!exportFormat && allIntegerKeys && maxKey < 2 * numKeys) {\r\n // convert to array.\r\n const array = [];\r\n // eslint-disable-next-line guard-for-in\r\n for (const key in obj) {\r\n array[key] = obj[key];\r\n }\r\n return array;\r\n }\r\n else {\r\n if (exportFormat && !this.getPriority().isEmpty()) {\r\n obj['.priority'] = this.getPriority().val();\r\n }\r\n return obj;\r\n }\r\n }\r\n /** @inheritDoc */\r\n hash() {\r\n if (this.lazyHash_ === null) {\r\n let toHash = '';\r\n if (!this.getPriority().isEmpty()) {\r\n toHash +=\r\n 'priority:' +\r\n priorityHashText(this.getPriority().val()) +\r\n ':';\r\n }\r\n this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n const childHash = childNode.hash();\r\n if (childHash !== '') {\r\n toHash += ':' + key + ':' + childHash;\r\n }\r\n });\r\n this.lazyHash_ = toHash === '' ? '' : sha1(toHash);\r\n }\r\n return this.lazyHash_;\r\n }\r\n /** @inheritDoc */\r\n getPredecessorChildName(childName, childNode, index) {\r\n const idx = this.resolveIndex_(index);\r\n if (idx) {\r\n const predecessor = idx.getPredecessorKey(new NamedNode(childName, childNode));\r\n return predecessor ? predecessor.name : null;\r\n }\r\n else {\r\n return this.children_.getPredecessorKey(childName);\r\n }\r\n }\r\n getFirstChildName(indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n const minKey = idx.minKey();\r\n return minKey && minKey.name;\r\n }\r\n else {\r\n return this.children_.minKey();\r\n }\r\n }\r\n getFirstChild(indexDefinition) {\r\n const minKey = this.getFirstChildName(indexDefinition);\r\n if (minKey) {\r\n return new NamedNode(minKey, this.children_.get(minKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Given an index, return the key name of the largest value we have, according to that index\r\n */\r\n getLastChildName(indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n const maxKey = idx.maxKey();\r\n return maxKey && maxKey.name;\r\n }\r\n else {\r\n return this.children_.maxKey();\r\n }\r\n }\r\n getLastChild(indexDefinition) {\r\n const maxKey = this.getLastChildName(indexDefinition);\r\n if (maxKey) {\r\n return new NamedNode(maxKey, this.children_.get(maxKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n forEachChild(index, action) {\r\n const idx = this.resolveIndex_(index);\r\n if (idx) {\r\n return idx.inorderTraversal(wrappedNode => {\r\n return action(wrappedNode.name, wrappedNode.node);\r\n });\r\n }\r\n else {\r\n return this.children_.inorderTraversal(action);\r\n }\r\n }\r\n getIterator(indexDefinition) {\r\n return this.getIteratorFrom(indexDefinition.minPost(), indexDefinition);\r\n }\r\n getIteratorFrom(startPost, indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n return idx.getIteratorFrom(startPost, key => key);\r\n }\r\n else {\r\n const iterator = this.children_.getIteratorFrom(startPost.name, NamedNode.Wrap);\r\n let next = iterator.peek();\r\n while (next != null && indexDefinition.compare(next, startPost) < 0) {\r\n iterator.getNext();\r\n next = iterator.peek();\r\n }\r\n return iterator;\r\n }\r\n }\r\n getReverseIterator(indexDefinition) {\r\n return this.getReverseIteratorFrom(indexDefinition.maxPost(), indexDefinition);\r\n }\r\n getReverseIteratorFrom(endPost, indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n return idx.getReverseIteratorFrom(endPost, key => {\r\n return key;\r\n });\r\n }\r\n else {\r\n const iterator = this.children_.getReverseIteratorFrom(endPost.name, NamedNode.Wrap);\r\n let next = iterator.peek();\r\n while (next != null && indexDefinition.compare(next, endPost) > 0) {\r\n iterator.getNext();\r\n next = iterator.peek();\r\n }\r\n return iterator;\r\n }\r\n }\r\n compareTo(other) {\r\n if (this.isEmpty()) {\r\n if (other.isEmpty()) {\r\n return 0;\r\n }\r\n else {\r\n return -1;\r\n }\r\n }\r\n else if (other.isLeafNode() || other.isEmpty()) {\r\n return 1;\r\n }\r\n else if (other === MAX_NODE) {\r\n return -1;\r\n }\r\n else {\r\n // Must be another node with children.\r\n return 0;\r\n }\r\n }\r\n withIndex(indexDefinition) {\r\n if (indexDefinition === KEY_INDEX ||\r\n this.indexMap_.hasIndex(indexDefinition)) {\r\n return this;\r\n }\r\n else {\r\n const newIndexMap = this.indexMap_.addIndex(indexDefinition, this.children_);\r\n return new ChildrenNode(this.children_, this.priorityNode_, newIndexMap);\r\n }\r\n }\r\n isIndexed(index) {\r\n return index === KEY_INDEX || this.indexMap_.hasIndex(index);\r\n }\r\n equals(other) {\r\n if (other === this) {\r\n return true;\r\n }\r\n else if (other.isLeafNode()) {\r\n return false;\r\n }\r\n else {\r\n const otherChildrenNode = other;\r\n if (!this.getPriority().equals(otherChildrenNode.getPriority())) {\r\n return false;\r\n }\r\n else if (this.children_.count() === otherChildrenNode.children_.count()) {\r\n const thisIter = this.getIterator(PRIORITY_INDEX);\r\n const otherIter = otherChildrenNode.getIterator(PRIORITY_INDEX);\r\n let thisCurrent = thisIter.getNext();\r\n let otherCurrent = otherIter.getNext();\r\n while (thisCurrent && otherCurrent) {\r\n if (thisCurrent.name !== otherCurrent.name ||\r\n !thisCurrent.node.equals(otherCurrent.node)) {\r\n return false;\r\n }\r\n thisCurrent = thisIter.getNext();\r\n otherCurrent = otherIter.getNext();\r\n }\r\n return thisCurrent === null && otherCurrent === null;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n }\r\n /**\r\n * Returns a SortedMap ordered by index, or null if the default (by-key) ordering can be used\r\n * instead.\r\n *\r\n */\r\n resolveIndex_(indexDefinition) {\r\n if (indexDefinition === KEY_INDEX) {\r\n return null;\r\n }\r\n else {\r\n return this.indexMap_.get(indexDefinition.toString());\r\n }\r\n }\r\n}\r\nChildrenNode.INTEGER_REGEXP_ = /^(0|[1-9]\\d*)$/;\r\nclass MaxNode extends ChildrenNode {\r\n constructor() {\r\n super(new SortedMap(NAME_COMPARATOR), ChildrenNode.EMPTY_NODE, IndexMap.Default);\r\n }\r\n compareTo(other) {\r\n if (other === this) {\r\n return 0;\r\n }\r\n else {\r\n return 1;\r\n }\r\n }\r\n equals(other) {\r\n // Not that we every compare it, but MAX_NODE is only ever equal to itself\r\n return other === this;\r\n }\r\n getPriority() {\r\n return this;\r\n }\r\n getImmediateChild(childName) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n isEmpty() {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Marker that will sort higher than any other snapshot.\r\n */\r\nconst MAX_NODE = new MaxNode();\r\nObject.defineProperties(NamedNode, {\r\n MIN: {\r\n value: new NamedNode(MIN_NAME, ChildrenNode.EMPTY_NODE)\r\n },\r\n MAX: {\r\n value: new NamedNode(MAX_NAME, MAX_NODE)\r\n }\r\n});\r\n/**\r\n * Reference Extensions\r\n */\r\nKeyIndex.__EMPTY_NODE = ChildrenNode.EMPTY_NODE;\r\nLeafNode.__childrenNodeConstructor = ChildrenNode;\r\nsetMaxNode$1(MAX_NODE);\r\nsetMaxNode(MAX_NODE);\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst USE_HINZE = true;\r\n/**\r\n * Constructs a snapshot node representing the passed JSON and returns it.\r\n * @param json - JSON to create a node for.\r\n * @param priority - Optional priority to use. This will be ignored if the\r\n * passed JSON contains a .priority property.\r\n */\r\nfunction nodeFromJSON(json, priority = null) {\r\n if (json === null) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n if (typeof json === 'object' && '.priority' in json) {\r\n priority = json['.priority'];\r\n }\r\n assert(priority === null ||\r\n typeof priority === 'string' ||\r\n typeof priority === 'number' ||\r\n (typeof priority === 'object' && '.sv' in priority), 'Invalid priority type found: ' + typeof priority);\r\n if (typeof json === 'object' && '.value' in json && json['.value'] !== null) {\r\n json = json['.value'];\r\n }\r\n // Valid leaf nodes include non-objects or server-value wrapper objects\r\n if (typeof json !== 'object' || '.sv' in json) {\r\n const jsonLeaf = json;\r\n return new LeafNode(jsonLeaf, nodeFromJSON(priority));\r\n }\r\n if (!(json instanceof Array) && USE_HINZE) {\r\n const children = [];\r\n let childrenHavePriority = false;\r\n const hinzeJsonObj = json;\r\n each(hinzeJsonObj, (key, child) => {\r\n if (key.substring(0, 1) !== '.') {\r\n // Ignore metadata nodes\r\n const childNode = nodeFromJSON(child);\r\n if (!childNode.isEmpty()) {\r\n childrenHavePriority =\r\n childrenHavePriority || !childNode.getPriority().isEmpty();\r\n children.push(new NamedNode(key, childNode));\r\n }\r\n }\r\n });\r\n if (children.length === 0) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n const childSet = buildChildSet(children, NAME_ONLY_COMPARATOR, namedNode => namedNode.name, NAME_COMPARATOR);\r\n if (childrenHavePriority) {\r\n const sortedChildSet = buildChildSet(children, PRIORITY_INDEX.getCompare());\r\n return new ChildrenNode(childSet, nodeFromJSON(priority), new IndexMap({ '.priority': sortedChildSet }, { '.priority': PRIORITY_INDEX }));\r\n }\r\n else {\r\n return new ChildrenNode(childSet, nodeFromJSON(priority), IndexMap.Default);\r\n }\r\n }\r\n else {\r\n let node = ChildrenNode.EMPTY_NODE;\r\n each(json, (key, childData) => {\r\n if (contains(json, key)) {\r\n if (key.substring(0, 1) !== '.') {\r\n // ignore metadata nodes.\r\n const childNode = nodeFromJSON(childData);\r\n if (childNode.isLeafNode() || !childNode.isEmpty()) {\r\n node = node.updateImmediateChild(key, childNode);\r\n }\r\n }\r\n }\r\n });\r\n return node.updatePriority(nodeFromJSON(priority));\r\n }\r\n}\r\nsetNodeFromJSON(nodeFromJSON);\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PathIndex extends Index {\r\n constructor(indexPath_) {\r\n super();\r\n this.indexPath_ = indexPath_;\r\n assert(!pathIsEmpty(indexPath_) && pathGetFront(indexPath_) !== '.priority', \"Can't create PathIndex with empty path or .priority key\");\r\n }\r\n extractChild(snap) {\r\n return snap.getChild(this.indexPath_);\r\n }\r\n isDefinedOn(node) {\r\n return !node.getChild(this.indexPath_).isEmpty();\r\n }\r\n compare(a, b) {\r\n const aChild = this.extractChild(a.node);\r\n const bChild = this.extractChild(b.node);\r\n const indexCmp = aChild.compareTo(bChild);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n makePost(indexValue, name) {\r\n const valueNode = nodeFromJSON(indexValue);\r\n const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, valueNode);\r\n return new NamedNode(name, node);\r\n }\r\n maxPost() {\r\n const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, MAX_NODE);\r\n return new NamedNode(MAX_NAME, node);\r\n }\r\n toString() {\r\n return pathSlice(this.indexPath_, 0).join('/');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ValueIndex extends Index {\r\n compare(a, b) {\r\n const indexCmp = a.node.compareTo(b.node);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n isDefinedOn(node) {\r\n return true;\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return !oldNode.equals(newNode);\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MAX;\r\n }\r\n makePost(indexValue, name) {\r\n const valueNode = nodeFromJSON(indexValue);\r\n return new NamedNode(name, valueNode);\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.value';\r\n }\r\n}\r\nconst VALUE_INDEX = new ValueIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction changeValue(snapshotNode) {\r\n return { type: \"value\" /* ChangeType.VALUE */, snapshotNode };\r\n}\r\nfunction changeChildAdded(childName, snapshotNode) {\r\n return { type: \"child_added\" /* ChangeType.CHILD_ADDED */, snapshotNode, childName };\r\n}\r\nfunction changeChildRemoved(childName, snapshotNode) {\r\n return { type: \"child_removed\" /* ChangeType.CHILD_REMOVED */, snapshotNode, childName };\r\n}\r\nfunction changeChildChanged(childName, snapshotNode, oldSnap) {\r\n return {\r\n type: \"child_changed\" /* ChangeType.CHILD_CHANGED */,\r\n snapshotNode,\r\n childName,\r\n oldSnap\r\n };\r\n}\r\nfunction changeChildMoved(childName, snapshotNode) {\r\n return { type: \"child_moved\" /* ChangeType.CHILD_MOVED */, snapshotNode, childName };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Doesn't really filter nodes but applies an index to the node and keeps track of any changes\r\n */\r\nclass IndexedFilter {\r\n constructor(index_) {\r\n this.index_ = index_;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n assert(snap.isIndexed(this.index_), 'A node must be indexed if only a child is updated');\r\n const oldChild = snap.getImmediateChild(key);\r\n // Check if anything actually changed.\r\n if (oldChild.getChild(affectedPath).equals(newChild.getChild(affectedPath))) {\r\n // There's an edge case where a child can enter or leave the view because affectedPath was set to null.\r\n // In this case, affectedPath will appear null in both the old and new snapshots. So we need\r\n // to avoid treating these cases as \"nothing changed.\"\r\n if (oldChild.isEmpty() === newChild.isEmpty()) {\r\n // Nothing changed.\r\n // This assert should be valid, but it's expensive (can dominate perf testing) so don't actually do it.\r\n //assert(oldChild.equals(newChild), 'Old and new snapshots should be equal.');\r\n return snap;\r\n }\r\n }\r\n if (optChangeAccumulator != null) {\r\n if (newChild.isEmpty()) {\r\n if (snap.hasChild(key)) {\r\n optChangeAccumulator.trackChildChange(changeChildRemoved(key, oldChild));\r\n }\r\n else {\r\n assert(snap.isLeafNode(), 'A child remove without an old child only makes sense on a leaf node');\r\n }\r\n }\r\n else if (oldChild.isEmpty()) {\r\n optChangeAccumulator.trackChildChange(changeChildAdded(key, newChild));\r\n }\r\n else {\r\n optChangeAccumulator.trackChildChange(changeChildChanged(key, newChild, oldChild));\r\n }\r\n }\r\n if (snap.isLeafNode() && newChild.isEmpty()) {\r\n return snap;\r\n }\r\n else {\r\n // Make sure the node is indexed\r\n return snap.updateImmediateChild(key, newChild).withIndex(this.index_);\r\n }\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n if (optChangeAccumulator != null) {\r\n if (!oldSnap.isLeafNode()) {\r\n oldSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (!newSnap.hasChild(key)) {\r\n optChangeAccumulator.trackChildChange(changeChildRemoved(key, childNode));\r\n }\r\n });\r\n }\r\n if (!newSnap.isLeafNode()) {\r\n newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (oldSnap.hasChild(key)) {\r\n const oldChild = oldSnap.getImmediateChild(key);\r\n if (!oldChild.equals(childNode)) {\r\n optChangeAccumulator.trackChildChange(changeChildChanged(key, childNode, oldChild));\r\n }\r\n }\r\n else {\r\n optChangeAccumulator.trackChildChange(changeChildAdded(key, childNode));\r\n }\r\n });\r\n }\r\n }\r\n return newSnap.withIndex(this.index_);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n if (oldSnap.isEmpty()) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n else {\r\n return oldSnap.updatePriority(newPriority);\r\n }\r\n }\r\n filtersNodes() {\r\n return false;\r\n }\r\n getIndexedFilter() {\r\n return this;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Filters nodes by range and uses an IndexFilter to track any changes after filtering the node\r\n */\r\nclass RangedFilter {\r\n constructor(params) {\r\n this.indexedFilter_ = new IndexedFilter(params.getIndex());\r\n this.index_ = params.getIndex();\r\n this.startPost_ = RangedFilter.getStartPost_(params);\r\n this.endPost_ = RangedFilter.getEndPost_(params);\r\n this.startIsInclusive_ = !params.startAfterSet_;\r\n this.endIsInclusive_ = !params.endBeforeSet_;\r\n }\r\n getStartPost() {\r\n return this.startPost_;\r\n }\r\n getEndPost() {\r\n return this.endPost_;\r\n }\r\n matches(node) {\r\n const isWithinStart = this.startIsInclusive_\r\n ? this.index_.compare(this.getStartPost(), node) <= 0\r\n : this.index_.compare(this.getStartPost(), node) < 0;\r\n const isWithinEnd = this.endIsInclusive_\r\n ? this.index_.compare(node, this.getEndPost()) <= 0\r\n : this.index_.compare(node, this.getEndPost()) < 0;\r\n return isWithinStart && isWithinEnd;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n if (!this.matches(new NamedNode(key, newChild))) {\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n return this.indexedFilter_.updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n if (newSnap.isLeafNode()) {\r\n // Make sure we have a children node with the correct index, not a leaf node;\r\n newSnap = ChildrenNode.EMPTY_NODE;\r\n }\r\n let filtered = newSnap.withIndex(this.index_);\r\n // Don't support priorities on queries\r\n filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n const self = this;\r\n newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (!self.matches(new NamedNode(key, childNode))) {\r\n filtered = filtered.updateImmediateChild(key, ChildrenNode.EMPTY_NODE);\r\n }\r\n });\r\n return this.indexedFilter_.updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n // Don't support priorities on queries\r\n return oldSnap;\r\n }\r\n filtersNodes() {\r\n return true;\r\n }\r\n getIndexedFilter() {\r\n return this.indexedFilter_;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n static getStartPost_(params) {\r\n if (params.hasStart()) {\r\n const startName = params.getIndexStartName();\r\n return params.getIndex().makePost(params.getIndexStartValue(), startName);\r\n }\r\n else {\r\n return params.getIndex().minPost();\r\n }\r\n }\r\n static getEndPost_(params) {\r\n if (params.hasEnd()) {\r\n const endName = params.getIndexEndName();\r\n return params.getIndex().makePost(params.getIndexEndValue(), endName);\r\n }\r\n else {\r\n return params.getIndex().maxPost();\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Applies a limit and a range to a node and uses RangedFilter to do the heavy lifting where possible\r\n */\r\nclass LimitedFilter {\r\n constructor(params) {\r\n this.withinDirectionalStart = (node) => this.reverse_ ? this.withinEndPost(node) : this.withinStartPost(node);\r\n this.withinDirectionalEnd = (node) => this.reverse_ ? this.withinStartPost(node) : this.withinEndPost(node);\r\n this.withinStartPost = (node) => {\r\n const compareRes = this.index_.compare(this.rangedFilter_.getStartPost(), node);\r\n return this.startIsInclusive_ ? compareRes <= 0 : compareRes < 0;\r\n };\r\n this.withinEndPost = (node) => {\r\n const compareRes = this.index_.compare(node, this.rangedFilter_.getEndPost());\r\n return this.endIsInclusive_ ? compareRes <= 0 : compareRes < 0;\r\n };\r\n this.rangedFilter_ = new RangedFilter(params);\r\n this.index_ = params.getIndex();\r\n this.limit_ = params.getLimit();\r\n this.reverse_ = !params.isViewFromLeft();\r\n this.startIsInclusive_ = !params.startAfterSet_;\r\n this.endIsInclusive_ = !params.endBeforeSet_;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n if (!this.rangedFilter_.matches(new NamedNode(key, newChild))) {\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n if (snap.getImmediateChild(key).equals(newChild)) {\r\n // No change\r\n return snap;\r\n }\r\n else if (snap.numChildren() < this.limit_) {\r\n return this.rangedFilter_\r\n .getIndexedFilter()\r\n .updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n }\r\n else {\r\n return this.fullLimitUpdateChild_(snap, key, newChild, source, optChangeAccumulator);\r\n }\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n let filtered;\r\n if (newSnap.isLeafNode() || newSnap.isEmpty()) {\r\n // Make sure we have a children node with the correct index, not a leaf node;\r\n filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n }\r\n else {\r\n if (this.limit_ * 2 < newSnap.numChildren() &&\r\n newSnap.isIndexed(this.index_)) {\r\n // Easier to build up a snapshot, since what we're given has more than twice the elements we want\r\n filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n // anchor to the startPost, endPost, or last element as appropriate\r\n let iterator;\r\n if (this.reverse_) {\r\n iterator = newSnap.getReverseIteratorFrom(this.rangedFilter_.getEndPost(), this.index_);\r\n }\r\n else {\r\n iterator = newSnap.getIteratorFrom(this.rangedFilter_.getStartPost(), this.index_);\r\n }\r\n let count = 0;\r\n while (iterator.hasNext() && count < this.limit_) {\r\n const next = iterator.getNext();\r\n if (!this.withinDirectionalStart(next)) {\r\n // if we have not reached the start, skip to the next element\r\n continue;\r\n }\r\n else if (!this.withinDirectionalEnd(next)) {\r\n // if we have reached the end, stop adding elements\r\n break;\r\n }\r\n else {\r\n filtered = filtered.updateImmediateChild(next.name, next.node);\r\n count++;\r\n }\r\n }\r\n }\r\n else {\r\n // The snap contains less than twice the limit. Faster to delete from the snap than build up a new one\r\n filtered = newSnap.withIndex(this.index_);\r\n // Don't support priorities on queries\r\n filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n let iterator;\r\n if (this.reverse_) {\r\n iterator = filtered.getReverseIterator(this.index_);\r\n }\r\n else {\r\n iterator = filtered.getIterator(this.index_);\r\n }\r\n let count = 0;\r\n while (iterator.hasNext()) {\r\n const next = iterator.getNext();\r\n const inRange = count < this.limit_ &&\r\n this.withinDirectionalStart(next) &&\r\n this.withinDirectionalEnd(next);\r\n if (inRange) {\r\n count++;\r\n }\r\n else {\r\n filtered = filtered.updateImmediateChild(next.name, ChildrenNode.EMPTY_NODE);\r\n }\r\n }\r\n }\r\n }\r\n return this.rangedFilter_\r\n .getIndexedFilter()\r\n .updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n // Don't support priorities on queries\r\n return oldSnap;\r\n }\r\n filtersNodes() {\r\n return true;\r\n }\r\n getIndexedFilter() {\r\n return this.rangedFilter_.getIndexedFilter();\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n fullLimitUpdateChild_(snap, childKey, childSnap, source, changeAccumulator) {\r\n // TODO: rename all cache stuff etc to general snap terminology\r\n let cmp;\r\n if (this.reverse_) {\r\n const indexCmp = this.index_.getCompare();\r\n cmp = (a, b) => indexCmp(b, a);\r\n }\r\n else {\r\n cmp = this.index_.getCompare();\r\n }\r\n const oldEventCache = snap;\r\n assert(oldEventCache.numChildren() === this.limit_, '');\r\n const newChildNamedNode = new NamedNode(childKey, childSnap);\r\n const windowBoundary = this.reverse_\r\n ? oldEventCache.getFirstChild(this.index_)\r\n : oldEventCache.getLastChild(this.index_);\r\n const inRange = this.rangedFilter_.matches(newChildNamedNode);\r\n if (oldEventCache.hasChild(childKey)) {\r\n const oldChildSnap = oldEventCache.getImmediateChild(childKey);\r\n let nextChild = source.getChildAfterChild(this.index_, windowBoundary, this.reverse_);\r\n while (nextChild != null &&\r\n (nextChild.name === childKey || oldEventCache.hasChild(nextChild.name))) {\r\n // There is a weird edge case where a node is updated as part of a merge in the write tree, but hasn't\r\n // been applied to the limited filter yet. Ignore this next child which will be updated later in\r\n // the limited filter...\r\n nextChild = source.getChildAfterChild(this.index_, nextChild, this.reverse_);\r\n }\r\n const compareNext = nextChild == null ? 1 : cmp(nextChild, newChildNamedNode);\r\n const remainsInWindow = inRange && !childSnap.isEmpty() && compareNext >= 0;\r\n if (remainsInWindow) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildChanged(childKey, childSnap, oldChildSnap));\r\n }\r\n return oldEventCache.updateImmediateChild(childKey, childSnap);\r\n }\r\n else {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildRemoved(childKey, oldChildSnap));\r\n }\r\n const newEventCache = oldEventCache.updateImmediateChild(childKey, ChildrenNode.EMPTY_NODE);\r\n const nextChildInRange = nextChild != null && this.rangedFilter_.matches(nextChild);\r\n if (nextChildInRange) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildAdded(nextChild.name, nextChild.node));\r\n }\r\n return newEventCache.updateImmediateChild(nextChild.name, nextChild.node);\r\n }\r\n else {\r\n return newEventCache;\r\n }\r\n }\r\n }\r\n else if (childSnap.isEmpty()) {\r\n // we're deleting a node, but it was not in the window, so ignore it\r\n return snap;\r\n }\r\n else if (inRange) {\r\n if (cmp(windowBoundary, newChildNamedNode) >= 0) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildRemoved(windowBoundary.name, windowBoundary.node));\r\n changeAccumulator.trackChildChange(changeChildAdded(childKey, childSnap));\r\n }\r\n return oldEventCache\r\n .updateImmediateChild(childKey, childSnap)\r\n .updateImmediateChild(windowBoundary.name, ChildrenNode.EMPTY_NODE);\r\n }\r\n else {\r\n return snap;\r\n }\r\n }\r\n else {\r\n return snap;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a\r\n * range to be returned for a particular location. It is assumed that validation of parameters is done at the\r\n * user-facing API level, so it is not done here.\r\n *\r\n * @internal\r\n */\r\nclass QueryParams {\r\n constructor() {\r\n this.limitSet_ = false;\r\n this.startSet_ = false;\r\n this.startNameSet_ = false;\r\n this.startAfterSet_ = false; // can only be true if startSet_ is true\r\n this.endSet_ = false;\r\n this.endNameSet_ = false;\r\n this.endBeforeSet_ = false; // can only be true if endSet_ is true\r\n this.limit_ = 0;\r\n this.viewFrom_ = '';\r\n this.indexStartValue_ = null;\r\n this.indexStartName_ = '';\r\n this.indexEndValue_ = null;\r\n this.indexEndName_ = '';\r\n this.index_ = PRIORITY_INDEX;\r\n }\r\n hasStart() {\r\n return this.startSet_;\r\n }\r\n /**\r\n * @returns True if it would return from left.\r\n */\r\n isViewFromLeft() {\r\n if (this.viewFrom_ === '') {\r\n // limit(), rather than limitToFirst or limitToLast was called.\r\n // This means that only one of startSet_ and endSet_ is true. Use them\r\n // to calculate which side of the view to anchor to. If neither is set,\r\n // anchor to the end.\r\n return this.startSet_;\r\n }\r\n else {\r\n return this.viewFrom_ === \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n }\r\n }\r\n /**\r\n * Only valid to call if hasStart() returns true\r\n */\r\n getIndexStartValue() {\r\n assert(this.startSet_, 'Only valid if start has been set');\r\n return this.indexStartValue_;\r\n }\r\n /**\r\n * Only valid to call if hasStart() returns true.\r\n * Returns the starting key name for the range defined by these query parameters\r\n */\r\n getIndexStartName() {\r\n assert(this.startSet_, 'Only valid if start has been set');\r\n if (this.startNameSet_) {\r\n return this.indexStartName_;\r\n }\r\n else {\r\n return MIN_NAME;\r\n }\r\n }\r\n hasEnd() {\r\n return this.endSet_;\r\n }\r\n /**\r\n * Only valid to call if hasEnd() returns true.\r\n */\r\n getIndexEndValue() {\r\n assert(this.endSet_, 'Only valid if end has been set');\r\n return this.indexEndValue_;\r\n }\r\n /**\r\n * Only valid to call if hasEnd() returns true.\r\n * Returns the end key name for the range defined by these query parameters\r\n */\r\n getIndexEndName() {\r\n assert(this.endSet_, 'Only valid if end has been set');\r\n if (this.endNameSet_) {\r\n return this.indexEndName_;\r\n }\r\n else {\r\n return MAX_NAME;\r\n }\r\n }\r\n hasLimit() {\r\n return this.limitSet_;\r\n }\r\n /**\r\n * @returns True if a limit has been set and it has been explicitly anchored\r\n */\r\n hasAnchoredLimit() {\r\n return this.limitSet_ && this.viewFrom_ !== '';\r\n }\r\n /**\r\n * Only valid to call if hasLimit() returns true\r\n */\r\n getLimit() {\r\n assert(this.limitSet_, 'Only valid if limit has been set');\r\n return this.limit_;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n loadsAllData() {\r\n return !(this.startSet_ || this.endSet_ || this.limitSet_);\r\n }\r\n isDefault() {\r\n return this.loadsAllData() && this.index_ === PRIORITY_INDEX;\r\n }\r\n copy() {\r\n const copy = new QueryParams();\r\n copy.limitSet_ = this.limitSet_;\r\n copy.limit_ = this.limit_;\r\n copy.startSet_ = this.startSet_;\r\n copy.startAfterSet_ = this.startAfterSet_;\r\n copy.indexStartValue_ = this.indexStartValue_;\r\n copy.startNameSet_ = this.startNameSet_;\r\n copy.indexStartName_ = this.indexStartName_;\r\n copy.endSet_ = this.endSet_;\r\n copy.endBeforeSet_ = this.endBeforeSet_;\r\n copy.indexEndValue_ = this.indexEndValue_;\r\n copy.endNameSet_ = this.endNameSet_;\r\n copy.indexEndName_ = this.indexEndName_;\r\n copy.index_ = this.index_;\r\n copy.viewFrom_ = this.viewFrom_;\r\n return copy;\r\n }\r\n}\r\nfunction queryParamsGetNodeFilter(queryParams) {\r\n if (queryParams.loadsAllData()) {\r\n return new IndexedFilter(queryParams.getIndex());\r\n }\r\n else if (queryParams.hasLimit()) {\r\n return new LimitedFilter(queryParams);\r\n }\r\n else {\r\n return new RangedFilter(queryParams);\r\n }\r\n}\r\nfunction queryParamsLimitToFirst(queryParams, newLimit) {\r\n const newParams = queryParams.copy();\r\n newParams.limitSet_ = true;\r\n newParams.limit_ = newLimit;\r\n newParams.viewFrom_ = \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n return newParams;\r\n}\r\nfunction queryParamsLimitToLast(queryParams, newLimit) {\r\n const newParams = queryParams.copy();\r\n newParams.limitSet_ = true;\r\n newParams.limit_ = newLimit;\r\n newParams.viewFrom_ = \"r\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT */;\r\n return newParams;\r\n}\r\nfunction queryParamsStartAt(queryParams, indexValue, key) {\r\n const newParams = queryParams.copy();\r\n newParams.startSet_ = true;\r\n if (indexValue === undefined) {\r\n indexValue = null;\r\n }\r\n newParams.indexStartValue_ = indexValue;\r\n if (key != null) {\r\n newParams.startNameSet_ = true;\r\n newParams.indexStartName_ = key;\r\n }\r\n else {\r\n newParams.startNameSet_ = false;\r\n newParams.indexStartName_ = '';\r\n }\r\n return newParams;\r\n}\r\nfunction queryParamsStartAfter(queryParams, indexValue, key) {\r\n let params;\r\n if (queryParams.index_ === KEY_INDEX || !!key) {\r\n params = queryParamsStartAt(queryParams, indexValue, key);\r\n }\r\n else {\r\n params = queryParamsStartAt(queryParams, indexValue, MAX_NAME);\r\n }\r\n params.startAfterSet_ = true;\r\n return params;\r\n}\r\nfunction queryParamsEndAt(queryParams, indexValue, key) {\r\n const newParams = queryParams.copy();\r\n newParams.endSet_ = true;\r\n if (indexValue === undefined) {\r\n indexValue = null;\r\n }\r\n newParams.indexEndValue_ = indexValue;\r\n if (key !== undefined) {\r\n newParams.endNameSet_ = true;\r\n newParams.indexEndName_ = key;\r\n }\r\n else {\r\n newParams.endNameSet_ = false;\r\n newParams.indexEndName_ = '';\r\n }\r\n return newParams;\r\n}\r\nfunction queryParamsEndBefore(queryParams, indexValue, key) {\r\n let params;\r\n if (queryParams.index_ === KEY_INDEX || !!key) {\r\n params = queryParamsEndAt(queryParams, indexValue, key);\r\n }\r\n else {\r\n params = queryParamsEndAt(queryParams, indexValue, MIN_NAME);\r\n }\r\n params.endBeforeSet_ = true;\r\n return params;\r\n}\r\nfunction queryParamsOrderBy(queryParams, index) {\r\n const newParams = queryParams.copy();\r\n newParams.index_ = index;\r\n return newParams;\r\n}\r\n/**\r\n * Returns a set of REST query string parameters representing this query.\r\n *\r\n * @returns query string parameters\r\n */\r\nfunction queryParamsToRestQueryStringParameters(queryParams) {\r\n const qs = {};\r\n if (queryParams.isDefault()) {\r\n return qs;\r\n }\r\n let orderBy;\r\n if (queryParams.index_ === PRIORITY_INDEX) {\r\n orderBy = \"$priority\" /* REST_QUERY_CONSTANTS.PRIORITY_INDEX */;\r\n }\r\n else if (queryParams.index_ === VALUE_INDEX) {\r\n orderBy = \"$value\" /* REST_QUERY_CONSTANTS.VALUE_INDEX */;\r\n }\r\n else if (queryParams.index_ === KEY_INDEX) {\r\n orderBy = \"$key\" /* REST_QUERY_CONSTANTS.KEY_INDEX */;\r\n }\r\n else {\r\n assert(queryParams.index_ instanceof PathIndex, 'Unrecognized index type!');\r\n orderBy = queryParams.index_.toString();\r\n }\r\n qs[\"orderBy\" /* REST_QUERY_CONSTANTS.ORDER_BY */] = stringify(orderBy);\r\n if (queryParams.startSet_) {\r\n const startParam = queryParams.startAfterSet_\r\n ? \"startAfter\" /* REST_QUERY_CONSTANTS.START_AFTER */\r\n : \"startAt\" /* REST_QUERY_CONSTANTS.START_AT */;\r\n qs[startParam] = stringify(queryParams.indexStartValue_);\r\n if (queryParams.startNameSet_) {\r\n qs[startParam] += ',' + stringify(queryParams.indexStartName_);\r\n }\r\n }\r\n if (queryParams.endSet_) {\r\n const endParam = queryParams.endBeforeSet_\r\n ? \"endBefore\" /* REST_QUERY_CONSTANTS.END_BEFORE */\r\n : \"endAt\" /* REST_QUERY_CONSTANTS.END_AT */;\r\n qs[endParam] = stringify(queryParams.indexEndValue_);\r\n if (queryParams.endNameSet_) {\r\n qs[endParam] += ',' + stringify(queryParams.indexEndName_);\r\n }\r\n }\r\n if (queryParams.limitSet_) {\r\n if (queryParams.isViewFromLeft()) {\r\n qs[\"limitToFirst\" /* REST_QUERY_CONSTANTS.LIMIT_TO_FIRST */] = queryParams.limit_;\r\n }\r\n else {\r\n qs[\"limitToLast\" /* REST_QUERY_CONSTANTS.LIMIT_TO_LAST */] = queryParams.limit_;\r\n }\r\n }\r\n return qs;\r\n}\r\nfunction queryParamsGetQueryObject(queryParams) {\r\n const obj = {};\r\n if (queryParams.startSet_) {\r\n obj[\"sp\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_VALUE */] =\r\n queryParams.indexStartValue_;\r\n if (queryParams.startNameSet_) {\r\n obj[\"sn\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_NAME */] =\r\n queryParams.indexStartName_;\r\n }\r\n obj[\"sin\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_IS_INCLUSIVE */] =\r\n !queryParams.startAfterSet_;\r\n }\r\n if (queryParams.endSet_) {\r\n obj[\"ep\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_VALUE */] = queryParams.indexEndValue_;\r\n if (queryParams.endNameSet_) {\r\n obj[\"en\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_NAME */] = queryParams.indexEndName_;\r\n }\r\n obj[\"ein\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_IS_INCLUSIVE */] =\r\n !queryParams.endBeforeSet_;\r\n }\r\n if (queryParams.limitSet_) {\r\n obj[\"l\" /* WIRE_PROTOCOL_CONSTANTS.LIMIT */] = queryParams.limit_;\r\n let viewFrom = queryParams.viewFrom_;\r\n if (viewFrom === '') {\r\n if (queryParams.isViewFromLeft()) {\r\n viewFrom = \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n }\r\n else {\r\n viewFrom = \"r\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT */;\r\n }\r\n }\r\n obj[\"vf\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM */] = viewFrom;\r\n }\r\n // For now, priority index is the default, so we only specify if it's some other index\r\n if (queryParams.index_ !== PRIORITY_INDEX) {\r\n obj[\"i\" /* WIRE_PROTOCOL_CONSTANTS.INDEX */] = queryParams.index_.toString();\r\n }\r\n return obj;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of ServerActions that communicates with the server via REST requests.\r\n * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full\r\n * persistent connection (using WebSockets or long-polling)\r\n */\r\nclass ReadonlyRestClient extends ServerActions {\r\n /**\r\n * @param repoInfo_ - Data about the namespace we are connecting to\r\n * @param onDataUpdate_ - A callback for new data from the server\r\n */\r\n constructor(repoInfo_, onDataUpdate_, authTokenProvider_, appCheckTokenProvider_) {\r\n super();\r\n this.repoInfo_ = repoInfo_;\r\n this.onDataUpdate_ = onDataUpdate_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckTokenProvider_ = appCheckTokenProvider_;\r\n /** @private {function(...[*])} */\r\n this.log_ = logWrapper('p:rest:');\r\n /**\r\n * We don't actually need to track listens, except to prevent us calling an onComplete for a listen\r\n * that's been removed. :-/\r\n */\r\n this.listens_ = {};\r\n }\r\n reportStats(stats) {\r\n throw new Error('Method not implemented.');\r\n }\r\n static getListenId_(query, tag) {\r\n if (tag !== undefined) {\r\n return 'tag$' + tag;\r\n }\r\n else {\r\n assert(query._queryParams.isDefault(), \"should have a tag if it's not a default query.\");\r\n return query._path.toString();\r\n }\r\n }\r\n /** @inheritDoc */\r\n listen(query, currentHashFn, tag, onComplete) {\r\n const pathString = query._path.toString();\r\n this.log_('Listen called for ' + pathString + ' ' + query._queryIdentifier);\r\n // Mark this listener so we can tell if it's removed.\r\n const listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n const thisListen = {};\r\n this.listens_[listenId] = thisListen;\r\n const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\r\n this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\r\n let data = result;\r\n if (error === 404) {\r\n data = null;\r\n error = null;\r\n }\r\n if (error === null) {\r\n this.onDataUpdate_(pathString, data, /*isMerge=*/ false, tag);\r\n }\r\n if (safeGet(this.listens_, listenId) === thisListen) {\r\n let status;\r\n if (!error) {\r\n status = 'ok';\r\n }\r\n else if (error === 401) {\r\n status = 'permission_denied';\r\n }\r\n else {\r\n status = 'rest_error:' + error;\r\n }\r\n onComplete(status, null);\r\n }\r\n });\r\n }\r\n /** @inheritDoc */\r\n unlisten(query, tag) {\r\n const listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n delete this.listens_[listenId];\r\n }\r\n get(query) {\r\n const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\r\n const pathString = query._path.toString();\r\n const deferred = new Deferred();\r\n this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\r\n let data = result;\r\n if (error === 404) {\r\n data = null;\r\n error = null;\r\n }\r\n if (error === null) {\r\n this.onDataUpdate_(pathString, data, \r\n /*isMerge=*/ false, \r\n /*tag=*/ null);\r\n deferred.resolve(data);\r\n }\r\n else {\r\n deferred.reject(new Error(data));\r\n }\r\n });\r\n return deferred.promise;\r\n }\r\n /** @inheritDoc */\r\n refreshAuthToken(token) {\r\n // no-op since we just always call getToken.\r\n }\r\n /**\r\n * Performs a REST request to the given path, with the provided query string parameters,\r\n * and any auth credentials we have.\r\n */\r\n restRequest_(pathString, queryStringParameters = {}, callback) {\r\n queryStringParameters['format'] = 'export';\r\n return Promise.all([\r\n this.authTokenProvider_.getToken(/*forceRefresh=*/ false),\r\n this.appCheckTokenProvider_.getToken(/*forceRefresh=*/ false)\r\n ]).then(([authToken, appCheckToken]) => {\r\n if (authToken && authToken.accessToken) {\r\n queryStringParameters['auth'] = authToken.accessToken;\r\n }\r\n if (appCheckToken && appCheckToken.token) {\r\n queryStringParameters['ac'] = appCheckToken.token;\r\n }\r\n const url = (this.repoInfo_.secure ? 'https://' : 'http://') +\r\n this.repoInfo_.host +\r\n pathString +\r\n '?' +\r\n 'ns=' +\r\n this.repoInfo_.namespace +\r\n querystring(queryStringParameters);\r\n this.log_('Sending REST request for ' + url);\r\n const xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange = () => {\r\n if (callback && xhr.readyState === 4) {\r\n this.log_('REST Response for ' + url + ' received. status:', xhr.status, 'response:', xhr.responseText);\r\n let res = null;\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n try {\r\n res = jsonEval(xhr.responseText);\r\n }\r\n catch (e) {\r\n warn('Failed to parse JSON response for ' +\r\n url +\r\n ': ' +\r\n xhr.responseText);\r\n }\r\n callback(null, res);\r\n }\r\n else {\r\n // 401 and 404 are expected.\r\n if (xhr.status !== 401 && xhr.status !== 404) {\r\n warn('Got unsuccessful REST response for ' +\r\n url +\r\n ' Status: ' +\r\n xhr.status);\r\n }\r\n callback(xhr.status);\r\n }\r\n callback = null;\r\n }\r\n };\r\n xhr.open('GET', url, /*asynchronous=*/ true);\r\n xhr.send();\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Mutable object which basically just stores a reference to the \"latest\" immutable snapshot.\r\n */\r\nclass SnapshotHolder {\r\n constructor() {\r\n this.rootNode_ = ChildrenNode.EMPTY_NODE;\r\n }\r\n getNode(path) {\r\n return this.rootNode_.getChild(path);\r\n }\r\n updateSnapshot(path, newSnapshotNode) {\r\n this.rootNode_ = this.rootNode_.updateChild(path, newSnapshotNode);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newSparseSnapshotTree() {\r\n return {\r\n value: null,\r\n children: new Map()\r\n };\r\n}\r\n/**\r\n * Stores the given node at the specified path. If there is already a node\r\n * at a shallower path, it merges the new data into that snapshot node.\r\n *\r\n * @param path - Path to look up snapshot for.\r\n * @param data - The new data, or null.\r\n */\r\nfunction sparseSnapshotTreeRemember(sparseSnapshotTree, path, data) {\r\n if (pathIsEmpty(path)) {\r\n sparseSnapshotTree.value = data;\r\n sparseSnapshotTree.children.clear();\r\n }\r\n else if (sparseSnapshotTree.value !== null) {\r\n sparseSnapshotTree.value = sparseSnapshotTree.value.updateChild(path, data);\r\n }\r\n else {\r\n const childKey = pathGetFront(path);\r\n if (!sparseSnapshotTree.children.has(childKey)) {\r\n sparseSnapshotTree.children.set(childKey, newSparseSnapshotTree());\r\n }\r\n const child = sparseSnapshotTree.children.get(childKey);\r\n path = pathPopFront(path);\r\n sparseSnapshotTreeRemember(child, path, data);\r\n }\r\n}\r\n/**\r\n * Purge the data at path from the cache.\r\n *\r\n * @param path - Path to look up snapshot for.\r\n * @returns True if this node should now be removed.\r\n */\r\nfunction sparseSnapshotTreeForget(sparseSnapshotTree, path) {\r\n if (pathIsEmpty(path)) {\r\n sparseSnapshotTree.value = null;\r\n sparseSnapshotTree.children.clear();\r\n return true;\r\n }\r\n else {\r\n if (sparseSnapshotTree.value !== null) {\r\n if (sparseSnapshotTree.value.isLeafNode()) {\r\n // We're trying to forget a node that doesn't exist\r\n return false;\r\n }\r\n else {\r\n const value = sparseSnapshotTree.value;\r\n sparseSnapshotTree.value = null;\r\n value.forEachChild(PRIORITY_INDEX, (key, tree) => {\r\n sparseSnapshotTreeRemember(sparseSnapshotTree, new Path(key), tree);\r\n });\r\n return sparseSnapshotTreeForget(sparseSnapshotTree, path);\r\n }\r\n }\r\n else if (sparseSnapshotTree.children.size > 0) {\r\n const childKey = pathGetFront(path);\r\n path = pathPopFront(path);\r\n if (sparseSnapshotTree.children.has(childKey)) {\r\n const safeToRemove = sparseSnapshotTreeForget(sparseSnapshotTree.children.get(childKey), path);\r\n if (safeToRemove) {\r\n sparseSnapshotTree.children.delete(childKey);\r\n }\r\n }\r\n return sparseSnapshotTree.children.size === 0;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n}\r\n/**\r\n * Recursively iterates through all of the stored tree and calls the\r\n * callback on each one.\r\n *\r\n * @param prefixPath - Path to look up node for.\r\n * @param func - The function to invoke for each tree.\r\n */\r\nfunction sparseSnapshotTreeForEachTree(sparseSnapshotTree, prefixPath, func) {\r\n if (sparseSnapshotTree.value !== null) {\r\n func(prefixPath, sparseSnapshotTree.value);\r\n }\r\n else {\r\n sparseSnapshotTreeForEachChild(sparseSnapshotTree, (key, tree) => {\r\n const path = new Path(prefixPath.toString() + '/' + key);\r\n sparseSnapshotTreeForEachTree(tree, path, func);\r\n });\r\n }\r\n}\r\n/**\r\n * Iterates through each immediate child and triggers the callback.\r\n * Only seems to be used in tests.\r\n *\r\n * @param func - The function to invoke for each child.\r\n */\r\nfunction sparseSnapshotTreeForEachChild(sparseSnapshotTree, func) {\r\n sparseSnapshotTree.children.forEach((tree, key) => {\r\n func(key, tree);\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns the delta from the previous call to get stats.\r\n *\r\n * @param collection_ - The collection to \"listen\" to.\r\n */\r\nclass StatsListener {\r\n constructor(collection_) {\r\n this.collection_ = collection_;\r\n this.last_ = null;\r\n }\r\n get() {\r\n const newStats = this.collection_.get();\r\n const delta = Object.assign({}, newStats);\r\n if (this.last_) {\r\n each(this.last_, (stat, value) => {\r\n delta[stat] = delta[stat] - value;\r\n });\r\n }\r\n this.last_ = newStats;\r\n return delta;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Assuming some apps may have a short amount of time on page, and a bulk of firebase operations probably\r\n// happen on page load, we try to report our first set of stats pretty quickly, but we wait at least 10\r\n// seconds to try to ensure the Firebase connection is established / settled.\r\nconst FIRST_STATS_MIN_TIME = 10 * 1000;\r\nconst FIRST_STATS_MAX_TIME = 30 * 1000;\r\n// We'll continue to report stats on average every 5 minutes.\r\nconst REPORT_STATS_INTERVAL = 5 * 60 * 1000;\r\nclass StatsReporter {\r\n constructor(collection, server_) {\r\n this.server_ = server_;\r\n this.statsToReport_ = {};\r\n this.statsListener_ = new StatsListener(collection);\r\n const timeout = FIRST_STATS_MIN_TIME +\r\n (FIRST_STATS_MAX_TIME - FIRST_STATS_MIN_TIME) * Math.random();\r\n setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(timeout));\r\n }\r\n reportStats_() {\r\n const stats = this.statsListener_.get();\r\n const reportedStats = {};\r\n let haveStatsToReport = false;\r\n each(stats, (stat, value) => {\r\n if (value > 0 && contains(this.statsToReport_, stat)) {\r\n reportedStats[stat] = value;\r\n haveStatsToReport = true;\r\n }\r\n });\r\n if (haveStatsToReport) {\r\n this.server_.reportStats(reportedStats);\r\n }\r\n // queue our next run.\r\n setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(Math.random() * 2 * REPORT_STATS_INTERVAL));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n *\r\n * @enum\r\n */\r\nvar OperationType;\r\n(function (OperationType) {\r\n OperationType[OperationType[\"OVERWRITE\"] = 0] = \"OVERWRITE\";\r\n OperationType[OperationType[\"MERGE\"] = 1] = \"MERGE\";\r\n OperationType[OperationType[\"ACK_USER_WRITE\"] = 2] = \"ACK_USER_WRITE\";\r\n OperationType[OperationType[\"LISTEN_COMPLETE\"] = 3] = \"LISTEN_COMPLETE\";\r\n})(OperationType || (OperationType = {}));\r\nfunction newOperationSourceUser() {\r\n return {\r\n fromUser: true,\r\n fromServer: false,\r\n queryId: null,\r\n tagged: false\r\n };\r\n}\r\nfunction newOperationSourceServer() {\r\n return {\r\n fromUser: false,\r\n fromServer: true,\r\n queryId: null,\r\n tagged: false\r\n };\r\n}\r\nfunction newOperationSourceServerTaggedQuery(queryId) {\r\n return {\r\n fromUser: false,\r\n fromServer: true,\r\n queryId,\r\n tagged: true\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AckUserWrite {\r\n /**\r\n * @param affectedTree - A tree containing true for each affected path. Affected paths can't overlap.\r\n */\r\n constructor(\r\n /** @inheritDoc */ path, \r\n /** @inheritDoc */ affectedTree, \r\n /** @inheritDoc */ revert) {\r\n this.path = path;\r\n this.affectedTree = affectedTree;\r\n this.revert = revert;\r\n /** @inheritDoc */\r\n this.type = OperationType.ACK_USER_WRITE;\r\n /** @inheritDoc */\r\n this.source = newOperationSourceUser();\r\n }\r\n operationForChild(childName) {\r\n if (!pathIsEmpty(this.path)) {\r\n assert(pathGetFront(this.path) === childName, 'operationForChild called for unrelated child.');\r\n return new AckUserWrite(pathPopFront(this.path), this.affectedTree, this.revert);\r\n }\r\n else if (this.affectedTree.value != null) {\r\n assert(this.affectedTree.children.isEmpty(), 'affectedTree should not have overlapping affected paths.');\r\n // All child locations are affected as well; just return same operation.\r\n return this;\r\n }\r\n else {\r\n const childTree = this.affectedTree.subtree(new Path(childName));\r\n return new AckUserWrite(newEmptyPath(), childTree, this.revert);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ListenComplete {\r\n constructor(source, path) {\r\n this.source = source;\r\n this.path = path;\r\n /** @inheritDoc */\r\n this.type = OperationType.LISTEN_COMPLETE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n return new ListenComplete(this.source, newEmptyPath());\r\n }\r\n else {\r\n return new ListenComplete(this.source, pathPopFront(this.path));\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Overwrite {\r\n constructor(source, path, snap) {\r\n this.source = source;\r\n this.path = path;\r\n this.snap = snap;\r\n /** @inheritDoc */\r\n this.type = OperationType.OVERWRITE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n return new Overwrite(this.source, newEmptyPath(), this.snap.getImmediateChild(childName));\r\n }\r\n else {\r\n return new Overwrite(this.source, pathPopFront(this.path), this.snap);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Merge {\r\n constructor(\r\n /** @inheritDoc */ source, \r\n /** @inheritDoc */ path, \r\n /** @inheritDoc */ children) {\r\n this.source = source;\r\n this.path = path;\r\n this.children = children;\r\n /** @inheritDoc */\r\n this.type = OperationType.MERGE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n const childTree = this.children.subtree(new Path(childName));\r\n if (childTree.isEmpty()) {\r\n // This child is unaffected\r\n return null;\r\n }\r\n else if (childTree.value) {\r\n // We have a snapshot for the child in question. This becomes an overwrite of the child.\r\n return new Overwrite(this.source, newEmptyPath(), childTree.value);\r\n }\r\n else {\r\n // This is a merge at a deeper level\r\n return new Merge(this.source, newEmptyPath(), childTree);\r\n }\r\n }\r\n else {\r\n assert(pathGetFront(this.path) === childName, \"Can't get a merge for a child not on the path of the operation\");\r\n return new Merge(this.source, pathPopFront(this.path), this.children);\r\n }\r\n }\r\n toString() {\r\n return ('Operation(' +\r\n this.path +\r\n ': ' +\r\n this.source.toString() +\r\n ' merge: ' +\r\n this.children.toString() +\r\n ')');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A cache node only stores complete children. Additionally it holds a flag whether the node can be considered fully\r\n * initialized in the sense that we know at one point in time this represented a valid state of the world, e.g.\r\n * initialized with data from the server, or a complete overwrite by the client. The filtered flag also tracks\r\n * whether a node potentially had children removed due to a filter.\r\n */\r\nclass CacheNode {\r\n constructor(node_, fullyInitialized_, filtered_) {\r\n this.node_ = node_;\r\n this.fullyInitialized_ = fullyInitialized_;\r\n this.filtered_ = filtered_;\r\n }\r\n /**\r\n * Returns whether this node was fully initialized with either server data or a complete overwrite by the client\r\n */\r\n isFullyInitialized() {\r\n return this.fullyInitialized_;\r\n }\r\n /**\r\n * Returns whether this node is potentially missing children due to a filter applied to the node\r\n */\r\n isFiltered() {\r\n return this.filtered_;\r\n }\r\n isCompleteForPath(path) {\r\n if (pathIsEmpty(path)) {\r\n return this.isFullyInitialized() && !this.filtered_;\r\n }\r\n const childKey = pathGetFront(path);\r\n return this.isCompleteForChild(childKey);\r\n }\r\n isCompleteForChild(key) {\r\n return ((this.isFullyInitialized() && !this.filtered_) || this.node_.hasChild(key));\r\n }\r\n getNode() {\r\n return this.node_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An EventGenerator is used to convert \"raw\" changes (Change) as computed by the\r\n * CacheDiffer into actual events (Event) that can be raised. See generateEventsForChanges()\r\n * for details.\r\n *\r\n */\r\nclass EventGenerator {\r\n constructor(query_) {\r\n this.query_ = query_;\r\n this.index_ = this.query_._queryParams.getIndex();\r\n }\r\n}\r\n/**\r\n * Given a set of raw changes (no moved events and prevName not specified yet), and a set of\r\n * EventRegistrations that should be notified of these changes, generate the actual events to be raised.\r\n *\r\n * Notes:\r\n * - child_moved events will be synthesized at this time for any child_changed events that affect\r\n * our index.\r\n * - prevName will be calculated based on the index ordering.\r\n */\r\nfunction eventGeneratorGenerateEventsForChanges(eventGenerator, changes, eventCache, eventRegistrations) {\r\n const events = [];\r\n const moves = [];\r\n changes.forEach(change => {\r\n if (change.type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n eventGenerator.index_.indexedValueChanged(change.oldSnap, change.snapshotNode)) {\r\n moves.push(changeChildMoved(change.childName, change.snapshotNode));\r\n }\r\n });\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_removed\" /* ChangeType.CHILD_REMOVED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_added\" /* ChangeType.CHILD_ADDED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_moved\" /* ChangeType.CHILD_MOVED */, moves, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_changed\" /* ChangeType.CHILD_CHANGED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"value\" /* ChangeType.VALUE */, changes, eventRegistrations, eventCache);\r\n return events;\r\n}\r\n/**\r\n * Given changes of a single change type, generate the corresponding events.\r\n */\r\nfunction eventGeneratorGenerateEventsForType(eventGenerator, events, eventType, changes, registrations, eventCache) {\r\n const filteredChanges = changes.filter(change => change.type === eventType);\r\n filteredChanges.sort((a, b) => eventGeneratorCompareChanges(eventGenerator, a, b));\r\n filteredChanges.forEach(change => {\r\n const materializedChange = eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache);\r\n registrations.forEach(registration => {\r\n if (registration.respondsTo(change.type)) {\r\n events.push(registration.createEvent(materializedChange, eventGenerator.query_));\r\n }\r\n });\r\n });\r\n}\r\nfunction eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache) {\r\n if (change.type === 'value' || change.type === 'child_removed') {\r\n return change;\r\n }\r\n else {\r\n change.prevName = eventCache.getPredecessorChildName(change.childName, change.snapshotNode, eventGenerator.index_);\r\n return change;\r\n }\r\n}\r\nfunction eventGeneratorCompareChanges(eventGenerator, a, b) {\r\n if (a.childName == null || b.childName == null) {\r\n throw assertionError('Should only compare child_ events.');\r\n }\r\n const aWrapped = new NamedNode(a.childName, a.snapshotNode);\r\n const bWrapped = new NamedNode(b.childName, b.snapshotNode);\r\n return eventGenerator.index_.compare(aWrapped, bWrapped);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newViewCache(eventCache, serverCache) {\r\n return { eventCache, serverCache };\r\n}\r\nfunction viewCacheUpdateEventSnap(viewCache, eventSnap, complete, filtered) {\r\n return newViewCache(new CacheNode(eventSnap, complete, filtered), viewCache.serverCache);\r\n}\r\nfunction viewCacheUpdateServerSnap(viewCache, serverSnap, complete, filtered) {\r\n return newViewCache(viewCache.eventCache, new CacheNode(serverSnap, complete, filtered));\r\n}\r\nfunction viewCacheGetCompleteEventSnap(viewCache) {\r\n return viewCache.eventCache.isFullyInitialized()\r\n ? viewCache.eventCache.getNode()\r\n : null;\r\n}\r\nfunction viewCacheGetCompleteServerSnap(viewCache) {\r\n return viewCache.serverCache.isFullyInitialized()\r\n ? viewCache.serverCache.getNode()\r\n : null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet emptyChildrenSingleton;\r\n/**\r\n * Singleton empty children collection.\r\n *\r\n */\r\nconst EmptyChildren = () => {\r\n if (!emptyChildrenSingleton) {\r\n emptyChildrenSingleton = new SortedMap(stringCompare);\r\n }\r\n return emptyChildrenSingleton;\r\n};\r\n/**\r\n * A tree with immutable elements.\r\n */\r\nclass ImmutableTree {\r\n constructor(value, children = EmptyChildren()) {\r\n this.value = value;\r\n this.children = children;\r\n }\r\n static fromObject(obj) {\r\n let tree = new ImmutableTree(null);\r\n each(obj, (childPath, childSnap) => {\r\n tree = tree.set(new Path(childPath), childSnap);\r\n });\r\n return tree;\r\n }\r\n /**\r\n * True if the value is empty and there are no children\r\n */\r\n isEmpty() {\r\n return this.value === null && this.children.isEmpty();\r\n }\r\n /**\r\n * Given a path and predicate, return the first node and the path to that node\r\n * where the predicate returns true.\r\n *\r\n * TODO Do a perf test -- If we're creating a bunch of `{path: value:}`\r\n * objects on the way back out, it may be better to pass down a pathSoFar obj.\r\n *\r\n * @param relativePath - The remainder of the path\r\n * @param predicate - The predicate to satisfy to return a node\r\n */\r\n findRootMostMatchingPathAndValue(relativePath, predicate) {\r\n if (this.value != null && predicate(this.value)) {\r\n return { path: newEmptyPath(), value: this.value };\r\n }\r\n else {\r\n if (pathIsEmpty(relativePath)) {\r\n return null;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child !== null) {\r\n const childExistingPathAndValue = child.findRootMostMatchingPathAndValue(pathPopFront(relativePath), predicate);\r\n if (childExistingPathAndValue != null) {\r\n const fullPath = pathChild(new Path(front), childExistingPathAndValue.path);\r\n return { path: fullPath, value: childExistingPathAndValue.value };\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Find, if it exists, the shortest subpath of the given path that points a defined\r\n * value in the tree\r\n */\r\n findRootMostValueAndPath(relativePath) {\r\n return this.findRootMostMatchingPathAndValue(relativePath, () => true);\r\n }\r\n /**\r\n * @returns The subtree at the given path\r\n */\r\n subtree(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n return this;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const childTree = this.children.get(front);\r\n if (childTree !== null) {\r\n return childTree.subtree(pathPopFront(relativePath));\r\n }\r\n else {\r\n return new ImmutableTree(null);\r\n }\r\n }\r\n }\r\n /**\r\n * Sets a value at the specified path.\r\n *\r\n * @param relativePath - Path to set value at.\r\n * @param toSet - Value to set.\r\n * @returns Resulting tree.\r\n */\r\n set(relativePath, toSet) {\r\n if (pathIsEmpty(relativePath)) {\r\n return new ImmutableTree(toSet, this.children);\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front) || new ImmutableTree(null);\r\n const newChild = child.set(pathPopFront(relativePath), toSet);\r\n const newChildren = this.children.insert(front, newChild);\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n /**\r\n * Removes the value at the specified path.\r\n *\r\n * @param relativePath - Path to value to remove.\r\n * @returns Resulting tree.\r\n */\r\n remove(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n if (this.children.isEmpty()) {\r\n return new ImmutableTree(null);\r\n }\r\n else {\r\n return new ImmutableTree(null, this.children);\r\n }\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child) {\r\n const newChild = child.remove(pathPopFront(relativePath));\r\n let newChildren;\r\n if (newChild.isEmpty()) {\r\n newChildren = this.children.remove(front);\r\n }\r\n else {\r\n newChildren = this.children.insert(front, newChild);\r\n }\r\n if (this.value === null && newChildren.isEmpty()) {\r\n return new ImmutableTree(null);\r\n }\r\n else {\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n else {\r\n return this;\r\n }\r\n }\r\n }\r\n /**\r\n * Gets a value from the tree.\r\n *\r\n * @param relativePath - Path to get value for.\r\n * @returns Value at path, or null.\r\n */\r\n get(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n return this.value;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child) {\r\n return child.get(pathPopFront(relativePath));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n /**\r\n * Replace the subtree at the specified path with the given new tree.\r\n *\r\n * @param relativePath - Path to replace subtree for.\r\n * @param newTree - New tree.\r\n * @returns Resulting tree.\r\n */\r\n setTree(relativePath, newTree) {\r\n if (pathIsEmpty(relativePath)) {\r\n return newTree;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front) || new ImmutableTree(null);\r\n const newChild = child.setTree(pathPopFront(relativePath), newTree);\r\n let newChildren;\r\n if (newChild.isEmpty()) {\r\n newChildren = this.children.remove(front);\r\n }\r\n else {\r\n newChildren = this.children.insert(front, newChild);\r\n }\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n /**\r\n * Performs a depth first fold on this tree. Transforms a tree into a single\r\n * value, given a function that operates on the path to a node, an optional\r\n * current value, and a map of child names to folded subtrees\r\n */\r\n fold(fn) {\r\n return this.fold_(newEmptyPath(), fn);\r\n }\r\n /**\r\n * Recursive helper for public-facing fold() method\r\n */\r\n fold_(pathSoFar, fn) {\r\n const accum = {};\r\n this.children.inorderTraversal((childKey, childTree) => {\r\n accum[childKey] = childTree.fold_(pathChild(pathSoFar, childKey), fn);\r\n });\r\n return fn(pathSoFar, this.value, accum);\r\n }\r\n /**\r\n * Find the first matching value on the given path. Return the result of applying f to it.\r\n */\r\n findOnPath(path, f) {\r\n return this.findOnPath_(path, newEmptyPath(), f);\r\n }\r\n findOnPath_(pathToFollow, pathSoFar, f) {\r\n const result = this.value ? f(pathSoFar, this.value) : false;\r\n if (result) {\r\n return result;\r\n }\r\n else {\r\n if (pathIsEmpty(pathToFollow)) {\r\n return null;\r\n }\r\n else {\r\n const front = pathGetFront(pathToFollow);\r\n const nextChild = this.children.get(front);\r\n if (nextChild) {\r\n return nextChild.findOnPath_(pathPopFront(pathToFollow), pathChild(pathSoFar, front), f);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n foreachOnPath(path, f) {\r\n return this.foreachOnPath_(path, newEmptyPath(), f);\r\n }\r\n foreachOnPath_(pathToFollow, currentRelativePath, f) {\r\n if (pathIsEmpty(pathToFollow)) {\r\n return this;\r\n }\r\n else {\r\n if (this.value) {\r\n f(currentRelativePath, this.value);\r\n }\r\n const front = pathGetFront(pathToFollow);\r\n const nextChild = this.children.get(front);\r\n if (nextChild) {\r\n return nextChild.foreachOnPath_(pathPopFront(pathToFollow), pathChild(currentRelativePath, front), f);\r\n }\r\n else {\r\n return new ImmutableTree(null);\r\n }\r\n }\r\n }\r\n /**\r\n * Calls the given function for each node in the tree that has a value.\r\n *\r\n * @param f - A function to be called with the path from the root of the tree to\r\n * a node, and the value at that node. Called in depth-first order.\r\n */\r\n foreach(f) {\r\n this.foreach_(newEmptyPath(), f);\r\n }\r\n foreach_(currentRelativePath, f) {\r\n this.children.inorderTraversal((childName, childTree) => {\r\n childTree.foreach_(pathChild(currentRelativePath, childName), f);\r\n });\r\n if (this.value) {\r\n f(currentRelativePath, this.value);\r\n }\r\n }\r\n foreachChild(f) {\r\n this.children.inorderTraversal((childName, childTree) => {\r\n if (childTree.value) {\r\n f(childName, childTree.value);\r\n }\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class holds a collection of writes that can be applied to nodes in unison. It abstracts away the logic with\r\n * dealing with priority writes and multiple nested writes. At any given path there is only allowed to be one write\r\n * modifying that path. Any write to an existing path or shadowing an existing path will modify that existing write\r\n * to reflect the write added.\r\n */\r\nclass CompoundWrite {\r\n constructor(writeTree_) {\r\n this.writeTree_ = writeTree_;\r\n }\r\n static empty() {\r\n return new CompoundWrite(new ImmutableTree(null));\r\n }\r\n}\r\nfunction compoundWriteAddWrite(compoundWrite, path, node) {\r\n if (pathIsEmpty(path)) {\r\n return new CompoundWrite(new ImmutableTree(node));\r\n }\r\n else {\r\n const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\r\n if (rootmost != null) {\r\n const rootMostPath = rootmost.path;\r\n let value = rootmost.value;\r\n const relativePath = newRelativePath(rootMostPath, path);\r\n value = value.updateChild(relativePath, node);\r\n return new CompoundWrite(compoundWrite.writeTree_.set(rootMostPath, value));\r\n }\r\n else {\r\n const subtree = new ImmutableTree(node);\r\n const newWriteTree = compoundWrite.writeTree_.setTree(path, subtree);\r\n return new CompoundWrite(newWriteTree);\r\n }\r\n }\r\n}\r\nfunction compoundWriteAddWrites(compoundWrite, path, updates) {\r\n let newWrite = compoundWrite;\r\n each(updates, (childKey, node) => {\r\n newWrite = compoundWriteAddWrite(newWrite, pathChild(path, childKey), node);\r\n });\r\n return newWrite;\r\n}\r\n/**\r\n * Will remove a write at the given path and deeper paths. This will not modify a write at a higher\r\n * location, which must be removed by calling this method with that path.\r\n *\r\n * @param compoundWrite - The CompoundWrite to remove.\r\n * @param path - The path at which a write and all deeper writes should be removed\r\n * @returns The new CompoundWrite with the removed path\r\n */\r\nfunction compoundWriteRemoveWrite(compoundWrite, path) {\r\n if (pathIsEmpty(path)) {\r\n return CompoundWrite.empty();\r\n }\r\n else {\r\n const newWriteTree = compoundWrite.writeTree_.setTree(path, new ImmutableTree(null));\r\n return new CompoundWrite(newWriteTree);\r\n }\r\n}\r\n/**\r\n * Returns whether this CompoundWrite will fully overwrite a node at a given location and can therefore be\r\n * considered \"complete\".\r\n *\r\n * @param compoundWrite - The CompoundWrite to check.\r\n * @param path - The path to check for\r\n * @returns Whether there is a complete write at that path\r\n */\r\nfunction compoundWriteHasCompleteWrite(compoundWrite, path) {\r\n return compoundWriteGetCompleteNode(compoundWrite, path) != null;\r\n}\r\n/**\r\n * Returns a node for a path if and only if the node is a \"complete\" overwrite at that path. This will not aggregate\r\n * writes from deeper paths, but will return child nodes from a more shallow path.\r\n *\r\n * @param compoundWrite - The CompoundWrite to get the node from.\r\n * @param path - The path to get a complete write\r\n * @returns The node if complete at that path, or null otherwise.\r\n */\r\nfunction compoundWriteGetCompleteNode(compoundWrite, path) {\r\n const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\r\n if (rootmost != null) {\r\n return compoundWrite.writeTree_\r\n .get(rootmost.path)\r\n .getChild(newRelativePath(rootmost.path, path));\r\n }\r\n else {\r\n return null;\r\n }\r\n}\r\n/**\r\n * Returns all children that are guaranteed to be a complete overwrite.\r\n *\r\n * @param compoundWrite - The CompoundWrite to get children from.\r\n * @returns A list of all complete children.\r\n */\r\nfunction compoundWriteGetCompleteChildren(compoundWrite) {\r\n const children = [];\r\n const node = compoundWrite.writeTree_.value;\r\n if (node != null) {\r\n // If it's a leaf node, it has no children; so nothing to do.\r\n if (!node.isLeafNode()) {\r\n node.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n children.push(new NamedNode(childName, childNode));\r\n });\r\n }\r\n }\r\n else {\r\n compoundWrite.writeTree_.children.inorderTraversal((childName, childTree) => {\r\n if (childTree.value != null) {\r\n children.push(new NamedNode(childName, childTree.value));\r\n }\r\n });\r\n }\r\n return children;\r\n}\r\nfunction compoundWriteChildCompoundWrite(compoundWrite, path) {\r\n if (pathIsEmpty(path)) {\r\n return compoundWrite;\r\n }\r\n else {\r\n const shadowingNode = compoundWriteGetCompleteNode(compoundWrite, path);\r\n if (shadowingNode != null) {\r\n return new CompoundWrite(new ImmutableTree(shadowingNode));\r\n }\r\n else {\r\n return new CompoundWrite(compoundWrite.writeTree_.subtree(path));\r\n }\r\n }\r\n}\r\n/**\r\n * Returns true if this CompoundWrite is empty and therefore does not modify any nodes.\r\n * @returns Whether this CompoundWrite is empty\r\n */\r\nfunction compoundWriteIsEmpty(compoundWrite) {\r\n return compoundWrite.writeTree_.isEmpty();\r\n}\r\n/**\r\n * Applies this CompoundWrite to a node. The node is returned with all writes from this CompoundWrite applied to the\r\n * node\r\n * @param node - The node to apply this CompoundWrite to\r\n * @returns The node with all writes applied\r\n */\r\nfunction compoundWriteApply(compoundWrite, node) {\r\n return applySubtreeWrite(newEmptyPath(), compoundWrite.writeTree_, node);\r\n}\r\nfunction applySubtreeWrite(relativePath, writeTree, node) {\r\n if (writeTree.value != null) {\r\n // Since there a write is always a leaf, we're done here\r\n return node.updateChild(relativePath, writeTree.value);\r\n }\r\n else {\r\n let priorityWrite = null;\r\n writeTree.children.inorderTraversal((childKey, childTree) => {\r\n if (childKey === '.priority') {\r\n // Apply priorities at the end so we don't update priorities for either empty nodes or forget\r\n // to apply priorities to empty nodes that are later filled\r\n assert(childTree.value !== null, 'Priority writes must always be leaf nodes');\r\n priorityWrite = childTree.value;\r\n }\r\n else {\r\n node = applySubtreeWrite(pathChild(relativePath, childKey), childTree, node);\r\n }\r\n });\r\n // If there was a priority write, we only apply it if the node is not empty\r\n if (!node.getChild(relativePath).isEmpty() && priorityWrite !== null) {\r\n node = node.updateChild(pathChild(relativePath, '.priority'), priorityWrite);\r\n }\r\n return node;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Create a new WriteTreeRef for the given path. For use with a new sync point at the given path.\r\n *\r\n */\r\nfunction writeTreeChildWrites(writeTree, path) {\r\n return newWriteTreeRef(path, writeTree);\r\n}\r\n/**\r\n * Record a new overwrite from user code.\r\n *\r\n * @param visible - This is set to false by some transactions. It should be excluded from event caches\r\n */\r\nfunction writeTreeAddOverwrite(writeTree, path, snap, writeId, visible) {\r\n assert(writeId > writeTree.lastWriteId, 'Stacking an older write on top of newer ones');\r\n if (visible === undefined) {\r\n visible = true;\r\n }\r\n writeTree.allWrites.push({\r\n path,\r\n snap,\r\n writeId,\r\n visible\r\n });\r\n if (visible) {\r\n writeTree.visibleWrites = compoundWriteAddWrite(writeTree.visibleWrites, path, snap);\r\n }\r\n writeTree.lastWriteId = writeId;\r\n}\r\n/**\r\n * Record a new merge from user code.\r\n */\r\nfunction writeTreeAddMerge(writeTree, path, changedChildren, writeId) {\r\n assert(writeId > writeTree.lastWriteId, 'Stacking an older merge on top of newer ones');\r\n writeTree.allWrites.push({\r\n path,\r\n children: changedChildren,\r\n writeId,\r\n visible: true\r\n });\r\n writeTree.visibleWrites = compoundWriteAddWrites(writeTree.visibleWrites, path, changedChildren);\r\n writeTree.lastWriteId = writeId;\r\n}\r\nfunction writeTreeGetWrite(writeTree, writeId) {\r\n for (let i = 0; i < writeTree.allWrites.length; i++) {\r\n const record = writeTree.allWrites[i];\r\n if (record.writeId === writeId) {\r\n return record;\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Remove a write (either an overwrite or merge) that has been successfully acknowledge by the server. Recalculates\r\n * the tree if necessary. We return true if it may have been visible, meaning views need to reevaluate.\r\n *\r\n * @returns true if the write may have been visible (meaning we'll need to reevaluate / raise\r\n * events as a result).\r\n */\r\nfunction writeTreeRemoveWrite(writeTree, writeId) {\r\n // Note: disabling this check. It could be a transaction that preempted another transaction, and thus was applied\r\n // out of order.\r\n //const validClear = revert || this.allWrites_.length === 0 || writeId <= this.allWrites_[0].writeId;\r\n //assert(validClear, \"Either we don't have this write, or it's the first one in the queue\");\r\n const idx = writeTree.allWrites.findIndex(s => {\r\n return s.writeId === writeId;\r\n });\r\n assert(idx >= 0, 'removeWrite called with nonexistent writeId.');\r\n const writeToRemove = writeTree.allWrites[idx];\r\n writeTree.allWrites.splice(idx, 1);\r\n let removedWriteWasVisible = writeToRemove.visible;\r\n let removedWriteOverlapsWithOtherWrites = false;\r\n let i = writeTree.allWrites.length - 1;\r\n while (removedWriteWasVisible && i >= 0) {\r\n const currentWrite = writeTree.allWrites[i];\r\n if (currentWrite.visible) {\r\n if (i >= idx &&\r\n writeTreeRecordContainsPath_(currentWrite, writeToRemove.path)) {\r\n // The removed write was completely shadowed by a subsequent write.\r\n removedWriteWasVisible = false;\r\n }\r\n else if (pathContains(writeToRemove.path, currentWrite.path)) {\r\n // Either we're covering some writes or they're covering part of us (depending on which came first).\r\n removedWriteOverlapsWithOtherWrites = true;\r\n }\r\n }\r\n i--;\r\n }\r\n if (!removedWriteWasVisible) {\r\n return false;\r\n }\r\n else if (removedWriteOverlapsWithOtherWrites) {\r\n // There's some shadowing going on. Just rebuild the visible writes from scratch.\r\n writeTreeResetTree_(writeTree);\r\n return true;\r\n }\r\n else {\r\n // There's no shadowing. We can safely just remove the write(s) from visibleWrites.\r\n if (writeToRemove.snap) {\r\n writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, writeToRemove.path);\r\n }\r\n else {\r\n const children = writeToRemove.children;\r\n each(children, (childName) => {\r\n writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, pathChild(writeToRemove.path, childName));\r\n });\r\n }\r\n return true;\r\n }\r\n}\r\nfunction writeTreeRecordContainsPath_(writeRecord, path) {\r\n if (writeRecord.snap) {\r\n return pathContains(writeRecord.path, path);\r\n }\r\n else {\r\n for (const childName in writeRecord.children) {\r\n if (writeRecord.children.hasOwnProperty(childName) &&\r\n pathContains(pathChild(writeRecord.path, childName), path)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n/**\r\n * Re-layer the writes and merges into a tree so we can efficiently calculate event snapshots\r\n */\r\nfunction writeTreeResetTree_(writeTree) {\r\n writeTree.visibleWrites = writeTreeLayerTree_(writeTree.allWrites, writeTreeDefaultFilter_, newEmptyPath());\r\n if (writeTree.allWrites.length > 0) {\r\n writeTree.lastWriteId =\r\n writeTree.allWrites[writeTree.allWrites.length - 1].writeId;\r\n }\r\n else {\r\n writeTree.lastWriteId = -1;\r\n }\r\n}\r\n/**\r\n * The default filter used when constructing the tree. Keep everything that's visible.\r\n */\r\nfunction writeTreeDefaultFilter_(write) {\r\n return write.visible;\r\n}\r\n/**\r\n * Static method. Given an array of WriteRecords, a filter for which ones to include, and a path, construct the tree of\r\n * event data at that path.\r\n */\r\nfunction writeTreeLayerTree_(writes, filter, treeRoot) {\r\n let compoundWrite = CompoundWrite.empty();\r\n for (let i = 0; i < writes.length; ++i) {\r\n const write = writes[i];\r\n // Theory, a later set will either:\r\n // a) abort a relevant transaction, so no need to worry about excluding it from calculating that transaction\r\n // b) not be relevant to a transaction (separate branch), so again will not affect the data for that transaction\r\n if (filter(write)) {\r\n const writePath = write.path;\r\n let relativePath;\r\n if (write.snap) {\r\n if (pathContains(treeRoot, writePath)) {\r\n relativePath = newRelativePath(treeRoot, writePath);\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, relativePath, write.snap);\r\n }\r\n else if (pathContains(writePath, treeRoot)) {\r\n relativePath = newRelativePath(writePath, treeRoot);\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), write.snap.getChild(relativePath));\r\n }\r\n else ;\r\n }\r\n else if (write.children) {\r\n if (pathContains(treeRoot, writePath)) {\r\n relativePath = newRelativePath(treeRoot, writePath);\r\n compoundWrite = compoundWriteAddWrites(compoundWrite, relativePath, write.children);\r\n }\r\n else if (pathContains(writePath, treeRoot)) {\r\n relativePath = newRelativePath(writePath, treeRoot);\r\n if (pathIsEmpty(relativePath)) {\r\n compoundWrite = compoundWriteAddWrites(compoundWrite, newEmptyPath(), write.children);\r\n }\r\n else {\r\n const child = safeGet(write.children, pathGetFront(relativePath));\r\n if (child) {\r\n // There exists a child in this node that matches the root path\r\n const deepNode = child.getChild(pathPopFront(relativePath));\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), deepNode);\r\n }\r\n }\r\n }\r\n else ;\r\n }\r\n else {\r\n throw assertionError('WriteRecord should have .snap or .children');\r\n }\r\n }\r\n }\r\n return compoundWrite;\r\n}\r\n/**\r\n * Given optional, underlying server data, and an optional set of constraints (exclude some sets, include hidden\r\n * writes), attempt to calculate a complete snapshot for the given path\r\n *\r\n * @param writeIdsToExclude - An optional set to be excluded\r\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\r\n */\r\nfunction writeTreeCalcCompleteEventCache(writeTree, treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n if (!writeIdsToExclude && !includeHiddenWrites) {\r\n const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\r\n if (shadowingNode != null) {\r\n return shadowingNode;\r\n }\r\n else {\r\n const subMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n if (compoundWriteIsEmpty(subMerge)) {\r\n return completeServerCache;\r\n }\r\n else if (completeServerCache == null &&\r\n !compoundWriteHasCompleteWrite(subMerge, newEmptyPath())) {\r\n // We wouldn't have a complete snapshot, since there's no underlying data and no complete shadow\r\n return null;\r\n }\r\n else {\r\n const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n return compoundWriteApply(subMerge, layeredCache);\r\n }\r\n }\r\n }\r\n else {\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n if (!includeHiddenWrites && compoundWriteIsEmpty(merge)) {\r\n return completeServerCache;\r\n }\r\n else {\r\n // If the server cache is null, and we don't have a complete cache, we need to return null\r\n if (!includeHiddenWrites &&\r\n completeServerCache == null &&\r\n !compoundWriteHasCompleteWrite(merge, newEmptyPath())) {\r\n return null;\r\n }\r\n else {\r\n const filter = function (write) {\r\n return ((write.visible || includeHiddenWrites) &&\r\n (!writeIdsToExclude ||\r\n !~writeIdsToExclude.indexOf(write.writeId)) &&\r\n (pathContains(write.path, treePath) ||\r\n pathContains(treePath, write.path)));\r\n };\r\n const mergeAtPath = writeTreeLayerTree_(writeTree.allWrites, filter, treePath);\r\n const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n return compoundWriteApply(mergeAtPath, layeredCache);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * With optional, underlying server data, attempt to return a children node of children that we have complete data for.\r\n * Used when creating new views, to pre-fill their complete event children snapshot.\r\n */\r\nfunction writeTreeCalcCompleteEventChildren(writeTree, treePath, completeServerChildren) {\r\n let completeChildren = ChildrenNode.EMPTY_NODE;\r\n const topLevelSet = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\r\n if (topLevelSet) {\r\n if (!topLevelSet.isLeafNode()) {\r\n // we're shadowing everything. Return the children.\r\n topLevelSet.forEachChild(PRIORITY_INDEX, (childName, childSnap) => {\r\n completeChildren = completeChildren.updateImmediateChild(childName, childSnap);\r\n });\r\n }\r\n return completeChildren;\r\n }\r\n else if (completeServerChildren) {\r\n // Layer any children we have on top of this\r\n // We know we don't have a top-level set, so just enumerate existing children\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n completeServerChildren.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n const node = compoundWriteApply(compoundWriteChildCompoundWrite(merge, new Path(childName)), childNode);\r\n completeChildren = completeChildren.updateImmediateChild(childName, node);\r\n });\r\n // Add any complete children we have from the set\r\n compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\r\n completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n });\r\n return completeChildren;\r\n }\r\n else {\r\n // We don't have anything to layer on top of. Layer on any children we have\r\n // Note that we can return an empty snap if we have a defined delete\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\r\n completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n });\r\n return completeChildren;\r\n }\r\n}\r\n/**\r\n * Given that the underlying server data has updated, determine what, if anything, needs to be\r\n * applied to the event cache.\r\n *\r\n * Possibilities:\r\n *\r\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n *\r\n * 2. Some write is completely shadowing. No events to be raised\r\n *\r\n * 3. Is partially shadowed. Events\r\n *\r\n * Either existingEventSnap or existingServerSnap must exist\r\n */\r\nfunction writeTreeCalcEventCacheAfterServerOverwrite(writeTree, treePath, childPath, existingEventSnap, existingServerSnap) {\r\n assert(existingEventSnap || existingServerSnap, 'Either existingEventSnap or existingServerSnap must exist');\r\n const path = pathChild(treePath, childPath);\r\n if (compoundWriteHasCompleteWrite(writeTree.visibleWrites, path)) {\r\n // At this point we can probably guarantee that we're in case 2, meaning no events\r\n // May need to check visibility while doing the findRootMostValueAndPath call\r\n return null;\r\n }\r\n else {\r\n // No complete shadowing. We're either partially shadowing or not shadowing at all.\r\n const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\r\n if (compoundWriteIsEmpty(childMerge)) {\r\n // We're not shadowing at all. Case 1\r\n return existingServerSnap.getChild(childPath);\r\n }\r\n else {\r\n // This could be more efficient if the serverNode + updates doesn't change the eventSnap\r\n // However this is tricky to find out, since user updates don't necessary change the server\r\n // snap, e.g. priority updates on empty nodes, or deep deletes. Another special case is if the server\r\n // adds nodes, but doesn't change any existing writes. It is therefore not enough to\r\n // only check if the updates change the serverNode.\r\n // Maybe check if the merge tree contains these special cases and only do a full overwrite in that case?\r\n return compoundWriteApply(childMerge, existingServerSnap.getChild(childPath));\r\n }\r\n }\r\n}\r\n/**\r\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n * complete child for this ChildKey.\r\n */\r\nfunction writeTreeCalcCompleteChild(writeTree, treePath, childKey, existingServerSnap) {\r\n const path = pathChild(treePath, childKey);\r\n const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\r\n if (shadowingNode != null) {\r\n return shadowingNode;\r\n }\r\n else {\r\n if (existingServerSnap.isCompleteForChild(childKey)) {\r\n const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\r\n return compoundWriteApply(childMerge, existingServerSnap.getNode().getImmediateChild(childKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}\r\n/**\r\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n * a higher path, this will return the child of that write relative to the write and this path.\r\n * Returns null if there is no write at this path.\r\n */\r\nfunction writeTreeShadowingWrite(writeTree, path) {\r\n return compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\r\n}\r\n/**\r\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n * the window, but may now be in the window.\r\n */\r\nfunction writeTreeCalcIndexedSlice(writeTree, treePath, completeServerData, startPost, count, reverse, index) {\r\n let toIterate;\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n const shadowingNode = compoundWriteGetCompleteNode(merge, newEmptyPath());\r\n if (shadowingNode != null) {\r\n toIterate = shadowingNode;\r\n }\r\n else if (completeServerData != null) {\r\n toIterate = compoundWriteApply(merge, completeServerData);\r\n }\r\n else {\r\n // no children to iterate on\r\n return [];\r\n }\r\n toIterate = toIterate.withIndex(index);\r\n if (!toIterate.isEmpty() && !toIterate.isLeafNode()) {\r\n const nodes = [];\r\n const cmp = index.getCompare();\r\n const iter = reverse\r\n ? toIterate.getReverseIteratorFrom(startPost, index)\r\n : toIterate.getIteratorFrom(startPost, index);\r\n let next = iter.getNext();\r\n while (next && nodes.length < count) {\r\n if (cmp(next, startPost) !== 0) {\r\n nodes.push(next);\r\n }\r\n next = iter.getNext();\r\n }\r\n return nodes;\r\n }\r\n else {\r\n return [];\r\n }\r\n}\r\nfunction newWriteTree() {\r\n return {\r\n visibleWrites: CompoundWrite.empty(),\r\n allWrites: [],\r\n lastWriteId: -1\r\n };\r\n}\r\n/**\r\n * If possible, returns a complete event cache, using the underlying server data if possible. In addition, can be used\r\n * to get a cache that includes hidden writes, and excludes arbitrary writes. Note that customizing the returned node\r\n * can lead to a more expensive calculation.\r\n *\r\n * @param writeIdsToExclude - Optional writes to exclude.\r\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\r\n */\r\nfunction writeTreeRefCalcCompleteEventCache(writeTreeRef, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n return writeTreeCalcCompleteEventCache(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites);\r\n}\r\n/**\r\n * If possible, returns a children node containing all of the complete children we have data for. The returned data is a\r\n * mix of the given server data and write data.\r\n *\r\n */\r\nfunction writeTreeRefCalcCompleteEventChildren(writeTreeRef, completeServerChildren) {\r\n return writeTreeCalcCompleteEventChildren(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerChildren);\r\n}\r\n/**\r\n * Given that either the underlying server data has updated or the outstanding writes have updated, determine what,\r\n * if anything, needs to be applied to the event cache.\r\n *\r\n * Possibilities:\r\n *\r\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n *\r\n * 2. Some write is completely shadowing. No events to be raised\r\n *\r\n * 3. Is partially shadowed. Events should be raised\r\n *\r\n * Either existingEventSnap or existingServerSnap must exist, this is validated via an assert\r\n *\r\n *\r\n */\r\nfunction writeTreeRefCalcEventCacheAfterServerOverwrite(writeTreeRef, path, existingEventSnap, existingServerSnap) {\r\n return writeTreeCalcEventCacheAfterServerOverwrite(writeTreeRef.writeTree, writeTreeRef.treePath, path, existingEventSnap, existingServerSnap);\r\n}\r\n/**\r\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n * a higher path, this will return the child of that write relative to the write and this path.\r\n * Returns null if there is no write at this path.\r\n *\r\n */\r\nfunction writeTreeRefShadowingWrite(writeTreeRef, path) {\r\n return writeTreeShadowingWrite(writeTreeRef.writeTree, pathChild(writeTreeRef.treePath, path));\r\n}\r\n/**\r\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n * the window, but may now be in the window\r\n */\r\nfunction writeTreeRefCalcIndexedSlice(writeTreeRef, completeServerData, startPost, count, reverse, index) {\r\n return writeTreeCalcIndexedSlice(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerData, startPost, count, reverse, index);\r\n}\r\n/**\r\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n * complete child for this ChildKey.\r\n */\r\nfunction writeTreeRefCalcCompleteChild(writeTreeRef, childKey, existingServerCache) {\r\n return writeTreeCalcCompleteChild(writeTreeRef.writeTree, writeTreeRef.treePath, childKey, existingServerCache);\r\n}\r\n/**\r\n * Return a WriteTreeRef for a child.\r\n */\r\nfunction writeTreeRefChild(writeTreeRef, childName) {\r\n return newWriteTreeRef(pathChild(writeTreeRef.treePath, childName), writeTreeRef.writeTree);\r\n}\r\nfunction newWriteTreeRef(path, writeTree) {\r\n return {\r\n treePath: path,\r\n writeTree\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ChildChangeAccumulator {\r\n constructor() {\r\n this.changeMap = new Map();\r\n }\r\n trackChildChange(change) {\r\n const type = change.type;\r\n const childKey = change.childName;\r\n assert(type === \"child_added\" /* ChangeType.CHILD_ADDED */ ||\r\n type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ ||\r\n type === \"child_removed\" /* ChangeType.CHILD_REMOVED */, 'Only child changes supported for tracking');\r\n assert(childKey !== '.priority', 'Only non-priority child changes can be tracked.');\r\n const oldChange = this.changeMap.get(childKey);\r\n if (oldChange) {\r\n const oldType = oldChange.type;\r\n if (type === \"child_added\" /* ChangeType.CHILD_ADDED */ &&\r\n oldType === \"child_removed\" /* ChangeType.CHILD_REMOVED */) {\r\n this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.snapshotNode));\r\n }\r\n else if (type === \"child_removed\" /* ChangeType.CHILD_REMOVED */ &&\r\n oldType === \"child_added\" /* ChangeType.CHILD_ADDED */) {\r\n this.changeMap.delete(childKey);\r\n }\r\n else if (type === \"child_removed\" /* ChangeType.CHILD_REMOVED */ &&\r\n oldType === \"child_changed\" /* ChangeType.CHILD_CHANGED */) {\r\n this.changeMap.set(childKey, changeChildRemoved(childKey, oldChange.oldSnap));\r\n }\r\n else if (type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n oldType === \"child_added\" /* ChangeType.CHILD_ADDED */) {\r\n this.changeMap.set(childKey, changeChildAdded(childKey, change.snapshotNode));\r\n }\r\n else if (type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n oldType === \"child_changed\" /* ChangeType.CHILD_CHANGED */) {\r\n this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.oldSnap));\r\n }\r\n else {\r\n throw assertionError('Illegal combination of changes: ' +\r\n change +\r\n ' occurred after ' +\r\n oldChange);\r\n }\r\n }\r\n else {\r\n this.changeMap.set(childKey, change);\r\n }\r\n }\r\n getChanges() {\r\n return Array.from(this.changeMap.values());\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of CompleteChildSource that never returns any additional children\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nclass NoCompleteChildSource_ {\r\n getCompleteChild(childKey) {\r\n return null;\r\n }\r\n getChildAfterChild(index, child, reverse) {\r\n return null;\r\n }\r\n}\r\n/**\r\n * Singleton instance.\r\n */\r\nconst NO_COMPLETE_CHILD_SOURCE = new NoCompleteChildSource_();\r\n/**\r\n * An implementation of CompleteChildSource that uses a WriteTree in addition to any other server data or\r\n * old event caches available to calculate complete children.\r\n */\r\nclass WriteTreeCompleteChildSource {\r\n constructor(writes_, viewCache_, optCompleteServerCache_ = null) {\r\n this.writes_ = writes_;\r\n this.viewCache_ = viewCache_;\r\n this.optCompleteServerCache_ = optCompleteServerCache_;\r\n }\r\n getCompleteChild(childKey) {\r\n const node = this.viewCache_.eventCache;\r\n if (node.isCompleteForChild(childKey)) {\r\n return node.getNode().getImmediateChild(childKey);\r\n }\r\n else {\r\n const serverNode = this.optCompleteServerCache_ != null\r\n ? new CacheNode(this.optCompleteServerCache_, true, false)\r\n : this.viewCache_.serverCache;\r\n return writeTreeRefCalcCompleteChild(this.writes_, childKey, serverNode);\r\n }\r\n }\r\n getChildAfterChild(index, child, reverse) {\r\n const completeServerData = this.optCompleteServerCache_ != null\r\n ? this.optCompleteServerCache_\r\n : viewCacheGetCompleteServerSnap(this.viewCache_);\r\n const nodes = writeTreeRefCalcIndexedSlice(this.writes_, completeServerData, child, 1, reverse, index);\r\n if (nodes.length === 0) {\r\n return null;\r\n }\r\n else {\r\n return nodes[0];\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newViewProcessor(filter) {\r\n return { filter };\r\n}\r\nfunction viewProcessorAssertIndexed(viewProcessor, viewCache) {\r\n assert(viewCache.eventCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Event snap not indexed');\r\n assert(viewCache.serverCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Server snap not indexed');\r\n}\r\nfunction viewProcessorApplyOperation(viewProcessor, oldViewCache, operation, writesCache, completeCache) {\r\n const accumulator = new ChildChangeAccumulator();\r\n let newViewCache, filterServerNode;\r\n if (operation.type === OperationType.OVERWRITE) {\r\n const overwrite = operation;\r\n if (overwrite.source.fromUser) {\r\n newViewCache = viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n assert(overwrite.source.fromServer, 'Unknown source.');\r\n // We filter the node if it's a tagged update or the node has been previously filtered and the\r\n // update is not at the root in which case it is ok (and necessary) to mark the node unfiltered\r\n // again\r\n filterServerNode =\r\n overwrite.source.tagged ||\r\n (oldViewCache.serverCache.isFiltered() && !pathIsEmpty(overwrite.path));\r\n newViewCache = viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.MERGE) {\r\n const merge = operation;\r\n if (merge.source.fromUser) {\r\n newViewCache = viewProcessorApplyUserMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n assert(merge.source.fromServer, 'Unknown source.');\r\n // We filter the node if it's a tagged update or the node has been previously filtered\r\n filterServerNode =\r\n merge.source.tagged || oldViewCache.serverCache.isFiltered();\r\n newViewCache = viewProcessorApplyServerMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.ACK_USER_WRITE) {\r\n const ackUserWrite = operation;\r\n if (!ackUserWrite.revert) {\r\n newViewCache = viewProcessorAckUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, ackUserWrite.affectedTree, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n newViewCache = viewProcessorRevertUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, writesCache, completeCache, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.LISTEN_COMPLETE) {\r\n newViewCache = viewProcessorListenComplete(viewProcessor, oldViewCache, operation.path, writesCache, accumulator);\r\n }\r\n else {\r\n throw assertionError('Unknown operation type: ' + operation.type);\r\n }\r\n const changes = accumulator.getChanges();\r\n viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, changes);\r\n return { viewCache: newViewCache, changes };\r\n}\r\nfunction viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, accumulator) {\r\n const eventSnap = newViewCache.eventCache;\r\n if (eventSnap.isFullyInitialized()) {\r\n const isLeafOrEmpty = eventSnap.getNode().isLeafNode() || eventSnap.getNode().isEmpty();\r\n const oldCompleteSnap = viewCacheGetCompleteEventSnap(oldViewCache);\r\n if (accumulator.length > 0 ||\r\n !oldViewCache.eventCache.isFullyInitialized() ||\r\n (isLeafOrEmpty && !eventSnap.getNode().equals(oldCompleteSnap)) ||\r\n !eventSnap.getNode().getPriority().equals(oldCompleteSnap.getPriority())) {\r\n accumulator.push(changeValue(viewCacheGetCompleteEventSnap(newViewCache)));\r\n }\r\n }\r\n}\r\nfunction viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, viewCache, changePath, writesCache, source, accumulator) {\r\n const oldEventSnap = viewCache.eventCache;\r\n if (writeTreeRefShadowingWrite(writesCache, changePath) != null) {\r\n // we have a shadowing write, ignore changes\r\n return viewCache;\r\n }\r\n else {\r\n let newEventCache, serverNode;\r\n if (pathIsEmpty(changePath)) {\r\n // TODO: figure out how this plays with \"sliding ack windows\"\r\n assert(viewCache.serverCache.isFullyInitialized(), 'If change path is empty, we must have complete server data');\r\n if (viewCache.serverCache.isFiltered()) {\r\n // We need to special case this, because we need to only apply writes to complete children, or\r\n // we might end up raising events for incomplete children. If the server data is filtered deep\r\n // writes cannot be guaranteed to be complete\r\n const serverCache = viewCacheGetCompleteServerSnap(viewCache);\r\n const completeChildren = serverCache instanceof ChildrenNode\r\n ? serverCache\r\n : ChildrenNode.EMPTY_NODE;\r\n const completeEventChildren = writeTreeRefCalcCompleteEventChildren(writesCache, completeChildren);\r\n newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeEventChildren, accumulator);\r\n }\r\n else {\r\n const completeNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeNode, accumulator);\r\n }\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (childKey === '.priority') {\r\n assert(pathGetLength(changePath) === 1, \"Can't have a priority with additional path components\");\r\n const oldEventNode = oldEventSnap.getNode();\r\n serverNode = viewCache.serverCache.getNode();\r\n // we might have overwrites for this priority\r\n const updatedPriority = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventNode, serverNode);\r\n if (updatedPriority != null) {\r\n newEventCache = viewProcessor.filter.updatePriority(oldEventNode, updatedPriority);\r\n }\r\n else {\r\n // priority didn't change, keep old node\r\n newEventCache = oldEventSnap.getNode();\r\n }\r\n }\r\n else {\r\n const childChangePath = pathPopFront(changePath);\r\n // update child\r\n let newEventChild;\r\n if (oldEventSnap.isCompleteForChild(childKey)) {\r\n serverNode = viewCache.serverCache.getNode();\r\n const eventChildUpdate = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventSnap.getNode(), serverNode);\r\n if (eventChildUpdate != null) {\r\n newEventChild = oldEventSnap\r\n .getNode()\r\n .getImmediateChild(childKey)\r\n .updateChild(childChangePath, eventChildUpdate);\r\n }\r\n else {\r\n // Nothing changed, just keep the old child\r\n newEventChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n }\r\n }\r\n else {\r\n newEventChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\r\n }\r\n if (newEventChild != null) {\r\n newEventCache = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newEventChild, childChangePath, source, accumulator);\r\n }\r\n else {\r\n // no complete child available or no change\r\n newEventCache = oldEventSnap.getNode();\r\n }\r\n }\r\n }\r\n return viewCacheUpdateEventSnap(viewCache, newEventCache, oldEventSnap.isFullyInitialized() || pathIsEmpty(changePath), viewProcessor.filter.filtersNodes());\r\n }\r\n}\r\nfunction viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, filterServerNode, accumulator) {\r\n const oldServerSnap = oldViewCache.serverCache;\r\n let newServerCache;\r\n const serverFilter = filterServerNode\r\n ? viewProcessor.filter\r\n : viewProcessor.filter.getIndexedFilter();\r\n if (pathIsEmpty(changePath)) {\r\n newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), changedSnap, null);\r\n }\r\n else if (serverFilter.filtersNodes() && !oldServerSnap.isFiltered()) {\r\n // we want to filter the server node, but we didn't filter the server node yet, so simulate a full update\r\n const newServerNode = oldServerSnap\r\n .getNode()\r\n .updateChild(changePath, changedSnap);\r\n newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), newServerNode, null);\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (!oldServerSnap.isCompleteForPath(changePath) &&\r\n pathGetLength(changePath) > 1) {\r\n // We don't update incomplete nodes with updates intended for other listeners\r\n return oldViewCache;\r\n }\r\n const childChangePath = pathPopFront(changePath);\r\n const childNode = oldServerSnap.getNode().getImmediateChild(childKey);\r\n const newChildNode = childNode.updateChild(childChangePath, changedSnap);\r\n if (childKey === '.priority') {\r\n newServerCache = serverFilter.updatePriority(oldServerSnap.getNode(), newChildNode);\r\n }\r\n else {\r\n newServerCache = serverFilter.updateChild(oldServerSnap.getNode(), childKey, newChildNode, childChangePath, NO_COMPLETE_CHILD_SOURCE, null);\r\n }\r\n }\r\n const newViewCache = viewCacheUpdateServerSnap(oldViewCache, newServerCache, oldServerSnap.isFullyInitialized() || pathIsEmpty(changePath), serverFilter.filtersNodes());\r\n const source = new WriteTreeCompleteChildSource(writesCache, newViewCache, completeCache);\r\n return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, changePath, writesCache, source, accumulator);\r\n}\r\nfunction viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, accumulator) {\r\n const oldEventSnap = oldViewCache.eventCache;\r\n let newViewCache, newEventCache;\r\n const source = new WriteTreeCompleteChildSource(writesCache, oldViewCache, completeCache);\r\n if (pathIsEmpty(changePath)) {\r\n newEventCache = viewProcessor.filter.updateFullNode(oldViewCache.eventCache.getNode(), changedSnap, accumulator);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, true, viewProcessor.filter.filtersNodes());\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (childKey === '.priority') {\r\n newEventCache = viewProcessor.filter.updatePriority(oldViewCache.eventCache.getNode(), changedSnap);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, oldEventSnap.isFullyInitialized(), oldEventSnap.isFiltered());\r\n }\r\n else {\r\n const childChangePath = pathPopFront(changePath);\r\n const oldChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n let newChild;\r\n if (pathIsEmpty(childChangePath)) {\r\n // Child overwrite, we can replace the child\r\n newChild = changedSnap;\r\n }\r\n else {\r\n const childNode = source.getCompleteChild(childKey);\r\n if (childNode != null) {\r\n if (pathGetBack(childChangePath) === '.priority' &&\r\n childNode.getChild(pathParent(childChangePath)).isEmpty()) {\r\n // This is a priority update on an empty node. If this node exists on the server, the\r\n // server will send down the priority in the update, so ignore for now\r\n newChild = childNode;\r\n }\r\n else {\r\n newChild = childNode.updateChild(childChangePath, changedSnap);\r\n }\r\n }\r\n else {\r\n // There is no complete child node available\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n }\r\n if (!oldChild.equals(newChild)) {\r\n const newEventSnap = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newChild, childChangePath, source, accumulator);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventSnap, oldEventSnap.isFullyInitialized(), viewProcessor.filter.filtersNodes());\r\n }\r\n else {\r\n newViewCache = oldViewCache;\r\n }\r\n }\r\n }\r\n return newViewCache;\r\n}\r\nfunction viewProcessorCacheHasChild(viewCache, childKey) {\r\n return viewCache.eventCache.isCompleteForChild(childKey);\r\n}\r\nfunction viewProcessorApplyUserMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, accumulator) {\r\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n // window leaving room for new items. It's important we process these changes first, so we\r\n // iterate the changes twice, first processing any that affect items currently in view.\r\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\r\n // not the other.\r\n let curViewCache = viewCache;\r\n changedChildren.foreach((relativePath, childNode) => {\r\n const writePath = pathChild(path, relativePath);\r\n if (viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\r\n curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n }\r\n });\r\n changedChildren.foreach((relativePath, childNode) => {\r\n const writePath = pathChild(path, relativePath);\r\n if (!viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\r\n curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n }\r\n });\r\n return curViewCache;\r\n}\r\nfunction viewProcessorApplyMerge(viewProcessor, node, merge) {\r\n merge.foreach((relativePath, childNode) => {\r\n node = node.updateChild(relativePath, childNode);\r\n });\r\n return node;\r\n}\r\nfunction viewProcessorApplyServerMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, filterServerNode, accumulator) {\r\n // If we don't have a cache yet, this merge was intended for a previously listen in the same location. Ignore it and\r\n // wait for the complete data update coming soon.\r\n if (viewCache.serverCache.getNode().isEmpty() &&\r\n !viewCache.serverCache.isFullyInitialized()) {\r\n return viewCache;\r\n }\r\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n // window leaving room for new items. It's important we process these changes first, so we\r\n // iterate the changes twice, first processing any that affect items currently in view.\r\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\r\n // not the other.\r\n let curViewCache = viewCache;\r\n let viewMergeTree;\r\n if (pathIsEmpty(path)) {\r\n viewMergeTree = changedChildren;\r\n }\r\n else {\r\n viewMergeTree = new ImmutableTree(null).setTree(path, changedChildren);\r\n }\r\n const serverNode = viewCache.serverCache.getNode();\r\n viewMergeTree.children.inorderTraversal((childKey, childTree) => {\r\n if (serverNode.hasChild(childKey)) {\r\n const serverChild = viewCache.serverCache\r\n .getNode()\r\n .getImmediateChild(childKey);\r\n const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childTree);\r\n curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n }\r\n });\r\n viewMergeTree.children.inorderTraversal((childKey, childMergeTree) => {\r\n const isUnknownDeepMerge = !viewCache.serverCache.isCompleteForChild(childKey) &&\r\n childMergeTree.value === null;\r\n if (!serverNode.hasChild(childKey) && !isUnknownDeepMerge) {\r\n const serverChild = viewCache.serverCache\r\n .getNode()\r\n .getImmediateChild(childKey);\r\n const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childMergeTree);\r\n curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n }\r\n });\r\n return curViewCache;\r\n}\r\nfunction viewProcessorAckUserWrite(viewProcessor, viewCache, ackPath, affectedTree, writesCache, completeCache, accumulator) {\r\n if (writeTreeRefShadowingWrite(writesCache, ackPath) != null) {\r\n return viewCache;\r\n }\r\n // Only filter server node if it is currently filtered\r\n const filterServerNode = viewCache.serverCache.isFiltered();\r\n // Essentially we'll just get our existing server cache for the affected paths and re-apply it as a server update\r\n // now that it won't be shadowed.\r\n const serverCache = viewCache.serverCache;\r\n if (affectedTree.value != null) {\r\n // This is an overwrite.\r\n if ((pathIsEmpty(ackPath) && serverCache.isFullyInitialized()) ||\r\n serverCache.isCompleteForPath(ackPath)) {\r\n return viewProcessorApplyServerOverwrite(viewProcessor, viewCache, ackPath, serverCache.getNode().getChild(ackPath), writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n else if (pathIsEmpty(ackPath)) {\r\n // This is a goofy edge case where we are acking data at this location but don't have full data. We\r\n // should just re-apply whatever we have in our cache as a merge.\r\n let changedChildren = new ImmutableTree(null);\r\n serverCache.getNode().forEachChild(KEY_INDEX, (name, node) => {\r\n changedChildren = changedChildren.set(new Path(name), node);\r\n });\r\n return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n else {\r\n return viewCache;\r\n }\r\n }\r\n else {\r\n // This is a merge.\r\n let changedChildren = new ImmutableTree(null);\r\n affectedTree.foreach((mergePath, value) => {\r\n const serverCachePath = pathChild(ackPath, mergePath);\r\n if (serverCache.isCompleteForPath(serverCachePath)) {\r\n changedChildren = changedChildren.set(mergePath, serverCache.getNode().getChild(serverCachePath));\r\n }\r\n });\r\n return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n}\r\nfunction viewProcessorListenComplete(viewProcessor, viewCache, path, writesCache, accumulator) {\r\n const oldServerNode = viewCache.serverCache;\r\n const newViewCache = viewCacheUpdateServerSnap(viewCache, oldServerNode.getNode(), oldServerNode.isFullyInitialized() || pathIsEmpty(path), oldServerNode.isFiltered());\r\n return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, path, writesCache, NO_COMPLETE_CHILD_SOURCE, accumulator);\r\n}\r\nfunction viewProcessorRevertUserWrite(viewProcessor, viewCache, path, writesCache, completeServerCache, accumulator) {\r\n let complete;\r\n if (writeTreeRefShadowingWrite(writesCache, path) != null) {\r\n return viewCache;\r\n }\r\n else {\r\n const source = new WriteTreeCompleteChildSource(writesCache, viewCache, completeServerCache);\r\n const oldEventCache = viewCache.eventCache.getNode();\r\n let newEventCache;\r\n if (pathIsEmpty(path) || pathGetFront(path) === '.priority') {\r\n let newNode;\r\n if (viewCache.serverCache.isFullyInitialized()) {\r\n newNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n }\r\n else {\r\n const serverChildren = viewCache.serverCache.getNode();\r\n assert(serverChildren instanceof ChildrenNode, 'serverChildren would be complete if leaf node');\r\n newNode = writeTreeRefCalcCompleteEventChildren(writesCache, serverChildren);\r\n }\r\n newNode = newNode;\r\n newEventCache = viewProcessor.filter.updateFullNode(oldEventCache, newNode, accumulator);\r\n }\r\n else {\r\n const childKey = pathGetFront(path);\r\n let newChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\r\n if (newChild == null &&\r\n viewCache.serverCache.isCompleteForChild(childKey)) {\r\n newChild = oldEventCache.getImmediateChild(childKey);\r\n }\r\n if (newChild != null) {\r\n newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, newChild, pathPopFront(path), source, accumulator);\r\n }\r\n else if (viewCache.eventCache.getNode().hasChild(childKey)) {\r\n // No complete child available, delete the existing one, if any\r\n newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, ChildrenNode.EMPTY_NODE, pathPopFront(path), source, accumulator);\r\n }\r\n else {\r\n newEventCache = oldEventCache;\r\n }\r\n if (newEventCache.isEmpty() &&\r\n viewCache.serverCache.isFullyInitialized()) {\r\n // We might have reverted all child writes. Maybe the old event was a leaf node\r\n complete = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n if (complete.isLeafNode()) {\r\n newEventCache = viewProcessor.filter.updateFullNode(newEventCache, complete, accumulator);\r\n }\r\n }\r\n }\r\n complete =\r\n viewCache.serverCache.isFullyInitialized() ||\r\n writeTreeRefShadowingWrite(writesCache, newEmptyPath()) != null;\r\n return viewCacheUpdateEventSnap(viewCache, newEventCache, complete, viewProcessor.filter.filtersNodes());\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A view represents a specific location and query that has 1 or more event registrations.\r\n *\r\n * It does several things:\r\n * - Maintains the list of event registrations for this location/query.\r\n * - Maintains a cache of the data visible for this location/query.\r\n * - Applies new operations (via applyOperation), updates the cache, and based on the event\r\n * registrations returns the set of events to be raised.\r\n */\r\nclass View {\r\n constructor(query_, initialViewCache) {\r\n this.query_ = query_;\r\n this.eventRegistrations_ = [];\r\n const params = this.query_._queryParams;\r\n const indexFilter = new IndexedFilter(params.getIndex());\r\n const filter = queryParamsGetNodeFilter(params);\r\n this.processor_ = newViewProcessor(filter);\r\n const initialServerCache = initialViewCache.serverCache;\r\n const initialEventCache = initialViewCache.eventCache;\r\n // Don't filter server node with other filter than index, wait for tagged listen\r\n const serverSnap = indexFilter.updateFullNode(ChildrenNode.EMPTY_NODE, initialServerCache.getNode(), null);\r\n const eventSnap = filter.updateFullNode(ChildrenNode.EMPTY_NODE, initialEventCache.getNode(), null);\r\n const newServerCache = new CacheNode(serverSnap, initialServerCache.isFullyInitialized(), indexFilter.filtersNodes());\r\n const newEventCache = new CacheNode(eventSnap, initialEventCache.isFullyInitialized(), filter.filtersNodes());\r\n this.viewCache_ = newViewCache(newEventCache, newServerCache);\r\n this.eventGenerator_ = new EventGenerator(this.query_);\r\n }\r\n get query() {\r\n return this.query_;\r\n }\r\n}\r\nfunction viewGetServerCache(view) {\r\n return view.viewCache_.serverCache.getNode();\r\n}\r\nfunction viewGetCompleteNode(view) {\r\n return viewCacheGetCompleteEventSnap(view.viewCache_);\r\n}\r\nfunction viewGetCompleteServerCache(view, path) {\r\n const cache = viewCacheGetCompleteServerSnap(view.viewCache_);\r\n if (cache) {\r\n // If this isn't a \"loadsAllData\" view, then cache isn't actually a complete cache and\r\n // we need to see if it contains the child we're interested in.\r\n if (view.query._queryParams.loadsAllData() ||\r\n (!pathIsEmpty(path) &&\r\n !cache.getImmediateChild(pathGetFront(path)).isEmpty())) {\r\n return cache.getChild(path);\r\n }\r\n }\r\n return null;\r\n}\r\nfunction viewIsEmpty(view) {\r\n return view.eventRegistrations_.length === 0;\r\n}\r\nfunction viewAddEventRegistration(view, eventRegistration) {\r\n view.eventRegistrations_.push(eventRegistration);\r\n}\r\n/**\r\n * @param eventRegistration - If null, remove all callbacks.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @returns Cancel events, if cancelError was provided.\r\n */\r\nfunction viewRemoveEventRegistration(view, eventRegistration, cancelError) {\r\n const cancelEvents = [];\r\n if (cancelError) {\r\n assert(eventRegistration == null, 'A cancel should cancel all event registrations.');\r\n const path = view.query._path;\r\n view.eventRegistrations_.forEach(registration => {\r\n const maybeEvent = registration.createCancelEvent(cancelError, path);\r\n if (maybeEvent) {\r\n cancelEvents.push(maybeEvent);\r\n }\r\n });\r\n }\r\n if (eventRegistration) {\r\n let remaining = [];\r\n for (let i = 0; i < view.eventRegistrations_.length; ++i) {\r\n const existing = view.eventRegistrations_[i];\r\n if (!existing.matches(eventRegistration)) {\r\n remaining.push(existing);\r\n }\r\n else if (eventRegistration.hasAnyCallback()) {\r\n // We're removing just this one\r\n remaining = remaining.concat(view.eventRegistrations_.slice(i + 1));\r\n break;\r\n }\r\n }\r\n view.eventRegistrations_ = remaining;\r\n }\r\n else {\r\n view.eventRegistrations_ = [];\r\n }\r\n return cancelEvents;\r\n}\r\n/**\r\n * Applies the given Operation, updates our cache, and returns the appropriate events.\r\n */\r\nfunction viewApplyOperation(view, operation, writesCache, completeServerCache) {\r\n if (operation.type === OperationType.MERGE &&\r\n operation.source.queryId !== null) {\r\n assert(viewCacheGetCompleteServerSnap(view.viewCache_), 'We should always have a full cache before handling merges');\r\n assert(viewCacheGetCompleteEventSnap(view.viewCache_), 'Missing event cache, even though we have a server cache');\r\n }\r\n const oldViewCache = view.viewCache_;\r\n const result = viewProcessorApplyOperation(view.processor_, oldViewCache, operation, writesCache, completeServerCache);\r\n viewProcessorAssertIndexed(view.processor_, result.viewCache);\r\n assert(result.viewCache.serverCache.isFullyInitialized() ||\r\n !oldViewCache.serverCache.isFullyInitialized(), 'Once a server snap is complete, it should never go back');\r\n view.viewCache_ = result.viewCache;\r\n return viewGenerateEventsForChanges_(view, result.changes, result.viewCache.eventCache.getNode(), null);\r\n}\r\nfunction viewGetInitialEvents(view, registration) {\r\n const eventSnap = view.viewCache_.eventCache;\r\n const initialChanges = [];\r\n if (!eventSnap.getNode().isLeafNode()) {\r\n const eventNode = eventSnap.getNode();\r\n eventNode.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n initialChanges.push(changeChildAdded(key, childNode));\r\n });\r\n }\r\n if (eventSnap.isFullyInitialized()) {\r\n initialChanges.push(changeValue(eventSnap.getNode()));\r\n }\r\n return viewGenerateEventsForChanges_(view, initialChanges, eventSnap.getNode(), registration);\r\n}\r\nfunction viewGenerateEventsForChanges_(view, changes, eventCache, eventRegistration) {\r\n const registrations = eventRegistration\r\n ? [eventRegistration]\r\n : view.eventRegistrations_;\r\n return eventGeneratorGenerateEventsForChanges(view.eventGenerator_, changes, eventCache, registrations);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet referenceConstructor$1;\r\n/**\r\n * SyncPoint represents a single location in a SyncTree with 1 or more event registrations, meaning we need to\r\n * maintain 1 or more Views at this location to cache server data and raise appropriate events for server changes\r\n * and user writes (set, transaction, update).\r\n *\r\n * It's responsible for:\r\n * - Maintaining the set of 1 or more views necessary at this location (a SyncPoint with 0 views should be removed).\r\n * - Proxying user / server operations to the views as appropriate (i.e. applyServerOverwrite,\r\n * applyUserOverwrite, etc.)\r\n */\r\nclass SyncPoint {\r\n constructor() {\r\n /**\r\n * The Views being tracked at this location in the tree, stored as a map where the key is a\r\n * queryId and the value is the View for that query.\r\n *\r\n * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more is an odd use case).\r\n */\r\n this.views = new Map();\r\n }\r\n}\r\nfunction syncPointSetReferenceConstructor(val) {\r\n assert(!referenceConstructor$1, '__referenceConstructor has already been defined');\r\n referenceConstructor$1 = val;\r\n}\r\nfunction syncPointGetReferenceConstructor() {\r\n assert(referenceConstructor$1, 'Reference.ts has not been loaded');\r\n return referenceConstructor$1;\r\n}\r\nfunction syncPointIsEmpty(syncPoint) {\r\n return syncPoint.views.size === 0;\r\n}\r\nfunction syncPointApplyOperation(syncPoint, operation, writesCache, optCompleteServerCache) {\r\n const queryId = operation.source.queryId;\r\n if (queryId !== null) {\r\n const view = syncPoint.views.get(queryId);\r\n assert(view != null, 'SyncTree gave us an op for an invalid query.');\r\n return viewApplyOperation(view, operation, writesCache, optCompleteServerCache);\r\n }\r\n else {\r\n let events = [];\r\n for (const view of syncPoint.views.values()) {\r\n events = events.concat(viewApplyOperation(view, operation, writesCache, optCompleteServerCache));\r\n }\r\n return events;\r\n }\r\n}\r\n/**\r\n * Get a view for the specified query.\r\n *\r\n * @param query - The query to return a view for\r\n * @param writesCache\r\n * @param serverCache\r\n * @param serverCacheComplete\r\n * @returns Events to raise.\r\n */\r\nfunction syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete) {\r\n const queryId = query._queryIdentifier;\r\n const view = syncPoint.views.get(queryId);\r\n if (!view) {\r\n // TODO: make writesCache take flag for complete server node\r\n let eventCache = writeTreeRefCalcCompleteEventCache(writesCache, serverCacheComplete ? serverCache : null);\r\n let eventCacheComplete = false;\r\n if (eventCache) {\r\n eventCacheComplete = true;\r\n }\r\n else if (serverCache instanceof ChildrenNode) {\r\n eventCache = writeTreeRefCalcCompleteEventChildren(writesCache, serverCache);\r\n eventCacheComplete = false;\r\n }\r\n else {\r\n eventCache = ChildrenNode.EMPTY_NODE;\r\n eventCacheComplete = false;\r\n }\r\n const viewCache = newViewCache(new CacheNode(eventCache, eventCacheComplete, false), new CacheNode(serverCache, serverCacheComplete, false));\r\n return new View(query, viewCache);\r\n }\r\n return view;\r\n}\r\n/**\r\n * Add an event callback for the specified query.\r\n *\r\n * @param query\r\n * @param eventRegistration\r\n * @param writesCache\r\n * @param serverCache - Complete server cache, if we have it.\r\n * @param serverCacheComplete\r\n * @returns Events to raise.\r\n */\r\nfunction syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete) {\r\n const view = syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete);\r\n if (!syncPoint.views.has(query._queryIdentifier)) {\r\n syncPoint.views.set(query._queryIdentifier, view);\r\n }\r\n // This is guaranteed to exist now, we just created anything that was missing\r\n viewAddEventRegistration(view, eventRegistration);\r\n return viewGetInitialEvents(view, eventRegistration);\r\n}\r\n/**\r\n * Remove event callback(s). Return cancelEvents if a cancelError is specified.\r\n *\r\n * If query is the default query, we'll check all views for the specified eventRegistration.\r\n * If eventRegistration is null, we'll remove all callbacks for the specified view(s).\r\n *\r\n * @param eventRegistration - If null, remove all callbacks.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @returns removed queries and any cancel events\r\n */\r\nfunction syncPointRemoveEventRegistration(syncPoint, query, eventRegistration, cancelError) {\r\n const queryId = query._queryIdentifier;\r\n const removed = [];\r\n let cancelEvents = [];\r\n const hadCompleteView = syncPointHasCompleteView(syncPoint);\r\n if (queryId === 'default') {\r\n // When you do ref.off(...), we search all views for the registration to remove.\r\n for (const [viewQueryId, view] of syncPoint.views.entries()) {\r\n cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\r\n if (viewIsEmpty(view)) {\r\n syncPoint.views.delete(viewQueryId);\r\n // We'll deal with complete views later.\r\n if (!view.query._queryParams.loadsAllData()) {\r\n removed.push(view.query);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // remove the callback from the specific view.\r\n const view = syncPoint.views.get(queryId);\r\n if (view) {\r\n cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\r\n if (viewIsEmpty(view)) {\r\n syncPoint.views.delete(queryId);\r\n // We'll deal with complete views later.\r\n if (!view.query._queryParams.loadsAllData()) {\r\n removed.push(view.query);\r\n }\r\n }\r\n }\r\n }\r\n if (hadCompleteView && !syncPointHasCompleteView(syncPoint)) {\r\n // We removed our last complete view.\r\n removed.push(new (syncPointGetReferenceConstructor())(query._repo, query._path));\r\n }\r\n return { removed, events: cancelEvents };\r\n}\r\nfunction syncPointGetQueryViews(syncPoint) {\r\n const result = [];\r\n for (const view of syncPoint.views.values()) {\r\n if (!view.query._queryParams.loadsAllData()) {\r\n result.push(view);\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * @param path - The path to the desired complete snapshot\r\n * @returns A complete cache, if it exists\r\n */\r\nfunction syncPointGetCompleteServerCache(syncPoint, path) {\r\n let serverCache = null;\r\n for (const view of syncPoint.views.values()) {\r\n serverCache = serverCache || viewGetCompleteServerCache(view, path);\r\n }\r\n return serverCache;\r\n}\r\nfunction syncPointViewForQuery(syncPoint, query) {\r\n const params = query._queryParams;\r\n if (params.loadsAllData()) {\r\n return syncPointGetCompleteView(syncPoint);\r\n }\r\n else {\r\n const queryId = query._queryIdentifier;\r\n return syncPoint.views.get(queryId);\r\n }\r\n}\r\nfunction syncPointViewExistsForQuery(syncPoint, query) {\r\n return syncPointViewForQuery(syncPoint, query) != null;\r\n}\r\nfunction syncPointHasCompleteView(syncPoint) {\r\n return syncPointGetCompleteView(syncPoint) != null;\r\n}\r\nfunction syncPointGetCompleteView(syncPoint) {\r\n for (const view of syncPoint.views.values()) {\r\n if (view.query._queryParams.loadsAllData()) {\r\n return view;\r\n }\r\n }\r\n return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet referenceConstructor;\r\nfunction syncTreeSetReferenceConstructor(val) {\r\n assert(!referenceConstructor, '__referenceConstructor has already been defined');\r\n referenceConstructor = val;\r\n}\r\nfunction syncTreeGetReferenceConstructor() {\r\n assert(referenceConstructor, 'Reference.ts has not been loaded');\r\n return referenceConstructor;\r\n}\r\n/**\r\n * Static tracker for next query tag.\r\n */\r\nlet syncTreeNextQueryTag_ = 1;\r\n/**\r\n * SyncTree is the central class for managing event callback registration, data caching, views\r\n * (query processing), and event generation. There are typically two SyncTree instances for\r\n * each Repo, one for the normal Firebase data, and one for the .info data.\r\n *\r\n * It has a number of responsibilities, including:\r\n * - Tracking all user event callbacks (registered via addEventRegistration() and removeEventRegistration()).\r\n * - Applying and caching data changes for user set(), transaction(), and update() calls\r\n * (applyUserOverwrite(), applyUserMerge()).\r\n * - Applying and caching data changes for server data changes (applyServerOverwrite(),\r\n * applyServerMerge()).\r\n * - Generating user-facing events for server and user changes (all of the apply* methods\r\n * return the set of events that need to be raised as a result).\r\n * - Maintaining the appropriate set of server listens to ensure we are always subscribed\r\n * to the correct set of paths and queries to satisfy the current set of user event\r\n * callbacks (listens are started/stopped using the provided listenProvider).\r\n *\r\n * NOTE: Although SyncTree tracks event callbacks and calculates events to raise, the actual\r\n * events are returned to the caller rather than raised synchronously.\r\n *\r\n */\r\nclass SyncTree {\r\n /**\r\n * @param listenProvider_ - Used by SyncTree to start / stop listening\r\n * to server data.\r\n */\r\n constructor(listenProvider_) {\r\n this.listenProvider_ = listenProvider_;\r\n /**\r\n * Tree of SyncPoints. There's a SyncPoint at any location that has 1 or more views.\r\n */\r\n this.syncPointTree_ = new ImmutableTree(null);\r\n /**\r\n * A tree of all pending user writes (user-initiated set()'s, transaction()'s, update()'s, etc.).\r\n */\r\n this.pendingWriteTree_ = newWriteTree();\r\n this.tagToQueryMap = new Map();\r\n this.queryToTagMap = new Map();\r\n }\r\n}\r\n/**\r\n * Apply the data changes for a user-generated set() or transaction() call.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyUserOverwrite(syncTree, path, newData, writeId, visible) {\r\n // Record pending write.\r\n writeTreeAddOverwrite(syncTree.pendingWriteTree_, path, newData, writeId, visible);\r\n if (!visible) {\r\n return [];\r\n }\r\n else {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceUser(), path, newData));\r\n }\r\n}\r\n/**\r\n * Apply the data from a user-generated update() call\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyUserMerge(syncTree, path, changedChildren, writeId) {\r\n // Record pending merge.\r\n writeTreeAddMerge(syncTree.pendingWriteTree_, path, changedChildren, writeId);\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceUser(), path, changeTree));\r\n}\r\n/**\r\n * Acknowledge a pending user write that was previously registered with applyUserOverwrite() or applyUserMerge().\r\n *\r\n * @param revert - True if the given write failed and needs to be reverted\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeAckUserWrite(syncTree, writeId, revert = false) {\r\n const write = writeTreeGetWrite(syncTree.pendingWriteTree_, writeId);\r\n const needToReevaluate = writeTreeRemoveWrite(syncTree.pendingWriteTree_, writeId);\r\n if (!needToReevaluate) {\r\n return [];\r\n }\r\n else {\r\n let affectedTree = new ImmutableTree(null);\r\n if (write.snap != null) {\r\n // overwrite\r\n affectedTree = affectedTree.set(newEmptyPath(), true);\r\n }\r\n else {\r\n each(write.children, (pathString) => {\r\n affectedTree = affectedTree.set(new Path(pathString), true);\r\n });\r\n }\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new AckUserWrite(write.path, affectedTree, revert));\r\n }\r\n}\r\n/**\r\n * Apply new server data for the specified path..\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyServerOverwrite(syncTree, path, newData) {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceServer(), path, newData));\r\n}\r\n/**\r\n * Apply new server data to be merged in at the specified path.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyServerMerge(syncTree, path, changedChildren) {\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceServer(), path, changeTree));\r\n}\r\n/**\r\n * Apply a listen complete for a query\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyListenComplete(syncTree, path) {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new ListenComplete(newOperationSourceServer(), path));\r\n}\r\n/**\r\n * Apply a listen complete for a tagged query\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedListenComplete(syncTree, path, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const op = new ListenComplete(newOperationSourceServerTaggedQuery(queryId), relativePath);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // We've already removed the query. No big deal, ignore the update\r\n return [];\r\n }\r\n}\r\n/**\r\n * Remove event callback(s).\r\n *\r\n * If query is the default query, we'll check all queries for the specified eventRegistration.\r\n * If eventRegistration is null, we'll remove all callbacks for the specified query/queries.\r\n *\r\n * @param eventRegistration - If null, all callbacks are removed.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @param skipListenerDedup - When performing a `get()`, we don't add any new listeners, so no\r\n * deduping needs to take place. This flag allows toggling of that behavior\r\n * @returns Cancel events, if cancelError was provided.\r\n */\r\nfunction syncTreeRemoveEventRegistration(syncTree, query, eventRegistration, cancelError, skipListenerDedup = false) {\r\n // Find the syncPoint first. Then deal with whether or not it has matching listeners\r\n const path = query._path;\r\n const maybeSyncPoint = syncTree.syncPointTree_.get(path);\r\n let cancelEvents = [];\r\n // A removal on a default query affects all queries at that location. A removal on an indexed query, even one without\r\n // other query constraints, does *not* affect all queries at that location. So this check must be for 'default', and\r\n // not loadsAllData().\r\n if (maybeSyncPoint &&\r\n (query._queryIdentifier === 'default' ||\r\n syncPointViewExistsForQuery(maybeSyncPoint, query))) {\r\n const removedAndEvents = syncPointRemoveEventRegistration(maybeSyncPoint, query, eventRegistration, cancelError);\r\n if (syncPointIsEmpty(maybeSyncPoint)) {\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.remove(path);\r\n }\r\n const removed = removedAndEvents.removed;\r\n cancelEvents = removedAndEvents.events;\r\n if (!skipListenerDedup) {\r\n /**\r\n * We may have just removed one of many listeners and can short-circuit this whole process\r\n * We may also not have removed a default listener, in which case all of the descendant listeners should already be\r\n * properly set up.\r\n */\r\n // Since indexed queries can shadow if they don't have other query constraints, check for loadsAllData(), instead of\r\n // queryId === 'default'\r\n const removingDefault = -1 !==\r\n removed.findIndex(query => {\r\n return query._queryParams.loadsAllData();\r\n });\r\n const covered = syncTree.syncPointTree_.findOnPath(path, (relativePath, parentSyncPoint) => syncPointHasCompleteView(parentSyncPoint));\r\n if (removingDefault && !covered) {\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n // There are potentially child listeners. Determine what if any listens we need to send before executing the\r\n // removal\r\n if (!subtree.isEmpty()) {\r\n // We need to fold over our subtree and collect the listeners to send\r\n const newViews = syncTreeCollectDistinctViewsForSubTree_(subtree);\r\n // Ok, we've collected all the listens we need. Set them up.\r\n for (let i = 0; i < newViews.length; ++i) {\r\n const view = newViews[i], newQuery = view.query;\r\n const listener = syncTreeCreateListenerForView_(syncTree, view);\r\n syncTree.listenProvider_.startListening(syncTreeQueryForListening_(newQuery), syncTreeTagForQuery(syncTree, newQuery), listener.hashFn, listener.onComplete);\r\n }\r\n }\r\n // Otherwise there's nothing below us, so nothing we need to start listening on\r\n }\r\n // If we removed anything and we're not covered by a higher up listen, we need to stop listening on this query\r\n // The above block has us covered in terms of making sure we're set up on listens lower in the tree.\r\n // Also, note that if we have a cancelError, it's already been removed at the provider level.\r\n if (!covered && removed.length > 0 && !cancelError) {\r\n // If we removed a default, then we weren't listening on any of the other queries here. Just cancel the one\r\n // default. Otherwise, we need to iterate through and cancel each individual query\r\n if (removingDefault) {\r\n // We don't tag default listeners\r\n const defaultTag = null;\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(query), defaultTag);\r\n }\r\n else {\r\n removed.forEach((queryToRemove) => {\r\n const tagToRemove = syncTree.queryToTagMap.get(syncTreeMakeQueryKey_(queryToRemove));\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToRemove), tagToRemove);\r\n });\r\n }\r\n }\r\n }\r\n // Now, clear all of the tags we're tracking for the removed listens\r\n syncTreeRemoveTags_(syncTree, removed);\r\n }\r\n return cancelEvents;\r\n}\r\n/**\r\n * Apply new server data for the specified tagged query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedQueryOverwrite(syncTree, path, snap, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey != null) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const op = new Overwrite(newOperationSourceServerTaggedQuery(queryId), relativePath, snap);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // Query must have been removed already\r\n return [];\r\n }\r\n}\r\n/**\r\n * Apply server data to be merged in for the specified tagged query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedQueryMerge(syncTree, path, changedChildren, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n const op = new Merge(newOperationSourceServerTaggedQuery(queryId), relativePath, changeTree);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // We've already removed the query. No big deal, ignore the update\r\n return [];\r\n }\r\n}\r\n/**\r\n * Add an event callback for the specified query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeAddEventRegistration(syncTree, query, eventRegistration, skipSetupListener = false) {\r\n const path = query._path;\r\n let serverCache = null;\r\n let foundAncestorDefaultView = false;\r\n // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\r\n const relativePath = newRelativePath(pathToSyncPoint, path);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(sp, relativePath);\r\n foundAncestorDefaultView =\r\n foundAncestorDefaultView || syncPointHasCompleteView(sp);\r\n });\r\n let syncPoint = syncTree.syncPointTree_.get(path);\r\n if (!syncPoint) {\r\n syncPoint = new SyncPoint();\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\r\n }\r\n else {\r\n foundAncestorDefaultView =\r\n foundAncestorDefaultView || syncPointHasCompleteView(syncPoint);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let serverCacheComplete;\r\n if (serverCache != null) {\r\n serverCacheComplete = true;\r\n }\r\n else {\r\n serverCacheComplete = false;\r\n serverCache = ChildrenNode.EMPTY_NODE;\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n subtree.foreachChild((childName, childSyncPoint) => {\r\n const completeCache = syncPointGetCompleteServerCache(childSyncPoint, newEmptyPath());\r\n if (completeCache) {\r\n serverCache = serverCache.updateImmediateChild(childName, completeCache);\r\n }\r\n });\r\n }\r\n const viewAlreadyExists = syncPointViewExistsForQuery(syncPoint, query);\r\n if (!viewAlreadyExists && !query._queryParams.loadsAllData()) {\r\n // We need to track a tag for this query\r\n const queryKey = syncTreeMakeQueryKey_(query);\r\n assert(!syncTree.queryToTagMap.has(queryKey), 'View does not exist, but we have a tag');\r\n const tag = syncTreeGetNextQueryTag_();\r\n syncTree.queryToTagMap.set(queryKey, tag);\r\n syncTree.tagToQueryMap.set(tag, queryKey);\r\n }\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, path);\r\n let events = syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete);\r\n if (!viewAlreadyExists && !foundAncestorDefaultView && !skipSetupListener) {\r\n const view = syncPointViewForQuery(syncPoint, query);\r\n events = events.concat(syncTreeSetupListener_(syncTree, query, view));\r\n }\r\n return events;\r\n}\r\n/**\r\n * Returns a complete cache, if we have one, of the data at a particular path. If the location does not have a\r\n * listener above it, we will get a false \"null\". This shouldn't be a problem because transactions will always\r\n * have a listener above, and atomic operations would correctly show a jitter of ->\r\n * as the write is applied locally and then acknowledged at the server.\r\n *\r\n * Note: this method will *include* hidden writes from transaction with applyLocally set to false.\r\n *\r\n * @param path - The path to the data we want\r\n * @param writeIdsToExclude - A specific set to be excluded\r\n */\r\nfunction syncTreeCalcCompleteEventCache(syncTree, path, writeIdsToExclude) {\r\n const includeHiddenSets = true;\r\n const writeTree = syncTree.pendingWriteTree_;\r\n const serverCache = syncTree.syncPointTree_.findOnPath(path, (pathSoFar, syncPoint) => {\r\n const relativePath = newRelativePath(pathSoFar, path);\r\n const serverCache = syncPointGetCompleteServerCache(syncPoint, relativePath);\r\n if (serverCache) {\r\n return serverCache;\r\n }\r\n });\r\n return writeTreeCalcCompleteEventCache(writeTree, path, serverCache, writeIdsToExclude, includeHiddenSets);\r\n}\r\nfunction syncTreeGetServerValue(syncTree, query) {\r\n const path = query._path;\r\n let serverCache = null;\r\n // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\r\n const relativePath = newRelativePath(pathToSyncPoint, path);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(sp, relativePath);\r\n });\r\n let syncPoint = syncTree.syncPointTree_.get(path);\r\n if (!syncPoint) {\r\n syncPoint = new SyncPoint();\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\r\n }\r\n else {\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n const serverCacheComplete = serverCache != null;\r\n const serverCacheNode = serverCacheComplete\r\n ? new CacheNode(serverCache, true, false)\r\n : null;\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, query._path);\r\n const view = syncPointGetView(syncPoint, query, writesCache, serverCacheComplete ? serverCacheNode.getNode() : ChildrenNode.EMPTY_NODE, serverCacheComplete);\r\n return viewGetCompleteNode(view);\r\n}\r\n/**\r\n * A helper method that visits all descendant and ancestor SyncPoints, applying the operation.\r\n *\r\n * NOTES:\r\n * - Descendant SyncPoints will be visited first (since we raise events depth-first).\r\n *\r\n * - We call applyOperation() on each SyncPoint passing three things:\r\n * 1. A version of the Operation that has been made relative to the SyncPoint location.\r\n * 2. A WriteTreeRef of any writes we have cached at the SyncPoint location.\r\n * 3. A snapshot Node with cached server data, if we have it.\r\n *\r\n * - We concatenate all of the events returned by each SyncPoint and return the result.\r\n */\r\nfunction syncTreeApplyOperationToSyncPoints_(syncTree, operation) {\r\n return syncTreeApplyOperationHelper_(operation, syncTree.syncPointTree_, \r\n /*serverCache=*/ null, writeTreeChildWrites(syncTree.pendingWriteTree_, newEmptyPath()));\r\n}\r\n/**\r\n * Recursive helper for applyOperationToSyncPoints_\r\n */\r\nfunction syncTreeApplyOperationHelper_(operation, syncPointTree, serverCache, writesCache) {\r\n if (pathIsEmpty(operation.path)) {\r\n return syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache);\r\n }\r\n else {\r\n const syncPoint = syncPointTree.get(newEmptyPath());\r\n // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n if (serverCache == null && syncPoint != null) {\r\n serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let events = [];\r\n const childName = pathGetFront(operation.path);\r\n const childOperation = operation.operationForChild(childName);\r\n const childTree = syncPointTree.children.get(childName);\r\n if (childTree && childOperation) {\r\n const childServerCache = serverCache\r\n ? serverCache.getImmediateChild(childName)\r\n : null;\r\n const childWritesCache = writeTreeRefChild(writesCache, childName);\r\n events = events.concat(syncTreeApplyOperationHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n }\r\n if (syncPoint) {\r\n events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\r\n }\r\n return events;\r\n }\r\n}\r\n/**\r\n * Recursive helper for applyOperationToSyncPoints_\r\n */\r\nfunction syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache) {\r\n const syncPoint = syncPointTree.get(newEmptyPath());\r\n // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n if (serverCache == null && syncPoint != null) {\r\n serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let events = [];\r\n syncPointTree.children.inorderTraversal((childName, childTree) => {\r\n const childServerCache = serverCache\r\n ? serverCache.getImmediateChild(childName)\r\n : null;\r\n const childWritesCache = writeTreeRefChild(writesCache, childName);\r\n const childOperation = operation.operationForChild(childName);\r\n if (childOperation) {\r\n events = events.concat(syncTreeApplyOperationDescendantsHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n }\r\n });\r\n if (syncPoint) {\r\n events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\r\n }\r\n return events;\r\n}\r\nfunction syncTreeCreateListenerForView_(syncTree, view) {\r\n const query = view.query;\r\n const tag = syncTreeTagForQuery(syncTree, query);\r\n return {\r\n hashFn: () => {\r\n const cache = viewGetServerCache(view) || ChildrenNode.EMPTY_NODE;\r\n return cache.hash();\r\n },\r\n onComplete: (status) => {\r\n if (status === 'ok') {\r\n if (tag) {\r\n return syncTreeApplyTaggedListenComplete(syncTree, query._path, tag);\r\n }\r\n else {\r\n return syncTreeApplyListenComplete(syncTree, query._path);\r\n }\r\n }\r\n else {\r\n // If a listen failed, kill all of the listeners here, not just the one that triggered the error.\r\n // Note that this may need to be scoped to just this listener if we change permissions on filtered children\r\n const error = errorForServerCode(status, query);\r\n return syncTreeRemoveEventRegistration(syncTree, query, \r\n /*eventRegistration*/ null, error);\r\n }\r\n }\r\n };\r\n}\r\n/**\r\n * Return the tag associated with the given query.\r\n */\r\nfunction syncTreeTagForQuery(syncTree, query) {\r\n const queryKey = syncTreeMakeQueryKey_(query);\r\n return syncTree.queryToTagMap.get(queryKey);\r\n}\r\n/**\r\n * Given a query, computes a \"queryKey\" suitable for use in our queryToTagMap_.\r\n */\r\nfunction syncTreeMakeQueryKey_(query) {\r\n return query._path.toString() + '$' + query._queryIdentifier;\r\n}\r\n/**\r\n * Return the query associated with the given tag, if we have one\r\n */\r\nfunction syncTreeQueryKeyForTag_(syncTree, tag) {\r\n return syncTree.tagToQueryMap.get(tag);\r\n}\r\n/**\r\n * Given a queryKey (created by makeQueryKey), parse it back into a path and queryId.\r\n */\r\nfunction syncTreeParseQueryKey_(queryKey) {\r\n const splitIndex = queryKey.indexOf('$');\r\n assert(splitIndex !== -1 && splitIndex < queryKey.length - 1, 'Bad queryKey.');\r\n return {\r\n queryId: queryKey.substr(splitIndex + 1),\r\n path: new Path(queryKey.substr(0, splitIndex))\r\n };\r\n}\r\n/**\r\n * A helper method to apply tagged operations\r\n */\r\nfunction syncTreeApplyTaggedOperation_(syncTree, queryPath, operation) {\r\n const syncPoint = syncTree.syncPointTree_.get(queryPath);\r\n assert(syncPoint, \"Missing sync point for query tag that we're tracking\");\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, queryPath);\r\n return syncPointApplyOperation(syncPoint, operation, writesCache, null);\r\n}\r\n/**\r\n * This collapses multiple unfiltered views into a single view, since we only need a single\r\n * listener for them.\r\n */\r\nfunction syncTreeCollectDistinctViewsForSubTree_(subtree) {\r\n return subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\r\n if (maybeChildSyncPoint && syncPointHasCompleteView(maybeChildSyncPoint)) {\r\n const completeView = syncPointGetCompleteView(maybeChildSyncPoint);\r\n return [completeView];\r\n }\r\n else {\r\n // No complete view here, flatten any deeper listens into an array\r\n let views = [];\r\n if (maybeChildSyncPoint) {\r\n views = syncPointGetQueryViews(maybeChildSyncPoint);\r\n }\r\n each(childMap, (_key, childViews) => {\r\n views = views.concat(childViews);\r\n });\r\n return views;\r\n }\r\n });\r\n}\r\n/**\r\n * Normalizes a query to a query we send the server for listening\r\n *\r\n * @returns The normalized query\r\n */\r\nfunction syncTreeQueryForListening_(query) {\r\n if (query._queryParams.loadsAllData() && !query._queryParams.isDefault()) {\r\n // We treat queries that load all data as default queries\r\n // Cast is necessary because ref() technically returns Firebase which is actually fb.api.Firebase which inherits\r\n // from Query\r\n return new (syncTreeGetReferenceConstructor())(query._repo, query._path);\r\n }\r\n else {\r\n return query;\r\n }\r\n}\r\nfunction syncTreeRemoveTags_(syncTree, queries) {\r\n for (let j = 0; j < queries.length; ++j) {\r\n const removedQuery = queries[j];\r\n if (!removedQuery._queryParams.loadsAllData()) {\r\n // We should have a tag for this\r\n const removedQueryKey = syncTreeMakeQueryKey_(removedQuery);\r\n const removedQueryTag = syncTree.queryToTagMap.get(removedQueryKey);\r\n syncTree.queryToTagMap.delete(removedQueryKey);\r\n syncTree.tagToQueryMap.delete(removedQueryTag);\r\n }\r\n }\r\n}\r\n/**\r\n * Static accessor for query tags.\r\n */\r\nfunction syncTreeGetNextQueryTag_() {\r\n return syncTreeNextQueryTag_++;\r\n}\r\n/**\r\n * For a given new listen, manage the de-duplication of outstanding subscriptions.\r\n *\r\n * @returns This method can return events to support synchronous data sources\r\n */\r\nfunction syncTreeSetupListener_(syncTree, query, view) {\r\n const path = query._path;\r\n const tag = syncTreeTagForQuery(syncTree, query);\r\n const listener = syncTreeCreateListenerForView_(syncTree, view);\r\n const events = syncTree.listenProvider_.startListening(syncTreeQueryForListening_(query), tag, listener.hashFn, listener.onComplete);\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n // The root of this subtree has our query. We're here because we definitely need to send a listen for that, but we\r\n // may need to shadow other listens as well.\r\n if (tag) {\r\n assert(!syncPointHasCompleteView(subtree.value), \"If we're adding a query, it shouldn't be shadowed\");\r\n }\r\n else {\r\n // Shadow everything at or below this location, this is a default listener.\r\n const queriesToStop = subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\r\n if (!pathIsEmpty(relativePath) &&\r\n maybeChildSyncPoint &&\r\n syncPointHasCompleteView(maybeChildSyncPoint)) {\r\n return [syncPointGetCompleteView(maybeChildSyncPoint).query];\r\n }\r\n else {\r\n // No default listener here, flatten any deeper queries into an array\r\n let queries = [];\r\n if (maybeChildSyncPoint) {\r\n queries = queries.concat(syncPointGetQueryViews(maybeChildSyncPoint).map(view => view.query));\r\n }\r\n each(childMap, (_key, childQueries) => {\r\n queries = queries.concat(childQueries);\r\n });\r\n return queries;\r\n }\r\n });\r\n for (let i = 0; i < queriesToStop.length; ++i) {\r\n const queryToStop = queriesToStop[i];\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToStop), syncTreeTagForQuery(syncTree, queryToStop));\r\n }\r\n }\r\n return events;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ExistingValueProvider {\r\n constructor(node_) {\r\n this.node_ = node_;\r\n }\r\n getImmediateChild(childName) {\r\n const child = this.node_.getImmediateChild(childName);\r\n return new ExistingValueProvider(child);\r\n }\r\n node() {\r\n return this.node_;\r\n }\r\n}\r\nclass DeferredValueProvider {\r\n constructor(syncTree, path) {\r\n this.syncTree_ = syncTree;\r\n this.path_ = path;\r\n }\r\n getImmediateChild(childName) {\r\n const childPath = pathChild(this.path_, childName);\r\n return new DeferredValueProvider(this.syncTree_, childPath);\r\n }\r\n node() {\r\n return syncTreeCalcCompleteEventCache(this.syncTree_, this.path_);\r\n }\r\n}\r\n/**\r\n * Generate placeholders for deferred values.\r\n */\r\nconst generateWithValues = function (values) {\r\n values = values || {};\r\n values['timestamp'] = values['timestamp'] || new Date().getTime();\r\n return values;\r\n};\r\n/**\r\n * Value to use when firing local events. When writing server values, fire\r\n * local events with an approximate value, otherwise return value as-is.\r\n */\r\nconst resolveDeferredLeafValue = function (value, existingVal, serverValues) {\r\n if (!value || typeof value !== 'object') {\r\n return value;\r\n }\r\n assert('.sv' in value, 'Unexpected leaf node or priority contents');\r\n if (typeof value['.sv'] === 'string') {\r\n return resolveScalarDeferredValue(value['.sv'], existingVal, serverValues);\r\n }\r\n else if (typeof value['.sv'] === 'object') {\r\n return resolveComplexDeferredValue(value['.sv'], existingVal);\r\n }\r\n else {\r\n assert(false, 'Unexpected server value: ' + JSON.stringify(value, null, 2));\r\n }\r\n};\r\nconst resolveScalarDeferredValue = function (op, existing, serverValues) {\r\n switch (op) {\r\n case 'timestamp':\r\n return serverValues['timestamp'];\r\n default:\r\n assert(false, 'Unexpected server value: ' + op);\r\n }\r\n};\r\nconst resolveComplexDeferredValue = function (op, existing, unused) {\r\n if (!op.hasOwnProperty('increment')) {\r\n assert(false, 'Unexpected server value: ' + JSON.stringify(op, null, 2));\r\n }\r\n const delta = op['increment'];\r\n if (typeof delta !== 'number') {\r\n assert(false, 'Unexpected increment value: ' + delta);\r\n }\r\n const existingNode = existing.node();\r\n assert(existingNode !== null && typeof existingNode !== 'undefined', 'Expected ChildrenNode.EMPTY_NODE for nulls');\r\n // Incrementing a non-number sets the value to the incremented amount\r\n if (!existingNode.isLeafNode()) {\r\n return delta;\r\n }\r\n const leaf = existingNode;\r\n const existingVal = leaf.getValue();\r\n if (typeof existingVal !== 'number') {\r\n return delta;\r\n }\r\n // No need to do over/underflow arithmetic here because JS only handles floats under the covers\r\n return existingVal + delta;\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the tree with the\r\n * specified generated replacement values.\r\n * @param path - path to which write is relative\r\n * @param node - new data written at path\r\n * @param syncTree - current data\r\n */\r\nconst resolveDeferredValueTree = function (path, node, syncTree, serverValues) {\r\n return resolveDeferredValue(node, new DeferredValueProvider(syncTree, path), serverValues);\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the node with the\r\n * specified generated replacement values. If there are no server values in the node,\r\n * it'll be returned as-is.\r\n */\r\nconst resolveDeferredValueSnapshot = function (node, existing, serverValues) {\r\n return resolveDeferredValue(node, new ExistingValueProvider(existing), serverValues);\r\n};\r\nfunction resolveDeferredValue(node, existingVal, serverValues) {\r\n const rawPri = node.getPriority().val();\r\n const priority = resolveDeferredLeafValue(rawPri, existingVal.getImmediateChild('.priority'), serverValues);\r\n let newNode;\r\n if (node.isLeafNode()) {\r\n const leafNode = node;\r\n const value = resolveDeferredLeafValue(leafNode.getValue(), existingVal, serverValues);\r\n if (value !== leafNode.getValue() ||\r\n priority !== leafNode.getPriority().val()) {\r\n return new LeafNode(value, nodeFromJSON(priority));\r\n }\r\n else {\r\n return node;\r\n }\r\n }\r\n else {\r\n const childrenNode = node;\r\n newNode = childrenNode;\r\n if (priority !== childrenNode.getPriority().val()) {\r\n newNode = newNode.updatePriority(new LeafNode(priority));\r\n }\r\n childrenNode.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n const newChildNode = resolveDeferredValue(childNode, existingVal.getImmediateChild(childName), serverValues);\r\n if (newChildNode !== childNode) {\r\n newNode = newNode.updateImmediateChild(childName, newChildNode);\r\n }\r\n });\r\n return newNode;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A light-weight tree, traversable by path. Nodes can have both values and children.\r\n * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty\r\n * children.\r\n */\r\nclass Tree {\r\n /**\r\n * @param name - Optional name of the node.\r\n * @param parent - Optional parent node.\r\n * @param node - Optional node to wrap.\r\n */\r\n constructor(name = '', parent = null, node = { children: {}, childCount: 0 }) {\r\n this.name = name;\r\n this.parent = parent;\r\n this.node = node;\r\n }\r\n}\r\n/**\r\n * Returns a sub-Tree for the given path.\r\n *\r\n * @param pathObj - Path to look up.\r\n * @returns Tree for path.\r\n */\r\nfunction treeSubTree(tree, pathObj) {\r\n // TODO: Require pathObj to be Path?\r\n let path = pathObj instanceof Path ? pathObj : new Path(pathObj);\r\n let child = tree, next = pathGetFront(path);\r\n while (next !== null) {\r\n const childNode = safeGet(child.node.children, next) || {\r\n children: {},\r\n childCount: 0\r\n };\r\n child = new Tree(next, child, childNode);\r\n path = pathPopFront(path);\r\n next = pathGetFront(path);\r\n }\r\n return child;\r\n}\r\n/**\r\n * Returns the data associated with this tree node.\r\n *\r\n * @returns The data or null if no data exists.\r\n */\r\nfunction treeGetValue(tree) {\r\n return tree.node.value;\r\n}\r\n/**\r\n * Sets data to this tree node.\r\n *\r\n * @param value - Value to set.\r\n */\r\nfunction treeSetValue(tree, value) {\r\n tree.node.value = value;\r\n treeUpdateParents(tree);\r\n}\r\n/**\r\n * @returns Whether the tree has any children.\r\n */\r\nfunction treeHasChildren(tree) {\r\n return tree.node.childCount > 0;\r\n}\r\n/**\r\n * @returns Whethe rthe tree is empty (no value or children).\r\n */\r\nfunction treeIsEmpty(tree) {\r\n return treeGetValue(tree) === undefined && !treeHasChildren(tree);\r\n}\r\n/**\r\n * Calls action for each child of this tree node.\r\n *\r\n * @param action - Action to be called for each child.\r\n */\r\nfunction treeForEachChild(tree, action) {\r\n each(tree.node.children, (child, childTree) => {\r\n action(new Tree(child, tree, childTree));\r\n });\r\n}\r\n/**\r\n * Does a depth-first traversal of this node's descendants, calling action for each one.\r\n *\r\n * @param action - Action to be called for each child.\r\n * @param includeSelf - Whether to call action on this node as well. Defaults to\r\n * false.\r\n * @param childrenFirst - Whether to call action on children before calling it on\r\n * parent.\r\n */\r\nfunction treeForEachDescendant(tree, action, includeSelf, childrenFirst) {\r\n if (includeSelf && !childrenFirst) {\r\n action(tree);\r\n }\r\n treeForEachChild(tree, child => {\r\n treeForEachDescendant(child, action, true, childrenFirst);\r\n });\r\n if (includeSelf && childrenFirst) {\r\n action(tree);\r\n }\r\n}\r\n/**\r\n * Calls action on each ancestor node.\r\n *\r\n * @param action - Action to be called on each parent; return\r\n * true to abort.\r\n * @param includeSelf - Whether to call action on this node as well.\r\n * @returns true if the action callback returned true.\r\n */\r\nfunction treeForEachAncestor(tree, action, includeSelf) {\r\n let node = includeSelf ? tree : tree.parent;\r\n while (node !== null) {\r\n if (action(node)) {\r\n return true;\r\n }\r\n node = node.parent;\r\n }\r\n return false;\r\n}\r\n/**\r\n * @returns The path of this tree node, as a Path.\r\n */\r\nfunction treeGetPath(tree) {\r\n return new Path(tree.parent === null\r\n ? tree.name\r\n : treeGetPath(tree.parent) + '/' + tree.name);\r\n}\r\n/**\r\n * Adds or removes this child from its parent based on whether it's empty or not.\r\n */\r\nfunction treeUpdateParents(tree) {\r\n if (tree.parent !== null) {\r\n treeUpdateChild(tree.parent, tree.name, tree);\r\n }\r\n}\r\n/**\r\n * Adds or removes the passed child to this tree node, depending on whether it's empty.\r\n *\r\n * @param childName - The name of the child to update.\r\n * @param child - The child to update.\r\n */\r\nfunction treeUpdateChild(tree, childName, child) {\r\n const childEmpty = treeIsEmpty(child);\r\n const childExists = contains(tree.node.children, childName);\r\n if (childEmpty && childExists) {\r\n delete tree.node.children[childName];\r\n tree.node.childCount--;\r\n treeUpdateParents(tree);\r\n }\r\n else if (!childEmpty && !childExists) {\r\n tree.node.children[childName] = child.node;\r\n tree.node.childCount++;\r\n treeUpdateParents(tree);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * True for invalid Firebase keys\r\n */\r\nconst INVALID_KEY_REGEX_ = /[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * True for invalid Firebase paths.\r\n * Allows '/' in paths.\r\n */\r\nconst INVALID_PATH_REGEX_ = /[\\[\\].#$\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * Maximum number of characters to allow in leaf value\r\n */\r\nconst MAX_LEAF_SIZE_ = 10 * 1024 * 1024;\r\nconst isValidKey = function (key) {\r\n return (typeof key === 'string' && key.length !== 0 && !INVALID_KEY_REGEX_.test(key));\r\n};\r\nconst isValidPathString = function (pathString) {\r\n return (typeof pathString === 'string' &&\r\n pathString.length !== 0 &&\r\n !INVALID_PATH_REGEX_.test(pathString));\r\n};\r\nconst isValidRootPathString = function (pathString) {\r\n if (pathString) {\r\n // Allow '/.info/' at the beginning.\r\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n }\r\n return isValidPathString(pathString);\r\n};\r\nconst isValidPriority = function (priority) {\r\n return (priority === null ||\r\n typeof priority === 'string' ||\r\n (typeof priority === 'number' && !isInvalidJSONNumber(priority)) ||\r\n (priority &&\r\n typeof priority === 'object' &&\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n contains(priority, '.sv')));\r\n};\r\n/**\r\n * Pre-validate a datum passed as an argument to Firebase function.\r\n */\r\nconst validateFirebaseDataArg = function (fnName, value, path, optional) {\r\n if (optional && value === undefined) {\r\n return;\r\n }\r\n validateFirebaseData(errorPrefix(fnName, 'value'), value, path);\r\n};\r\n/**\r\n * Validate a data object client-side before sending to server.\r\n */\r\nconst validateFirebaseData = function (errorPrefix, data, path_) {\r\n const path = path_ instanceof Path ? new ValidationPath(path_, errorPrefix) : path_;\r\n if (data === undefined) {\r\n throw new Error(errorPrefix + 'contains undefined ' + validationPathToErrorString(path));\r\n }\r\n if (typeof data === 'function') {\r\n throw new Error(errorPrefix +\r\n 'contains a function ' +\r\n validationPathToErrorString(path) +\r\n ' with contents = ' +\r\n data.toString());\r\n }\r\n if (isInvalidJSONNumber(data)) {\r\n throw new Error(errorPrefix +\r\n 'contains ' +\r\n data.toString() +\r\n ' ' +\r\n validationPathToErrorString(path));\r\n }\r\n // Check max leaf size, but try to avoid the utf8 conversion if we can.\r\n if (typeof data === 'string' &&\r\n data.length > MAX_LEAF_SIZE_ / 3 &&\r\n stringLength(data) > MAX_LEAF_SIZE_) {\r\n throw new Error(errorPrefix +\r\n 'contains a string greater than ' +\r\n MAX_LEAF_SIZE_ +\r\n ' utf8 bytes ' +\r\n validationPathToErrorString(path) +\r\n \" ('\" +\r\n data.substring(0, 50) +\r\n \"...')\");\r\n }\r\n // TODO = Perf = Consider combining the recursive validation of keys into NodeFromJSON\r\n // to save extra walking of large objects.\r\n if (data && typeof data === 'object') {\r\n let hasDotValue = false;\r\n let hasActualChild = false;\r\n each(data, (key, value) => {\r\n if (key === '.value') {\r\n hasDotValue = true;\r\n }\r\n else if (key !== '.priority' && key !== '.sv') {\r\n hasActualChild = true;\r\n if (!isValidKey(key)) {\r\n throw new Error(errorPrefix +\r\n ' contains an invalid key (' +\r\n key +\r\n ') ' +\r\n validationPathToErrorString(path) +\r\n '. Keys must be non-empty strings ' +\r\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n }\r\n }\r\n validationPathPush(path, key);\r\n validateFirebaseData(errorPrefix, value, path);\r\n validationPathPop(path);\r\n });\r\n if (hasDotValue && hasActualChild) {\r\n throw new Error(errorPrefix +\r\n ' contains \".value\" child ' +\r\n validationPathToErrorString(path) +\r\n ' in addition to actual children.');\r\n }\r\n }\r\n};\r\n/**\r\n * Pre-validate paths passed in the firebase function.\r\n */\r\nconst validateFirebaseMergePaths = function (errorPrefix, mergePaths) {\r\n let i, curPath;\r\n for (i = 0; i < mergePaths.length; i++) {\r\n curPath = mergePaths[i];\r\n const keys = pathSlice(curPath);\r\n for (let j = 0; j < keys.length; j++) {\r\n if (keys[j] === '.priority' && j === keys.length - 1) ;\r\n else if (!isValidKey(keys[j])) {\r\n throw new Error(errorPrefix +\r\n 'contains an invalid key (' +\r\n keys[j] +\r\n ') in path ' +\r\n curPath.toString() +\r\n '. Keys must be non-empty strings ' +\r\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n }\r\n }\r\n }\r\n // Check that update keys are not descendants of each other.\r\n // We rely on the property that sorting guarantees that ancestors come\r\n // right before descendants.\r\n mergePaths.sort(pathCompare);\r\n let prevPath = null;\r\n for (i = 0; i < mergePaths.length; i++) {\r\n curPath = mergePaths[i];\r\n if (prevPath !== null && pathContains(prevPath, curPath)) {\r\n throw new Error(errorPrefix +\r\n 'contains a path ' +\r\n prevPath.toString() +\r\n ' that is ancestor of another path ' +\r\n curPath.toString());\r\n }\r\n prevPath = curPath;\r\n }\r\n};\r\n/**\r\n * pre-validate an object passed as an argument to firebase function (\r\n * must be an object - e.g. for firebase.update()).\r\n */\r\nconst validateFirebaseMergeDataArg = function (fnName, data, path, optional) {\r\n if (optional && data === undefined) {\r\n return;\r\n }\r\n const errorPrefix$1 = errorPrefix(fnName, 'values');\r\n if (!(data && typeof data === 'object') || Array.isArray(data)) {\r\n throw new Error(errorPrefix$1 + ' must be an object containing the children to replace.');\r\n }\r\n const mergePaths = [];\r\n each(data, (key, value) => {\r\n const curPath = new Path(key);\r\n validateFirebaseData(errorPrefix$1, value, pathChild(path, curPath));\r\n if (pathGetBack(curPath) === '.priority') {\r\n if (!isValidPriority(value)) {\r\n throw new Error(errorPrefix$1 +\r\n \"contains an invalid value for '\" +\r\n curPath.toString() +\r\n \"', which must be a valid \" +\r\n 'Firebase priority (a string, finite number, server value, or null).');\r\n }\r\n }\r\n mergePaths.push(curPath);\r\n });\r\n validateFirebaseMergePaths(errorPrefix$1, mergePaths);\r\n};\r\nconst validatePriority = function (fnName, priority, optional) {\r\n if (optional && priority === undefined) {\r\n return;\r\n }\r\n if (isInvalidJSONNumber(priority)) {\r\n throw new Error(errorPrefix(fnName, 'priority') +\r\n 'is ' +\r\n priority.toString() +\r\n ', but must be a valid Firebase priority (a string, finite number, ' +\r\n 'server value, or null).');\r\n }\r\n // Special case to allow importing data with a .sv.\r\n if (!isValidPriority(priority)) {\r\n throw new Error(errorPrefix(fnName, 'priority') +\r\n 'must be a valid Firebase priority ' +\r\n '(a string, finite number, server value, or null).');\r\n }\r\n};\r\nconst validateKey = function (fnName, argumentName, key, optional) {\r\n if (optional && key === undefined) {\r\n return;\r\n }\r\n if (!isValidKey(key)) {\r\n throw new Error(errorPrefix(fnName, argumentName) +\r\n 'was an invalid key = \"' +\r\n key +\r\n '\". Firebase keys must be non-empty strings and ' +\r\n 'can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\").');\r\n }\r\n};\r\n/**\r\n * @internal\r\n */\r\nconst validatePathString = function (fnName, argumentName, pathString, optional) {\r\n if (optional && pathString === undefined) {\r\n return;\r\n }\r\n if (!isValidPathString(pathString)) {\r\n throw new Error(errorPrefix(fnName, argumentName) +\r\n 'was an invalid path = \"' +\r\n pathString +\r\n '\". Paths must be non-empty strings and ' +\r\n 'can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\"');\r\n }\r\n};\r\nconst validateRootPathString = function (fnName, argumentName, pathString, optional) {\r\n if (pathString) {\r\n // Allow '/.info/' at the beginning.\r\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n }\r\n validatePathString(fnName, argumentName, pathString, optional);\r\n};\r\n/**\r\n * @internal\r\n */\r\nconst validateWritablePath = function (fnName, path) {\r\n if (pathGetFront(path) === '.info') {\r\n throw new Error(fnName + \" failed = Can't modify data under /.info/\");\r\n }\r\n};\r\nconst validateUrl = function (fnName, parsedUrl) {\r\n // TODO = Validate server better.\r\n const pathString = parsedUrl.path.toString();\r\n if (!(typeof parsedUrl.repoInfo.host === 'string') ||\r\n parsedUrl.repoInfo.host.length === 0 ||\r\n (!isValidKey(parsedUrl.repoInfo.namespace) &&\r\n parsedUrl.repoInfo.host.split(':')[0] !== 'localhost') ||\r\n (pathString.length !== 0 && !isValidRootPathString(pathString))) {\r\n throw new Error(errorPrefix(fnName, 'url') +\r\n 'must be a valid firebase URL and ' +\r\n 'the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".');\r\n }\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The event queue serves a few purposes:\r\n * 1. It ensures we maintain event order in the face of event callbacks doing operations that result in more\r\n * events being queued.\r\n * 2. raiseQueuedEvents() handles being called reentrantly nicely. That is, if in the course of raising events,\r\n * raiseQueuedEvents() is called again, the \"inner\" call will pick up raising events where the \"outer\" call\r\n * left off, ensuring that the events are still raised synchronously and in order.\r\n * 3. You can use raiseEventsAtPath and raiseEventsForChangedPath to ensure only relevant previously-queued\r\n * events are raised synchronously.\r\n *\r\n * NOTE: This can all go away if/when we move to async events.\r\n *\r\n */\r\nclass EventQueue {\r\n constructor() {\r\n this.eventLists_ = [];\r\n /**\r\n * Tracks recursion depth of raiseQueuedEvents_, for debugging purposes.\r\n */\r\n this.recursionDepth_ = 0;\r\n }\r\n}\r\n/**\r\n * @param eventDataList - The new events to queue.\r\n */\r\nfunction eventQueueQueueEvents(eventQueue, eventDataList) {\r\n // We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.\r\n let currList = null;\r\n for (let i = 0; i < eventDataList.length; i++) {\r\n const data = eventDataList[i];\r\n const path = data.getPath();\r\n if (currList !== null && !pathEquals(path, currList.path)) {\r\n eventQueue.eventLists_.push(currList);\r\n currList = null;\r\n }\r\n if (currList === null) {\r\n currList = { events: [], path };\r\n }\r\n currList.events.push(data);\r\n }\r\n if (currList) {\r\n eventQueue.eventLists_.push(currList);\r\n }\r\n}\r\n/**\r\n * Queues the specified events and synchronously raises all events (including previously queued ones)\r\n * for the specified path.\r\n *\r\n * It is assumed that the new events are all for the specified path.\r\n *\r\n * @param path - The path to raise events for.\r\n * @param eventDataList - The new events to raise.\r\n */\r\nfunction eventQueueRaiseEventsAtPath(eventQueue, path, eventDataList) {\r\n eventQueueQueueEvents(eventQueue, eventDataList);\r\n eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathEquals(eventPath, path));\r\n}\r\n/**\r\n * Queues the specified events and synchronously raises all events (including previously queued ones) for\r\n * locations related to the specified change path (i.e. all ancestors and descendants).\r\n *\r\n * It is assumed that the new events are all related (ancestor or descendant) to the specified path.\r\n *\r\n * @param changedPath - The path to raise events for.\r\n * @param eventDataList - The events to raise\r\n */\r\nfunction eventQueueRaiseEventsForChangedPath(eventQueue, changedPath, eventDataList) {\r\n eventQueueQueueEvents(eventQueue, eventDataList);\r\n eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathContains(eventPath, changedPath) ||\r\n pathContains(changedPath, eventPath));\r\n}\r\nfunction eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, predicate) {\r\n eventQueue.recursionDepth_++;\r\n let sentAll = true;\r\n for (let i = 0; i < eventQueue.eventLists_.length; i++) {\r\n const eventList = eventQueue.eventLists_[i];\r\n if (eventList) {\r\n const eventPath = eventList.path;\r\n if (predicate(eventPath)) {\r\n eventListRaise(eventQueue.eventLists_[i]);\r\n eventQueue.eventLists_[i] = null;\r\n }\r\n else {\r\n sentAll = false;\r\n }\r\n }\r\n }\r\n if (sentAll) {\r\n eventQueue.eventLists_ = [];\r\n }\r\n eventQueue.recursionDepth_--;\r\n}\r\n/**\r\n * Iterates through the list and raises each event\r\n */\r\nfunction eventListRaise(eventList) {\r\n for (let i = 0; i < eventList.events.length; i++) {\r\n const eventData = eventList.events[i];\r\n if (eventData !== null) {\r\n eventList.events[i] = null;\r\n const eventFn = eventData.getEventRunner();\r\n if (logger) {\r\n log('event: ' + eventData.toString());\r\n }\r\n exceptionGuard(eventFn);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst INTERRUPT_REASON = 'repo_interrupt';\r\n/**\r\n * If a transaction does not succeed after 25 retries, we abort it. Among other\r\n * things this ensure that if there's ever a bug causing a mismatch between\r\n * client / server hashes for some data, we won't retry indefinitely.\r\n */\r\nconst MAX_TRANSACTION_RETRIES = 25;\r\n/**\r\n * A connection to a single data repository.\r\n */\r\nclass Repo {\r\n constructor(repoInfo_, forceRestClient_, authTokenProvider_, appCheckProvider_) {\r\n this.repoInfo_ = repoInfo_;\r\n this.forceRestClient_ = forceRestClient_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckProvider_ = appCheckProvider_;\r\n this.dataUpdateCount = 0;\r\n this.statsListener_ = null;\r\n this.eventQueue_ = new EventQueue();\r\n this.nextWriteId_ = 1;\r\n this.interceptServerDataCallback_ = null;\r\n /** A list of data pieces and paths to be set when this client disconnects. */\r\n this.onDisconnect_ = newSparseSnapshotTree();\r\n /** Stores queues of outstanding transactions for Firebase locations. */\r\n this.transactionQueueTree_ = new Tree();\r\n // TODO: This should be @private but it's used by test_access.js and internal.js\r\n this.persistentConnection_ = null;\r\n // This key is intentionally not updated if RepoInfo is later changed or replaced\r\n this.key = this.repoInfo_.toURLString();\r\n }\r\n /**\r\n * @returns The URL corresponding to the root of this Firebase.\r\n */\r\n toString() {\r\n return ((this.repoInfo_.secure ? 'https://' : 'http://') + this.repoInfo_.host);\r\n }\r\n}\r\nfunction repoStart(repo, appId, authOverride) {\r\n repo.stats_ = statsManagerGetCollection(repo.repoInfo_);\r\n if (repo.forceRestClient_ || beingCrawled()) {\r\n repo.server_ = new ReadonlyRestClient(repo.repoInfo_, (pathString, data, isMerge, tag) => {\r\n repoOnDataUpdate(repo, pathString, data, isMerge, tag);\r\n }, repo.authTokenProvider_, repo.appCheckProvider_);\r\n // Minor hack: Fire onConnect immediately, since there's no actual connection.\r\n setTimeout(() => repoOnConnectStatus(repo, /* connectStatus= */ true), 0);\r\n }\r\n else {\r\n // Validate authOverride\r\n if (typeof authOverride !== 'undefined' && authOverride !== null) {\r\n if (typeof authOverride !== 'object') {\r\n throw new Error('Only objects are supported for option databaseAuthVariableOverride');\r\n }\r\n try {\r\n stringify(authOverride);\r\n }\r\n catch (e) {\r\n throw new Error('Invalid authOverride provided: ' + e);\r\n }\r\n }\r\n repo.persistentConnection_ = new PersistentConnection(repo.repoInfo_, appId, (pathString, data, isMerge, tag) => {\r\n repoOnDataUpdate(repo, pathString, data, isMerge, tag);\r\n }, (connectStatus) => {\r\n repoOnConnectStatus(repo, connectStatus);\r\n }, (updates) => {\r\n repoOnServerInfoUpdate(repo, updates);\r\n }, repo.authTokenProvider_, repo.appCheckProvider_, authOverride);\r\n repo.server_ = repo.persistentConnection_;\r\n }\r\n repo.authTokenProvider_.addTokenChangeListener(token => {\r\n repo.server_.refreshAuthToken(token);\r\n });\r\n repo.appCheckProvider_.addTokenChangeListener(result => {\r\n repo.server_.refreshAppCheckToken(result.token);\r\n });\r\n // In the case of multiple Repos for the same repoInfo (i.e. there are multiple Firebase.Contexts being used),\r\n // we only want to create one StatsReporter. As such, we'll report stats over the first Repo created.\r\n repo.statsReporter_ = statsManagerGetOrCreateReporter(repo.repoInfo_, () => new StatsReporter(repo.stats_, repo.server_));\r\n // Used for .info.\r\n repo.infoData_ = new SnapshotHolder();\r\n repo.infoSyncTree_ = new SyncTree({\r\n startListening: (query, tag, currentHashFn, onComplete) => {\r\n let infoEvents = [];\r\n const node = repo.infoData_.getNode(query._path);\r\n // This is possibly a hack, but we have different semantics for .info endpoints. We don't raise null events\r\n // on initial data...\r\n if (!node.isEmpty()) {\r\n infoEvents = syncTreeApplyServerOverwrite(repo.infoSyncTree_, query._path, node);\r\n setTimeout(() => {\r\n onComplete('ok');\r\n }, 0);\r\n }\r\n return infoEvents;\r\n },\r\n stopListening: () => { }\r\n });\r\n repoUpdateInfo(repo, 'connected', false);\r\n repo.serverSyncTree_ = new SyncTree({\r\n startListening: (query, tag, currentHashFn, onComplete) => {\r\n repo.server_.listen(query, currentHashFn, tag, (status, data) => {\r\n const events = onComplete(status, data);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);\r\n });\r\n // No synchronous events for network-backed sync trees\r\n return [];\r\n },\r\n stopListening: (query, tag) => {\r\n repo.server_.unlisten(query, tag);\r\n }\r\n });\r\n}\r\n/**\r\n * @returns The time in milliseconds, taking the server offset into account if we have one.\r\n */\r\nfunction repoServerTime(repo) {\r\n const offsetNode = repo.infoData_.getNode(new Path('.info/serverTimeOffset'));\r\n const offset = offsetNode.val() || 0;\r\n return new Date().getTime() + offset;\r\n}\r\n/**\r\n * Generate ServerValues using some variables from the repo object.\r\n */\r\nfunction repoGenerateServerValues(repo) {\r\n return generateWithValues({\r\n timestamp: repoServerTime(repo)\r\n });\r\n}\r\n/**\r\n * Called by realtime when we get new messages from the server.\r\n */\r\nfunction repoOnDataUpdate(repo, pathString, data, isMerge, tag) {\r\n // For testing.\r\n repo.dataUpdateCount++;\r\n const path = new Path(pathString);\r\n data = repo.interceptServerDataCallback_\r\n ? repo.interceptServerDataCallback_(pathString, data)\r\n : data;\r\n let events = [];\r\n if (tag) {\r\n if (isMerge) {\r\n const taggedChildren = map(data, (raw) => nodeFromJSON(raw));\r\n events = syncTreeApplyTaggedQueryMerge(repo.serverSyncTree_, path, taggedChildren, tag);\r\n }\r\n else {\r\n const taggedSnap = nodeFromJSON(data);\r\n events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, path, taggedSnap, tag);\r\n }\r\n }\r\n else if (isMerge) {\r\n const changedChildren = map(data, (raw) => nodeFromJSON(raw));\r\n events = syncTreeApplyServerMerge(repo.serverSyncTree_, path, changedChildren);\r\n }\r\n else {\r\n const snap = nodeFromJSON(data);\r\n events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap);\r\n }\r\n let affectedPath = path;\r\n if (events.length > 0) {\r\n // Since we have a listener outstanding for each transaction, receiving any events\r\n // is a proxy for some change having occurred.\r\n affectedPath = repoRerunTransactions(repo, path);\r\n }\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, events);\r\n}\r\nfunction repoOnConnectStatus(repo, connectStatus) {\r\n repoUpdateInfo(repo, 'connected', connectStatus);\r\n if (connectStatus === false) {\r\n repoRunOnDisconnectEvents(repo);\r\n }\r\n}\r\nfunction repoOnServerInfoUpdate(repo, updates) {\r\n each(updates, (key, value) => {\r\n repoUpdateInfo(repo, key, value);\r\n });\r\n}\r\nfunction repoUpdateInfo(repo, pathString, value) {\r\n const path = new Path('/.info/' + pathString);\r\n const newNode = nodeFromJSON(value);\r\n repo.infoData_.updateSnapshot(path, newNode);\r\n const events = syncTreeApplyServerOverwrite(repo.infoSyncTree_, path, newNode);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n}\r\nfunction repoGetNextWriteId(repo) {\r\n return repo.nextWriteId_++;\r\n}\r\n/**\r\n * The purpose of `getValue` is to return the latest known value\r\n * satisfying `query`.\r\n *\r\n * This method will first check for in-memory cached values\r\n * belonging to active listeners. If they are found, such values\r\n * are considered to be the most up-to-date.\r\n *\r\n * If the client is not connected, this method will wait until the\r\n * repo has established a connection and then request the value for `query`.\r\n * If the client is not able to retrieve the query result for another reason,\r\n * it reports an error.\r\n *\r\n * @param query - The query to surface a value for.\r\n */\r\nfunction repoGetValue(repo, query, eventRegistration) {\r\n // Only active queries are cached. There is no persisted cache.\r\n const cached = syncTreeGetServerValue(repo.serverSyncTree_, query);\r\n if (cached != null) {\r\n return Promise.resolve(cached);\r\n }\r\n return repo.server_.get(query).then(payload => {\r\n const node = nodeFromJSON(payload).withIndex(query._queryParams.getIndex());\r\n /**\r\n * Below we simulate the actions of an `onlyOnce` `onValue()` event where:\r\n * Add an event registration,\r\n * Update data at the path,\r\n * Raise any events,\r\n * Cleanup the SyncTree\r\n */\r\n syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration, true);\r\n let events;\r\n if (query._queryParams.loadsAllData()) {\r\n events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, query._path, node);\r\n }\r\n else {\r\n const tag = syncTreeTagForQuery(repo.serverSyncTree_, query);\r\n events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, query._path, node, tag);\r\n }\r\n /*\r\n * We need to raise events in the scenario where `get()` is called at a parent path, and\r\n * while the `get()` is pending, `onValue` is called at a child location. While get() is waiting\r\n * for the data, `onValue` will register a new event. Then, get() will come back, and update the syncTree\r\n * and its corresponding serverCache, including the child location where `onValue` is called. Then,\r\n * `onValue` will receive the event from the server, but look at the syncTree and see that the data received\r\n * from the server is already at the SyncPoint, and so the `onValue` callback will never get fired.\r\n * Calling `eventQueueRaiseEventsForChangedPath()` is the correct way to propagate the events and\r\n * ensure the corresponding child events will get fired.\r\n */\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);\r\n syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration, null, true);\r\n return node;\r\n }, err => {\r\n repoLog(repo, 'get for query ' + stringify(query) + ' failed: ' + err);\r\n return Promise.reject(new Error(err));\r\n });\r\n}\r\nfunction repoSetWithPriority(repo, path, newVal, newPriority, onComplete) {\r\n repoLog(repo, 'set', {\r\n path: path.toString(),\r\n value: newVal,\r\n priority: newPriority\r\n });\r\n // TODO: Optimize this behavior to either (a) store flag to skip resolving where possible and / or\r\n // (b) store unresolved paths on JSON parse\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeUnresolved = nodeFromJSON(newVal, newPriority);\r\n const existing = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path);\r\n const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, existing, serverValues);\r\n const writeId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, writeId, true);\r\n eventQueueQueueEvents(repo.eventQueue_, events);\r\n repo.server_.put(path.toString(), newNodeUnresolved.val(/*export=*/ true), (status, errorReason) => {\r\n const success = status === 'ok';\r\n if (!success) {\r\n warn('set at ' + path + ' failed: ' + status);\r\n }\r\n const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, clearEvents);\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n const affectedPath = repoAbortTransactions(repo, path);\r\n repoRerunTransactions(repo, affectedPath);\r\n // We queued the events above, so just flush the queue here\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, []);\r\n}\r\nfunction repoUpdate(repo, path, childrenToMerge, onComplete) {\r\n repoLog(repo, 'update', { path: path.toString(), value: childrenToMerge });\r\n // Start with our existing data and merge each child into it.\r\n let empty = true;\r\n const serverValues = repoGenerateServerValues(repo);\r\n const changedChildren = {};\r\n each(childrenToMerge, (changedKey, changedValue) => {\r\n empty = false;\r\n changedChildren[changedKey] = resolveDeferredValueTree(pathChild(path, changedKey), nodeFromJSON(changedValue), repo.serverSyncTree_, serverValues);\r\n });\r\n if (!empty) {\r\n const writeId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserMerge(repo.serverSyncTree_, path, changedChildren, writeId);\r\n eventQueueQueueEvents(repo.eventQueue_, events);\r\n repo.server_.merge(path.toString(), childrenToMerge, (status, errorReason) => {\r\n const success = status === 'ok';\r\n if (!success) {\r\n warn('update at ' + path + ' failed: ' + status);\r\n }\r\n const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\r\n const affectedPath = clearEvents.length > 0 ? repoRerunTransactions(repo, path) : path;\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, clearEvents);\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n each(childrenToMerge, (changedPath) => {\r\n const affectedPath = repoAbortTransactions(repo, pathChild(path, changedPath));\r\n repoRerunTransactions(repo, affectedPath);\r\n });\r\n // We queued the events above, so just flush the queue here\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, []);\r\n }\r\n else {\r\n log(\"update() called with empty data. Don't do anything.\");\r\n repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\r\n }\r\n}\r\n/**\r\n * Applies all of the changes stored up in the onDisconnect_ tree.\r\n */\r\nfunction repoRunOnDisconnectEvents(repo) {\r\n repoLog(repo, 'onDisconnectEvents');\r\n const serverValues = repoGenerateServerValues(repo);\r\n const resolvedOnDisconnectTree = newSparseSnapshotTree();\r\n sparseSnapshotTreeForEachTree(repo.onDisconnect_, newEmptyPath(), (path, node) => {\r\n const resolved = resolveDeferredValueTree(path, node, repo.serverSyncTree_, serverValues);\r\n sparseSnapshotTreeRemember(resolvedOnDisconnectTree, path, resolved);\r\n });\r\n let events = [];\r\n sparseSnapshotTreeForEachTree(resolvedOnDisconnectTree, newEmptyPath(), (path, snap) => {\r\n events = events.concat(syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap));\r\n const affectedPath = repoAbortTransactions(repo, path);\r\n repoRerunTransactions(repo, affectedPath);\r\n });\r\n repo.onDisconnect_ = newSparseSnapshotTree();\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, newEmptyPath(), events);\r\n}\r\nfunction repoOnDisconnectCancel(repo, path, onComplete) {\r\n repo.server_.onDisconnectCancel(path.toString(), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeForget(repo.onDisconnect_, path);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectSet(repo, path, value, onComplete) {\r\n const newNode = nodeFromJSON(value);\r\n repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectSetWithPriority(repo, path, value, priority, onComplete) {\r\n const newNode = nodeFromJSON(value, priority);\r\n repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectUpdate(repo, path, childrenToMerge, onComplete) {\r\n if (isEmpty(childrenToMerge)) {\r\n log(\"onDisconnect().update() called with empty data. Don't do anything.\");\r\n repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\r\n return;\r\n }\r\n repo.server_.onDisconnectMerge(path.toString(), childrenToMerge, (status, errorReason) => {\r\n if (status === 'ok') {\r\n each(childrenToMerge, (childName, childNode) => {\r\n const newChildNode = nodeFromJSON(childNode);\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, pathChild(path, childName), newChildNode);\r\n });\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoAddEventCallbackForQuery(repo, query, eventRegistration) {\r\n let events;\r\n if (pathGetFront(query._path) === '.info') {\r\n events = syncTreeAddEventRegistration(repo.infoSyncTree_, query, eventRegistration);\r\n }\r\n else {\r\n events = syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration);\r\n }\r\n eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\r\n}\r\nfunction repoRemoveEventCallbackForQuery(repo, query, eventRegistration) {\r\n // These are guaranteed not to raise events, since we're not passing in a cancelError. However, we can future-proof\r\n // a little bit by handling the return values anyways.\r\n let events;\r\n if (pathGetFront(query._path) === '.info') {\r\n events = syncTreeRemoveEventRegistration(repo.infoSyncTree_, query, eventRegistration);\r\n }\r\n else {\r\n events = syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration);\r\n }\r\n eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\r\n}\r\nfunction repoInterrupt(repo) {\r\n if (repo.persistentConnection_) {\r\n repo.persistentConnection_.interrupt(INTERRUPT_REASON);\r\n }\r\n}\r\nfunction repoResume(repo) {\r\n if (repo.persistentConnection_) {\r\n repo.persistentConnection_.resume(INTERRUPT_REASON);\r\n }\r\n}\r\nfunction repoLog(repo, ...varArgs) {\r\n let prefix = '';\r\n if (repo.persistentConnection_) {\r\n prefix = repo.persistentConnection_.id + ':';\r\n }\r\n log(prefix, ...varArgs);\r\n}\r\nfunction repoCallOnCompleteCallback(repo, callback, status, errorReason) {\r\n if (callback) {\r\n exceptionGuard(() => {\r\n if (status === 'ok') {\r\n callback(null);\r\n }\r\n else {\r\n const code = (status || 'error').toUpperCase();\r\n let message = code;\r\n if (errorReason) {\r\n message += ': ' + errorReason;\r\n }\r\n const error = new Error(message);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error.code = code;\r\n callback(error);\r\n }\r\n });\r\n }\r\n}\r\n/**\r\n * Creates a new transaction, adds it to the transactions we're tracking, and\r\n * sends it to the server if possible.\r\n *\r\n * @param path - Path at which to do transaction.\r\n * @param transactionUpdate - Update callback.\r\n * @param onComplete - Completion callback.\r\n * @param unwatcher - Function that will be called when the transaction no longer\r\n * need data updates for `path`.\r\n * @param applyLocally - Whether or not to make intermediate results visible\r\n */\r\nfunction repoStartTransaction(repo, path, transactionUpdate, onComplete, unwatcher, applyLocally) {\r\n repoLog(repo, 'transaction on ' + path);\r\n // Initialize transaction.\r\n const transaction = {\r\n path,\r\n update: transactionUpdate,\r\n onComplete,\r\n // One of TransactionStatus enums.\r\n status: null,\r\n // Used when combining transactions at different locations to figure out\r\n // which one goes first.\r\n order: LUIDGenerator(),\r\n // Whether to raise local events for this transaction.\r\n applyLocally,\r\n // Count of how many times we've retried the transaction.\r\n retryCount: 0,\r\n // Function to call to clean up our .on() listener.\r\n unwatcher,\r\n // Stores why a transaction was aborted.\r\n abortReason: null,\r\n currentWriteId: null,\r\n currentInputSnapshot: null,\r\n currentOutputSnapshotRaw: null,\r\n currentOutputSnapshotResolved: null\r\n };\r\n // Run transaction initially.\r\n const currentState = repoGetLatestState(repo, path, undefined);\r\n transaction.currentInputSnapshot = currentState;\r\n const newVal = transaction.update(currentState.val());\r\n if (newVal === undefined) {\r\n // Abort transaction.\r\n transaction.unwatcher();\r\n transaction.currentOutputSnapshotRaw = null;\r\n transaction.currentOutputSnapshotResolved = null;\r\n if (transaction.onComplete) {\r\n transaction.onComplete(null, false, transaction.currentInputSnapshot);\r\n }\r\n }\r\n else {\r\n validateFirebaseData('transaction failed: Data returned ', newVal, transaction.path);\r\n // Mark as run and add to our queue.\r\n transaction.status = 0 /* TransactionStatus.RUN */;\r\n const queueNode = treeSubTree(repo.transactionQueueTree_, path);\r\n const nodeQueue = treeGetValue(queueNode) || [];\r\n nodeQueue.push(transaction);\r\n treeSetValue(queueNode, nodeQueue);\r\n // Update visibleData and raise events\r\n // Note: We intentionally raise events after updating all of our\r\n // transaction state, since the user could start new transactions from the\r\n // event callbacks.\r\n let priorityForNode;\r\n if (typeof newVal === 'object' &&\r\n newVal !== null &&\r\n contains(newVal, '.priority')) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n priorityForNode = safeGet(newVal, '.priority');\r\n assert(isValidPriority(priorityForNode), 'Invalid priority returned by transaction. ' +\r\n 'Priority must be a valid string, finite number, server value, or null.');\r\n }\r\n else {\r\n const currentNode = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path) ||\r\n ChildrenNode.EMPTY_NODE;\r\n priorityForNode = currentNode.getPriority().val();\r\n }\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeUnresolved = nodeFromJSON(newVal, priorityForNode);\r\n const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, currentState, serverValues);\r\n transaction.currentOutputSnapshotRaw = newNodeUnresolved;\r\n transaction.currentOutputSnapshotResolved = newNode;\r\n transaction.currentWriteId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, transaction.currentWriteId, transaction.applyLocally);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n }\r\n}\r\n/**\r\n * @param excludeSets - A specific set to exclude\r\n */\r\nfunction repoGetLatestState(repo, path, excludeSets) {\r\n return (syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path, excludeSets) ||\r\n ChildrenNode.EMPTY_NODE);\r\n}\r\n/**\r\n * Sends any already-run transactions that aren't waiting for outstanding\r\n * transactions to complete.\r\n *\r\n * Externally it's called with no arguments, but it calls itself recursively\r\n * with a particular transactionQueueTree node to recurse through the tree.\r\n *\r\n * @param node - transactionQueueTree node to start at.\r\n */\r\nfunction repoSendReadyTransactions(repo, node = repo.transactionQueueTree_) {\r\n // Before recursing, make sure any completed transactions are removed.\r\n if (!node) {\r\n repoPruneCompletedTransactionsBelowNode(repo, node);\r\n }\r\n if (treeGetValue(node)) {\r\n const queue = repoBuildTransactionQueue(repo, node);\r\n assert(queue.length > 0, 'Sending zero length transaction queue');\r\n const allRun = queue.every((transaction) => transaction.status === 0 /* TransactionStatus.RUN */);\r\n // If they're all run (and not sent), we can send them. Else, we must wait.\r\n if (allRun) {\r\n repoSendTransactionQueue(repo, treeGetPath(node), queue);\r\n }\r\n }\r\n else if (treeHasChildren(node)) {\r\n treeForEachChild(node, childNode => {\r\n repoSendReadyTransactions(repo, childNode);\r\n });\r\n }\r\n}\r\n/**\r\n * Given a list of run transactions, send them to the server and then handle\r\n * the result (success or failure).\r\n *\r\n * @param path - The location of the queue.\r\n * @param queue - Queue of transactions under the specified location.\r\n */\r\nfunction repoSendTransactionQueue(repo, path, queue) {\r\n // Mark transactions as sent and increment retry count!\r\n const setsToIgnore = queue.map(txn => {\r\n return txn.currentWriteId;\r\n });\r\n const latestState = repoGetLatestState(repo, path, setsToIgnore);\r\n let snapToSend = latestState;\r\n const latestHash = latestState.hash();\r\n for (let i = 0; i < queue.length; i++) {\r\n const txn = queue[i];\r\n assert(txn.status === 0 /* TransactionStatus.RUN */, 'tryToSendTransactionQueue_: items in queue should all be run.');\r\n txn.status = 1 /* TransactionStatus.SENT */;\r\n txn.retryCount++;\r\n const relativePath = newRelativePath(path, txn.path);\r\n // If we've gotten to this point, the output snapshot must be defined.\r\n snapToSend = snapToSend.updateChild(relativePath /** @type {!Node} */, txn.currentOutputSnapshotRaw);\r\n }\r\n const dataToSend = snapToSend.val(true);\r\n const pathToSend = path;\r\n // Send the put.\r\n repo.server_.put(pathToSend.toString(), dataToSend, (status) => {\r\n repoLog(repo, 'transaction put response', {\r\n path: pathToSend.toString(),\r\n status\r\n });\r\n let events = [];\r\n if (status === 'ok') {\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more\r\n // transactions or sets.\r\n const callbacks = [];\r\n for (let i = 0; i < queue.length; i++) {\r\n queue[i].status = 2 /* TransactionStatus.COMPLETED */;\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId));\r\n if (queue[i].onComplete) {\r\n // We never unset the output snapshot, and given that this\r\n // transaction is complete, it should be set\r\n callbacks.push(() => queue[i].onComplete(null, true, queue[i].currentOutputSnapshotResolved));\r\n }\r\n queue[i].unwatcher();\r\n }\r\n // Now remove the completed transactions.\r\n repoPruneCompletedTransactionsBelowNode(repo, treeSubTree(repo.transactionQueueTree_, path));\r\n // There may be pending transactions that we can now send.\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n // Finally, trigger onComplete callbacks.\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n }\r\n else {\r\n // transactions are no longer sent. Update their status appropriately.\r\n if (status === 'datastale') {\r\n for (let i = 0; i < queue.length; i++) {\r\n if (queue[i].status === 3 /* TransactionStatus.SENT_NEEDS_ABORT */) {\r\n queue[i].status = 4 /* TransactionStatus.NEEDS_ABORT */;\r\n }\r\n else {\r\n queue[i].status = 0 /* TransactionStatus.RUN */;\r\n }\r\n }\r\n }\r\n else {\r\n warn('transaction at ' + pathToSend.toString() + ' failed: ' + status);\r\n for (let i = 0; i < queue.length; i++) {\r\n queue[i].status = 4 /* TransactionStatus.NEEDS_ABORT */;\r\n queue[i].abortReason = status;\r\n }\r\n }\r\n repoRerunTransactions(repo, path);\r\n }\r\n }, latestHash);\r\n}\r\n/**\r\n * Finds all transactions dependent on the data at changedPath and reruns them.\r\n *\r\n * Should be called any time cached data changes.\r\n *\r\n * Return the highest path that was affected by rerunning transactions. This\r\n * is the path at which events need to be raised for.\r\n *\r\n * @param changedPath - The path in mergedData that changed.\r\n * @returns The rootmost path that was affected by rerunning transactions.\r\n */\r\nfunction repoRerunTransactions(repo, changedPath) {\r\n const rootMostTransactionNode = repoGetAncestorTransactionNode(repo, changedPath);\r\n const path = treeGetPath(rootMostTransactionNode);\r\n const queue = repoBuildTransactionQueue(repo, rootMostTransactionNode);\r\n repoRerunTransactionQueue(repo, queue, path);\r\n return path;\r\n}\r\n/**\r\n * Does all the work of rerunning transactions (as well as cleans up aborted\r\n * transactions and whatnot).\r\n *\r\n * @param queue - The queue of transactions to run.\r\n * @param path - The path the queue is for.\r\n */\r\nfunction repoRerunTransactionQueue(repo, queue, path) {\r\n if (queue.length === 0) {\r\n return; // Nothing to do!\r\n }\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more transactions or\r\n // sets.\r\n const callbacks = [];\r\n let events = [];\r\n // Ignore all of the sets we're going to re-run.\r\n const txnsToRerun = queue.filter(q => {\r\n return q.status === 0 /* TransactionStatus.RUN */;\r\n });\r\n const setsToIgnore = txnsToRerun.map(q => {\r\n return q.currentWriteId;\r\n });\r\n for (let i = 0; i < queue.length; i++) {\r\n const transaction = queue[i];\r\n const relativePath = newRelativePath(path, transaction.path);\r\n let abortTransaction = false, abortReason;\r\n assert(relativePath !== null, 'rerunTransactionsUnderNode_: relativePath should not be null.');\r\n if (transaction.status === 4 /* TransactionStatus.NEEDS_ABORT */) {\r\n abortTransaction = true;\r\n abortReason = transaction.abortReason;\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n else if (transaction.status === 0 /* TransactionStatus.RUN */) {\r\n if (transaction.retryCount >= MAX_TRANSACTION_RETRIES) {\r\n abortTransaction = true;\r\n abortReason = 'maxretry';\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n else {\r\n // This code reruns a transaction\r\n const currentNode = repoGetLatestState(repo, transaction.path, setsToIgnore);\r\n transaction.currentInputSnapshot = currentNode;\r\n const newData = queue[i].update(currentNode.val());\r\n if (newData !== undefined) {\r\n validateFirebaseData('transaction failed: Data returned ', newData, transaction.path);\r\n let newDataNode = nodeFromJSON(newData);\r\n const hasExplicitPriority = typeof newData === 'object' &&\r\n newData != null &&\r\n contains(newData, '.priority');\r\n if (!hasExplicitPriority) {\r\n // Keep the old priority if there wasn't a priority explicitly specified.\r\n newDataNode = newDataNode.updatePriority(currentNode.getPriority());\r\n }\r\n const oldWriteId = transaction.currentWriteId;\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeResolved = resolveDeferredValueSnapshot(newDataNode, currentNode, serverValues);\r\n transaction.currentOutputSnapshotRaw = newDataNode;\r\n transaction.currentOutputSnapshotResolved = newNodeResolved;\r\n transaction.currentWriteId = repoGetNextWriteId(repo);\r\n // Mutates setsToIgnore in place\r\n setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);\r\n events = events.concat(syncTreeApplyUserOverwrite(repo.serverSyncTree_, transaction.path, newNodeResolved, transaction.currentWriteId, transaction.applyLocally));\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, oldWriteId, true));\r\n }\r\n else {\r\n abortTransaction = true;\r\n abortReason = 'nodata';\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n }\r\n }\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n events = [];\r\n if (abortTransaction) {\r\n // Abort.\r\n queue[i].status = 2 /* TransactionStatus.COMPLETED */;\r\n // Removing a listener can trigger pruning which can muck with\r\n // mergedData/visibleData (as it prunes data). So defer the unwatcher\r\n // until we're done.\r\n (function (unwatcher) {\r\n setTimeout(unwatcher, Math.floor(0));\r\n })(queue[i].unwatcher);\r\n if (queue[i].onComplete) {\r\n if (abortReason === 'nodata') {\r\n callbacks.push(() => queue[i].onComplete(null, false, queue[i].currentInputSnapshot));\r\n }\r\n else {\r\n callbacks.push(() => queue[i].onComplete(new Error(abortReason), false, null));\r\n }\r\n }\r\n }\r\n }\r\n // Clean up completed transactions.\r\n repoPruneCompletedTransactionsBelowNode(repo, repo.transactionQueueTree_);\r\n // Now fire callbacks, now that we're in a good, known state.\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n // Try to send the transaction result to the server.\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n}\r\n/**\r\n * Returns the rootmost ancestor node of the specified path that has a pending\r\n * transaction on it, or just returns the node for the given path if there are\r\n * no pending transactions on any ancestor.\r\n *\r\n * @param path - The location to start at.\r\n * @returns The rootmost node with a transaction.\r\n */\r\nfunction repoGetAncestorTransactionNode(repo, path) {\r\n let front;\r\n // Start at the root and walk deeper into the tree towards path until we\r\n // find a node with pending transactions.\r\n let transactionNode = repo.transactionQueueTree_;\r\n front = pathGetFront(path);\r\n while (front !== null && treeGetValue(transactionNode) === undefined) {\r\n transactionNode = treeSubTree(transactionNode, front);\r\n path = pathPopFront(path);\r\n front = pathGetFront(path);\r\n }\r\n return transactionNode;\r\n}\r\n/**\r\n * Builds the queue of all transactions at or below the specified\r\n * transactionNode.\r\n *\r\n * @param transactionNode\r\n * @returns The generated queue.\r\n */\r\nfunction repoBuildTransactionQueue(repo, transactionNode) {\r\n // Walk any child transaction queues and aggregate them into a single queue.\r\n const transactionQueue = [];\r\n repoAggregateTransactionQueuesForNode(repo, transactionNode, transactionQueue);\r\n // Sort them by the order the transactions were created.\r\n transactionQueue.sort((a, b) => a.order - b.order);\r\n return transactionQueue;\r\n}\r\nfunction repoAggregateTransactionQueuesForNode(repo, node, queue) {\r\n const nodeQueue = treeGetValue(node);\r\n if (nodeQueue) {\r\n for (let i = 0; i < nodeQueue.length; i++) {\r\n queue.push(nodeQueue[i]);\r\n }\r\n }\r\n treeForEachChild(node, child => {\r\n repoAggregateTransactionQueuesForNode(repo, child, queue);\r\n });\r\n}\r\n/**\r\n * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.\r\n */\r\nfunction repoPruneCompletedTransactionsBelowNode(repo, node) {\r\n const queue = treeGetValue(node);\r\n if (queue) {\r\n let to = 0;\r\n for (let from = 0; from < queue.length; from++) {\r\n if (queue[from].status !== 2 /* TransactionStatus.COMPLETED */) {\r\n queue[to] = queue[from];\r\n to++;\r\n }\r\n }\r\n queue.length = to;\r\n treeSetValue(node, queue.length > 0 ? queue : undefined);\r\n }\r\n treeForEachChild(node, childNode => {\r\n repoPruneCompletedTransactionsBelowNode(repo, childNode);\r\n });\r\n}\r\n/**\r\n * Aborts all transactions on ancestors or descendants of the specified path.\r\n * Called when doing a set() or update() since we consider them incompatible\r\n * with transactions.\r\n *\r\n * @param path - Path for which we want to abort related transactions.\r\n */\r\nfunction repoAbortTransactions(repo, path) {\r\n const affectedPath = treeGetPath(repoGetAncestorTransactionNode(repo, path));\r\n const transactionNode = treeSubTree(repo.transactionQueueTree_, path);\r\n treeForEachAncestor(transactionNode, (node) => {\r\n repoAbortTransactionsOnNode(repo, node);\r\n });\r\n repoAbortTransactionsOnNode(repo, transactionNode);\r\n treeForEachDescendant(transactionNode, (node) => {\r\n repoAbortTransactionsOnNode(repo, node);\r\n });\r\n return affectedPath;\r\n}\r\n/**\r\n * Abort transactions stored in this transaction queue node.\r\n *\r\n * @param node - Node to abort transactions for.\r\n */\r\nfunction repoAbortTransactionsOnNode(repo, node) {\r\n const queue = treeGetValue(node);\r\n if (queue) {\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more transactions\r\n // or sets.\r\n const callbacks = [];\r\n // Go through queue. Any already-sent transactions must be marked for\r\n // abort, while the unsent ones can be immediately aborted and removed.\r\n let events = [];\r\n let lastSent = -1;\r\n for (let i = 0; i < queue.length; i++) {\r\n if (queue[i].status === 3 /* TransactionStatus.SENT_NEEDS_ABORT */) ;\r\n else if (queue[i].status === 1 /* TransactionStatus.SENT */) {\r\n assert(lastSent === i - 1, 'All SENT items should be at beginning of queue.');\r\n lastSent = i;\r\n // Mark transaction for abort when it comes back.\r\n queue[i].status = 3 /* TransactionStatus.SENT_NEEDS_ABORT */;\r\n queue[i].abortReason = 'set';\r\n }\r\n else {\r\n assert(queue[i].status === 0 /* TransactionStatus.RUN */, 'Unexpected transaction status in abort');\r\n // We can abort it immediately.\r\n queue[i].unwatcher();\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId, true));\r\n if (queue[i].onComplete) {\r\n callbacks.push(queue[i].onComplete.bind(null, new Error('set'), false, null));\r\n }\r\n }\r\n }\r\n if (lastSent === -1) {\r\n // We're not waiting for any sent transactions. We can clear the queue.\r\n treeSetValue(node, undefined);\r\n }\r\n else {\r\n // Remove the transactions we aborted.\r\n queue.length = lastSent + 1;\r\n }\r\n // Now fire the callbacks.\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, treeGetPath(node), events);\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction decodePath(pathString) {\r\n let pathStringDecoded = '';\r\n const pieces = pathString.split('/');\r\n for (let i = 0; i < pieces.length; i++) {\r\n if (pieces[i].length > 0) {\r\n let piece = pieces[i];\r\n try {\r\n piece = decodeURIComponent(piece.replace(/\\+/g, ' '));\r\n }\r\n catch (e) { }\r\n pathStringDecoded += '/' + piece;\r\n }\r\n }\r\n return pathStringDecoded;\r\n}\r\n/**\r\n * @returns key value hash\r\n */\r\nfunction decodeQuery(queryString) {\r\n const results = {};\r\n if (queryString.charAt(0) === '?') {\r\n queryString = queryString.substring(1);\r\n }\r\n for (const segment of queryString.split('&')) {\r\n if (segment.length === 0) {\r\n continue;\r\n }\r\n const kv = segment.split('=');\r\n if (kv.length === 2) {\r\n results[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);\r\n }\r\n else {\r\n warn(`Invalid query segment '${segment}' in query '${queryString}'`);\r\n }\r\n }\r\n return results;\r\n}\r\nconst parseRepoInfo = function (dataURL, nodeAdmin) {\r\n const parsedUrl = parseDatabaseURL(dataURL), namespace = parsedUrl.namespace;\r\n if (parsedUrl.domain === 'firebase.com') {\r\n fatal(parsedUrl.host +\r\n ' is no longer supported. ' +\r\n 'Please use .firebaseio.com instead');\r\n }\r\n // Catch common error of uninitialized namespace value.\r\n if ((!namespace || namespace === 'undefined') &&\r\n parsedUrl.domain !== 'localhost') {\r\n fatal('Cannot parse Firebase url. Please use https://.firebaseio.com');\r\n }\r\n if (!parsedUrl.secure) {\r\n warnIfPageIsSecure();\r\n }\r\n const webSocketOnly = parsedUrl.scheme === 'ws' || parsedUrl.scheme === 'wss';\r\n return {\r\n repoInfo: new RepoInfo(parsedUrl.host, parsedUrl.secure, namespace, webSocketOnly, nodeAdmin, \r\n /*persistenceKey=*/ '', \r\n /*includeNamespaceInQueryParams=*/ namespace !== parsedUrl.subdomain),\r\n path: new Path(parsedUrl.pathString)\r\n };\r\n};\r\nconst parseDatabaseURL = function (dataURL) {\r\n // Default to empty strings in the event of a malformed string.\r\n let host = '', domain = '', subdomain = '', pathString = '', namespace = '';\r\n // Always default to SSL, unless otherwise specified.\r\n let secure = true, scheme = 'https', port = 443;\r\n // Don't do any validation here. The caller is responsible for validating the result of parsing.\r\n if (typeof dataURL === 'string') {\r\n // Parse scheme.\r\n let colonInd = dataURL.indexOf('//');\r\n if (colonInd >= 0) {\r\n scheme = dataURL.substring(0, colonInd - 1);\r\n dataURL = dataURL.substring(colonInd + 2);\r\n }\r\n // Parse host, path, and query string.\r\n let slashInd = dataURL.indexOf('/');\r\n if (slashInd === -1) {\r\n slashInd = dataURL.length;\r\n }\r\n let questionMarkInd = dataURL.indexOf('?');\r\n if (questionMarkInd === -1) {\r\n questionMarkInd = dataURL.length;\r\n }\r\n host = dataURL.substring(0, Math.min(slashInd, questionMarkInd));\r\n if (slashInd < questionMarkInd) {\r\n // For pathString, questionMarkInd will always come after slashInd\r\n pathString = decodePath(dataURL.substring(slashInd, questionMarkInd));\r\n }\r\n const queryParams = decodeQuery(dataURL.substring(Math.min(dataURL.length, questionMarkInd)));\r\n // If we have a port, use scheme for determining if it's secure.\r\n colonInd = host.indexOf(':');\r\n if (colonInd >= 0) {\r\n secure = scheme === 'https' || scheme === 'wss';\r\n port = parseInt(host.substring(colonInd + 1), 10);\r\n }\r\n else {\r\n colonInd = host.length;\r\n }\r\n const hostWithoutPort = host.slice(0, colonInd);\r\n if (hostWithoutPort.toLowerCase() === 'localhost') {\r\n domain = 'localhost';\r\n }\r\n else if (hostWithoutPort.split('.').length <= 2) {\r\n domain = hostWithoutPort;\r\n }\r\n else {\r\n // Interpret the subdomain of a 3 or more component URL as the namespace name.\r\n const dotInd = host.indexOf('.');\r\n subdomain = host.substring(0, dotInd).toLowerCase();\r\n domain = host.substring(dotInd + 1);\r\n // Normalize namespaces to lowercase to share storage / connection.\r\n namespace = subdomain;\r\n }\r\n // Always treat the value of the `ns` as the namespace name if it is present.\r\n if ('ns' in queryParams) {\r\n namespace = queryParams['ns'];\r\n }\r\n }\r\n return {\r\n host,\r\n port,\r\n domain,\r\n subdomain,\r\n secure,\r\n scheme,\r\n pathString,\r\n namespace\r\n };\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Modeled after base64 web-safe chars, but ordered by ASCII.\r\nconst PUSH_CHARS = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';\r\n/**\r\n * Fancy ID generator that creates 20-character string identifiers with the\r\n * following properties:\r\n *\r\n * 1. They're based on timestamp so that they sort *after* any existing ids.\r\n * 2. They contain 72-bits of random data after the timestamp so that IDs won't\r\n * collide with other clients' IDs.\r\n * 3. They sort *lexicographically* (so the timestamp is converted to characters\r\n * that will sort properly).\r\n * 4. They're monotonically increasing. Even if you generate more than one in\r\n * the same timestamp, the latter ones will sort after the former ones. We do\r\n * this by using the previous random bits but \"incrementing\" them by 1 (only\r\n * in the case of a timestamp collision).\r\n */\r\nconst nextPushId = (function () {\r\n // Timestamp of last push, used to prevent local collisions if you push twice\r\n // in one ms.\r\n let lastPushTime = 0;\r\n // We generate 72-bits of randomness which get turned into 12 characters and\r\n // appended to the timestamp to prevent collisions with other clients. We\r\n // store the last characters we generated because in the event of a collision,\r\n // we'll use those same characters except \"incremented\" by one.\r\n const lastRandChars = [];\r\n return function (now) {\r\n const duplicateTime = now === lastPushTime;\r\n lastPushTime = now;\r\n let i;\r\n const timeStampChars = new Array(8);\r\n for (i = 7; i >= 0; i--) {\r\n timeStampChars[i] = PUSH_CHARS.charAt(now % 64);\r\n // NOTE: Can't use << here because javascript will convert to int and lose\r\n // the upper bits.\r\n now = Math.floor(now / 64);\r\n }\r\n assert(now === 0, 'Cannot push at time == 0');\r\n let id = timeStampChars.join('');\r\n if (!duplicateTime) {\r\n for (i = 0; i < 12; i++) {\r\n lastRandChars[i] = Math.floor(Math.random() * 64);\r\n }\r\n }\r\n else {\r\n // If the timestamp hasn't changed since last push, use the same random\r\n // number, except incremented by 1.\r\n for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {\r\n lastRandChars[i] = 0;\r\n }\r\n lastRandChars[i]++;\r\n }\r\n for (i = 0; i < 12; i++) {\r\n id += PUSH_CHARS.charAt(lastRandChars[i]);\r\n }\r\n assert(id.length === 20, 'nextPushId: Length should be 20.');\r\n return id;\r\n };\r\n})();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Encapsulates the data needed to raise an event\r\n */\r\nclass DataEvent {\r\n /**\r\n * @param eventType - One of: value, child_added, child_changed, child_moved, child_removed\r\n * @param eventRegistration - The function to call to with the event data. User provided\r\n * @param snapshot - The data backing the event\r\n * @param prevName - Optional, the name of the previous child for child_* events.\r\n */\r\n constructor(eventType, eventRegistration, snapshot, prevName) {\r\n this.eventType = eventType;\r\n this.eventRegistration = eventRegistration;\r\n this.snapshot = snapshot;\r\n this.prevName = prevName;\r\n }\r\n getPath() {\r\n const ref = this.snapshot.ref;\r\n if (this.eventType === 'value') {\r\n return ref._path;\r\n }\r\n else {\r\n return ref.parent._path;\r\n }\r\n }\r\n getEventType() {\r\n return this.eventType;\r\n }\r\n getEventRunner() {\r\n return this.eventRegistration.getEventRunner(this);\r\n }\r\n toString() {\r\n return (this.getPath().toString() +\r\n ':' +\r\n this.eventType +\r\n ':' +\r\n stringify(this.snapshot.exportVal()));\r\n }\r\n}\r\nclass CancelEvent {\r\n constructor(eventRegistration, error, path) {\r\n this.eventRegistration = eventRegistration;\r\n this.error = error;\r\n this.path = path;\r\n }\r\n getPath() {\r\n return this.path;\r\n }\r\n getEventType() {\r\n return 'cancel';\r\n }\r\n getEventRunner() {\r\n return this.eventRegistration.getEventRunner(this);\r\n }\r\n toString() {\r\n return this.path.toString() + ':cancel';\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A wrapper class that converts events from the database@exp SDK to the legacy\r\n * Database SDK. Events are not converted directly as event registration relies\r\n * on reference comparison of the original user callback (see `matches()`) and\r\n * relies on equality of the legacy SDK's `context` object.\r\n */\r\nclass CallbackContext {\r\n constructor(snapshotCallback, cancelCallback) {\r\n this.snapshotCallback = snapshotCallback;\r\n this.cancelCallback = cancelCallback;\r\n }\r\n onValue(expDataSnapshot, previousChildName) {\r\n this.snapshotCallback.call(null, expDataSnapshot, previousChildName);\r\n }\r\n onCancel(error) {\r\n assert(this.hasCancelCallback, 'Raising a cancel event on a listener with no cancel callback');\r\n return this.cancelCallback.call(null, error);\r\n }\r\n get hasCancelCallback() {\r\n return !!this.cancelCallback;\r\n }\r\n matches(other) {\r\n return (this.snapshotCallback === other.snapshotCallback ||\r\n (this.snapshotCallback.userCallback !== undefined &&\r\n this.snapshotCallback.userCallback ===\r\n other.snapshotCallback.userCallback &&\r\n this.snapshotCallback.context === other.snapshotCallback.context));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The `onDisconnect` class allows you to write or clear data when your client\r\n * disconnects from the Database server. These updates occur whether your\r\n * client disconnects cleanly or not, so you can rely on them to clean up data\r\n * even if a connection is dropped or a client crashes.\r\n *\r\n * The `onDisconnect` class is most commonly used to manage presence in\r\n * applications where it is useful to detect how many clients are connected and\r\n * when other clients disconnect. See\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information.\r\n *\r\n * To avoid problems when a connection is dropped before the requests can be\r\n * transferred to the Database server, these functions should be called before\r\n * writing any data.\r\n *\r\n * Note that `onDisconnect` operations are only triggered once. If you want an\r\n * operation to occur each time a disconnect occurs, you'll need to re-establish\r\n * the `onDisconnect` operations each time you reconnect.\r\n */\r\nclass OnDisconnect {\r\n /** @hideconstructor */\r\n constructor(_repo, _path) {\r\n this._repo = _repo;\r\n this._path = _path;\r\n }\r\n /**\r\n * Cancels all previously queued `onDisconnect()` set or update events for this\r\n * location and all children.\r\n *\r\n * If a write has been queued for this location via a `set()` or `update()` at a\r\n * parent location, the write at this location will be canceled, though writes\r\n * to sibling locations will still occur.\r\n *\r\n * @returns Resolves when synchronization to the server is complete.\r\n */\r\n cancel() {\r\n const deferred = new Deferred();\r\n repoOnDisconnectCancel(this._repo, this._path, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is deleted when the client is disconnected\r\n * (due to closing the browser, navigating to a new page, or network issues).\r\n *\r\n * @returns Resolves when synchronization to the server is complete.\r\n */\r\n remove() {\r\n validateWritablePath('OnDisconnect.remove', this._path);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSet(this._repo, this._path, null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is set to the specified value when the\r\n * client is disconnected (due to closing the browser, navigating to a new page,\r\n * or network issues).\r\n *\r\n * `set()` is especially useful for implementing \"presence\" systems, where a\r\n * value should be changed or cleared when a user disconnects so that they\r\n * appear \"offline\" to other users. See\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information.\r\n *\r\n * Note that `onDisconnect` operations are only triggered once. If you want an\r\n * operation to occur each time a disconnect occurs, you'll need to re-establish\r\n * the `onDisconnect` operations each time.\r\n *\r\n * @param value - The value to be written to this location on disconnect (can\r\n * be an object, array, string, number, boolean, or null).\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n set(value) {\r\n validateWritablePath('OnDisconnect.set', this._path);\r\n validateFirebaseDataArg('OnDisconnect.set', value, this._path, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSet(this._repo, this._path, value, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is set to the specified value and priority\r\n * when the client is disconnected (due to closing the browser, navigating to a\r\n * new page, or network issues).\r\n *\r\n * @param value - The value to be written to this location on disconnect (can\r\n * be an object, array, string, number, boolean, or null).\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n setWithPriority(value, priority) {\r\n validateWritablePath('OnDisconnect.setWithPriority', this._path);\r\n validateFirebaseDataArg('OnDisconnect.setWithPriority', value, this._path, false);\r\n validatePriority('OnDisconnect.setWithPriority', priority, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSetWithPriority(this._repo, this._path, value, priority, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Writes multiple values at this location when the client is disconnected (due\r\n * to closing the browser, navigating to a new page, or network issues).\r\n *\r\n * The `values` argument contains multiple property-value pairs that will be\r\n * written to the Database together. Each child property can either be a simple\r\n * property (for example, \"name\") or a relative path (for example, \"name/first\")\r\n * from the current location to the data to update.\r\n *\r\n * As opposed to the `set()` method, `update()` can be use to selectively update\r\n * only the referenced properties at the current location (instead of replacing\r\n * all the child properties at the current location).\r\n *\r\n * @param values - Object containing multiple values.\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n update(values) {\r\n validateWritablePath('OnDisconnect.update', this._path);\r\n validateFirebaseMergeDataArg('OnDisconnect.update', values, this._path, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectUpdate(this._repo, this._path, values, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nclass QueryImpl {\r\n /**\r\n * @hideconstructor\r\n */\r\n constructor(_repo, _path, _queryParams, _orderByCalled) {\r\n this._repo = _repo;\r\n this._path = _path;\r\n this._queryParams = _queryParams;\r\n this._orderByCalled = _orderByCalled;\r\n }\r\n get key() {\r\n if (pathIsEmpty(this._path)) {\r\n return null;\r\n }\r\n else {\r\n return pathGetBack(this._path);\r\n }\r\n }\r\n get ref() {\r\n return new ReferenceImpl(this._repo, this._path);\r\n }\r\n get _queryIdentifier() {\r\n const obj = queryParamsGetQueryObject(this._queryParams);\r\n const id = ObjectToUniqueKey(obj);\r\n return id === '{}' ? 'default' : id;\r\n }\r\n /**\r\n * An object representation of the query parameters used by this Query.\r\n */\r\n get _queryObject() {\r\n return queryParamsGetQueryObject(this._queryParams);\r\n }\r\n isEqual(other) {\r\n other = getModularInstance(other);\r\n if (!(other instanceof QueryImpl)) {\r\n return false;\r\n }\r\n const sameRepo = this._repo === other._repo;\r\n const samePath = pathEquals(this._path, other._path);\r\n const sameQueryIdentifier = this._queryIdentifier === other._queryIdentifier;\r\n return sameRepo && samePath && sameQueryIdentifier;\r\n }\r\n toJSON() {\r\n return this.toString();\r\n }\r\n toString() {\r\n return this._repo.toString() + pathToUrlEncodedString(this._path);\r\n }\r\n}\r\n/**\r\n * Validates that no other order by call has been made\r\n */\r\nfunction validateNoPreviousOrderByCall(query, fnName) {\r\n if (query._orderByCalled === true) {\r\n throw new Error(fnName + \": You can't combine multiple orderBy calls.\");\r\n }\r\n}\r\n/**\r\n * Validates start/end values for queries.\r\n */\r\nfunction validateQueryEndpoints(params) {\r\n let startNode = null;\r\n let endNode = null;\r\n if (params.hasStart()) {\r\n startNode = params.getIndexStartValue();\r\n }\r\n if (params.hasEnd()) {\r\n endNode = params.getIndexEndValue();\r\n }\r\n if (params.getIndex() === KEY_INDEX) {\r\n const tooManyArgsError = 'Query: When ordering by key, you may only pass one argument to ' +\r\n 'startAt(), endAt(), or equalTo().';\r\n const wrongArgTypeError = 'Query: When ordering by key, the argument passed to startAt(), startAfter(), ' +\r\n 'endAt(), endBefore(), or equalTo() must be a string.';\r\n if (params.hasStart()) {\r\n const startName = params.getIndexStartName();\r\n if (startName !== MIN_NAME) {\r\n throw new Error(tooManyArgsError);\r\n }\r\n else if (typeof startNode !== 'string') {\r\n throw new Error(wrongArgTypeError);\r\n }\r\n }\r\n if (params.hasEnd()) {\r\n const endName = params.getIndexEndName();\r\n if (endName !== MAX_NAME) {\r\n throw new Error(tooManyArgsError);\r\n }\r\n else if (typeof endNode !== 'string') {\r\n throw new Error(wrongArgTypeError);\r\n }\r\n }\r\n }\r\n else if (params.getIndex() === PRIORITY_INDEX) {\r\n if ((startNode != null && !isValidPriority(startNode)) ||\r\n (endNode != null && !isValidPriority(endNode))) {\r\n throw new Error('Query: When ordering by priority, the first argument passed to startAt(), ' +\r\n 'startAfter() endAt(), endBefore(), or equalTo() must be a valid priority value ' +\r\n '(null, a number, or a string).');\r\n }\r\n }\r\n else {\r\n assert(params.getIndex() instanceof PathIndex ||\r\n params.getIndex() === VALUE_INDEX, 'unknown index type.');\r\n if ((startNode != null && typeof startNode === 'object') ||\r\n (endNode != null && typeof endNode === 'object')) {\r\n throw new Error('Query: First argument passed to startAt(), startAfter(), endAt(), endBefore(), or ' +\r\n 'equalTo() cannot be an object.');\r\n }\r\n }\r\n}\r\n/**\r\n * Validates that limit* has been called with the correct combination of parameters\r\n */\r\nfunction validateLimit(params) {\r\n if (params.hasStart() &&\r\n params.hasEnd() &&\r\n params.hasLimit() &&\r\n !params.hasAnchoredLimit()) {\r\n throw new Error(\"Query: Can't combine startAt(), startAfter(), endAt(), endBefore(), and limit(). Use \" +\r\n 'limitToFirst() or limitToLast() instead.');\r\n }\r\n}\r\n/**\r\n * @internal\r\n */\r\nclass ReferenceImpl extends QueryImpl {\r\n /** @hideconstructor */\r\n constructor(repo, path) {\r\n super(repo, path, new QueryParams(), false);\r\n }\r\n get parent() {\r\n const parentPath = pathParent(this._path);\r\n return parentPath === null\r\n ? null\r\n : new ReferenceImpl(this._repo, parentPath);\r\n }\r\n get root() {\r\n let ref = this;\r\n while (ref.parent !== null) {\r\n ref = ref.parent;\r\n }\r\n return ref;\r\n }\r\n}\r\n/**\r\n * A `DataSnapshot` contains data from a Database location.\r\n *\r\n * Any time you read data from the Database, you receive the data as a\r\n * `DataSnapshot`. A `DataSnapshot` is passed to the event callbacks you attach\r\n * with `on()` or `once()`. You can extract the contents of the snapshot as a\r\n * JavaScript object by calling the `val()` method. Alternatively, you can\r\n * traverse into the snapshot by calling `child()` to return child snapshots\r\n * (which you could then call `val()` on).\r\n *\r\n * A `DataSnapshot` is an efficiently generated, immutable copy of the data at\r\n * a Database location. It cannot be modified and will never change (to modify\r\n * data, you always call the `set()` method on a `Reference` directly).\r\n */\r\nclass DataSnapshot {\r\n /**\r\n * @param _node - A SnapshotNode to wrap.\r\n * @param ref - The location this snapshot came from.\r\n * @param _index - The iteration order for this snapshot\r\n * @hideconstructor\r\n */\r\n constructor(_node, \r\n /**\r\n * The location of this DataSnapshot.\r\n */\r\n ref, _index) {\r\n this._node = _node;\r\n this.ref = ref;\r\n this._index = _index;\r\n }\r\n /**\r\n * Gets the priority value of the data in this `DataSnapshot`.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data |Sorting and filtering data}\r\n * ).\r\n */\r\n get priority() {\r\n // typecast here because we never return deferred values or internal priorities (MAX_PRIORITY)\r\n return this._node.getPriority().val();\r\n }\r\n /**\r\n * The key (last part of the path) of the location of this `DataSnapshot`.\r\n *\r\n * The last token in a Database location is considered its key. For example,\r\n * \"ada\" is the key for the /users/ada/ node. Accessing the key on any\r\n * `DataSnapshot` will return the key for the location that generated it.\r\n * However, accessing the key on the root URL of a Database will return\r\n * `null`.\r\n */\r\n get key() {\r\n return this.ref.key;\r\n }\r\n /** Returns the number of child properties of this `DataSnapshot`. */\r\n get size() {\r\n return this._node.numChildren();\r\n }\r\n /**\r\n * Gets another `DataSnapshot` for the location at the specified relative path.\r\n *\r\n * Passing a relative path to the `child()` method of a DataSnapshot returns\r\n * another `DataSnapshot` for the location at the specified relative path. The\r\n * relative path can either be a simple child name (for example, \"ada\") or a\r\n * deeper, slash-separated path (for example, \"ada/name/first\"). If the child\r\n * location has no data, an empty `DataSnapshot` (that is, a `DataSnapshot`\r\n * whose value is `null`) is returned.\r\n *\r\n * @param path - A relative path to the location of child data.\r\n */\r\n child(path) {\r\n const childPath = new Path(path);\r\n const childRef = child(this.ref, path);\r\n return new DataSnapshot(this._node.getChild(childPath), childRef, PRIORITY_INDEX);\r\n }\r\n /**\r\n * Returns true if this `DataSnapshot` contains any data. It is slightly more\r\n * efficient than using `snapshot.val() !== null`.\r\n */\r\n exists() {\r\n return !this._node.isEmpty();\r\n }\r\n /**\r\n * Exports the entire contents of the DataSnapshot as a JavaScript object.\r\n *\r\n * The `exportVal()` method is similar to `val()`, except priority information\r\n * is included (if available), making it suitable for backing up your data.\r\n *\r\n * @returns The DataSnapshot's contents as a JavaScript value (Object,\r\n * Array, string, number, boolean, or `null`).\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n exportVal() {\r\n return this._node.val(true);\r\n }\r\n /**\r\n * Enumerates the top-level children in the `IteratedDataSnapshot`.\r\n *\r\n * Because of the way JavaScript objects work, the ordering of data in the\r\n * JavaScript object returned by `val()` is not guaranteed to match the\r\n * ordering on the server nor the ordering of `onChildAdded()` events. That is\r\n * where `forEach()` comes in handy. It guarantees the children of a\r\n * `DataSnapshot` will be iterated in their query order.\r\n *\r\n * If no explicit `orderBy*()` method is used, results are returned\r\n * ordered by key (unless priorities are used, in which case, results are\r\n * returned by priority).\r\n *\r\n * @param action - A function that will be called for each child DataSnapshot.\r\n * The callback can return true to cancel further enumeration.\r\n * @returns true if enumeration was canceled due to your callback returning\r\n * true.\r\n */\r\n forEach(action) {\r\n if (this._node.isLeafNode()) {\r\n return false;\r\n }\r\n const childrenNode = this._node;\r\n // Sanitize the return value to a boolean. ChildrenNode.forEachChild has a weird return type...\r\n return !!childrenNode.forEachChild(this._index, (key, node) => {\r\n return action(new DataSnapshot(node, child(this.ref, key), PRIORITY_INDEX));\r\n });\r\n }\r\n /**\r\n * Returns true if the specified child path has (non-null) data.\r\n *\r\n * @param path - A relative path to the location of a potential child.\r\n * @returns `true` if data exists at the specified child path; else\r\n * `false`.\r\n */\r\n hasChild(path) {\r\n const childPath = new Path(path);\r\n return !this._node.getChild(childPath).isEmpty();\r\n }\r\n /**\r\n * Returns whether or not the `DataSnapshot` has any non-`null` child\r\n * properties.\r\n *\r\n * You can use `hasChildren()` to determine if a `DataSnapshot` has any\r\n * children. If it does, you can enumerate them using `forEach()`. If it\r\n * doesn't, then either this snapshot contains a primitive value (which can be\r\n * retrieved with `val()`) or it is empty (in which case, `val()` will return\r\n * `null`).\r\n *\r\n * @returns true if this snapshot has any children; else false.\r\n */\r\n hasChildren() {\r\n if (this._node.isLeafNode()) {\r\n return false;\r\n }\r\n else {\r\n return !this._node.isEmpty();\r\n }\r\n }\r\n /**\r\n * Returns a JSON-serializable representation of this object.\r\n */\r\n toJSON() {\r\n return this.exportVal();\r\n }\r\n /**\r\n * Extracts a JavaScript value from a `DataSnapshot`.\r\n *\r\n * Depending on the data in a `DataSnapshot`, the `val()` method may return a\r\n * scalar type (string, number, or boolean), an array, or an object. It may\r\n * also return null, indicating that the `DataSnapshot` is empty (contains no\r\n * data).\r\n *\r\n * @returns The DataSnapshot's contents as a JavaScript value (Object,\r\n * Array, string, number, boolean, or `null`).\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n val() {\r\n return this._node.val();\r\n }\r\n}\r\n/**\r\n *\r\n * Returns a `Reference` representing the location in the Database\r\n * corresponding to the provided path. If no path is provided, the `Reference`\r\n * will point to the root of the Database.\r\n *\r\n * @param db - The database instance to obtain a reference for.\r\n * @param path - Optional path representing the location the returned\r\n * `Reference` will point. If not provided, the returned `Reference` will\r\n * point to the root of the Database.\r\n * @returns If a path is provided, a `Reference`\r\n * pointing to the provided path. Otherwise, a `Reference` pointing to the\r\n * root of the Database.\r\n */\r\nfunction ref(db, path) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('ref');\r\n return path !== undefined ? child(db._root, path) : db._root;\r\n}\r\n/**\r\n * Returns a `Reference` representing the location in the Database\r\n * corresponding to the provided Firebase URL.\r\n *\r\n * An exception is thrown if the URL is not a valid Firebase Database URL or it\r\n * has a different domain than the current `Database` instance.\r\n *\r\n * Note that all query parameters (`orderBy`, `limitToLast`, etc.) are ignored\r\n * and are not applied to the returned `Reference`.\r\n *\r\n * @param db - The database instance to obtain a reference for.\r\n * @param url - The Firebase URL at which the returned `Reference` will\r\n * point.\r\n * @returns A `Reference` pointing to the provided\r\n * Firebase URL.\r\n */\r\nfunction refFromURL(db, url) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('refFromURL');\r\n const parsedURL = parseRepoInfo(url, db._repo.repoInfo_.nodeAdmin);\r\n validateUrl('refFromURL', parsedURL);\r\n const repoInfo = parsedURL.repoInfo;\r\n if (!db._repo.repoInfo_.isCustomHost() &&\r\n repoInfo.host !== db._repo.repoInfo_.host) {\r\n fatal('refFromURL' +\r\n ': Host name does not match the current database: ' +\r\n '(found ' +\r\n repoInfo.host +\r\n ' but expected ' +\r\n db._repo.repoInfo_.host +\r\n ')');\r\n }\r\n return ref(db, parsedURL.path.toString());\r\n}\r\n/**\r\n * Gets a `Reference` for the location at the specified relative path.\r\n *\r\n * The relative path can either be a simple child name (for example, \"ada\") or\r\n * a deeper slash-separated path (for example, \"ada/name/first\").\r\n *\r\n * @param parent - The parent location.\r\n * @param path - A relative path from this location to the desired child\r\n * location.\r\n * @returns The specified child location.\r\n */\r\nfunction child(parent, path) {\r\n parent = getModularInstance(parent);\r\n if (pathGetFront(parent._path) === null) {\r\n validateRootPathString('child', 'path', path, false);\r\n }\r\n else {\r\n validatePathString('child', 'path', path, false);\r\n }\r\n return new ReferenceImpl(parent._repo, pathChild(parent._path, path));\r\n}\r\n/**\r\n * Returns an `OnDisconnect` object - see\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information on how to use it.\r\n *\r\n * @param ref - The reference to add OnDisconnect triggers for.\r\n */\r\nfunction onDisconnect(ref) {\r\n ref = getModularInstance(ref);\r\n return new OnDisconnect(ref._repo, ref._path);\r\n}\r\n/**\r\n * Generates a new child location using a unique key and returns its\r\n * `Reference`.\r\n *\r\n * This is the most common pattern for adding data to a collection of items.\r\n *\r\n * If you provide a value to `push()`, the value is written to the\r\n * generated location. If you don't pass a value, nothing is written to the\r\n * database and the child remains empty (but you can use the `Reference`\r\n * elsewhere).\r\n *\r\n * The unique keys generated by `push()` are ordered by the current time, so the\r\n * resulting list of items is chronologically sorted. The keys are also\r\n * designed to be unguessable (they contain 72 random bits of entropy).\r\n *\r\n * See {@link https://firebase.google.com/docs/database/web/lists-of-data#append_to_a_list_of_data | Append to a list of data}.\r\n * See {@link https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html | The 2^120 Ways to Ensure Unique Identifiers}.\r\n *\r\n * @param parent - The parent location.\r\n * @param value - Optional value to be written at the generated location.\r\n * @returns Combined `Promise` and `Reference`; resolves when write is complete,\r\n * but can be used immediately as the `Reference` to the child location.\r\n */\r\nfunction push(parent, value) {\r\n parent = getModularInstance(parent);\r\n validateWritablePath('push', parent._path);\r\n validateFirebaseDataArg('push', value, parent._path, true);\r\n const now = repoServerTime(parent._repo);\r\n const name = nextPushId(now);\r\n // push() returns a ThennableReference whose promise is fulfilled with a\r\n // regular Reference. We use child() to create handles to two different\r\n // references. The first is turned into a ThennableReference below by adding\r\n // then() and catch() methods and is used as the return value of push(). The\r\n // second remains a regular Reference and is used as the fulfilled value of\r\n // the first ThennableReference.\r\n const thennablePushRef = child(parent, name);\r\n const pushRef = child(parent, name);\r\n let promise;\r\n if (value != null) {\r\n promise = set(pushRef, value).then(() => pushRef);\r\n }\r\n else {\r\n promise = Promise.resolve(pushRef);\r\n }\r\n thennablePushRef.then = promise.then.bind(promise);\r\n thennablePushRef.catch = promise.then.bind(promise, undefined);\r\n return thennablePushRef;\r\n}\r\n/**\r\n * Removes the data at this Database location.\r\n *\r\n * Any data at child locations will also be deleted.\r\n *\r\n * The effect of the remove will be visible immediately and the corresponding\r\n * event 'value' will be triggered. Synchronization of the remove to the\r\n * Firebase servers will also be started, and the returned Promise will resolve\r\n * when complete. If provided, the onComplete callback will be called\r\n * asynchronously after synchronization has finished.\r\n *\r\n * @param ref - The location to remove.\r\n * @returns Resolves when remove on server is complete.\r\n */\r\nfunction remove(ref) {\r\n validateWritablePath('remove', ref._path);\r\n return set(ref, null);\r\n}\r\n/**\r\n * Writes data to this Database location.\r\n *\r\n * This will overwrite any data at this location and all child locations.\r\n *\r\n * The effect of the write will be visible immediately, and the corresponding\r\n * events (\"value\", \"child_added\", etc.) will be triggered. Synchronization of\r\n * the data to the Firebase servers will also be started, and the returned\r\n * Promise will resolve when complete. If provided, the `onComplete` callback\r\n * will be called asynchronously after synchronization has finished.\r\n *\r\n * Passing `null` for the new value is equivalent to calling `remove()`; namely,\r\n * all data at this location and all child locations will be deleted.\r\n *\r\n * `set()` will remove any priority stored at this location, so if priority is\r\n * meant to be preserved, you need to use `setWithPriority()` instead.\r\n *\r\n * Note that modifying data with `set()` will cancel any pending transactions\r\n * at that location, so extreme care should be taken if mixing `set()` and\r\n * `transaction()` to modify the same data.\r\n *\r\n * A single `set()` will generate a single \"value\" event at the location where\r\n * the `set()` was performed.\r\n *\r\n * @param ref - The location to write to.\r\n * @param value - The value to be written (string, number, boolean, object,\r\n * array, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction set(ref, value) {\r\n ref = getModularInstance(ref);\r\n validateWritablePath('set', ref._path);\r\n validateFirebaseDataArg('set', value, ref._path, false);\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, ref._path, value, \r\n /*priority=*/ null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Sets a priority for the data at this Database location.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\r\n * ).\r\n *\r\n * @param ref - The location to write to.\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction setPriority(ref, priority) {\r\n ref = getModularInstance(ref);\r\n validateWritablePath('setPriority', ref._path);\r\n validatePriority('setPriority', priority, false);\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, pathChild(ref._path, '.priority'), priority, null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Writes data the Database location. Like `set()` but also specifies the\r\n * priority for that data.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\r\n * ).\r\n *\r\n * @param ref - The location to write to.\r\n * @param value - The value to be written (string, number, boolean, object,\r\n * array, or null).\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction setWithPriority(ref, value, priority) {\r\n validateWritablePath('setWithPriority', ref._path);\r\n validateFirebaseDataArg('setWithPriority', value, ref._path, false);\r\n validatePriority('setWithPriority', priority, false);\r\n if (ref.key === '.length' || ref.key === '.keys') {\r\n throw 'setWithPriority failed: ' + ref.key + ' is a read-only object.';\r\n }\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, ref._path, value, priority, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Writes multiple values to the Database at once.\r\n *\r\n * The `values` argument contains multiple property-value pairs that will be\r\n * written to the Database together. Each child property can either be a simple\r\n * property (for example, \"name\") or a relative path (for example,\r\n * \"name/first\") from the current location to the data to update.\r\n *\r\n * As opposed to the `set()` method, `update()` can be use to selectively update\r\n * only the referenced properties at the current location (instead of replacing\r\n * all the child properties at the current location).\r\n *\r\n * The effect of the write will be visible immediately, and the corresponding\r\n * events ('value', 'child_added', etc.) will be triggered. Synchronization of\r\n * the data to the Firebase servers will also be started, and the returned\r\n * Promise will resolve when complete. If provided, the `onComplete` callback\r\n * will be called asynchronously after synchronization has finished.\r\n *\r\n * A single `update()` will generate a single \"value\" event at the location\r\n * where the `update()` was performed, regardless of how many children were\r\n * modified.\r\n *\r\n * Note that modifying data with `update()` will cancel any pending\r\n * transactions at that location, so extreme care should be taken if mixing\r\n * `update()` and `transaction()` to modify the same data.\r\n *\r\n * Passing `null` to `update()` will remove the data at this location.\r\n *\r\n * See\r\n * {@link https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html | Introducing multi-location updates and more}.\r\n *\r\n * @param ref - The location to write to.\r\n * @param values - Object containing multiple values.\r\n * @returns Resolves when update on server is complete.\r\n */\r\nfunction update(ref, values) {\r\n validateFirebaseMergeDataArg('update', values, ref._path, false);\r\n const deferred = new Deferred();\r\n repoUpdate(ref._repo, ref._path, values, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Gets the most up-to-date result for this query.\r\n *\r\n * @param query - The query to run.\r\n * @returns A `Promise` which resolves to the resulting DataSnapshot if a value is\r\n * available, or rejects if the client is unable to return a value (e.g., if the\r\n * server is unreachable and there is nothing cached).\r\n */\r\nfunction get(query) {\r\n query = getModularInstance(query);\r\n const callbackContext = new CallbackContext(() => { });\r\n const container = new ValueEventRegistration(callbackContext);\r\n return repoGetValue(query._repo, query, container).then(node => {\r\n return new DataSnapshot(node, new ReferenceImpl(query._repo, query._path), query._queryParams.getIndex());\r\n });\r\n}\r\n/**\r\n * Represents registration for 'value' events.\r\n */\r\nclass ValueEventRegistration {\r\n constructor(callbackContext) {\r\n this.callbackContext = callbackContext;\r\n }\r\n respondsTo(eventType) {\r\n return eventType === 'value';\r\n }\r\n createEvent(change, query) {\r\n const index = query._queryParams.getIndex();\r\n return new DataEvent('value', this, new DataSnapshot(change.snapshotNode, new ReferenceImpl(query._repo, query._path), index));\r\n }\r\n getEventRunner(eventData) {\r\n if (eventData.getEventType() === 'cancel') {\r\n return () => this.callbackContext.onCancel(eventData.error);\r\n }\r\n else {\r\n return () => this.callbackContext.onValue(eventData.snapshot, null);\r\n }\r\n }\r\n createCancelEvent(error, path) {\r\n if (this.callbackContext.hasCancelCallback) {\r\n return new CancelEvent(this, error, path);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n matches(other) {\r\n if (!(other instanceof ValueEventRegistration)) {\r\n return false;\r\n }\r\n else if (!other.callbackContext || !this.callbackContext) {\r\n // If no callback specified, we consider it to match any callback.\r\n return true;\r\n }\r\n else {\r\n return other.callbackContext.matches(this.callbackContext);\r\n }\r\n }\r\n hasAnyCallback() {\r\n return this.callbackContext !== null;\r\n }\r\n}\r\n/**\r\n * Represents the registration of a child_x event.\r\n */\r\nclass ChildEventRegistration {\r\n constructor(eventType, callbackContext) {\r\n this.eventType = eventType;\r\n this.callbackContext = callbackContext;\r\n }\r\n respondsTo(eventType) {\r\n let eventToCheck = eventType === 'children_added' ? 'child_added' : eventType;\r\n eventToCheck =\r\n eventToCheck === 'children_removed' ? 'child_removed' : eventToCheck;\r\n return this.eventType === eventToCheck;\r\n }\r\n createCancelEvent(error, path) {\r\n if (this.callbackContext.hasCancelCallback) {\r\n return new CancelEvent(this, error, path);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n createEvent(change, query) {\r\n assert(change.childName != null, 'Child events should have a childName.');\r\n const childRef = child(new ReferenceImpl(query._repo, query._path), change.childName);\r\n const index = query._queryParams.getIndex();\r\n return new DataEvent(change.type, this, new DataSnapshot(change.snapshotNode, childRef, index), change.prevName);\r\n }\r\n getEventRunner(eventData) {\r\n if (eventData.getEventType() === 'cancel') {\r\n return () => this.callbackContext.onCancel(eventData.error);\r\n }\r\n else {\r\n return () => this.callbackContext.onValue(eventData.snapshot, eventData.prevName);\r\n }\r\n }\r\n matches(other) {\r\n if (other instanceof ChildEventRegistration) {\r\n return (this.eventType === other.eventType &&\r\n (!this.callbackContext ||\r\n !other.callbackContext ||\r\n this.callbackContext.matches(other.callbackContext)));\r\n }\r\n return false;\r\n }\r\n hasAnyCallback() {\r\n return !!this.callbackContext;\r\n }\r\n}\r\nfunction addEventListener(query, eventType, callback, cancelCallbackOrListenOptions, options) {\r\n let cancelCallback;\r\n if (typeof cancelCallbackOrListenOptions === 'object') {\r\n cancelCallback = undefined;\r\n options = cancelCallbackOrListenOptions;\r\n }\r\n if (typeof cancelCallbackOrListenOptions === 'function') {\r\n cancelCallback = cancelCallbackOrListenOptions;\r\n }\r\n if (options && options.onlyOnce) {\r\n const userCallback = callback;\r\n const onceCallback = (dataSnapshot, previousChildName) => {\r\n repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n userCallback(dataSnapshot, previousChildName);\r\n };\r\n onceCallback.userCallback = callback.userCallback;\r\n onceCallback.context = callback.context;\r\n callback = onceCallback;\r\n }\r\n const callbackContext = new CallbackContext(callback, cancelCallback || undefined);\r\n const container = eventType === 'value'\r\n ? new ValueEventRegistration(callbackContext)\r\n : new ChildEventRegistration(eventType, callbackContext);\r\n repoAddEventCallbackForQuery(query._repo, query, container);\r\n return () => repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n}\r\nfunction onValue(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'value', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildAdded(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_added', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildChanged(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_changed', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildMoved(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_moved', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildRemoved(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_removed', callback, cancelCallbackOrListenOptions, options);\r\n}\r\n/**\r\n * Detaches a callback previously attached with the corresponding `on*()` (`onValue`, `onChildAdded`) listener.\r\n * Note: This is not the recommended way to remove a listener. Instead, please use the returned callback function from\r\n * the respective `on*` callbacks.\r\n *\r\n * Detach a callback previously attached with `on*()`. Calling `off()` on a parent listener\r\n * will not automatically remove listeners registered on child nodes, `off()`\r\n * must also be called on any child listeners to remove the callback.\r\n *\r\n * If a callback is not specified, all callbacks for the specified eventType\r\n * will be removed. Similarly, if no eventType is specified, all callbacks\r\n * for the `Reference` will be removed.\r\n *\r\n * Individual listeners can also be removed by invoking their unsubscribe\r\n * callbacks.\r\n *\r\n * @param query - The query that the listener was registered with.\r\n * @param eventType - One of the following strings: \"value\", \"child_added\",\r\n * \"child_changed\", \"child_removed\", or \"child_moved.\" If omitted, all callbacks\r\n * for the `Reference` will be removed.\r\n * @param callback - The callback function that was passed to `on()` or\r\n * `undefined` to remove all callbacks.\r\n */\r\nfunction off(query, eventType, callback) {\r\n let container = null;\r\n const expCallback = callback ? new CallbackContext(callback) : null;\r\n if (eventType === 'value') {\r\n container = new ValueEventRegistration(expCallback);\r\n }\r\n else if (eventType) {\r\n container = new ChildEventRegistration(eventType, expCallback);\r\n }\r\n repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n}\r\n/**\r\n * A `QueryConstraint` is used to narrow the set of documents returned by a\r\n * Database query. `QueryConstraint`s are created by invoking {@link endAt},\r\n * {@link endBefore}, {@link startAt}, {@link startAfter}, {@link\r\n * limitToFirst}, {@link limitToLast}, {@link orderByChild},\r\n * {@link orderByChild}, {@link orderByKey} , {@link orderByPriority} ,\r\n * {@link orderByValue} or {@link equalTo} and\r\n * can then be passed to {@link query} to create a new query instance that\r\n * also contains this `QueryConstraint`.\r\n */\r\nclass QueryConstraint {\r\n}\r\nclass QueryEndAtConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n this.type = 'endAt';\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('endAt', this._value, query._path, true);\r\n const newParams = queryParamsEndAt(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('endAt: Starting point was already set (by another call to endAt, ' +\r\n 'endBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified ending point.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The ending point is inclusive, so children with exactly the specified value\r\n * will be included in the query. The optional key argument can be used to\r\n * further limit the range of the query. If it is specified, then children that\r\n * have exactly the specified value must also have a key name less than or equal\r\n * to the specified key.\r\n *\r\n * You can read more about `endAt()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to end at. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to end at, among the children with the previously\r\n * specified priority. This argument is only allowed if ordering by child,\r\n * value, or priority.\r\n */\r\nfunction endAt(value, key) {\r\n validateKey('endAt', 'key', key, true);\r\n return new QueryEndAtConstraint(value, key);\r\n}\r\nclass QueryEndBeforeConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n this.type = 'endBefore';\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('endBefore', this._value, query._path, false);\r\n const newParams = queryParamsEndBefore(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('endBefore: Starting point was already set (by another call to endAt, ' +\r\n 'endBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified ending point (exclusive).\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The ending point is exclusive. If only a value is provided, children\r\n * with a value less than the specified value will be included in the query.\r\n * If a key is specified, then children must have a value less than or equal\r\n * to the specified value and a key name less than the specified key.\r\n *\r\n * @param value - The value to end before. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to end before, among the children with the\r\n * previously specified priority. This argument is only allowed if ordering by\r\n * child, value, or priority.\r\n */\r\nfunction endBefore(value, key) {\r\n validateKey('endBefore', 'key', key, true);\r\n return new QueryEndBeforeConstraint(value, key);\r\n}\r\nclass QueryStartAtConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n this.type = 'startAt';\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('startAt', this._value, query._path, true);\r\n const newParams = queryParamsStartAt(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('startAt: Starting point was already set (by another call to startAt, ' +\r\n 'startBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified starting point.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The starting point is inclusive, so children with exactly the specified value\r\n * will be included in the query. The optional key argument can be used to\r\n * further limit the range of the query. If it is specified, then children that\r\n * have exactly the specified value must also have a key name greater than or\r\n * equal to the specified key.\r\n *\r\n * You can read more about `startAt()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to start at. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start at. This argument is only allowed if\r\n * ordering by child, value, or priority.\r\n */\r\nfunction startAt(value = null, key) {\r\n validateKey('startAt', 'key', key, true);\r\n return new QueryStartAtConstraint(value, key);\r\n}\r\nclass QueryStartAfterConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n this.type = 'startAfter';\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('startAfter', this._value, query._path, false);\r\n const newParams = queryParamsStartAfter(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('startAfter: Starting point was already set (by another call to startAt, ' +\r\n 'startAfter, or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified starting point (exclusive).\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The starting point is exclusive. If only a value is provided, children\r\n * with a value greater than the specified value will be included in the query.\r\n * If a key is specified, then children must have a value greater than or equal\r\n * to the specified value and a a key name greater than the specified key.\r\n *\r\n * @param value - The value to start after. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start after. This argument is only allowed if\r\n * ordering by child, value, or priority.\r\n */\r\nfunction startAfter(value, key) {\r\n validateKey('startAfter', 'key', key, true);\r\n return new QueryStartAfterConstraint(value, key);\r\n}\r\nclass QueryLimitToFirstConstraint extends QueryConstraint {\r\n constructor(_limit) {\r\n super();\r\n this._limit = _limit;\r\n this.type = 'limitToFirst';\r\n }\r\n _apply(query) {\r\n if (query._queryParams.hasLimit()) {\r\n throw new Error('limitToFirst: Limit was already set (by another call to limitToFirst ' +\r\n 'or limitToLast).');\r\n }\r\n return new QueryImpl(query._repo, query._path, queryParamsLimitToFirst(query._queryParams, this._limit), query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that if limited to the first specific number\r\n * of children.\r\n *\r\n * The `limitToFirst()` method is used to set a maximum number of children to be\r\n * synced for a given callback. If we set a limit of 100, we will initially only\r\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\r\n * stored in our Database, a `child_added` event will fire for each message.\r\n * However, if we have over 100 messages, we will only receive a `child_added`\r\n * event for the first 100 ordered messages. As items change, we will receive\r\n * `child_removed` events for each item that drops out of the active list so\r\n * that the total number stays at 100.\r\n *\r\n * You can read more about `limitToFirst()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param limit - The maximum number of nodes to include in this query.\r\n */\r\nfunction limitToFirst(limit) {\r\n if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\r\n throw new Error('limitToFirst: First argument must be a positive integer.');\r\n }\r\n return new QueryLimitToFirstConstraint(limit);\r\n}\r\nclass QueryLimitToLastConstraint extends QueryConstraint {\r\n constructor(_limit) {\r\n super();\r\n this._limit = _limit;\r\n this.type = 'limitToLast';\r\n }\r\n _apply(query) {\r\n if (query._queryParams.hasLimit()) {\r\n throw new Error('limitToLast: Limit was already set (by another call to limitToFirst ' +\r\n 'or limitToLast).');\r\n }\r\n return new QueryImpl(query._repo, query._path, queryParamsLimitToLast(query._queryParams, this._limit), query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that is limited to return only the last\r\n * specified number of children.\r\n *\r\n * The `limitToLast()` method is used to set a maximum number of children to be\r\n * synced for a given callback. If we set a limit of 100, we will initially only\r\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\r\n * stored in our Database, a `child_added` event will fire for each message.\r\n * However, if we have over 100 messages, we will only receive a `child_added`\r\n * event for the last 100 ordered messages. As items change, we will receive\r\n * `child_removed` events for each item that drops out of the active list so\r\n * that the total number stays at 100.\r\n *\r\n * You can read more about `limitToLast()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param limit - The maximum number of nodes to include in this query.\r\n */\r\nfunction limitToLast(limit) {\r\n if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\r\n throw new Error('limitToLast: First argument must be a positive integer.');\r\n }\r\n return new QueryLimitToLastConstraint(limit);\r\n}\r\nclass QueryOrderByChildConstraint extends QueryConstraint {\r\n constructor(_path) {\r\n super();\r\n this._path = _path;\r\n this.type = 'orderByChild';\r\n }\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByChild');\r\n const parsedPath = new Path(this._path);\r\n if (pathIsEmpty(parsedPath)) {\r\n throw new Error('orderByChild: cannot pass in empty path. Use orderByValue() instead.');\r\n }\r\n const index = new PathIndex(parsedPath);\r\n const newParams = queryParamsOrderBy(query._queryParams, index);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by the specified child key.\r\n *\r\n * Queries can only order by one key at a time. Calling `orderByChild()`\r\n * multiple times on the same query is an error.\r\n *\r\n * Firebase queries allow you to order your data by any child key on the fly.\r\n * However, if you know in advance what your indexes will be, you can define\r\n * them via the .indexOn rule in your Security Rules for better performance. See\r\n * the{@link https://firebase.google.com/docs/database/security/indexing-data}\r\n * rule for more information.\r\n *\r\n * You can read more about `orderByChild()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n *\r\n * @param path - The path to order by.\r\n */\r\nfunction orderByChild(path) {\r\n if (path === '$key') {\r\n throw new Error('orderByChild: \"$key\" is invalid. Use orderByKey() instead.');\r\n }\r\n else if (path === '$priority') {\r\n throw new Error('orderByChild: \"$priority\" is invalid. Use orderByPriority() instead.');\r\n }\r\n else if (path === '$value') {\r\n throw new Error('orderByChild: \"$value\" is invalid. Use orderByValue() instead.');\r\n }\r\n validatePathString('orderByChild', 'path', path, false);\r\n return new QueryOrderByChildConstraint(path);\r\n}\r\nclass QueryOrderByKeyConstraint extends QueryConstraint {\r\n constructor() {\r\n super(...arguments);\r\n this.type = 'orderByKey';\r\n }\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByKey');\r\n const newParams = queryParamsOrderBy(query._queryParams, KEY_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by the key.\r\n *\r\n * Sorts the results of a query by their (ascending) key values.\r\n *\r\n * You can read more about `orderByKey()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n */\r\nfunction orderByKey() {\r\n return new QueryOrderByKeyConstraint();\r\n}\r\nclass QueryOrderByPriorityConstraint extends QueryConstraint {\r\n constructor() {\r\n super(...arguments);\r\n this.type = 'orderByPriority';\r\n }\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByPriority');\r\n const newParams = queryParamsOrderBy(query._queryParams, PRIORITY_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by priority.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}\r\n * for alternatives to priority.\r\n */\r\nfunction orderByPriority() {\r\n return new QueryOrderByPriorityConstraint();\r\n}\r\nclass QueryOrderByValueConstraint extends QueryConstraint {\r\n constructor() {\r\n super(...arguments);\r\n this.type = 'orderByValue';\r\n }\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByValue');\r\n const newParams = queryParamsOrderBy(query._queryParams, VALUE_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by value.\r\n *\r\n * If the children of a query are all scalar values (string, number, or\r\n * boolean), you can order the results by their (ascending) values.\r\n *\r\n * You can read more about `orderByValue()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n */\r\nfunction orderByValue() {\r\n return new QueryOrderByValueConstraint();\r\n}\r\nclass QueryEqualToValueConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n this.type = 'equalTo';\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('equalTo', this._value, query._path, false);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('equalTo: Starting point was already set (by another call to startAt/startAfter or ' +\r\n 'equalTo).');\r\n }\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('equalTo: Ending point was already set (by another call to endAt/endBefore or ' +\r\n 'equalTo).');\r\n }\r\n return new QueryEndAtConstraint(this._value, this._key)._apply(new QueryStartAtConstraint(this._value, this._key)._apply(query));\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` that includes children that match the specified\r\n * value.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The optional key argument can be used to further limit the range of the\r\n * query. If it is specified, then children that have exactly the specified\r\n * value must also have exactly the specified key as their key name. This can be\r\n * used to filter result sets with many matches for the same value.\r\n *\r\n * You can read more about `equalTo()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to match for. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start at, among the children with the\r\n * previously specified priority. This argument is only allowed if ordering by\r\n * child, value, or priority.\r\n */\r\nfunction equalTo(value, key) {\r\n validateKey('equalTo', 'key', key, true);\r\n return new QueryEqualToValueConstraint(value, key);\r\n}\r\n/**\r\n * Creates a new immutable instance of `Query` that is extended to also include\r\n * additional query constraints.\r\n *\r\n * @param query - The Query instance to use as a base for the new constraints.\r\n * @param queryConstraints - The list of `QueryConstraint`s to apply.\r\n * @throws if any of the provided query constraints cannot be combined with the\r\n * existing or new constraints.\r\n */\r\nfunction query(query, ...queryConstraints) {\r\n let queryImpl = getModularInstance(query);\r\n for (const constraint of queryConstraints) {\r\n queryImpl = constraint._apply(queryImpl);\r\n }\r\n return queryImpl;\r\n}\r\n/**\r\n * Define reference constructor in various modules\r\n *\r\n * We are doing this here to avoid several circular\r\n * dependency issues\r\n */\r\nsyncPointSetReferenceConstructor(ReferenceImpl);\r\nsyncTreeSetReferenceConstructor(ReferenceImpl);\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This variable is also defined in the firebase Node.js Admin SDK. Before\r\n * modifying this definition, consult the definition in:\r\n *\r\n * https://github.com/firebase/firebase-admin-node\r\n *\r\n * and make sure the two are consistent.\r\n */\r\nconst FIREBASE_DATABASE_EMULATOR_HOST_VAR = 'FIREBASE_DATABASE_EMULATOR_HOST';\r\n/**\r\n * Creates and caches `Repo` instances.\r\n */\r\nconst repos = {};\r\n/**\r\n * If true, any new `Repo` will be created to use `ReadonlyRestClient` (for testing purposes).\r\n */\r\nlet useRestClient = false;\r\n/**\r\n * Update an existing `Repo` in place to point to a new host/port.\r\n */\r\nfunction repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider) {\r\n repo.repoInfo_ = new RepoInfo(`${host}:${port}`, \r\n /* secure= */ false, repo.repoInfo_.namespace, repo.repoInfo_.webSocketOnly, repo.repoInfo_.nodeAdmin, repo.repoInfo_.persistenceKey, repo.repoInfo_.includeNamespaceInQueryParams, \r\n /*isUsingEmulator=*/ true);\r\n if (tokenProvider) {\r\n repo.authTokenProvider_ = tokenProvider;\r\n }\r\n}\r\n/**\r\n * This function should only ever be called to CREATE a new database instance.\r\n * @internal\r\n */\r\nfunction repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url, nodeAdmin) {\r\n let dbUrl = url || app.options.databaseURL;\r\n if (dbUrl === undefined) {\r\n if (!app.options.projectId) {\r\n fatal(\"Can't determine Firebase Database URL. Be sure to include \" +\r\n ' a Project ID when calling firebase.initializeApp().');\r\n }\r\n log('Using default host for project ', app.options.projectId);\r\n dbUrl = `${app.options.projectId}-default-rtdb.firebaseio.com`;\r\n }\r\n let parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\r\n let repoInfo = parsedUrl.repoInfo;\r\n let isEmulator;\r\n let dbEmulatorHost = undefined;\r\n if (typeof process !== 'undefined' && process.env) {\r\n dbEmulatorHost = process.env[FIREBASE_DATABASE_EMULATOR_HOST_VAR];\r\n }\r\n if (dbEmulatorHost) {\r\n isEmulator = true;\r\n dbUrl = `http://${dbEmulatorHost}?ns=${repoInfo.namespace}`;\r\n parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\r\n repoInfo = parsedUrl.repoInfo;\r\n }\r\n else {\r\n isEmulator = !parsedUrl.repoInfo.secure;\r\n }\r\n const authTokenProvider = nodeAdmin && isEmulator\r\n ? new EmulatorTokenProvider(EmulatorTokenProvider.OWNER)\r\n : new FirebaseAuthTokenProvider(app.name, app.options, authProvider);\r\n validateUrl('Invalid Firebase Database URL', parsedUrl);\r\n if (!pathIsEmpty(parsedUrl.path)) {\r\n fatal('Database URL must point to the root of a Firebase Database ' +\r\n '(not including a child path).');\r\n }\r\n const repo = repoManagerCreateRepo(repoInfo, app, authTokenProvider, new AppCheckTokenProvider(app.name, appCheckProvider));\r\n return new Database(repo, app);\r\n}\r\n/**\r\n * Remove the repo and make sure it is disconnected.\r\n *\r\n */\r\nfunction repoManagerDeleteRepo(repo, appName) {\r\n const appRepos = repos[appName];\r\n // This should never happen...\r\n if (!appRepos || appRepos[repo.key] !== repo) {\r\n fatal(`Database ${appName}(${repo.repoInfo_}) has already been deleted.`);\r\n }\r\n repoInterrupt(repo);\r\n delete appRepos[repo.key];\r\n}\r\n/**\r\n * Ensures a repo doesn't already exist and then creates one using the\r\n * provided app.\r\n *\r\n * @param repoInfo - The metadata about the Repo\r\n * @returns The Repo object for the specified server / repoName.\r\n */\r\nfunction repoManagerCreateRepo(repoInfo, app, authTokenProvider, appCheckProvider) {\r\n let appRepos = repos[app.name];\r\n if (!appRepos) {\r\n appRepos = {};\r\n repos[app.name] = appRepos;\r\n }\r\n let repo = appRepos[repoInfo.toURLString()];\r\n if (repo) {\r\n fatal('Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.');\r\n }\r\n repo = new Repo(repoInfo, useRestClient, authTokenProvider, appCheckProvider);\r\n appRepos[repoInfo.toURLString()] = repo;\r\n return repo;\r\n}\r\n/**\r\n * Forces us to use ReadonlyRestClient instead of PersistentConnection for new Repos.\r\n */\r\nfunction repoManagerForceRestClient(forceRestClient) {\r\n useRestClient = forceRestClient;\r\n}\r\n/**\r\n * Class representing a Firebase Realtime Database.\r\n */\r\nclass Database {\r\n /** @hideconstructor */\r\n constructor(_repoInternal, \r\n /** The {@link @firebase/app#FirebaseApp} associated with this Realtime Database instance. */\r\n app) {\r\n this._repoInternal = _repoInternal;\r\n this.app = app;\r\n /** Represents a `Database` instance. */\r\n this['type'] = 'database';\r\n /** Track if the instance has been used (root or repo accessed) */\r\n this._instanceStarted = false;\r\n }\r\n get _repo() {\r\n if (!this._instanceStarted) {\r\n repoStart(this._repoInternal, this.app.options.appId, this.app.options['databaseAuthVariableOverride']);\r\n this._instanceStarted = true;\r\n }\r\n return this._repoInternal;\r\n }\r\n get _root() {\r\n if (!this._rootInternal) {\r\n this._rootInternal = new ReferenceImpl(this._repo, newEmptyPath());\r\n }\r\n return this._rootInternal;\r\n }\r\n _delete() {\r\n if (this._rootInternal !== null) {\r\n repoManagerDeleteRepo(this._repo, this.app.name);\r\n this._repoInternal = null;\r\n this._rootInternal = null;\r\n }\r\n return Promise.resolve();\r\n }\r\n _checkNotDeleted(apiName) {\r\n if (this._rootInternal === null) {\r\n fatal('Cannot call ' + apiName + ' on a deleted database.');\r\n }\r\n }\r\n}\r\nfunction checkTransportInit() {\r\n if (TransportManager.IS_TRANSPORT_INITIALIZED) {\r\n warn('Transport has already been initialized. Please call this function before calling ref or setting up a listener');\r\n }\r\n}\r\n/**\r\n * Force the use of websockets instead of longPolling.\r\n */\r\nfunction forceWebSockets() {\r\n checkTransportInit();\r\n BrowserPollConnection.forceDisallow();\r\n}\r\n/**\r\n * Force the use of longPolling instead of websockets. This will be ignored if websocket protocol is used in databaseURL.\r\n */\r\nfunction forceLongPolling() {\r\n checkTransportInit();\r\n WebSocketConnection.forceDisallow();\r\n BrowserPollConnection.forceAllow();\r\n}\r\n/**\r\n * Returns the instance of the Realtime Database SDK that is associated\r\n * with the provided {@link @firebase/app#FirebaseApp}. Initializes a new instance with\r\n * with default settings if no instance exists or if the existing instance uses\r\n * a custom database URL.\r\n *\r\n * @param app - The {@link @firebase/app#FirebaseApp} instance that the returned Realtime\r\n * Database instance is associated with.\r\n * @param url - The URL of the Realtime Database instance to connect to. If not\r\n * provided, the SDK connects to the default instance of the Firebase App.\r\n * @returns The `Database` instance of the provided app.\r\n */\r\nfunction getDatabase(app = getApp(), url) {\r\n const db = _getProvider(app, 'database').getImmediate({\r\n identifier: url\r\n });\r\n if (!db._instanceStarted) {\r\n const emulator = getDefaultEmulatorHostnameAndPort('database');\r\n if (emulator) {\r\n connectDatabaseEmulator(db, ...emulator);\r\n }\r\n }\r\n return db;\r\n}\r\n/**\r\n * Modify the provided instance to communicate with the Realtime Database\r\n * emulator.\r\n *\r\n *

Note: This method must be called before performing any other operation.\r\n *\r\n * @param db - The instance to modify.\r\n * @param host - The emulator host (ex: localhost)\r\n * @param port - The emulator port (ex: 8080)\r\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\r\n */\r\nfunction connectDatabaseEmulator(db, host, port, options = {}) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('useEmulator');\r\n if (db._instanceStarted) {\r\n fatal('Cannot call useEmulator() after instance has already been initialized.');\r\n }\r\n const repo = db._repoInternal;\r\n let tokenProvider = undefined;\r\n if (repo.repoInfo_.nodeAdmin) {\r\n if (options.mockUserToken) {\r\n fatal('mockUserToken is not supported by the Admin SDK. For client access with mock users, please use the \"firebase\" package instead of \"firebase-admin\".');\r\n }\r\n tokenProvider = new EmulatorTokenProvider(EmulatorTokenProvider.OWNER);\r\n }\r\n else if (options.mockUserToken) {\r\n const token = typeof options.mockUserToken === 'string'\r\n ? options.mockUserToken\r\n : createMockUserToken(options.mockUserToken, db.app.options.projectId);\r\n tokenProvider = new EmulatorTokenProvider(token);\r\n }\r\n // Modify the repo to apply emulator settings\r\n repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider);\r\n}\r\n/**\r\n * Disconnects from the server (all Database operations will be completed\r\n * offline).\r\n *\r\n * The client automatically maintains a persistent connection to the Database\r\n * server, which will remain active indefinitely and reconnect when\r\n * disconnected. However, the `goOffline()` and `goOnline()` methods may be used\r\n * to control the client connection in cases where a persistent connection is\r\n * undesirable.\r\n *\r\n * While offline, the client will no longer receive data updates from the\r\n * Database. However, all Database operations performed locally will continue to\r\n * immediately fire events, allowing your application to continue behaving\r\n * normally. Additionally, each operation performed locally will automatically\r\n * be queued and retried upon reconnection to the Database server.\r\n *\r\n * To reconnect to the Database and begin receiving remote events, see\r\n * `goOnline()`.\r\n *\r\n * @param db - The instance to disconnect.\r\n */\r\nfunction goOffline(db) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('goOffline');\r\n repoInterrupt(db._repo);\r\n}\r\n/**\r\n * Reconnects to the server and synchronizes the offline Database state\r\n * with the server state.\r\n *\r\n * This method should be used after disabling the active connection with\r\n * `goOffline()`. Once reconnected, the client will transmit the proper data\r\n * and fire the appropriate events so that your client \"catches up\"\r\n * automatically.\r\n *\r\n * @param db - The instance to reconnect.\r\n */\r\nfunction goOnline(db) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('goOnline');\r\n repoResume(db._repo);\r\n}\r\nfunction enableLogging(logger, persistent) {\r\n enableLogging$1(logger, persistent);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerDatabase(variant) {\r\n setSDKVersion(SDK_VERSION$1);\r\n _registerComponent(new Component('database', (container, { instanceIdentifier: url }) => {\r\n const app = container.getProvider('app').getImmediate();\r\n const authProvider = container.getProvider('auth-internal');\r\n const appCheckProvider = container.getProvider('app-check-internal');\r\n return repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url);\r\n }, \"PUBLIC\" /* ComponentType.PUBLIC */).setMultipleInstances(true));\r\n registerVersion(name, version, variant);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst SERVER_TIMESTAMP = {\r\n '.sv': 'timestamp'\r\n};\r\n/**\r\n * Returns a placeholder value for auto-populating the current timestamp (time\r\n * since the Unix epoch, in milliseconds) as determined by the Firebase\r\n * servers.\r\n */\r\nfunction serverTimestamp() {\r\n return SERVER_TIMESTAMP;\r\n}\r\n/**\r\n * Returns a placeholder value that can be used to atomically increment the\r\n * current database value by the provided delta.\r\n *\r\n * @param delta - the amount to modify the current value atomically.\r\n * @returns A placeholder value for modifying data atomically server-side.\r\n */\r\nfunction increment(delta) {\r\n return {\r\n '.sv': {\r\n 'increment': delta\r\n }\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A type for the resolve value of {@link runTransaction}.\r\n */\r\nclass TransactionResult {\r\n /** @hideconstructor */\r\n constructor(\r\n /** Whether the transaction was successfully committed. */\r\n committed, \r\n /** The resulting data snapshot. */\r\n snapshot) {\r\n this.committed = committed;\r\n this.snapshot = snapshot;\r\n }\r\n /** Returns a JSON-serializable representation of this object. */\r\n toJSON() {\r\n return { committed: this.committed, snapshot: this.snapshot.toJSON() };\r\n }\r\n}\r\n/**\r\n * Atomically modifies the data at this location.\r\n *\r\n * Atomically modify the data at this location. Unlike a normal `set()`, which\r\n * just overwrites the data regardless of its previous value, `runTransaction()` is\r\n * used to modify the existing value to a new value, ensuring there are no\r\n * conflicts with other clients writing to the same location at the same time.\r\n *\r\n * To accomplish this, you pass `runTransaction()` an update function which is\r\n * used to transform the current value into a new value. If another client\r\n * writes to the location before your new value is successfully written, your\r\n * update function will be called again with the new current value, and the\r\n * write will be retried. This will happen repeatedly until your write succeeds\r\n * without conflict or you abort the transaction by not returning a value from\r\n * your update function.\r\n *\r\n * Note: Modifying data with `set()` will cancel any pending transactions at\r\n * that location, so extreme care should be taken if mixing `set()` and\r\n * `runTransaction()` to update the same data.\r\n *\r\n * Note: When using transactions with Security and Firebase Rules in place, be\r\n * aware that a client needs `.read` access in addition to `.write` access in\r\n * order to perform a transaction. This is because the client-side nature of\r\n * transactions requires the client to read the data in order to transactionally\r\n * update it.\r\n *\r\n * @param ref - The location to atomically modify.\r\n * @param transactionUpdate - A developer-supplied function which will be passed\r\n * the current data stored at this location (as a JavaScript object). The\r\n * function should return the new value it would like written (as a JavaScript\r\n * object). If `undefined` is returned (i.e. you return with no arguments) the\r\n * transaction will be aborted and the data at this location will not be\r\n * modified.\r\n * @param options - An options object to configure transactions.\r\n * @returns A `Promise` that can optionally be used instead of the `onComplete`\r\n * callback to handle success and failure.\r\n */\r\nfunction runTransaction(ref, \r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntransactionUpdate, options) {\r\n var _a;\r\n ref = getModularInstance(ref);\r\n validateWritablePath('Reference.transaction', ref._path);\r\n if (ref.key === '.length' || ref.key === '.keys') {\r\n throw ('Reference.transaction failed: ' + ref.key + ' is a read-only object.');\r\n }\r\n const applyLocally = (_a = options === null || options === void 0 ? void 0 : options.applyLocally) !== null && _a !== void 0 ? _a : true;\r\n const deferred = new Deferred();\r\n const promiseComplete = (error, committed, node) => {\r\n let dataSnapshot = null;\r\n if (error) {\r\n deferred.reject(error);\r\n }\r\n else {\r\n dataSnapshot = new DataSnapshot(node, new ReferenceImpl(ref._repo, ref._path), PRIORITY_INDEX);\r\n deferred.resolve(new TransactionResult(committed, dataSnapshot));\r\n }\r\n };\r\n // Add a watch to make sure we get server updates.\r\n const unwatcher = onValue(ref, () => { });\r\n repoStartTransaction(ref._repo, ref._path, transactionUpdate, promiseComplete, unwatcher, applyLocally);\r\n return deferred.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nPersistentConnection;\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nPersistentConnection.prototype.simpleListen = function (pathString, onComplete) {\r\n this.sendRequest('q', { p: pathString }, onComplete);\r\n};\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nPersistentConnection.prototype.echo = function (data, onEcho) {\r\n this.sendRequest('echo', { d: data }, onEcho);\r\n};\r\n// RealTimeConnection properties that we use in tests.\r\nConnection;\r\n/**\r\n * @internal\r\n */\r\nconst hijackHash = function (newHash) {\r\n const oldPut = PersistentConnection.prototype.put;\r\n PersistentConnection.prototype.put = function (pathString, data, onComplete, hash) {\r\n if (hash !== undefined) {\r\n hash = newHash();\r\n }\r\n oldPut.call(this, pathString, data, onComplete, hash);\r\n };\r\n return function () {\r\n PersistentConnection.prototype.put = oldPut;\r\n };\r\n};\r\nRepoInfo;\r\n/**\r\n * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.\r\n * @internal\r\n */\r\nconst forceRestClient = function (forceRestClient) {\r\n repoManagerForceRestClient(forceRestClient);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2023 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Used by console to create a database based on the app,\r\n * passed database URL and a custom auth implementation.\r\n * @internal\r\n * @param app - A valid FirebaseApp-like object\r\n * @param url - A valid Firebase databaseURL\r\n * @param version - custom version e.g. firebase-admin version\r\n * @param customAppCheckImpl - custom app check implementation\r\n * @param customAuthImpl - custom auth implementation\r\n */\r\nfunction _initStandalone({ app, url, version, customAuthImpl, customAppCheckImpl, nodeAdmin = false }) {\r\n setSDKVersion(version);\r\n /**\r\n * ComponentContainer('database-standalone') is just a placeholder that doesn't perform\r\n * any actual function.\r\n */\r\n const componentContainer = new ComponentContainer('database-standalone');\r\n const authProvider = new Provider('auth-internal', componentContainer);\r\n let appCheckProvider;\r\n if (customAppCheckImpl) {\r\n appCheckProvider = new Provider('app-check-internal', componentContainer);\r\n appCheckProvider.setComponent(new Component('app-check-internal', () => customAppCheckImpl, \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n }\r\n authProvider.setComponent(new Component('auth-internal', () => customAuthImpl, \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n return repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url, nodeAdmin);\r\n}\n\n/**\r\n * Firebase Realtime Database\r\n *\r\n * @packageDocumentation\r\n */\r\nregisterDatabase();\n\nexport { DataSnapshot, Database, OnDisconnect, QueryConstraint, TransactionResult, QueryImpl as _QueryImpl, QueryParams as _QueryParams, ReferenceImpl as _ReferenceImpl, forceRestClient as _TEST_ACCESS_forceRestClient, hijackHash as _TEST_ACCESS_hijackHash, _initStandalone, repoManagerDatabaseFromApp as _repoManagerDatabaseFromApp, setSDKVersion as _setSDKVersion, validatePathString as _validatePathString, validateWritablePath as _validateWritablePath, child, connectDatabaseEmulator, enableLogging, endAt, endBefore, equalTo, forceLongPolling, forceWebSockets, get, getDatabase, goOffline, goOnline, increment, limitToFirst, limitToLast, off, onChildAdded, onChildChanged, onChildMoved, onChildRemoved, onDisconnect, onValue, orderByChild, orderByKey, orderByPriority, orderByValue, push, query, ref, refFromURL, remove, runTransaction, serverTimestamp, set, setPriority, setWithPriority, startAfter, startAt, update };\n","import firebase from '@firebase/app-compat';\nimport { ComponentContainer, Provider, Component } from '@firebase/component';\nimport { _validatePathString, onChildMoved, onChildChanged, onChildRemoved, onChildAdded, onValue, off, get, query, limitToFirst, limitToLast, orderByChild, orderByKey, orderByPriority, orderByValue, startAt, startAfter, endAt, endBefore, equalTo, _ReferenceImpl, _QueryImpl, _QueryParams, child, set, _validateWritablePath, update, setWithPriority, remove, runTransaction, setPriority, push, OnDisconnect as OnDisconnect$1, forceWebSockets, forceLongPolling, connectDatabaseEmulator, refFromURL, ref, goOffline, goOnline, serverTimestamp, increment, _setSDKVersion, _repoManagerDatabaseFromApp, enableLogging } from '@firebase/database';\nimport { errorPrefix, validateArgCount, validateCallback, validateContextObject, Deferred } from '@firebase/util';\nimport { Logger } from '@firebase/logger';\n\nconst name = \"@firebase/database-compat\";\nconst version = \"1.0.5\";\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logClient = new Logger('@firebase/database-compat');\r\nconst warn = function (msg) {\r\n const message = 'FIREBASE WARNING: ' + msg;\r\n logClient.warn(message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst validateBoolean = function (fnName, argumentName, bool, optional) {\r\n if (optional && bool === undefined) {\r\n return;\r\n }\r\n if (typeof bool !== 'boolean') {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a boolean.');\r\n }\r\n};\r\nconst validateEventType = function (fnName, eventType, optional) {\r\n if (optional && eventType === undefined) {\r\n return;\r\n }\r\n switch (eventType) {\r\n case 'value':\r\n case 'child_added':\r\n case 'child_removed':\r\n case 'child_changed':\r\n case 'child_moved':\r\n break;\r\n default:\r\n throw new Error(errorPrefix(fnName, 'eventType') +\r\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\r\n '\"child_changed\", or \"child_moved\".');\r\n }\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass OnDisconnect {\r\n constructor(_delegate) {\r\n this._delegate = _delegate;\r\n }\r\n cancel(onComplete) {\r\n validateArgCount('OnDisconnect.cancel', 0, 1, arguments.length);\r\n validateCallback('OnDisconnect.cancel', 'onComplete', onComplete, true);\r\n const result = this._delegate.cancel();\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n remove(onComplete) {\r\n validateArgCount('OnDisconnect.remove', 0, 1, arguments.length);\r\n validateCallback('OnDisconnect.remove', 'onComplete', onComplete, true);\r\n const result = this._delegate.remove();\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n set(value, onComplete) {\r\n validateArgCount('OnDisconnect.set', 1, 2, arguments.length);\r\n validateCallback('OnDisconnect.set', 'onComplete', onComplete, true);\r\n const result = this._delegate.set(value);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n setWithPriority(value, priority, onComplete) {\r\n validateArgCount('OnDisconnect.setWithPriority', 2, 3, arguments.length);\r\n validateCallback('OnDisconnect.setWithPriority', 'onComplete', onComplete, true);\r\n const result = this._delegate.setWithPriority(value, priority);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n update(objectToMerge, onComplete) {\r\n validateArgCount('OnDisconnect.update', 1, 2, arguments.length);\r\n if (Array.isArray(objectToMerge)) {\r\n const newObjectToMerge = {};\r\n for (let i = 0; i < objectToMerge.length; ++i) {\r\n newObjectToMerge['' + i] = objectToMerge[i];\r\n }\r\n objectToMerge = newObjectToMerge;\r\n warn('Passing an Array to firebase.database.onDisconnect().update() is deprecated. Use set() if you want to overwrite the ' +\r\n 'existing data, or an Object with integer keys if you really do want to only update some of the children.');\r\n }\r\n validateCallback('OnDisconnect.update', 'onComplete', onComplete, true);\r\n const result = this._delegate.update(objectToMerge);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass TransactionResult {\r\n /**\r\n * A type for the resolve value of Firebase.transaction.\r\n */\r\n constructor(committed, snapshot) {\r\n this.committed = committed;\r\n this.snapshot = snapshot;\r\n }\r\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n // for end-users\r\n toJSON() {\r\n validateArgCount('TransactionResult.toJSON', 0, 1, arguments.length);\r\n return { committed: this.committed, snapshot: this.snapshot.toJSON() };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Class representing a firebase data snapshot. It wraps a SnapshotNode and\r\n * surfaces the public methods (val, forEach, etc.) we want to expose.\r\n */\r\nclass DataSnapshot {\r\n constructor(_database, _delegate) {\r\n this._database = _database;\r\n this._delegate = _delegate;\r\n }\r\n /**\r\n * Retrieves the snapshot contents as JSON. Returns null if the snapshot is\r\n * empty.\r\n *\r\n * @returns JSON representation of the DataSnapshot contents, or null if empty.\r\n */\r\n val() {\r\n validateArgCount('DataSnapshot.val', 0, 0, arguments.length);\r\n return this._delegate.val();\r\n }\r\n /**\r\n * Returns the snapshot contents as JSON, including priorities of node. Suitable for exporting\r\n * the entire node contents.\r\n * @returns JSON representation of the DataSnapshot contents, or null if empty.\r\n */\r\n exportVal() {\r\n validateArgCount('DataSnapshot.exportVal', 0, 0, arguments.length);\r\n return this._delegate.exportVal();\r\n }\r\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n // for end-users\r\n toJSON() {\r\n // Optional spacer argument is unnecessary because we're depending on recursion rather than stringifying the content\r\n validateArgCount('DataSnapshot.toJSON', 0, 1, arguments.length);\r\n return this._delegate.toJSON();\r\n }\r\n /**\r\n * Returns whether the snapshot contains a non-null value.\r\n *\r\n * @returns Whether the snapshot contains a non-null value, or is empty.\r\n */\r\n exists() {\r\n validateArgCount('DataSnapshot.exists', 0, 0, arguments.length);\r\n return this._delegate.exists();\r\n }\r\n /**\r\n * Returns a DataSnapshot of the specified child node's contents.\r\n *\r\n * @param path - Path to a child.\r\n * @returns DataSnapshot for child node.\r\n */\r\n child(path) {\r\n validateArgCount('DataSnapshot.child', 0, 1, arguments.length);\r\n // Ensure the childPath is a string (can be a number)\r\n path = String(path);\r\n _validatePathString('DataSnapshot.child', 'path', path, false);\r\n return new DataSnapshot(this._database, this._delegate.child(path));\r\n }\r\n /**\r\n * Returns whether the snapshot contains a child at the specified path.\r\n *\r\n * @param path - Path to a child.\r\n * @returns Whether the child exists.\r\n */\r\n hasChild(path) {\r\n validateArgCount('DataSnapshot.hasChild', 1, 1, arguments.length);\r\n _validatePathString('DataSnapshot.hasChild', 'path', path, false);\r\n return this._delegate.hasChild(path);\r\n }\r\n /**\r\n * Returns the priority of the object, or null if no priority was set.\r\n *\r\n * @returns The priority.\r\n */\r\n getPriority() {\r\n validateArgCount('DataSnapshot.getPriority', 0, 0, arguments.length);\r\n return this._delegate.priority;\r\n }\r\n /**\r\n * Iterates through child nodes and calls the specified action for each one.\r\n *\r\n * @param action - Callback function to be called\r\n * for each child.\r\n * @returns True if forEach was canceled by action returning true for\r\n * one of the child nodes.\r\n */\r\n forEach(action) {\r\n validateArgCount('DataSnapshot.forEach', 1, 1, arguments.length);\r\n validateCallback('DataSnapshot.forEach', 'action', action, false);\r\n return this._delegate.forEach(expDataSnapshot => action(new DataSnapshot(this._database, expDataSnapshot)));\r\n }\r\n /**\r\n * Returns whether this DataSnapshot has children.\r\n * @returns True if the DataSnapshot contains 1 or more child nodes.\r\n */\r\n hasChildren() {\r\n validateArgCount('DataSnapshot.hasChildren', 0, 0, arguments.length);\r\n return this._delegate.hasChildren();\r\n }\r\n get key() {\r\n return this._delegate.key;\r\n }\r\n /**\r\n * Returns the number of children for this DataSnapshot.\r\n * @returns The number of children that this DataSnapshot contains.\r\n */\r\n numChildren() {\r\n validateArgCount('DataSnapshot.numChildren', 0, 0, arguments.length);\r\n return this._delegate.size;\r\n }\r\n /**\r\n * @returns The Firebase reference for the location this snapshot's data came\r\n * from.\r\n */\r\n getRef() {\r\n validateArgCount('DataSnapshot.ref', 0, 0, arguments.length);\r\n return new Reference(this._database, this._delegate.ref);\r\n }\r\n get ref() {\r\n return this.getRef();\r\n }\r\n}\r\n/**\r\n * A Query represents a filter to be applied to a firebase location. This object purely represents the\r\n * query expression (and exposes our public API to build the query). The actual query logic is in ViewBase.js.\r\n *\r\n * Since every Firebase reference is a query, Firebase inherits from this object.\r\n */\r\nclass Query {\r\n constructor(database, _delegate) {\r\n this.database = database;\r\n this._delegate = _delegate;\r\n }\r\n on(eventType, callback, cancelCallbackOrContext, context) {\r\n var _a;\r\n validateArgCount('Query.on', 2, 4, arguments.length);\r\n validateCallback('Query.on', 'callback', callback, false);\r\n const ret = Query.getCancelAndContextArgs_('Query.on', cancelCallbackOrContext, context);\r\n const valueCallback = (expSnapshot, previousChildName) => {\r\n callback.call(ret.context, new DataSnapshot(this.database, expSnapshot), previousChildName);\r\n };\r\n valueCallback.userCallback = callback;\r\n valueCallback.context = ret.context;\r\n const cancelCallback = (_a = ret.cancel) === null || _a === void 0 ? void 0 : _a.bind(ret.context);\r\n switch (eventType) {\r\n case 'value':\r\n onValue(this._delegate, valueCallback, cancelCallback);\r\n return callback;\r\n case 'child_added':\r\n onChildAdded(this._delegate, valueCallback, cancelCallback);\r\n return callback;\r\n case 'child_removed':\r\n onChildRemoved(this._delegate, valueCallback, cancelCallback);\r\n return callback;\r\n case 'child_changed':\r\n onChildChanged(this._delegate, valueCallback, cancelCallback);\r\n return callback;\r\n case 'child_moved':\r\n onChildMoved(this._delegate, valueCallback, cancelCallback);\r\n return callback;\r\n default:\r\n throw new Error(errorPrefix('Query.on', 'eventType') +\r\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\r\n '\"child_changed\", or \"child_moved\".');\r\n }\r\n }\r\n off(eventType, callback, context) {\r\n validateArgCount('Query.off', 0, 3, arguments.length);\r\n validateEventType('Query.off', eventType, true);\r\n validateCallback('Query.off', 'callback', callback, true);\r\n validateContextObject('Query.off', 'context', context, true);\r\n if (callback) {\r\n const valueCallback = () => { };\r\n valueCallback.userCallback = callback;\r\n valueCallback.context = context;\r\n off(this._delegate, eventType, valueCallback);\r\n }\r\n else {\r\n off(this._delegate, eventType);\r\n }\r\n }\r\n /**\r\n * Get the server-value for this query, or return a cached value if not connected.\r\n */\r\n get() {\r\n return get(this._delegate).then(expSnapshot => {\r\n return new DataSnapshot(this.database, expSnapshot);\r\n });\r\n }\r\n /**\r\n * Attaches a listener, waits for the first event, and then removes the listener\r\n */\r\n once(eventType, callback, failureCallbackOrContext, context) {\r\n validateArgCount('Query.once', 1, 4, arguments.length);\r\n validateCallback('Query.once', 'callback', callback, true);\r\n const ret = Query.getCancelAndContextArgs_('Query.once', failureCallbackOrContext, context);\r\n const deferred = new Deferred();\r\n const valueCallback = (expSnapshot, previousChildName) => {\r\n const result = new DataSnapshot(this.database, expSnapshot);\r\n if (callback) {\r\n callback.call(ret.context, result, previousChildName);\r\n }\r\n deferred.resolve(result);\r\n };\r\n valueCallback.userCallback = callback;\r\n valueCallback.context = ret.context;\r\n const cancelCallback = (error) => {\r\n if (ret.cancel) {\r\n ret.cancel.call(ret.context, error);\r\n }\r\n deferred.reject(error);\r\n };\r\n switch (eventType) {\r\n case 'value':\r\n onValue(this._delegate, valueCallback, cancelCallback, {\r\n onlyOnce: true\r\n });\r\n break;\r\n case 'child_added':\r\n onChildAdded(this._delegate, valueCallback, cancelCallback, {\r\n onlyOnce: true\r\n });\r\n break;\r\n case 'child_removed':\r\n onChildRemoved(this._delegate, valueCallback, cancelCallback, {\r\n onlyOnce: true\r\n });\r\n break;\r\n case 'child_changed':\r\n onChildChanged(this._delegate, valueCallback, cancelCallback, {\r\n onlyOnce: true\r\n });\r\n break;\r\n case 'child_moved':\r\n onChildMoved(this._delegate, valueCallback, cancelCallback, {\r\n onlyOnce: true\r\n });\r\n break;\r\n default:\r\n throw new Error(errorPrefix('Query.once', 'eventType') +\r\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\r\n '\"child_changed\", or \"child_moved\".');\r\n }\r\n return deferred.promise;\r\n }\r\n /**\r\n * Set a limit and anchor it to the start of the window.\r\n */\r\n limitToFirst(limit) {\r\n validateArgCount('Query.limitToFirst', 1, 1, arguments.length);\r\n return new Query(this.database, query(this._delegate, limitToFirst(limit)));\r\n }\r\n /**\r\n * Set a limit and anchor it to the end of the window.\r\n */\r\n limitToLast(limit) {\r\n validateArgCount('Query.limitToLast', 1, 1, arguments.length);\r\n return new Query(this.database, query(this._delegate, limitToLast(limit)));\r\n }\r\n /**\r\n * Given a child path, return a new query ordered by the specified grandchild path.\r\n */\r\n orderByChild(path) {\r\n validateArgCount('Query.orderByChild', 1, 1, arguments.length);\r\n return new Query(this.database, query(this._delegate, orderByChild(path)));\r\n }\r\n /**\r\n * Return a new query ordered by the KeyIndex\r\n */\r\n orderByKey() {\r\n validateArgCount('Query.orderByKey', 0, 0, arguments.length);\r\n return new Query(this.database, query(this._delegate, orderByKey()));\r\n }\r\n /**\r\n * Return a new query ordered by the PriorityIndex\r\n */\r\n orderByPriority() {\r\n validateArgCount('Query.orderByPriority', 0, 0, arguments.length);\r\n return new Query(this.database, query(this._delegate, orderByPriority()));\r\n }\r\n /**\r\n * Return a new query ordered by the ValueIndex\r\n */\r\n orderByValue() {\r\n validateArgCount('Query.orderByValue', 0, 0, arguments.length);\r\n return new Query(this.database, query(this._delegate, orderByValue()));\r\n }\r\n startAt(value = null, name) {\r\n validateArgCount('Query.startAt', 0, 2, arguments.length);\r\n return new Query(this.database, query(this._delegate, startAt(value, name)));\r\n }\r\n startAfter(value = null, name) {\r\n validateArgCount('Query.startAfter', 0, 2, arguments.length);\r\n return new Query(this.database, query(this._delegate, startAfter(value, name)));\r\n }\r\n endAt(value = null, name) {\r\n validateArgCount('Query.endAt', 0, 2, arguments.length);\r\n return new Query(this.database, query(this._delegate, endAt(value, name)));\r\n }\r\n endBefore(value = null, name) {\r\n validateArgCount('Query.endBefore', 0, 2, arguments.length);\r\n return new Query(this.database, query(this._delegate, endBefore(value, name)));\r\n }\r\n /**\r\n * Load the selection of children with exactly the specified value, and, optionally,\r\n * the specified name.\r\n */\r\n equalTo(value, name) {\r\n validateArgCount('Query.equalTo', 1, 2, arguments.length);\r\n return new Query(this.database, query(this._delegate, equalTo(value, name)));\r\n }\r\n /**\r\n * @returns URL for this location.\r\n */\r\n toString() {\r\n validateArgCount('Query.toString', 0, 0, arguments.length);\r\n return this._delegate.toString();\r\n }\r\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n // for end-users.\r\n toJSON() {\r\n // An optional spacer argument is unnecessary for a string.\r\n validateArgCount('Query.toJSON', 0, 1, arguments.length);\r\n return this._delegate.toJSON();\r\n }\r\n /**\r\n * Return true if this query and the provided query are equivalent; otherwise, return false.\r\n */\r\n isEqual(other) {\r\n validateArgCount('Query.isEqual', 1, 1, arguments.length);\r\n if (!(other instanceof Query)) {\r\n const error = 'Query.isEqual failed: First argument must be an instance of firebase.database.Query.';\r\n throw new Error(error);\r\n }\r\n return this._delegate.isEqual(other._delegate);\r\n }\r\n /**\r\n * Helper used by .on and .once to extract the context and or cancel arguments.\r\n * @param fnName - The function name (on or once)\r\n *\r\n */\r\n static getCancelAndContextArgs_(fnName, cancelOrContext, context) {\r\n const ret = { cancel: undefined, context: undefined };\r\n if (cancelOrContext && context) {\r\n ret.cancel = cancelOrContext;\r\n validateCallback(fnName, 'cancel', ret.cancel, true);\r\n ret.context = context;\r\n validateContextObject(fnName, 'context', ret.context, true);\r\n }\r\n else if (cancelOrContext) {\r\n // we have either a cancel callback or a context.\r\n if (typeof cancelOrContext === 'object' && cancelOrContext !== null) {\r\n // it's a context!\r\n ret.context = cancelOrContext;\r\n }\r\n else if (typeof cancelOrContext === 'function') {\r\n ret.cancel = cancelOrContext;\r\n }\r\n else {\r\n throw new Error(errorPrefix(fnName, 'cancelOrContext') +\r\n ' must either be a cancel callback or a context object.');\r\n }\r\n }\r\n return ret;\r\n }\r\n get ref() {\r\n return new Reference(this.database, new _ReferenceImpl(this._delegate._repo, this._delegate._path));\r\n }\r\n}\r\nclass Reference extends Query {\r\n /**\r\n * Call options:\r\n * new Reference(Repo, Path) or\r\n * new Reference(url: string, string|RepoManager)\r\n *\r\n * Externally - this is the firebase.database.Reference type.\r\n */\r\n constructor(database, _delegate) {\r\n super(database, new _QueryImpl(_delegate._repo, _delegate._path, new _QueryParams(), false));\r\n this.database = database;\r\n this._delegate = _delegate;\r\n }\r\n /** @returns {?string} */\r\n getKey() {\r\n validateArgCount('Reference.key', 0, 0, arguments.length);\r\n return this._delegate.key;\r\n }\r\n child(pathString) {\r\n validateArgCount('Reference.child', 1, 1, arguments.length);\r\n if (typeof pathString === 'number') {\r\n pathString = String(pathString);\r\n }\r\n return new Reference(this.database, child(this._delegate, pathString));\r\n }\r\n /** @returns {?Reference} */\r\n getParent() {\r\n validateArgCount('Reference.parent', 0, 0, arguments.length);\r\n const parent = this._delegate.parent;\r\n return parent ? new Reference(this.database, parent) : null;\r\n }\r\n /** @returns {!Reference} */\r\n getRoot() {\r\n validateArgCount('Reference.root', 0, 0, arguments.length);\r\n return new Reference(this.database, this._delegate.root);\r\n }\r\n set(newVal, onComplete) {\r\n validateArgCount('Reference.set', 1, 2, arguments.length);\r\n validateCallback('Reference.set', 'onComplete', onComplete, true);\r\n const result = set(this._delegate, newVal);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n update(values, onComplete) {\r\n validateArgCount('Reference.update', 1, 2, arguments.length);\r\n if (Array.isArray(values)) {\r\n const newObjectToMerge = {};\r\n for (let i = 0; i < values.length; ++i) {\r\n newObjectToMerge['' + i] = values[i];\r\n }\r\n values = newObjectToMerge;\r\n warn('Passing an Array to Firebase.update() is deprecated. ' +\r\n 'Use set() if you want to overwrite the existing data, or ' +\r\n 'an Object with integer keys if you really do want to ' +\r\n 'only update some of the children.');\r\n }\r\n _validateWritablePath('Reference.update', this._delegate._path);\r\n validateCallback('Reference.update', 'onComplete', onComplete, true);\r\n const result = update(this._delegate, values);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n setWithPriority(newVal, newPriority, onComplete) {\r\n validateArgCount('Reference.setWithPriority', 2, 3, arguments.length);\r\n validateCallback('Reference.setWithPriority', 'onComplete', onComplete, true);\r\n const result = setWithPriority(this._delegate, newVal, newPriority);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n remove(onComplete) {\r\n validateArgCount('Reference.remove', 0, 1, arguments.length);\r\n validateCallback('Reference.remove', 'onComplete', onComplete, true);\r\n const result = remove(this._delegate);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n transaction(transactionUpdate, onComplete, applyLocally) {\r\n validateArgCount('Reference.transaction', 1, 3, arguments.length);\r\n validateCallback('Reference.transaction', 'transactionUpdate', transactionUpdate, false);\r\n validateCallback('Reference.transaction', 'onComplete', onComplete, true);\r\n validateBoolean('Reference.transaction', 'applyLocally', applyLocally, true);\r\n const result = runTransaction(this._delegate, transactionUpdate, {\r\n applyLocally\r\n }).then(transactionResult => new TransactionResult(transactionResult.committed, new DataSnapshot(this.database, transactionResult.snapshot)));\r\n if (onComplete) {\r\n result.then(transactionResult => onComplete(null, transactionResult.committed, transactionResult.snapshot), error => onComplete(error, false, null));\r\n }\r\n return result;\r\n }\r\n setPriority(priority, onComplete) {\r\n validateArgCount('Reference.setPriority', 1, 2, arguments.length);\r\n validateCallback('Reference.setPriority', 'onComplete', onComplete, true);\r\n const result = setPriority(this._delegate, priority);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n push(value, onComplete) {\r\n validateArgCount('Reference.push', 0, 2, arguments.length);\r\n validateCallback('Reference.push', 'onComplete', onComplete, true);\r\n const expPromise = push(this._delegate, value);\r\n const promise = expPromise.then(expRef => new Reference(this.database, expRef));\r\n if (onComplete) {\r\n promise.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n const result = new Reference(this.database, expPromise);\r\n result.then = promise.then.bind(promise);\r\n result.catch = promise.catch.bind(promise, undefined);\r\n return result;\r\n }\r\n onDisconnect() {\r\n _validateWritablePath('Reference.onDisconnect', this._delegate._path);\r\n return new OnDisconnect(new OnDisconnect$1(this._delegate._repo, this._delegate._path));\r\n }\r\n get key() {\r\n return this.getKey();\r\n }\r\n get parent() {\r\n return this.getParent();\r\n }\r\n get root() {\r\n return this.getRoot();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Class representing a firebase database.\r\n */\r\nclass Database {\r\n /**\r\n * The constructor should not be called by users of our public API.\r\n */\r\n constructor(_delegate, app) {\r\n this._delegate = _delegate;\r\n this.app = app;\r\n this.INTERNAL = {\r\n delete: () => this._delegate._delete(),\r\n forceWebSockets,\r\n forceLongPolling\r\n };\r\n }\r\n /**\r\n * Modify this instance to communicate with the Realtime Database emulator.\r\n *\r\n *

Note: This method must be called before performing any other operation.\r\n *\r\n * @param host - the emulator host (ex: localhost)\r\n * @param port - the emulator port (ex: 8080)\r\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\r\n */\r\n useEmulator(host, port, options = {}) {\r\n connectDatabaseEmulator(this._delegate, host, port, options);\r\n }\r\n ref(path) {\r\n validateArgCount('database.ref', 0, 1, arguments.length);\r\n if (path instanceof Reference) {\r\n const childRef = refFromURL(this._delegate, path.toString());\r\n return new Reference(this, childRef);\r\n }\r\n else {\r\n const childRef = ref(this._delegate, path);\r\n return new Reference(this, childRef);\r\n }\r\n }\r\n /**\r\n * Returns a reference to the root or the path specified in url.\r\n * We throw a exception if the url is not in the same domain as the\r\n * current repo.\r\n * @returns Firebase reference.\r\n */\r\n refFromURL(url) {\r\n const apiName = 'database.refFromURL';\r\n validateArgCount(apiName, 1, 1, arguments.length);\r\n const childRef = refFromURL(this._delegate, url);\r\n return new Reference(this, childRef);\r\n }\r\n // Make individual repo go offline.\r\n goOffline() {\r\n validateArgCount('database.goOffline', 0, 0, arguments.length);\r\n return goOffline(this._delegate);\r\n }\r\n goOnline() {\r\n validateArgCount('database.goOnline', 0, 0, arguments.length);\r\n return goOnline(this._delegate);\r\n }\r\n}\r\nDatabase.ServerValue = {\r\n TIMESTAMP: serverTimestamp(),\r\n increment: (delta) => increment(delta)\r\n};\n\n/**\r\n * Used by console to create a database based on the app,\r\n * passed database URL and a custom auth implementation.\r\n *\r\n * @param app - A valid FirebaseApp-like object\r\n * @param url - A valid Firebase databaseURL\r\n * @param version - custom version e.g. firebase-admin version\r\n * @param customAuthImpl - custom auth implementation\r\n */\r\nfunction initStandalone({ app, url, version, customAuthImpl, customAppCheckImpl, namespace, nodeAdmin = false }) {\r\n _setSDKVersion(version);\r\n const container = new ComponentContainer('database-standalone');\r\n /**\r\n * ComponentContainer('database-standalone') is just a placeholder that doesn't perform\r\n * any actual function.\r\n */\r\n const authProvider = new Provider('auth-internal', container);\r\n authProvider.setComponent(new Component('auth-internal', () => customAuthImpl, \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n let appCheckProvider = undefined;\r\n if (customAppCheckImpl) {\r\n appCheckProvider = new Provider('app-check-internal', container);\r\n appCheckProvider.setComponent(new Component('app-check-internal', () => customAppCheckImpl, \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n }\r\n return {\r\n instance: new Database(_repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url, nodeAdmin), app),\r\n namespace\r\n };\r\n}\n\nvar INTERNAL = /*#__PURE__*/Object.freeze({\n __proto__: null,\n initStandalone: initStandalone\n});\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ServerValue = Database.ServerValue;\r\nfunction registerDatabase(instance) {\r\n // Register the Database Service with the 'firebase' namespace.\r\n instance.INTERNAL.registerComponent(new Component('database-compat', (container, { instanceIdentifier: url }) => {\r\n /* Dependencies */\r\n // getImmediate for FirebaseApp will always succeed\r\n const app = container.getProvider('app-compat').getImmediate();\r\n const databaseExp = container\r\n .getProvider('database')\r\n .getImmediate({ identifier: url });\r\n return new Database(databaseExp, app);\r\n }, \"PUBLIC\" /* ComponentType.PUBLIC */)\r\n .setServiceProps(\r\n // firebase.database namespace properties\r\n {\r\n Reference,\r\n Query,\r\n Database,\r\n DataSnapshot,\r\n enableLogging,\r\n INTERNAL,\r\n ServerValue\r\n })\r\n .setMultipleInstances(true));\r\n instance.registerVersion(name, version);\r\n}\r\nregisterDatabase(firebase);\n\nexport { registerDatabase };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, NgModule } from '@angular/core';\nimport * as i1 from '@angular/fire';\nimport { keepUnstableUntilFirst, VERSION } from '@angular/fire';\nimport * as i3 from '@angular/fire/app-check';\nimport { ɵfirebaseAppFactory, ɵcacheInstance, FIREBASE_OPTIONS, FIREBASE_APP_NAME } from '@angular/fire/compat';\nimport * as i2 from '@angular/fire/compat/auth';\nimport { ɵauthFactory, USE_EMULATOR as USE_EMULATOR$1, SETTINGS, TENANT_ID, LANGUAGE_CODE, USE_DEVICE_LANGUAGE, PERSISTENCE } from '@angular/fire/compat/auth';\nimport { map, share, scan, withLatestFrom, skipWhile, switchMap, distinctUntilChanged } from 'rxjs/operators';\nimport { Observable, asyncScheduler, merge, of } from 'rxjs';\nimport 'firebase/compat/auth';\nimport 'firebase/compat/database';\nimport firebase from 'firebase/compat/app';\n\n/**\n * Create an observable from a Database Reference or Database Query.\n * @param ref Database Reference\n * @param event Listen event type ('value', 'added', 'changed', 'removed', 'moved')\n * @param listenType 'on' or 'once'\n * @param scheduler - Rxjs scheduler\n */\nfunction fromRef(ref, event, listenType = 'on', scheduler = asyncScheduler) {\n return new Observable(subscriber => {\n let fn = null;\n fn = ref[listenType](event, (snapshot, prevKey) => {\n scheduler.schedule(() => {\n subscriber.next({ snapshot, prevKey });\n });\n if (listenType === 'once') {\n scheduler.schedule(() => subscriber.complete());\n }\n }, err => {\n scheduler.schedule(() => subscriber.error(err));\n });\n if (listenType === 'on') {\n return {\n unsubscribe() {\n if (fn != null) {\n ref.off(event, fn);\n }\n }\n };\n }\n else {\n return {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n unsubscribe() {\n }\n };\n }\n }).pipe(map(payload => {\n const { snapshot, prevKey } = payload;\n let key = null;\n if (snapshot.exists()) {\n key = snapshot.key;\n }\n return { type: event, payload: snapshot, prevKey, key };\n }), share());\n}\n\nfunction isString(value) {\n return typeof value === 'string';\n}\nfunction isFirebaseDataSnapshot(value) {\n return typeof value.exportVal === 'function';\n}\nfunction isNil(obj) {\n return obj === undefined || obj === null;\n}\nfunction isFirebaseRef(value) {\n return typeof value.set === 'function';\n}\n/**\n * Returns a database reference given a Firebase App and an\n * absolute or relative path.\n * @param database - Firebase Database\n * @param pathRef - Database path, relative or absolute\n */\nfunction getRef(database, pathRef) {\n // if a db ref was passed in, just return it\n return isFirebaseRef(pathRef) ? pathRef\n : database.ref(pathRef);\n}\nfunction checkOperationCases(item, cases) {\n if (isString(item)) {\n return cases.stringCase();\n }\n else if (isFirebaseRef(item)) {\n return cases.firebaseCase();\n }\n else if (isFirebaseDataSnapshot(item)) {\n return cases.snapshotCase();\n }\n throw new Error(`Expects a string, snapshot, or reference. Got: ${typeof item}`);\n}\n\nfunction validateEventsArray(events) {\n if (isNil(events) || events.length === 0) {\n events = ['child_added', 'child_removed', 'child_changed', 'child_moved'];\n }\n return events;\n}\n\nfunction stateChanges(query, events, scheduler) {\n events = validateEventsArray(events);\n const childEvent$ = events.map(event => fromRef(query, event, 'on', scheduler));\n return merge(...childEvent$);\n}\n\nfunction auditTrail(query, events, scheduler) {\n const auditTrail$ = stateChanges(query, events)\n .pipe(scan((current, action) => [...current, action], []));\n return waitForLoaded(query, auditTrail$, scheduler);\n}\nfunction loadedData(query, scheduler) {\n // Create an observable of loaded values to retrieve the\n // known dataset. This will allow us to know what key to\n // emit the \"whole\" array at when listening for child events.\n return fromRef(query, 'value', 'on', scheduler)\n .pipe(map(data => {\n // Store the last key in the data set\n let lastKeyToLoad;\n // Loop through loaded dataset to find the last key\n data.payload.forEach(child => {\n lastKeyToLoad = child.key;\n return false;\n });\n // return data set and the current last key loaded\n return { data, lastKeyToLoad };\n }));\n}\nfunction waitForLoaded(query, action$, scheduler) {\n const loaded$ = loadedData(query, scheduler);\n return loaded$\n .pipe(withLatestFrom(action$), \n // Get the latest values from the \"loaded\" and \"child\" datasets\n // We can use both datasets to form an array of the latest values.\n map(([loaded, actions]) => {\n // Store the last key in the data set\n const lastKeyToLoad = loaded.lastKeyToLoad;\n // Store all child keys loaded at this point\n const loadedKeys = actions.map(snap => snap.key);\n return { actions, lastKeyToLoad, loadedKeys };\n }), \n // This is the magical part, only emit when the last load key\n // in the dataset has been loaded by a child event. At this point\n // we can assume the dataset is \"whole\".\n skipWhile(meta => meta.loadedKeys.indexOf(meta.lastKeyToLoad) === -1), \n // Pluck off the meta data because the user only cares\n // to iterate through the snapshots\n map(meta => meta.actions));\n}\n\nfunction createDataOperationMethod(ref, operation) {\n return function dataOperation(item, value) {\n return checkOperationCases(item, {\n stringCase: () => ref.child(item)[operation](value),\n firebaseCase: () => item[operation](value),\n snapshotCase: () => item.ref[operation](value)\n });\n };\n}\n\n// TODO(davideast): Find out why TS thinks this returns firebase.Primise\n// instead of Promise.\nfunction createRemoveMethod(ref) {\n return function remove(item) {\n if (!item) {\n return ref.remove();\n }\n return checkOperationCases(item, {\n stringCase: () => ref.child(item).remove(),\n firebaseCase: () => item.remove(),\n snapshotCase: () => item.ref.remove()\n });\n };\n}\n\nfunction listChanges(ref, events, scheduler) {\n return fromRef(ref, 'value', 'once', scheduler).pipe(switchMap(snapshotAction => {\n const childEvent$ = [of(snapshotAction)];\n events.forEach(event => childEvent$.push(fromRef(ref, event, 'on', scheduler)));\n return merge(...childEvent$).pipe(scan(buildView, []));\n }), distinctUntilChanged());\n}\nfunction positionFor(changes, key) {\n const len = changes.length;\n for (let i = 0; i < len; i++) {\n if (changes[i].payload.key === key) {\n return i;\n }\n }\n return -1;\n}\nfunction positionAfter(changes, prevKey) {\n if (isNil(prevKey)) {\n return 0;\n }\n else {\n const i = positionFor(changes, prevKey);\n if (i === -1) {\n return changes.length;\n }\n else {\n return i + 1;\n }\n }\n}\nfunction buildView(current, action) {\n const { payload, prevKey, key } = action;\n const currentKeyPosition = positionFor(current, key);\n const afterPreviousKeyPosition = positionAfter(current, prevKey);\n switch (action.type) {\n case 'value':\n if (action.payload?.exists()) {\n let prevKey = null;\n action.payload.forEach(payload => {\n const action = { payload, type: 'value', prevKey, key: payload.key };\n prevKey = payload.key;\n current = [...current, action];\n return false;\n });\n }\n return current;\n case 'child_added':\n if (currentKeyPosition > -1) {\n // check that the previouskey is what we expect, else reorder\n const previous = current[currentKeyPosition - 1];\n if ((previous?.key || null) !== prevKey) {\n current = current.filter(x => x.payload.key !== payload.key);\n current.splice(afterPreviousKeyPosition, 0, action);\n }\n }\n else if (prevKey == null) {\n return [action, ...current];\n }\n else {\n current = current.slice();\n current.splice(afterPreviousKeyPosition, 0, action);\n }\n return current;\n case 'child_removed':\n return current.filter(x => x.payload.key !== payload.key);\n case 'child_changed':\n return current.map(x => x.payload.key === key ? action : x);\n case 'child_moved':\n if (currentKeyPosition > -1) {\n const data = current.splice(currentKeyPosition, 1)[0];\n current = current.slice();\n current.splice(afterPreviousKeyPosition, 0, data);\n return current;\n }\n return current;\n // default will also remove null results\n default:\n return current;\n }\n}\n\nfunction snapshotChanges(query, events, scheduler) {\n events = validateEventsArray(events);\n return listChanges(query, events, scheduler);\n}\n\nfunction createListReference(query, afDatabase) {\n const outsideAngularScheduler = afDatabase.schedulers.outsideAngular;\n const refInZone = afDatabase.schedulers.ngZone.run(() => query.ref);\n return {\n query,\n update: createDataOperationMethod(refInZone, 'update'),\n set: createDataOperationMethod(refInZone, 'set'),\n push: (data) => refInZone.push(data),\n remove: createRemoveMethod(refInZone),\n snapshotChanges(events) {\n return snapshotChanges(query, events, outsideAngularScheduler).pipe(keepUnstableUntilFirst);\n },\n stateChanges(events) {\n return stateChanges(query, events, outsideAngularScheduler).pipe(keepUnstableUntilFirst);\n },\n auditTrail(events) {\n return auditTrail(query, events, outsideAngularScheduler).pipe(keepUnstableUntilFirst);\n },\n valueChanges(events, options) {\n const snapshotChanges$ = snapshotChanges(query, events, outsideAngularScheduler);\n return snapshotChanges$.pipe(map(actions => actions.map(a => {\n if (options && options.idField) {\n return {\n ...a.payload.val(),\n ...{\n [options.idField]: a.key\n }\n };\n }\n else {\n return a.payload.val();\n }\n })), keepUnstableUntilFirst);\n }\n };\n}\n\nfunction createObjectSnapshotChanges(query, scheduler) {\n return function snapshotChanges() {\n return fromRef(query, 'value', 'on', scheduler);\n };\n}\n\nfunction createObjectReference(query, afDatabase) {\n return {\n query,\n snapshotChanges() {\n return createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)().pipe(keepUnstableUntilFirst);\n },\n update(data) { return query.ref.update(data); },\n set(data) { return query.ref.set(data); },\n remove() { return query.ref.remove(); },\n valueChanges() {\n const snapshotChanges$ = createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)();\n return snapshotChanges$.pipe(keepUnstableUntilFirst, map(action => action.payload.exists() ? action.payload.val() : null));\n },\n };\n}\n\nconst URL = new InjectionToken('angularfire2.realtimeDatabaseURL');\nconst USE_EMULATOR = new InjectionToken('angularfire2.database.use-emulator');\nclass AngularFireDatabase {\n schedulers;\n database;\n constructor(options, name, databaseURL, \n // eslint-disable-next-line @typescript-eslint/ban-types\n platformId, zone, schedulers, _useEmulator, // tuple isn't working here\n auth, useAuthEmulator, authSettings, // can't use firebase.auth.AuthSettings here\n tenantId, languageCode, useDeviceLanguage, persistence, _appCheckInstances) {\n this.schedulers = schedulers;\n const useEmulator = _useEmulator;\n const app = ɵfirebaseAppFactory(options, zone, name);\n if (auth) {\n ɵauthFactory(app, zone, useAuthEmulator, tenantId, languageCode, useDeviceLanguage, authSettings, persistence);\n }\n this.database = ɵcacheInstance(`${app.name}.database.${databaseURL}`, 'AngularFireDatabase', app.name, () => {\n const database = zone.runOutsideAngular(() => app.database(databaseURL || undefined));\n if (useEmulator) {\n database.useEmulator(...useEmulator);\n }\n return database;\n }, [useEmulator]);\n }\n list(pathOrRef, queryFn) {\n const ref = this.schedulers.ngZone.runOutsideAngular(() => getRef(this.database, pathOrRef));\n let query = ref;\n if (queryFn) {\n query = queryFn(ref);\n }\n return createListReference(query, this);\n }\n object(pathOrRef) {\n const ref = this.schedulers.ngZone.runOutsideAngular(() => getRef(this.database, pathOrRef));\n return createObjectReference(ref, this);\n }\n createPushId() {\n const ref = this.schedulers.ngZone.runOutsideAngular(() => this.database.ref());\n return ref.push().key;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireDatabase, deps: [{ token: FIREBASE_OPTIONS }, { token: FIREBASE_APP_NAME, optional: true }, { token: URL, optional: true }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: i1.ɵAngularFireSchedulers }, { token: USE_EMULATOR, optional: true }, { token: i2.AngularFireAuth, optional: true }, { token: USE_EMULATOR$1, optional: true }, { token: SETTINGS, optional: true }, { token: TENANT_ID, optional: true }, { token: LANGUAGE_CODE, optional: true }, { token: USE_DEVICE_LANGUAGE, optional: true }, { token: PERSISTENCE, optional: true }, { token: i3.AppCheckInstances, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireDatabase, providedIn: 'any' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireDatabase, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'any'\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [FIREBASE_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [FIREBASE_APP_NAME]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [URL]\n }] }, { type: Object, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: i0.NgZone }, { type: i1.ɵAngularFireSchedulers }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [USE_EMULATOR]\n }] }, { type: i2.AngularFireAuth, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [USE_EMULATOR$1]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [SETTINGS]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TENANT_ID]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [LANGUAGE_CODE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [USE_DEVICE_LANGUAGE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [PERSISTENCE]\n }] }, { type: i3.AppCheckInstances, decorators: [{\n type: Optional\n }] }] });\n\nclass AngularFireDatabaseModule {\n constructor() {\n firebase.registerVersion('angularfire', VERSION.full, 'rtdb-compat');\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireDatabaseModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireDatabaseModule });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireDatabaseModule, providers: [AngularFireDatabase] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireDatabaseModule, decorators: [{\n type: NgModule,\n args: [{\n providers: [AngularFireDatabase]\n }]\n }], ctorParameters: () => [] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AngularFireDatabase, AngularFireDatabaseModule, URL, USE_EMULATOR, auditTrail, createListReference, fromRef, listChanges, snapshotChanges, stateChanges };\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function skipWhile(predicate) {\n return operate((source, subscriber) => {\n let taking = false;\n let index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, (value) => (taking || (taking = !predicate(value, index++))) && subscriber.next(value)));\n });\n}\n","import { Injectable } from '@angular/core';\r\nimport { AngularFireDatabase } from '@angular/fire/compat/database';\r\nimport { Ticket } from '../models';\r\n\r\n@Injectable()\r\nexport class PresenceService {\r\n private pushId: string;\r\n\r\n constructor(private db: AngularFireDatabase) {\r\n this.pushId = this.db.createPushId();\r\n }\r\n\r\n private getPath(ticket: Ticket): string {\r\n return `${ticket.providerId}/${ticket.serviceConfigId}/${ticket.id}/connectedDevices`;\r\n }\r\n\r\n setPresence(status: string, ticket: Ticket) {\r\n switch(status) {\r\n case 'visible':\r\n status = 'online';\r\n break;\r\n case 'hidden':\r\n status = 'away';\r\n }\r\n\r\n const ticketRef = this.db.object(this.getPath(ticket));\r\n ticketRef.update({[this.pushId]: status});\r\n }\r\n\r\n addVisibilityListener(ticket: Ticket) {\r\n var ref = this.db.database.ref(this.getPath(ticket));\r\n\r\n ref.onDisconnect().update(\r\n {[this.pushId]: 'offline'},\r\n () => {\r\n if (document.onvisibilitychange !== undefined) {\r\n this.dispose();\r\n ref.update({[this.pushId]: 'offline'});\r\n }\r\n }\r\n ).then(() => {\r\n this.addVisibilityEvent(ticket)\r\n this.setPresence(document.visibilityState, ticket);\r\n });\r\n\r\n window.onbeforeunload = () => {\r\n this.dispose();\r\n this.setPresence('offline', ticket);\r\n }\r\n }\r\n\r\n addVisibilityEvent(ticket: Ticket) {\r\n document.onvisibilitychange = (e) => {\r\n this.setPresence(document.visibilityState, ticket);\r\n }\r\n }\r\n\r\n dispose() {\r\n document.onvisibilitychange = undefined;\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from 'src/environments/environment';\n\ninterface RemoteConfig {\n defaultValue: {\n value: string;\n },\n valueType: string\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RemoteConfigService {\n\n constructor(private readonly http: HttpClient) { }\n\n async shouldUseCustomInterface(): Promise {\n const url = `${environment.cloudFunctionsUrl}/getUseCustomInterface?env=${environment.env}`;\n \n const response = await this.http.get(url).toPromise();\n\n return response.valueType === 'BOOLEAN' && response.defaultValue.value === 'true';\n }\n}\n","import { Injector } from \"@angular/core\";\n\nexport class ServiceLocator {\n static injector: Injector;\n}","import { Injectable } from '@angular/core';\nimport { PositionUtilService } from '../utils/position-util.service';\nimport { Service, Storage, Terminal, Ticket } from '../models';\nimport { TicketService } from '../services/ticket.service';\nimport { Template } from '../models/template.model';\n\n@Injectable()\nexport class StorageService {\n private key = 'app.storage';\n private storageAux = localStorage.getItem(this.key);\n\n constructor(private ticketService: TicketService, private positionUtil: PositionUtilService) {\n if (!this.storageAux) {\n this.initStorage();\n }\n\n }\n\n private get storage(): Storage {\n return JSON.parse(localStorage.getItem(this.key));\n }\n\n get currentTerminal(): Terminal {\n return this.storage.current.terminal;\n }\n\n get currentTicket(): Ticket {\n return this.storage.current.ticket;\n }\n\n get currentService(): Service {\n return this.storage.current.service;\n }\n\n get tickets(): Ticket[] {\n return this.storage.tickets;\n }\n\n get currentTemplate(): Template {\n return this.storage.current.template;\n }\n\n initStorage(): void {\n const storage: Storage = {\n current: {\n terminal: null,\n service: null,\n ticket: null,\n template: null,\n },\n terminals: [],\n tickets: []\n };\n\n localStorage.setItem(this.key, JSON.stringify(storage));\n }\n\n clear(): void {\n this.initStorage();\n }\n\n addTerminal(terminal: Terminal): void {\n const storage = this.storage;\n const index = storage.terminals.findIndex((t) => t.id === terminal.id);\n\n if (index > -1) {\n storage.terminals[index] = terminal;\n } else {\n storage.terminals.push(terminal);\n }\n\n localStorage.setItem(this.key, JSON.stringify(storage));\n this.setCurrentTerminal(terminal);\n }\n\n addTicket(ticket: Ticket): void {\n const storage = this.storage;\n const index = storage.tickets.findIndex((t) => t.id === ticket.id);\n\n if (index > -1) {\n storage.tickets[index] = ticket;\n } else {\n storage.tickets.push(ticket);\n }\n\n localStorage.setItem(this.key, JSON.stringify(storage));\n }\n\n removeTerminal(id: number): void {\n const storage = this.storage;\n const index = storage.terminals.findIndex((t) => t.id === id);\n\n if (index === -1) {\n return;\n }\n\n storage.terminals.splice(index, 1);\n localStorage.setItem(this.key, JSON.stringify(storage));\n }\n\n removeTicket(id: number): void {\n const storage = this.storage;\n const index = storage.tickets.findIndex((t) => t.id === id);\n\n if (index === -1) {\n return;\n }\n\n storage.tickets.splice(index, 1);\n localStorage.setItem(this.key, JSON.stringify(storage));\n }\n\n updateTicket(ticket: Ticket): void {\n const storage = this.storage;\n const index = storage.tickets.findIndex((t) => t.id === ticket.id);\n\n if (index === -1) {\n return;\n }\n\n storage.tickets[index] = ticket;\n localStorage.setItem(this.key, JSON.stringify(storage));\n }\n\n updateTicketsPositions() {\n this.tickets.forEach(async ticket => {\n ticket.position = await this.positionUtil.getNewPosition(ticket);\n this.updateTicket(ticket);\n });\n }\n\n setCurrentTicket(ticket: Ticket): void {\n const storage = this.storage;\n storage.current.ticket = ticket;\n localStorage.setItem(this.key, JSON.stringify(storage));\n\n if (ticket) {\n const terminal = this.findTerminal(ticket.providerId, ticket.locationId);\n\n if (terminal) {\n this.setCurrentTerminal(terminal);\n }\n } else {\n this.setCurrentTerminal(null);\n }\n\n }\n\n setCurrentService(service: Service) {\n const storage = this.storage;\n storage.current.service = service;\n localStorage.setItem(this.key, JSON.stringify(storage))\n }\n\n private setCurrentTerminal(terminal: Terminal): void {\n const storage = this.storage;\n storage.current.terminal = terminal;\n localStorage.setItem(this.key, JSON.stringify(storage));\n }\n\n private findTerminal(providerId: number, locationId: number): Terminal {\n return this.storage.terminals.find((t) => t.provider.id === providerId && t.location.id === locationId);\n }\n setTemplate(template: Template) {\n const storage = this.storage;\n storage.current.template = template;\n localStorage.setItem(this.key, JSON.stringify(storage))\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { environment } from 'src/environments/environment';\nimport { Observable } from 'rxjs';\nimport { Service, Terminal, TerminalPayload } from '../models';\n\n@Injectable()\nexport class TerminalService {\n private urlApi: string = environment.urlApi;\n\n constructor(private http: HttpClient) { }\n\n getTerminal(accessKey: string): Observable {\n return this.http\n .get(`${this.urlApi}api/terminals/${accessKey}`);\n }\n\n getCurrentTerminal(): Terminal {\n return JSON.parse(localStorage.getItem('currentTerminal'));\n }\n\n setCurrentTerminal(terminal: Terminal): void {\n localStorage.setItem('currentTerminal', JSON.stringify(terminal));\n }\n\n getCurrentTerminalPayload(): TerminalPayload {\n return JSON.parse(localStorage.getItem('currentTerminalPayload'));\n }\n\n setCurrentTerminalPayload(payload: TerminalPayload): void {\n localStorage.setItem('currentTerminalPayload', JSON.stringify(payload));\n }\n\n initPayload(pid: number, locationId: number, accessKey: string, id: number): void {\n const payload = {\n terminalSchedule: {\n id,\n sessions: undefined,\n publicAccessKey: accessKey,\n },\n pid,\n locationId,\n serviceId: undefined,\n customer: {\n name: undefined,\n phone: undefined,\n email: undefined\n },\n recaptcha: undefined,\n priority: undefined,\n metadata: []\n };\n\n localStorage.setItem('currentTerminalPayload', JSON.stringify(payload));\n }\n\n booking(payload: TerminalPayload): Observable {\n return this.http\n .post(`${this.urlApi}v2/ticketing/tickets/booking-express`, payload);\n }\n\n providerAvailableServices(services: Service[], showOptionsBasedOnSessions: boolean, currentDate: Date): Service[] {\n return services.filter((service) => this.isServiceAvailable(showOptionsBasedOnSessions, service, currentDate));\n }\n\n getService(id: number): Observable {\n return this.http\n .get(`${this.urlApi}api/services/${id}`);\n }\n\n getTemplate(slug: string): Observable {\n return this.http\n .get(`${this.urlApi}api/companies/${slug}/template`);\n }\n \n private isServiceAvailable(showOptionsBasedOnSessions: boolean, service: Service, currentDate: Date): boolean {\n if (!service.sessions || service.sessions.length === 0) {\n return false;\n }\n\n if (showOptionsBasedOnSessions) {\n for (const session of service.sessions) {\n const start = new Date(session.start)\n const end = new Date(session.end);\n if (this.hasStarted(start, currentDate) && !this.hasEnded(currentDate, end)) {\n return true;\n }\n }\n } else {\n for (const session of service.sessions) {\n const end = new Date(session.end);\n if (!this.hasEnded(currentDate, end)) {\n return true;\n }\n }\n }\n \n return false;\n }\n \n private hasStarted(startTime: Date, currentDate: Date): boolean {\n return startTime.getTime() <= currentDate.getTime();\n }\n\n private hasEnded(currentDate: Date, endTime: Date): boolean {\n return currentDate.getTime() > endTime.getTime();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { environment } from 'src/environments/environment';\nimport { Observable } from 'rxjs';\nimport { Terminal, TerminalPayload, Customer, Ticket } from '../models';\nimport { Cancellation } from '../models/cancellation.model';\n\n@Injectable()\nexport class TicketService {\n private urlApi: string = environment.urlApi;\n\n constructor(private http: HttpClient) { }\n\n getTicket(id: number): Observable {\n return this.http\n .get(`${this.urlApi}v2/ticketing/tickets/${id}`);\n }\n\n getCurrentTicket(): Ticket {\n return JSON.parse(localStorage.getItem('currentTicket'));\n }\n\n setCurrentTicket(ticket: Ticket) {\n localStorage.setItem('currentTicket', JSON.stringify(ticket));\n }\n\n getChildrenKey(id: number): Observable {\n return this.http.get(`${this.urlApi}v2/ticketing/tickets/getchildrenkey/${id}`)\n }\n\n booking(payload: TerminalPayload): Observable {\n return this.http\n .post(`${this.urlApi}v2/ticketing/tickets/booking-express`, payload);\n }\n\n cancel(id: number, providerId: number, payload: Cancellation): Observable {\n return this.http.post(`${this.urlApi}v2/ticketing/public/providers/${providerId}/tickets/${id}/cancel`, payload);\n }\n\n getPosition(providerId: number, id: number): Observable {\n return this.http.get(`${this.urlApi}v2/ticketing/providers/${providerId}/tickets/${id}/position`);\n }\n\n getPrevision(id: number): Observable {\n return this.http.get(`${this.urlApi}v2/prevision/tickets/${id}`);\n }\n\n confirm(id: number, providerId: number) {\n return this.http.post(`${this.urlApi}v2/ticketing/public/providers/${providerId}/tickets/${id}/confirm`, null);\n }\n\n checkin(smartCode: string, providerId: number) {\n return this.http.post(`${this.urlApi}v2/ticketing/tickets/check-code`, {\n smartCode,\n pid: providerId\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { Ticket } from '../models';\nimport { TicketService } from '../services';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PositionUtilService {\n\n constructor(private ticketService: TicketService) {}\n\n getNewPosition(ticket: Ticket): Promise {\n return new Observable((observer) => {\n this.ticketService.getPosition(ticket.providerId, ticket.id).subscribe(response => {\n observer.next(response);\n observer.complete();\n });\n\n }).toPromise();\n }\n}\n","export const environment = {\n env: 'dev',\n production: true,\n urlBase: 'https://entre.dev.filazero.app/',\n urlExterna: 'https://site.dev.filazero.net/',\n urlApi: 'https://api.dev.filazero.net/',\n urlMeet: 'https://meetdev.filazero.net/',\n feedBackSiteUrl: 'https://site.dev.filazero.net/',\n cloudFunctionsUrl: 'https://us-central1-filazero-6db8c.cloudfunctions.net/',\n recaptchaKey: '6LfccPMpAAAAAIEhlhoMJsdxym18sXbzRZ4AI9bs',\n pusher: {\n key: '0041ab94e110de594bdb',\n cluster: 'mt1',\n app_id: '75465'\n },\n artesanoProviderId: 460,\n boticarioProviderId: 352,\n phoneNoelProviderId: 357,\n queueNoelProviderId: 776, // same providerId of the production\n firebase: {\n apiKey: 'AIzaSyAaV9u67AL1nczlia-VJU-gmiR8rWpRIdE',\n authDomain: 'filazero-6db8c.firebaseapp.com',\n databaseURL: 'https://fz-develop.firebaseio.com',\n projectId: 'filazero-6db8c',\n storageBucket: 'filazero-6db8c.appspot.com',\n messagingSenderId: '747494649248',\n appId: '1:747494649248:web:9e427106a978765e0888c5',\n measurementId: 'G-XQFEP5KGCE'\n },\n nike: {\n providerId: 356,\n nikeStore: {\n 'f04e0acea9fb4fc6ad5969f02ee48205': 'nike'\n }\n },\n operatorId: '0f086a11-fbe4-4da6-8bc2-988beb420a1e',\n smartCodePrefix: 'SC',\n};\n","import { Injectable } from \"@angular/core\";\nimport { ServiceConfig } from \"src/app/shared/models/service.config.model\";\nimport { PusherService } from \"src/app/shared/services\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { environment } from \"src/environments/environment\";\nimport { Observable } from \"rxjs\";\n\n@Injectable()\nexport class DisplayService {\n private urlApi: string = environment.urlApi;\n customersInQueue: number;\n customersInStore: number;\n eventMap: Map;\n eventNames = [\n \"TicketCheckin\",\n \"TicketStart\",\n \"TicketComplete\",\n \"TicketCancel\",\n ];\n\n constructor(private pusherService: PusherService, private http: HttpClient) {\n this.eventMap = this.getEventMap();\n }\n\n getPanel(accessKey: string): Observable {\n return this.http.get(`${this.urlApi}api/panels/${accessKey}`);\n }\n\n setInitialCount(countStarted: number, countChecked: number): void {\n this.customersInStore = countStarted;\n this.customersInQueue = countChecked;\n }\n\n subscribeQueues(serviceConfigs: ServiceConfig[]): void {\n for (const serviceConfig of serviceConfigs) {\n this.pusherService.add(\n `serviceConfig-${serviceConfig.id}`,\n this.eventMap\n );\n }\n }\n\n private getEventMap(): Map {\n const map = new Map();\n this.eventNames.forEach((eventName) => {\n map.set(eventName, () => {\n switch (eventName) {\n case \"TicketCheckin\":\n this.incrementQueue();\n break;\n case \"TicketStart\":\n this.incrementInStore();\n this.decrementQueue();\n break;\n case \"TicketComplete\":\n this.decrementInStore();\n break;\n case \"TicketCancel\":\n this.decrementQueue();\n break;\n }\n });\n });\n return map;\n }\n\n private incrementQueue(): void {\n this.customersInQueue++;\n }\n\n private decrementQueue(): void {\n if (this.customersInQueue - 1 < 0) {\n this.customersInQueue = 0;\n } else {\n this.customersInQueue--;\n }\n }\n\n private incrementInStore(): void {\n this.customersInStore++;\n }\n\n private decrementInStore(): void {\n if (this.customersInStore - 1 < 0) {\n this.customersInStore = 0;\n } else {\n this.customersInStore--;\n }\n }\n\n get customersInQueueAmount(): number {\n return this.customersInQueue;\n }\n\n get customersInStoreAmount(): number {\n return this.customersInStore;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n @Component({\n selector: 'app-queue-tracker',\n templateUrl: './queue-tracker.component.html',\n styleUrls: ['./queue-tracker.component.scss']\n})\nexport class QueueTrackerComponent implements OnInit {\n @Input() location: string;\n @Input() amount: number;\n @Input() backgroundColor: string;\n @Input() fontColor?: string;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","

\n
\n
\n \n
\n
\n {{ amount }}\n {{ 'general.display.peopleAt' | translate }} {{ location }}.\n
\n \n
\n
\n
\n
","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-queue-tracker-list',\n templateUrl: './queue-tracker-list.component.html',\n styleUrls: ['./queue-tracker-list.component.scss']\n})\nexport class QueueTrackerListComponent implements OnInit {\n @Input() customersInStoreAmount: number;\n @Input() isFull: boolean;\n @Input() capacity: number\n @Input() customersInQueueAmount: number;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n\n \n \n person_outline\n \n \n\n \n\n \n shopping_bag\n \n\n \n {{ 'general.display.capacity' | translate }} {{ capacity }}\n \n \n\n
","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-store-scanner',\n templateUrl: './store-scanner.component.html',\n styleUrls: ['./store-scanner.component.scss']\n})\nexport class StoreScannerComponent implements OnInit {\n @Input() expressLink: string;\n @Input() providerLogo: string;\n\n elementType = 'url';\n correctionLevel = 'H';\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n
\n \n\n
\n

{{ 'general.display.freedom' | translate }}

\n
\n
\n

{{ 'general.display.instructions' | translate }}

\n
\n
\n

{{ 'general.display.follow' | translate }}

\n
\n
\n

{{ 'general.display.link' | translate }}

\n
\n
\n
\n \n
\n
","
\n\n
\n \n report_problem\n \n {{ 'general.display.noPanel' | translate }} \n
\n\n
\n
\n \n
\n
\n \n
\n
\n\n\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { environment } from \"src/environments/environment\";\nimport { DisplayService } from \"../modules/display/display.service\";\n\n@Component({\n selector: 'app-display',\n templateUrl: './display.component.html',\n styleUrls: ['./display.component.scss'],\n})\nexport class DisplayComponent implements OnInit {\n totemKey: string;\n locationCapacity: number;\n isLoading = true;\n doesExistPanel = true;\n panelBackgroundUrl: string;\n providerLogo: string;\n\n constructor(\n private displayService: DisplayService,\n private route: ActivatedRoute\n ) { }\n\n ngOnInit(): void {\n this.route.paramMap.subscribe((params) => {\n const accessKey = params.get('accessKey');\n if (accessKey) {\n this.displayService.getPanel(accessKey).subscribe((response) => {\n this.isLoading = false;\n\n if (response.messages) {\n this.doesExistPanel = false;\n return;\n }\n\n const {\n backgroundUrl,\n serviceConfigs,\n capacity,\n totemKey,\n countStarted,\n countChecked,\n providerLogoUrl,\n } = response;\n\n this.displayService.setInitialCount(countStarted, countChecked);\n this.displayService.subscribeQueues(serviceConfigs);\n this.locationCapacity = capacity;\n this.totemKey = totemKey;\n this.panelBackgroundUrl = backgroundUrl;\n this.providerLogo = providerLogoUrl;\n });\n }\n });\n }\n\n get customersInQueueAmount() {\n return this.displayService.customersInQueueAmount;\n }\n\n get customersInStoreAmount() {\n return this.displayService.customersInStoreAmount;\n }\n\n get isFull() {\n return this.customersInStoreAmount >= this.capacity;\n }\n\n get backgroundUrl() {\n return this.panelBackgroundUrl ?? 'assets/images/display-bg-fallback.jpg';\n }\n\n get providerLogoUrl() {\n return this.providerLogo ?? 'assets/images/fz-logo.png';\n }\n\n get capacity() {\n return this.locationCapacity;\n }\n\n get expressLink() {\n return `${environment.urlBase}start/${this.totemKey}`;\n }\n}\n","
\n
\n
\n
{{ ticket.serviceName }}
\n
{{ ticket.providerName }}
\n
\n
\n
\n
\n
\n
\n {{ ticket.prevision | relativeTimeFormat | async }}\n
\n
\n {{'general.pages.tickets.noPrevision' | translate}}\n
\n
{{ ticket.position === 0 ? 'Chamado' : ticket.position + 'º' }}
\n
{{ ticket.friendlyCode }}
\n
\n
\n
\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Ticket } from 'src/app/shared/models';\nimport { StorageService } from 'src/app/shared/services';\nimport { environment } from 'src/environments/environment';\n\n@Component({\n selector: 'app-ticket-list-tile',\n templateUrl: './ticket-list-tile.component.html',\n styleUrls: ['./ticket-list-tile.component.scss']\n})\nexport class TicketListTileComponent implements OnInit {\n @Input() ticket: Ticket;\n\n currentTicket: Ticket;\n\n constructor(\n private storageService: StorageService,\n private router: Router\n ) { }\n\n ngOnInit(): void {\n }\n\n goToTrack () {\n this.storageService.setCurrentTicket(this.ticket);\n if (this.ticket.providerId === environment.boticarioProviderId) {\n this.router.navigate(['/boticario/track']);\n } else {\n this.router.navigate(['/track']);\n }\n }\n\n}\n","\n\n\n\n\n\n\n
\n \n
\n\n
\n
\n \n \n {{ 'general.actions.enterNewQueue' | translate }}\n \n \n
\n
\n","import { Component, OnDestroy, OnInit, Input, Inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { Ticket } from '../shared/models';\nimport { NotificationService, TicketService } from '../shared/services';\nimport { StorageService } from '../shared/services/storage.service';\nimport { PositionUtilService } from '../shared/utils/position-util.service';\n\n@Component({\n selector: 'app-ticket-list',\n templateUrl: './ticket-list.component.html',\n styleUrls: ['./ticket-list.component.scss']\n})\nexport class TicketListComponent implements OnInit, OnDestroy {\n\n date = new Date().toUTCString();\n @Input() tickets: Ticket[];\n eventNames = [\n 'TicketCheckin',\n 'PrevisionChanged',\n 'TicketCalled',\n 'TicketStart',\n 'TicketComplete',\n 'TicketCancel',\n 'TransferredTicket',\n 'ServiceConfigTicketCalled',\n 'ServiceConfigTicketCancel'\n ];\n subscription: Subscription;\n\n constructor(\n private storageService: StorageService,\n private router: Router,\n private notificationService: NotificationService,\n private ticketService: TicketService,\n private translateService: TranslateService,\n private positionUtil: PositionUtilService\n ) { }\n\n ngOnInit(): void {\n this.tickets = this.storageService.tickets;\n this.addTicketsToChannels();\n this.subscribe();\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n addTicketsToChannels(): void {\n this.tickets.forEach(ticket => this.notificationService.add(ticket.id, ticket.serviceConfigId, this.eventNames));\n }\n\n getTicketsPositions(): void {\n this.tickets.forEach(ticket => this.ticketService.getPosition(ticket.providerId, ticket.id).subscribe(response => ticket.position = response));\n }\n\n get currentLang(): string {\n return this.translateService.currentLang;\n }\n\n get hasNoTickets(): boolean {\n return this.storageService.tickets.length === 0;\n }\n\n async subscribe(): Promise {\n this.subscription = this.notificationService.notifications.subscribe(async (response) => {\n\n if (response.eventName === 'PrevisionChanged') {\n this.storageService.updateTicket(response.ticket);\n }\n\n if (response.eventName === 'ServiceConfigTicketCancel') {\n for (let ticket of this.storageService.tickets) {\n if (ticket.serviceConfigId === response.ticket.serviceConfigId) {\n ticket.position = await this.positionUtil.getNewPosition(ticket);\n this.storageService.updateTicket(ticket);\n }\n }\n }\n\n if (response.eventName === 'TicketCalled') {\n let ticket = response.ticket;\n ticket.position = await this.positionUtil.getNewPosition(ticket);\n this.storageService.updateTicket(ticket);\n }\n\n if (response.eventName === 'ServiceConfigTicketCalled') {\n for (let ticket of this.storageService.tickets) {\n if (ticket.serviceConfigId === response.ticket.serviceConfigId) {\n ticket.position = await this.positionUtil.getNewPosition(ticket);\n this.storageService.updateTicket(ticket);\n }\n }\n }\n\n if (response.eventName === 'TicketComplete' || response.eventName === 'TicketCancel') {\n this.storageService.removeTicket(response.ticket.id);\n this.notificationService.remove(response.ticket.id, response.ticket.serviceConfigId);\n }\n\n if (response.eventName === 'TransferredTicket') {\n let ticket = response.ticket;\n ticket.position = await this.positionUtil.getNewPosition(ticket);\n this.storageService.addTicket(response.ticket);\n }\n\n this.tickets = this.storageService.tickets;\n });\n }\n\n goHome() {\n this.router.navigate(['/home']);\n }\n}\n","import Hashids from 'hashids';\nimport { DisplayComponent } from './display/display.component'\nimport { NgModule } from '@angular/core';\nimport { NotFoundComponent } from './shared/pages/not-found/not-found.component';\nimport {\n RemoteConfigService,\n ServiceLocator,\n StorageService,\n TicketService\n} from './shared/services';\nimport { Routes, RouterModule } from '@angular/router';\nimport { TicketListComponent } from './ticket-list/ticket-list.component';\nimport { environment } from 'src/environments/environment';\n\nasync function shouldUseCustomInterface(): Promise {\n const remoteConfigService = ServiceLocator.injector.get(RemoteConfigService);\n const ticketService = ServiceLocator.injector.get(TicketService);\n const url = location.href;\n let providerId: number;\n\n if (url.includes('/track/')) {\n\n const accessKey = url.split('/')[4].split('?')[0];\n\n const ticketId = decode(accessKey) as number;\n\n const ticket = await ticketService.getTicket(ticketId).toPromise();\n\n ticketService.getChildrenKey(ticketId).subscribe(response=>{\n console.log(response, ticket)\n if(response && ticket.feedback.rate)\n location.replace(`${environment.urlBase}track/${response}`);\n })\n\n providerId = ticket.provider.id;\n } else {\n providerId = null;\n }\n\n const isArtesano = providerId === environment.artesanoProviderId;\n\n if (isArtesano) {\n const shoudUse = await remoteConfigService.shouldUseCustomInterface();\n return isArtesano && shoudUse;\n }\n\n return false;\n}\n\nfunction decode(accessKey: string): number | bigint {\n const hashids = new Hashids(\"45148c5e-3401-470b-a737-253d9d0b0831\", 8, \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\");\n return hashids.decode(accessKey)[0].valueOf();\n}\n\nasync function getInterface() {\n const shouldUse = await shouldUseCustomInterface();\n\n return shouldUse\n ? import('./artesano/artesano.module').then(m => m.ArtesanoModule)\n : import('./filazero/filazero.module').then(m => m.FilazeroModule);\n}\n\nconst routes: Routes = [\n { path: '', redirectTo: '/home', pathMatch: 'full' },\n { path: '', loadChildren: async () => await getInterface() },\n { path: 'tickets', component: TicketListComponent },\n { path: 'display/:accessKey', component: DisplayComponent },\n {\n path: 'boticario',\n loadChildren: () => import('./boticario/boticario.module').then(m => m.BoticarioModule)\n },\n { path: '**', component: NotFoundComponent }\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, {})],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Component } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LocaleService } from './shared/services';\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent {\n title = 'filazero-express';\n\n constructor(\n private localeService: LocaleService,\n private translateService: TranslateService\n ) {\n this.translateService.addLangs(['pt-BR', 'pt-PT', 'en-US']);\n this.translateService.setDefaultLang('pt-BR');\n\n let locale = this.localeService.getUserLocale();\n\n if (locale === null) {\n locale = this.localeService.getBrowserLocales()[0];\n this.localeService.storeUserLocale(locale);\n }\n\n this.translateService.use(locale);\n }\n}\n","\n","/**\n * @license Angular v17.3.10\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { ɵAnimationGroupPlayer, NoopAnimationPlayer, AUTO_STYLE, ɵPRE_STYLE, sequence, AnimationMetadataType, style } from '@angular/animations';\nimport * as i0 from '@angular/core';\nimport { ɵRuntimeError, Injectable } from '@angular/core';\n\nconst LINE_START = '\\n - ';\nfunction invalidTimingValue(exp) {\n return new ɵRuntimeError(3000 /* RuntimeErrorCode.INVALID_TIMING_VALUE */, ngDevMode && `The provided timing value \"${exp}\" is invalid.`);\n}\nfunction negativeStepValue() {\n return new ɵRuntimeError(3100 /* RuntimeErrorCode.NEGATIVE_STEP_VALUE */, ngDevMode && 'Duration values below 0 are not allowed for this animation step.');\n}\nfunction negativeDelayValue() {\n return new ɵRuntimeError(3101 /* RuntimeErrorCode.NEGATIVE_DELAY_VALUE */, ngDevMode && 'Delay values below 0 are not allowed for this animation step.');\n}\nfunction invalidStyleParams(varName) {\n return new ɵRuntimeError(3001 /* RuntimeErrorCode.INVALID_STYLE_PARAMS */, ngDevMode &&\n `Unable to resolve the local animation param ${varName} in the given list of values`);\n}\nfunction invalidParamValue(varName) {\n return new ɵRuntimeError(3003 /* RuntimeErrorCode.INVALID_PARAM_VALUE */, ngDevMode && `Please provide a value for the animation param ${varName}`);\n}\nfunction invalidNodeType(nodeType) {\n return new ɵRuntimeError(3004 /* RuntimeErrorCode.INVALID_NODE_TYPE */, ngDevMode && `Unable to resolve animation metadata node #${nodeType}`);\n}\nfunction invalidCssUnitValue(userProvidedProperty, value) {\n return new ɵRuntimeError(3005 /* RuntimeErrorCode.INVALID_CSS_UNIT_VALUE */, ngDevMode && `Please provide a CSS unit value for ${userProvidedProperty}:${value}`);\n}\nfunction invalidTrigger() {\n return new ɵRuntimeError(3006 /* RuntimeErrorCode.INVALID_TRIGGER */, ngDevMode &&\n \"animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))\");\n}\nfunction invalidDefinition() {\n return new ɵRuntimeError(3007 /* RuntimeErrorCode.INVALID_DEFINITION */, ngDevMode && 'only state() and transition() definitions can sit inside of a trigger()');\n}\nfunction invalidState(metadataName, missingSubs) {\n return new ɵRuntimeError(3008 /* RuntimeErrorCode.INVALID_STATE */, ngDevMode &&\n `state(\"${metadataName}\", ...) must define default values for all the following style substitutions: ${missingSubs.join(', ')}`);\n}\nfunction invalidStyleValue(value) {\n return new ɵRuntimeError(3002 /* RuntimeErrorCode.INVALID_STYLE_VALUE */, ngDevMode && `The provided style string value ${value} is not allowed.`);\n}\nfunction invalidProperty(prop) {\n return new ɵRuntimeError(3009 /* RuntimeErrorCode.INVALID_PROPERTY */, ngDevMode &&\n `The provided animation property \"${prop}\" is not a supported CSS property for animations`);\n}\nfunction invalidParallelAnimation(prop, firstStart, firstEnd, secondStart, secondEnd) {\n return new ɵRuntimeError(3010 /* RuntimeErrorCode.INVALID_PARALLEL_ANIMATION */, ngDevMode &&\n `The CSS property \"${prop}\" that exists between the times of \"${firstStart}ms\" and \"${firstEnd}ms\" is also being animated in a parallel animation between the times of \"${secondStart}ms\" and \"${secondEnd}ms\"`);\n}\nfunction invalidKeyframes() {\n return new ɵRuntimeError(3011 /* RuntimeErrorCode.INVALID_KEYFRAMES */, ngDevMode && `keyframes() must be placed inside of a call to animate()`);\n}\nfunction invalidOffset() {\n return new ɵRuntimeError(3012 /* RuntimeErrorCode.INVALID_OFFSET */, ngDevMode && `Please ensure that all keyframe offsets are between 0 and 1`);\n}\nfunction keyframeOffsetsOutOfOrder() {\n return new ɵRuntimeError(3200 /* RuntimeErrorCode.KEYFRAME_OFFSETS_OUT_OF_ORDER */, ngDevMode && `Please ensure that all keyframe offsets are in order`);\n}\nfunction keyframesMissingOffsets() {\n return new ɵRuntimeError(3202 /* RuntimeErrorCode.KEYFRAMES_MISSING_OFFSETS */, ngDevMode && `Not all style() steps within the declared keyframes() contain offsets`);\n}\nfunction invalidStagger() {\n return new ɵRuntimeError(3013 /* RuntimeErrorCode.INVALID_STAGGER */, ngDevMode && `stagger() can only be used inside of query()`);\n}\nfunction invalidQuery(selector) {\n return new ɵRuntimeError(3014 /* RuntimeErrorCode.INVALID_QUERY */, ngDevMode &&\n `\\`query(\"${selector}\")\\` returned zero elements. (Use \\`query(\"${selector}\", { optional: true })\\` if you wish to allow this.)`);\n}\nfunction invalidExpression(expr) {\n return new ɵRuntimeError(3015 /* RuntimeErrorCode.INVALID_EXPRESSION */, ngDevMode && `The provided transition expression \"${expr}\" is not supported`);\n}\nfunction invalidTransitionAlias(alias) {\n return new ɵRuntimeError(3016 /* RuntimeErrorCode.INVALID_TRANSITION_ALIAS */, ngDevMode && `The transition alias value \"${alias}\" is not supported`);\n}\nfunction validationFailed(errors) {\n return new ɵRuntimeError(3500 /* RuntimeErrorCode.VALIDATION_FAILED */, ngDevMode && `animation validation failed:\\n${errors.map((err) => err.message).join('\\n')}`);\n}\nfunction buildingFailed(errors) {\n return new ɵRuntimeError(3501 /* RuntimeErrorCode.BUILDING_FAILED */, ngDevMode && `animation building failed:\\n${errors.map((err) => err.message).join('\\n')}`);\n}\nfunction triggerBuildFailed(name, errors) {\n return new ɵRuntimeError(3404 /* RuntimeErrorCode.TRIGGER_BUILD_FAILED */, ngDevMode &&\n `The animation trigger \"${name}\" has failed to build due to the following errors:\\n - ${errors\n .map((err) => err.message)\n .join('\\n - ')}`);\n}\nfunction animationFailed(errors) {\n return new ɵRuntimeError(3502 /* RuntimeErrorCode.ANIMATION_FAILED */, ngDevMode &&\n `Unable to animate due to the following errors:${LINE_START}${errors\n .map((err) => err.message)\n .join(LINE_START)}`);\n}\nfunction registerFailed(errors) {\n return new ɵRuntimeError(3503 /* RuntimeErrorCode.REGISTRATION_FAILED */, ngDevMode &&\n `Unable to build the animation due to the following errors: ${errors\n .map((err) => err.message)\n .join('\\n')}`);\n}\nfunction missingOrDestroyedAnimation() {\n return new ɵRuntimeError(3300 /* RuntimeErrorCode.MISSING_OR_DESTROYED_ANIMATION */, ngDevMode && \"The requested animation doesn't exist or has already been destroyed\");\n}\nfunction createAnimationFailed(errors) {\n return new ɵRuntimeError(3504 /* RuntimeErrorCode.CREATE_ANIMATION_FAILED */, ngDevMode &&\n `Unable to create the animation due to the following errors:${errors\n .map((err) => err.message)\n .join('\\n')}`);\n}\nfunction missingPlayer(id) {\n return new ɵRuntimeError(3301 /* RuntimeErrorCode.MISSING_PLAYER */, ngDevMode && `Unable to find the timeline player referenced by ${id}`);\n}\nfunction missingTrigger(phase, name) {\n return new ɵRuntimeError(3302 /* RuntimeErrorCode.MISSING_TRIGGER */, ngDevMode &&\n `Unable to listen on the animation trigger event \"${phase}\" because the animation trigger \"${name}\" doesn\\'t exist!`);\n}\nfunction missingEvent(name) {\n return new ɵRuntimeError(3303 /* RuntimeErrorCode.MISSING_EVENT */, ngDevMode &&\n `Unable to listen on the animation trigger \"${name}\" because the provided event is undefined!`);\n}\nfunction unsupportedTriggerEvent(phase, name) {\n return new ɵRuntimeError(3400 /* RuntimeErrorCode.UNSUPPORTED_TRIGGER_EVENT */, ngDevMode &&\n `The provided animation trigger event \"${phase}\" for the animation trigger \"${name}\" is not supported!`);\n}\nfunction unregisteredTrigger(name) {\n return new ɵRuntimeError(3401 /* RuntimeErrorCode.UNREGISTERED_TRIGGER */, ngDevMode && `The provided animation trigger \"${name}\" has not been registered!`);\n}\nfunction triggerTransitionsFailed(errors) {\n return new ɵRuntimeError(3402 /* RuntimeErrorCode.TRIGGER_TRANSITIONS_FAILED */, ngDevMode &&\n `Unable to process animations due to the following failed trigger transitions\\n ${errors\n .map((err) => err.message)\n .join('\\n')}`);\n}\nfunction triggerParsingFailed(name, errors) {\n return new ɵRuntimeError(3403 /* RuntimeErrorCode.TRIGGER_PARSING_FAILED */, ngDevMode &&\n `Animation parsing for the ${name} trigger have failed:${LINE_START}${errors\n .map((err) => err.message)\n .join(LINE_START)}`);\n}\nfunction transitionFailed(name, errors) {\n return new ɵRuntimeError(3505 /* RuntimeErrorCode.TRANSITION_FAILED */, ngDevMode && `@${name} has failed due to:\\n ${errors.map((err) => err.message).join('\\n- ')}`);\n}\n\n/**\n * Set of all animatable CSS properties\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties\n */\nconst ANIMATABLE_PROP_SET = new Set([\n '-moz-outline-radius',\n '-moz-outline-radius-bottomleft',\n '-moz-outline-radius-bottomright',\n '-moz-outline-radius-topleft',\n '-moz-outline-radius-topright',\n '-ms-grid-columns',\n '-ms-grid-rows',\n '-webkit-line-clamp',\n '-webkit-text-fill-color',\n '-webkit-text-stroke',\n '-webkit-text-stroke-color',\n 'accent-color',\n 'all',\n 'backdrop-filter',\n 'background',\n 'background-color',\n 'background-position',\n 'background-size',\n 'block-size',\n 'border',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-width',\n 'border-color',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-image-outset',\n 'border-image-slice',\n 'border-image-width',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-width',\n 'border-left',\n 'border-left-color',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-width',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-shadow',\n 'caret-color',\n 'clip',\n 'clip-path',\n 'color',\n 'column-count',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-width',\n 'column-width',\n 'columns',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-grow',\n 'flex-shrink',\n 'font',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-variation-settings',\n 'font-weight',\n 'gap',\n 'grid-column-gap',\n 'grid-gap',\n 'grid-row-gap',\n 'grid-template-columns',\n 'grid-template-rows',\n 'height',\n 'inline-size',\n 'input-security',\n 'inset',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'left',\n 'letter-spacing',\n 'line-clamp',\n 'line-height',\n 'margin',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'mask',\n 'mask-border',\n 'mask-position',\n 'mask-size',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-lines',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'object-position',\n 'offset',\n 'offset-anchor',\n 'offset-distance',\n 'offset-path',\n 'offset-position',\n 'offset-rotate',\n 'opacity',\n 'order',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-width',\n 'padding',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'perspective',\n 'perspective-origin',\n 'right',\n 'rotate',\n 'row-gap',\n 'scale',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-coordinate',\n 'scroll-snap-destination',\n 'scrollbar-color',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'tab-size',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-indent',\n 'text-shadow',\n 'text-underline-offset',\n 'top',\n 'transform',\n 'transform-origin',\n 'translate',\n 'vertical-align',\n 'visibility',\n 'width',\n 'word-spacing',\n 'z-index',\n 'zoom',\n]);\n\nfunction optimizeGroupPlayer(players) {\n switch (players.length) {\n case 0:\n return new NoopAnimationPlayer();\n case 1:\n return players[0];\n default:\n return new ɵAnimationGroupPlayer(players);\n }\n}\nfunction normalizeKeyframes$1(normalizer, keyframes, preStyles = new Map(), postStyles = new Map()) {\n const errors = [];\n const normalizedKeyframes = [];\n let previousOffset = -1;\n let previousKeyframe = null;\n keyframes.forEach((kf) => {\n const offset = kf.get('offset');\n const isSameOffset = offset == previousOffset;\n const normalizedKeyframe = (isSameOffset && previousKeyframe) || new Map();\n kf.forEach((val, prop) => {\n let normalizedProp = prop;\n let normalizedValue = val;\n if (prop !== 'offset') {\n normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);\n switch (normalizedValue) {\n case ɵPRE_STYLE:\n normalizedValue = preStyles.get(prop);\n break;\n case AUTO_STYLE:\n normalizedValue = postStyles.get(prop);\n break;\n default:\n normalizedValue = normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);\n break;\n }\n }\n normalizedKeyframe.set(normalizedProp, normalizedValue);\n });\n if (!isSameOffset) {\n normalizedKeyframes.push(normalizedKeyframe);\n }\n previousKeyframe = normalizedKeyframe;\n previousOffset = offset;\n });\n if (errors.length) {\n throw animationFailed(errors);\n }\n return normalizedKeyframes;\n}\nfunction listenOnPlayer(player, eventName, event, callback) {\n switch (eventName) {\n case 'start':\n player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player)));\n break;\n case 'done':\n player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player)));\n break;\n case 'destroy':\n player.onDestroy(() => callback(event && copyAnimationEvent(event, 'destroy', player)));\n break;\n }\n}\nfunction copyAnimationEvent(e, phaseName, player) {\n const totalTime = player.totalTime;\n const disabled = player.disabled ? true : false;\n const event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime, disabled);\n const data = e['_data'];\n if (data != null) {\n event['_data'] = data;\n }\n return event;\n}\nfunction makeAnimationEvent(element, triggerName, fromState, toState, phaseName = '', totalTime = 0, disabled) {\n return { element, triggerName, fromState, toState, phaseName, totalTime, disabled: !!disabled };\n}\nfunction getOrSetDefaultValue(map, key, defaultValue) {\n let value = map.get(key);\n if (!value) {\n map.set(key, (value = defaultValue));\n }\n return value;\n}\nfunction parseTimelineCommand(command) {\n const separatorPos = command.indexOf(':');\n const id = command.substring(1, separatorPos);\n const action = command.slice(separatorPos + 1);\n return [id, action];\n}\nconst documentElement = /* @__PURE__ */ (() => typeof document === 'undefined' ? null : document.documentElement)();\nfunction getParentElement(element) {\n const parent = element.parentNode || element.host || null; // consider host to support shadow DOM\n if (parent === documentElement) {\n return null;\n }\n return parent;\n}\nfunction containsVendorPrefix(prop) {\n // Webkit is the only real popular vendor prefix nowadays\n // cc: http://shouldiprefix.com/\n return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit\n}\nlet _CACHED_BODY = null;\nlet _IS_WEBKIT = false;\nfunction validateStyleProperty(prop) {\n if (!_CACHED_BODY) {\n _CACHED_BODY = getBodyNode() || {};\n _IS_WEBKIT = _CACHED_BODY.style ? 'WebkitAppearance' in _CACHED_BODY.style : false;\n }\n let result = true;\n if (_CACHED_BODY.style && !containsVendorPrefix(prop)) {\n result = prop in _CACHED_BODY.style;\n if (!result && _IS_WEBKIT) {\n const camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.slice(1);\n result = camelProp in _CACHED_BODY.style;\n }\n }\n return result;\n}\nfunction validateWebAnimatableStyleProperty(prop) {\n return ANIMATABLE_PROP_SET.has(prop);\n}\nfunction getBodyNode() {\n if (typeof document != 'undefined') {\n return document.body;\n }\n return null;\n}\nfunction containsElement(elm1, elm2) {\n while (elm2) {\n if (elm2 === elm1) {\n return true;\n }\n elm2 = getParentElement(elm2);\n }\n return false;\n}\nfunction invokeQuery(element, selector, multi) {\n if (multi) {\n return Array.from(element.querySelectorAll(selector));\n }\n const elem = element.querySelector(selector);\n return elem ? [elem] : [];\n}\nfunction hypenatePropsKeys(original) {\n const newMap = new Map();\n original.forEach((val, prop) => {\n const newProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2');\n newMap.set(newProp, val);\n });\n return newMap;\n}\n\n/**\n * @publicApi\n *\n * `AnimationDriver` implentation for Noop animations\n */\nclass NoopAnimationDriver {\n /**\n * @returns Whether `prop` is a valid CSS property\n */\n validateStyleProperty(prop) {\n return validateStyleProperty(prop);\n }\n /**\n * @deprecated unused\n */\n matchesElement(_element, _selector) {\n // This method is deprecated and no longer in use so we return false.\n return false;\n }\n /**\n *\n * @returns Whether elm1 contains elm2.\n */\n containsElement(elm1, elm2) {\n return containsElement(elm1, elm2);\n }\n /**\n * @returns Rhe parent of the given element or `null` if the element is the `document`\n */\n getParentElement(element) {\n return getParentElement(element);\n }\n /**\n * @returns The result of the query selector on the element. The array will contain up to 1 item\n * if `multi` is `false`.\n */\n query(element, selector, multi) {\n return invokeQuery(element, selector, multi);\n }\n /**\n * @returns The `defaultValue` or empty string\n */\n computeStyle(element, prop, defaultValue) {\n return defaultValue || '';\n }\n /**\n * @returns An `NoopAnimationPlayer`\n */\n animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {\n return new NoopAnimationPlayer(duration, delay);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: NoopAnimationDriver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: NoopAnimationDriver }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: NoopAnimationDriver, decorators: [{\n type: Injectable\n }] });\n/**\n * @publicApi\n */\nclass AnimationDriver {\n /**\n * @deprecated Use the NoopAnimationDriver class.\n */\n static { this.NOOP = new NoopAnimationDriver(); }\n}\n\nclass AnimationStyleNormalizer {\n}\nclass NoopAnimationStyleNormalizer {\n normalizePropertyName(propertyName, errors) {\n return propertyName;\n }\n normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n return value;\n }\n}\n\nconst ONE_SECOND = 1000;\nconst SUBSTITUTION_EXPR_START = '{{';\nconst SUBSTITUTION_EXPR_END = '}}';\nconst ENTER_CLASSNAME = 'ng-enter';\nconst LEAVE_CLASSNAME = 'ng-leave';\nconst NG_TRIGGER_CLASSNAME = 'ng-trigger';\nconst NG_TRIGGER_SELECTOR = '.ng-trigger';\nconst NG_ANIMATING_CLASSNAME = 'ng-animating';\nconst NG_ANIMATING_SELECTOR = '.ng-animating';\nfunction resolveTimingValue(value) {\n if (typeof value == 'number')\n return value;\n const matches = value.match(/^(-?[\\.\\d]+)(m?s)/);\n if (!matches || matches.length < 2)\n return 0;\n return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n}\nfunction _convertTimeValueToMS(value, unit) {\n switch (unit) {\n case 's':\n return value * ONE_SECOND;\n default: // ms or something else\n return value;\n }\n}\nfunction resolveTiming(timings, errors, allowNegativeValues) {\n return timings.hasOwnProperty('duration')\n ? timings\n : parseTimeExpression(timings, errors, allowNegativeValues);\n}\nfunction parseTimeExpression(exp, errors, allowNegativeValues) {\n const regex = /^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i;\n let duration;\n let delay = 0;\n let easing = '';\n if (typeof exp === 'string') {\n const matches = exp.match(regex);\n if (matches === null) {\n errors.push(invalidTimingValue(exp));\n return { duration: 0, delay: 0, easing: '' };\n }\n duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n const delayMatch = matches[3];\n if (delayMatch != null) {\n delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);\n }\n const easingVal = matches[5];\n if (easingVal) {\n easing = easingVal;\n }\n }\n else {\n duration = exp;\n }\n if (!allowNegativeValues) {\n let containsErrors = false;\n let startIndex = errors.length;\n if (duration < 0) {\n errors.push(negativeStepValue());\n containsErrors = true;\n }\n if (delay < 0) {\n errors.push(negativeDelayValue());\n containsErrors = true;\n }\n if (containsErrors) {\n errors.splice(startIndex, 0, invalidTimingValue(exp));\n }\n }\n return { duration, delay, easing };\n}\nfunction normalizeKeyframes(keyframes) {\n if (!keyframes.length) {\n return [];\n }\n if (keyframes[0] instanceof Map) {\n return keyframes;\n }\n return keyframes.map((kf) => new Map(Object.entries(kf)));\n}\nfunction normalizeStyles(styles) {\n return Array.isArray(styles) ? new Map(...styles) : new Map(styles);\n}\nfunction setStyles(element, styles, formerStyles) {\n styles.forEach((val, prop) => {\n const camelProp = dashCaseToCamelCase(prop);\n if (formerStyles && !formerStyles.has(prop)) {\n formerStyles.set(prop, element.style[camelProp]);\n }\n element.style[camelProp] = val;\n });\n}\nfunction eraseStyles(element, styles) {\n styles.forEach((_, prop) => {\n const camelProp = dashCaseToCamelCase(prop);\n element.style[camelProp] = '';\n });\n}\nfunction normalizeAnimationEntry(steps) {\n if (Array.isArray(steps)) {\n if (steps.length == 1)\n return steps[0];\n return sequence(steps);\n }\n return steps;\n}\nfunction validateStyleParams(value, options, errors) {\n const params = options.params || {};\n const matches = extractStyleParams(value);\n if (matches.length) {\n matches.forEach((varName) => {\n if (!params.hasOwnProperty(varName)) {\n errors.push(invalidStyleParams(varName));\n }\n });\n }\n}\nconst PARAM_REGEX = new RegExp(`${SUBSTITUTION_EXPR_START}\\\\s*(.+?)\\\\s*${SUBSTITUTION_EXPR_END}`, 'g');\nfunction extractStyleParams(value) {\n let params = [];\n if (typeof value === 'string') {\n let match;\n while ((match = PARAM_REGEX.exec(value))) {\n params.push(match[1]);\n }\n PARAM_REGEX.lastIndex = 0;\n }\n return params;\n}\nfunction interpolateParams(value, params, errors) {\n const original = `${value}`;\n const str = original.replace(PARAM_REGEX, (_, varName) => {\n let localVal = params[varName];\n // this means that the value was never overridden by the data passed in by the user\n if (localVal == null) {\n errors.push(invalidParamValue(varName));\n localVal = '';\n }\n return localVal.toString();\n });\n // we do this to assert that numeric values stay as they are\n return str == original ? value : str;\n}\nconst DASH_CASE_REGEXP = /-+([a-z0-9])/g;\nfunction dashCaseToCamelCase(input) {\n return input.replace(DASH_CASE_REGEXP, (...m) => m[1].toUpperCase());\n}\nfunction camelCaseToDashCase(input) {\n return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction allowPreviousPlayerStylesMerge(duration, delay) {\n return duration === 0 || delay === 0;\n}\nfunction balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles) {\n if (previousStyles.size && keyframes.length) {\n let startingKeyframe = keyframes[0];\n let missingStyleProps = [];\n previousStyles.forEach((val, prop) => {\n if (!startingKeyframe.has(prop)) {\n missingStyleProps.push(prop);\n }\n startingKeyframe.set(prop, val);\n });\n if (missingStyleProps.length) {\n for (let i = 1; i < keyframes.length; i++) {\n let kf = keyframes[i];\n missingStyleProps.forEach((prop) => kf.set(prop, computeStyle(element, prop)));\n }\n }\n }\n return keyframes;\n}\nfunction visitDslNode(visitor, node, context) {\n switch (node.type) {\n case AnimationMetadataType.Trigger:\n return visitor.visitTrigger(node, context);\n case AnimationMetadataType.State:\n return visitor.visitState(node, context);\n case AnimationMetadataType.Transition:\n return visitor.visitTransition(node, context);\n case AnimationMetadataType.Sequence:\n return visitor.visitSequence(node, context);\n case AnimationMetadataType.Group:\n return visitor.visitGroup(node, context);\n case AnimationMetadataType.Animate:\n return visitor.visitAnimate(node, context);\n case AnimationMetadataType.Keyframes:\n return visitor.visitKeyframes(node, context);\n case AnimationMetadataType.Style:\n return visitor.visitStyle(node, context);\n case AnimationMetadataType.Reference:\n return visitor.visitReference(node, context);\n case AnimationMetadataType.AnimateChild:\n return visitor.visitAnimateChild(node, context);\n case AnimationMetadataType.AnimateRef:\n return visitor.visitAnimateRef(node, context);\n case AnimationMetadataType.Query:\n return visitor.visitQuery(node, context);\n case AnimationMetadataType.Stagger:\n return visitor.visitStagger(node, context);\n default:\n throw invalidNodeType(node.type);\n }\n}\nfunction computeStyle(element, prop) {\n return window.getComputedStyle(element)[prop];\n}\n\nconst DIMENSIONAL_PROP_SET = new Set([\n 'width',\n 'height',\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight',\n 'left',\n 'top',\n 'bottom',\n 'right',\n 'fontSize',\n 'outlineWidth',\n 'outlineOffset',\n 'paddingTop',\n 'paddingLeft',\n 'paddingBottom',\n 'paddingRight',\n 'marginTop',\n 'marginLeft',\n 'marginBottom',\n 'marginRight',\n 'borderRadius',\n 'borderWidth',\n 'borderTopWidth',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'textIndent',\n 'perspective',\n]);\nclass WebAnimationsStyleNormalizer extends AnimationStyleNormalizer {\n normalizePropertyName(propertyName, errors) {\n return dashCaseToCamelCase(propertyName);\n }\n normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n let unit = '';\n const strVal = value.toString().trim();\n if (DIMENSIONAL_PROP_SET.has(normalizedProperty) && value !== 0 && value !== '0') {\n if (typeof value === 'number') {\n unit = 'px';\n }\n else {\n const valAndSuffixMatch = value.match(/^[+-]?[\\d\\.]+([a-z]*)$/);\n if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {\n errors.push(invalidCssUnitValue(userProvidedProperty, value));\n }\n }\n }\n return strVal + unit;\n }\n}\n\nfunction createListOfWarnings(warnings) {\n const LINE_START = '\\n - ';\n return `${LINE_START}${warnings\n .filter(Boolean)\n .map((warning) => warning)\n .join(LINE_START)}`;\n}\nfunction warnValidation(warnings) {\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n console.warn(`animation validation warnings:${createListOfWarnings(warnings)}`);\n}\nfunction warnTriggerBuild(name, warnings) {\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n console.warn(`The animation trigger \"${name}\" has built with the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction warnRegister(warnings) {\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n console.warn(`Animation built with the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction triggerParsingWarnings(name, warnings) {\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n console.warn(`Animation parsing for the ${name} trigger presents the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction pushUnrecognizedPropertiesWarning(warnings, props) {\n if (props.length) {\n warnings.push(`The following provided properties are not recognized: ${props.join(', ')}`);\n }\n}\n\nconst ANY_STATE = '*';\nfunction parseTransitionExpr(transitionValue, errors) {\n const expressions = [];\n if (typeof transitionValue == 'string') {\n transitionValue\n .split(/\\s*,\\s*/)\n .forEach((str) => parseInnerTransitionStr(str, expressions, errors));\n }\n else {\n expressions.push(transitionValue);\n }\n return expressions;\n}\nfunction parseInnerTransitionStr(eventStr, expressions, errors) {\n if (eventStr[0] == ':') {\n const result = parseAnimationAlias(eventStr, errors);\n if (typeof result == 'function') {\n expressions.push(result);\n return;\n }\n eventStr = result;\n }\n const match = eventStr.match(/^(\\*|[-\\w]+)\\s*()\\s*(\\*|[-\\w]+)$/);\n if (match == null || match.length < 4) {\n errors.push(invalidExpression(eventStr));\n return expressions;\n }\n const fromState = match[1];\n const separator = match[2];\n const toState = match[3];\n expressions.push(makeLambdaFromStates(fromState, toState));\n const isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;\n if (separator[0] == '<' && !isFullAnyStateExpr) {\n expressions.push(makeLambdaFromStates(toState, fromState));\n }\n return;\n}\nfunction parseAnimationAlias(alias, errors) {\n switch (alias) {\n case ':enter':\n return 'void => *';\n case ':leave':\n return '* => void';\n case ':increment':\n return (fromState, toState) => parseFloat(toState) > parseFloat(fromState);\n case ':decrement':\n return (fromState, toState) => parseFloat(toState) < parseFloat(fromState);\n default:\n errors.push(invalidTransitionAlias(alias));\n return '* => *';\n }\n}\n// DO NOT REFACTOR ... keep the follow set instantiations\n// with the values intact (closure compiler for some reason\n// removes follow-up lines that add the values outside of\n// the constructor...\nconst TRUE_BOOLEAN_VALUES = new Set(['true', '1']);\nconst FALSE_BOOLEAN_VALUES = new Set(['false', '0']);\nfunction makeLambdaFromStates(lhs, rhs) {\n const LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);\n const RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);\n return (fromState, toState) => {\n let lhsMatch = lhs == ANY_STATE || lhs == fromState;\n let rhsMatch = rhs == ANY_STATE || rhs == toState;\n if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {\n lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);\n }\n if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {\n rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);\n }\n return lhsMatch && rhsMatch;\n };\n}\n\nconst SELF_TOKEN = ':self';\nconst SELF_TOKEN_REGEX = new RegExp(`s*${SELF_TOKEN}s*,?`, 'g');\n/*\n * [Validation]\n * The visitor code below will traverse the animation AST generated by the animation verb functions\n * (the output is a tree of objects) and attempt to perform a series of validations on the data. The\n * following corner-cases will be validated:\n *\n * 1. Overlap of animations\n * Given that a CSS property cannot be animated in more than one place at the same time, it's\n * important that this behavior is detected and validated. The way in which this occurs is that\n * each time a style property is examined, a string-map containing the property will be updated with\n * the start and end times for when the property is used within an animation step.\n *\n * If there are two or more parallel animations that are currently running (these are invoked by the\n * group()) on the same element then the validator will throw an error. Since the start/end timing\n * values are collected for each property then if the current animation step is animating the same\n * property and its timing values fall anywhere into the window of time that the property is\n * currently being animated within then this is what causes an error.\n *\n * 2. Timing values\n * The validator will validate to see if a timing value of `duration delay easing` or\n * `durationNumber` is valid or not.\n *\n * (note that upon validation the code below will replace the timing data with an object containing\n * {duration,delay,easing}.\n *\n * 3. Offset Validation\n * Each of the style() calls are allowed to have an offset value when placed inside of keyframes().\n * Offsets within keyframes() are considered valid when:\n *\n * - No offsets are used at all\n * - Each style() entry contains an offset value\n * - Each offset is between 0 and 1\n * - Each offset is greater to or equal than the previous one\n *\n * Otherwise an error will be thrown.\n */\nfunction buildAnimationAst(driver, metadata, errors, warnings) {\n return new AnimationAstBuilderVisitor(driver).build(metadata, errors, warnings);\n}\nconst ROOT_SELECTOR = '';\nclass AnimationAstBuilderVisitor {\n constructor(_driver) {\n this._driver = _driver;\n }\n build(metadata, errors, warnings) {\n const context = new AnimationAstBuilderContext(errors);\n this._resetContextStyleTimingState(context);\n const ast = (visitDslNode(this, normalizeAnimationEntry(metadata), context));\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (context.unsupportedCSSPropertiesFound.size) {\n pushUnrecognizedPropertiesWarning(warnings, [\n ...context.unsupportedCSSPropertiesFound.keys(),\n ]);\n }\n }\n return ast;\n }\n _resetContextStyleTimingState(context) {\n context.currentQuerySelector = ROOT_SELECTOR;\n context.collectedStyles = new Map();\n context.collectedStyles.set(ROOT_SELECTOR, new Map());\n context.currentTime = 0;\n }\n visitTrigger(metadata, context) {\n let queryCount = (context.queryCount = 0);\n let depCount = (context.depCount = 0);\n const states = [];\n const transitions = [];\n if (metadata.name.charAt(0) == '@') {\n context.errors.push(invalidTrigger());\n }\n metadata.definitions.forEach((def) => {\n this._resetContextStyleTimingState(context);\n if (def.type == AnimationMetadataType.State) {\n const stateDef = def;\n const name = stateDef.name;\n name\n .toString()\n .split(/\\s*,\\s*/)\n .forEach((n) => {\n stateDef.name = n;\n states.push(this.visitState(stateDef, context));\n });\n stateDef.name = name;\n }\n else if (def.type == AnimationMetadataType.Transition) {\n const transition = this.visitTransition(def, context);\n queryCount += transition.queryCount;\n depCount += transition.depCount;\n transitions.push(transition);\n }\n else {\n context.errors.push(invalidDefinition());\n }\n });\n return {\n type: AnimationMetadataType.Trigger,\n name: metadata.name,\n states,\n transitions,\n queryCount,\n depCount,\n options: null,\n };\n }\n visitState(metadata, context) {\n const styleAst = this.visitStyle(metadata.styles, context);\n const astParams = (metadata.options && metadata.options.params) || null;\n if (styleAst.containsDynamicStyles) {\n const missingSubs = new Set();\n const params = astParams || {};\n styleAst.styles.forEach((style) => {\n if (style instanceof Map) {\n style.forEach((value) => {\n extractStyleParams(value).forEach((sub) => {\n if (!params.hasOwnProperty(sub)) {\n missingSubs.add(sub);\n }\n });\n });\n }\n });\n if (missingSubs.size) {\n context.errors.push(invalidState(metadata.name, [...missingSubs.values()]));\n }\n }\n return {\n type: AnimationMetadataType.State,\n name: metadata.name,\n style: styleAst,\n options: astParams ? { params: astParams } : null,\n };\n }\n visitTransition(metadata, context) {\n context.queryCount = 0;\n context.depCount = 0;\n const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n const matchers = parseTransitionExpr(metadata.expr, context.errors);\n return {\n type: AnimationMetadataType.Transition,\n matchers,\n animation,\n queryCount: context.queryCount,\n depCount: context.depCount,\n options: normalizeAnimationOptions(metadata.options),\n };\n }\n visitSequence(metadata, context) {\n return {\n type: AnimationMetadataType.Sequence,\n steps: metadata.steps.map((s) => visitDslNode(this, s, context)),\n options: normalizeAnimationOptions(metadata.options),\n };\n }\n visitGroup(metadata, context) {\n const currentTime = context.currentTime;\n let furthestTime = 0;\n const steps = metadata.steps.map((step) => {\n context.currentTime = currentTime;\n const innerAst = visitDslNode(this, step, context);\n furthestTime = Math.max(furthestTime, context.currentTime);\n return innerAst;\n });\n context.currentTime = furthestTime;\n return {\n type: AnimationMetadataType.Group,\n steps,\n options: normalizeAnimationOptions(metadata.options),\n };\n }\n visitAnimate(metadata, context) {\n const timingAst = constructTimingAst(metadata.timings, context.errors);\n context.currentAnimateTimings = timingAst;\n let styleAst;\n let styleMetadata = metadata.styles\n ? metadata.styles\n : style({});\n if (styleMetadata.type == AnimationMetadataType.Keyframes) {\n styleAst = this.visitKeyframes(styleMetadata, context);\n }\n else {\n let styleMetadata = metadata.styles;\n let isEmpty = false;\n if (!styleMetadata) {\n isEmpty = true;\n const newStyleData = {};\n if (timingAst.easing) {\n newStyleData['easing'] = timingAst.easing;\n }\n styleMetadata = style(newStyleData);\n }\n context.currentTime += timingAst.duration + timingAst.delay;\n const _styleAst = this.visitStyle(styleMetadata, context);\n _styleAst.isEmptyStep = isEmpty;\n styleAst = _styleAst;\n }\n context.currentAnimateTimings = null;\n return {\n type: AnimationMetadataType.Animate,\n timings: timingAst,\n style: styleAst,\n options: null,\n };\n }\n visitStyle(metadata, context) {\n const ast = this._makeStyleAst(metadata, context);\n this._validateStyleAst(ast, context);\n return ast;\n }\n _makeStyleAst(metadata, context) {\n const styles = [];\n const metadataStyles = Array.isArray(metadata.styles) ? metadata.styles : [metadata.styles];\n for (let styleTuple of metadataStyles) {\n if (typeof styleTuple === 'string') {\n if (styleTuple === AUTO_STYLE) {\n styles.push(styleTuple);\n }\n else {\n context.errors.push(invalidStyleValue(styleTuple));\n }\n }\n else {\n styles.push(new Map(Object.entries(styleTuple)));\n }\n }\n let containsDynamicStyles = false;\n let collectedEasing = null;\n styles.forEach((styleData) => {\n if (styleData instanceof Map) {\n if (styleData.has('easing')) {\n collectedEasing = styleData.get('easing');\n styleData.delete('easing');\n }\n if (!containsDynamicStyles) {\n for (let value of styleData.values()) {\n if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {\n containsDynamicStyles = true;\n break;\n }\n }\n }\n }\n });\n return {\n type: AnimationMetadataType.Style,\n styles,\n easing: collectedEasing,\n offset: metadata.offset,\n containsDynamicStyles,\n options: null,\n };\n }\n _validateStyleAst(ast, context) {\n const timings = context.currentAnimateTimings;\n let endTime = context.currentTime;\n let startTime = context.currentTime;\n if (timings && startTime > 0) {\n startTime -= timings.duration + timings.delay;\n }\n ast.styles.forEach((tuple) => {\n if (typeof tuple === 'string')\n return;\n tuple.forEach((value, prop) => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._driver.validateStyleProperty(prop)) {\n tuple.delete(prop);\n context.unsupportedCSSPropertiesFound.add(prop);\n return;\n }\n }\n // This is guaranteed to have a defined Map at this querySelector location making it\n // safe to add the assertion here. It is set as a default empty map in prior methods.\n const collectedStyles = context.collectedStyles.get(context.currentQuerySelector);\n const collectedEntry = collectedStyles.get(prop);\n let updateCollectedStyle = true;\n if (collectedEntry) {\n if (startTime != endTime &&\n startTime >= collectedEntry.startTime &&\n endTime <= collectedEntry.endTime) {\n context.errors.push(invalidParallelAnimation(prop, collectedEntry.startTime, collectedEntry.endTime, startTime, endTime));\n updateCollectedStyle = false;\n }\n // we always choose the smaller start time value since we\n // want to have a record of the entire animation window where\n // the style property is being animated in between\n startTime = collectedEntry.startTime;\n }\n if (updateCollectedStyle) {\n collectedStyles.set(prop, { startTime, endTime });\n }\n if (context.options) {\n validateStyleParams(value, context.options, context.errors);\n }\n });\n });\n }\n visitKeyframes(metadata, context) {\n const ast = { type: AnimationMetadataType.Keyframes, styles: [], options: null };\n if (!context.currentAnimateTimings) {\n context.errors.push(invalidKeyframes());\n return ast;\n }\n const MAX_KEYFRAME_OFFSET = 1;\n let totalKeyframesWithOffsets = 0;\n const offsets = [];\n let offsetsOutOfOrder = false;\n let keyframesOutOfRange = false;\n let previousOffset = 0;\n const keyframes = metadata.steps.map((styles) => {\n const style = this._makeStyleAst(styles, context);\n let offsetVal = style.offset != null ? style.offset : consumeOffset(style.styles);\n let offset = 0;\n if (offsetVal != null) {\n totalKeyframesWithOffsets++;\n offset = style.offset = offsetVal;\n }\n keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;\n offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;\n previousOffset = offset;\n offsets.push(offset);\n return style;\n });\n if (keyframesOutOfRange) {\n context.errors.push(invalidOffset());\n }\n if (offsetsOutOfOrder) {\n context.errors.push(keyframeOffsetsOutOfOrder());\n }\n const length = metadata.steps.length;\n let generatedOffset = 0;\n if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {\n context.errors.push(keyframesMissingOffsets());\n }\n else if (totalKeyframesWithOffsets == 0) {\n generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);\n }\n const limit = length - 1;\n const currentTime = context.currentTime;\n const currentAnimateTimings = context.currentAnimateTimings;\n const animateDuration = currentAnimateTimings.duration;\n keyframes.forEach((kf, i) => {\n const offset = generatedOffset > 0 ? (i == limit ? 1 : generatedOffset * i) : offsets[i];\n const durationUpToThisFrame = offset * animateDuration;\n context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;\n currentAnimateTimings.duration = durationUpToThisFrame;\n this._validateStyleAst(kf, context);\n kf.offset = offset;\n ast.styles.push(kf);\n });\n return ast;\n }\n visitReference(metadata, context) {\n return {\n type: AnimationMetadataType.Reference,\n animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n options: normalizeAnimationOptions(metadata.options),\n };\n }\n visitAnimateChild(metadata, context) {\n context.depCount++;\n return {\n type: AnimationMetadataType.AnimateChild,\n options: normalizeAnimationOptions(metadata.options),\n };\n }\n visitAnimateRef(metadata, context) {\n return {\n type: AnimationMetadataType.AnimateRef,\n animation: this.visitReference(metadata.animation, context),\n options: normalizeAnimationOptions(metadata.options),\n };\n }\n visitQuery(metadata, context) {\n const parentSelector = context.currentQuerySelector;\n const options = (metadata.options || {});\n context.queryCount++;\n context.currentQuery = metadata;\n const [selector, includeSelf] = normalizeSelector(metadata.selector);\n context.currentQuerySelector = parentSelector.length\n ? parentSelector + ' ' + selector\n : selector;\n getOrSetDefaultValue(context.collectedStyles, context.currentQuerySelector, new Map());\n const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n context.currentQuery = null;\n context.currentQuerySelector = parentSelector;\n return {\n type: AnimationMetadataType.Query,\n selector,\n limit: options.limit || 0,\n optional: !!options.optional,\n includeSelf,\n animation,\n originalSelector: metadata.selector,\n options: normalizeAnimationOptions(metadata.options),\n };\n }\n visitStagger(metadata, context) {\n if (!context.currentQuery) {\n context.errors.push(invalidStagger());\n }\n const timings = metadata.timings === 'full'\n ? { duration: 0, delay: 0, easing: 'full' }\n : resolveTiming(metadata.timings, context.errors, true);\n return {\n type: AnimationMetadataType.Stagger,\n animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n timings,\n options: null,\n };\n }\n}\nfunction normalizeSelector(selector) {\n const hasAmpersand = selector.split(/\\s*,\\s*/).find((token) => token == SELF_TOKEN)\n ? true\n : false;\n if (hasAmpersand) {\n selector = selector.replace(SELF_TOKEN_REGEX, '');\n }\n // Note: the :enter and :leave aren't normalized here since those\n // selectors are filled in at runtime during timeline building\n selector = selector\n .replace(/@\\*/g, NG_TRIGGER_SELECTOR)\n .replace(/@\\w+/g, (match) => NG_TRIGGER_SELECTOR + '-' + match.slice(1))\n .replace(/:animating/g, NG_ANIMATING_SELECTOR);\n return [selector, hasAmpersand];\n}\nfunction normalizeParams(obj) {\n return obj ? { ...obj } : null;\n}\nclass AnimationAstBuilderContext {\n constructor(errors) {\n this.errors = errors;\n this.queryCount = 0;\n this.depCount = 0;\n this.currentTransition = null;\n this.currentQuery = null;\n this.currentQuerySelector = null;\n this.currentAnimateTimings = null;\n this.currentTime = 0;\n this.collectedStyles = new Map();\n this.options = null;\n this.unsupportedCSSPropertiesFound = new Set();\n }\n}\nfunction consumeOffset(styles) {\n if (typeof styles == 'string')\n return null;\n let offset = null;\n if (Array.isArray(styles)) {\n styles.forEach((styleTuple) => {\n if (styleTuple instanceof Map && styleTuple.has('offset')) {\n const obj = styleTuple;\n offset = parseFloat(obj.get('offset'));\n obj.delete('offset');\n }\n });\n }\n else if (styles instanceof Map && styles.has('offset')) {\n const obj = styles;\n offset = parseFloat(obj.get('offset'));\n obj.delete('offset');\n }\n return offset;\n}\nfunction constructTimingAst(value, errors) {\n if (value.hasOwnProperty('duration')) {\n return value;\n }\n if (typeof value == 'number') {\n const duration = resolveTiming(value, errors).duration;\n return makeTimingAst(duration, 0, '');\n }\n const strValue = value;\n const isDynamic = strValue.split(/\\s+/).some((v) => v.charAt(0) == '{' && v.charAt(1) == '{');\n if (isDynamic) {\n const ast = makeTimingAst(0, 0, '');\n ast.dynamic = true;\n ast.strValue = strValue;\n return ast;\n }\n const timings = resolveTiming(strValue, errors);\n return makeTimingAst(timings.duration, timings.delay, timings.easing);\n}\nfunction normalizeAnimationOptions(options) {\n if (options) {\n options = { ...options };\n if (options['params']) {\n options['params'] = normalizeParams(options['params']);\n }\n }\n else {\n options = {};\n }\n return options;\n}\nfunction makeTimingAst(duration, delay, easing) {\n return { duration, delay, easing };\n}\n\nfunction createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing = null, subTimeline = false) {\n return {\n type: 1 /* AnimationTransitionInstructionType.TimelineAnimation */,\n element,\n keyframes,\n preStyleProps,\n postStyleProps,\n duration,\n delay,\n totalTime: duration + delay,\n easing,\n subTimeline,\n };\n}\n\nclass ElementInstructionMap {\n constructor() {\n this._map = new Map();\n }\n get(element) {\n return this._map.get(element) || [];\n }\n append(element, instructions) {\n let existingInstructions = this._map.get(element);\n if (!existingInstructions) {\n this._map.set(element, (existingInstructions = []));\n }\n existingInstructions.push(...instructions);\n }\n has(element) {\n return this._map.has(element);\n }\n clear() {\n this._map.clear();\n }\n}\n\nconst ONE_FRAME_IN_MILLISECONDS = 1;\nconst ENTER_TOKEN = ':enter';\nconst ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');\nconst LEAVE_TOKEN = ':leave';\nconst LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');\n/*\n * The code within this file aims to generate web-animations-compatible keyframes from Angular's\n * animation DSL code.\n *\n * The code below will be converted from:\n *\n * ```\n * sequence([\n * style({ opacity: 0 }),\n * animate(1000, style({ opacity: 0 }))\n * ])\n * ```\n *\n * To:\n * ```\n * keyframes = [{ opacity: 0, offset: 0 }, { opacity: 1, offset: 1 }]\n * duration = 1000\n * delay = 0\n * easing = ''\n * ```\n *\n * For this operation to cover the combination of animation verbs (style, animate, group, etc...) a\n * combination of AST traversal and merge-sort-like algorithms are used.\n *\n * [AST Traversal]\n * Each of the animation verbs, when executed, will return an string-map object representing what\n * type of action it is (style, animate, group, etc...) and the data associated with it. This means\n * that when functional composition mix of these functions is evaluated (like in the example above)\n * then it will end up producing a tree of objects representing the animation itself.\n *\n * When this animation object tree is processed by the visitor code below it will visit each of the\n * verb statements within the visitor. And during each visit it will build the context of the\n * animation keyframes by interacting with the `TimelineBuilder`.\n *\n * [TimelineBuilder]\n * This class is responsible for tracking the styles and building a series of keyframe objects for a\n * timeline between a start and end time. The builder starts off with an initial timeline and each\n * time the AST comes across a `group()`, `keyframes()` or a combination of the two within a\n * `sequence()` then it will generate a sub timeline for each step as well as a new one after\n * they are complete.\n *\n * As the AST is traversed, the timing state on each of the timelines will be incremented. If a sub\n * timeline was created (based on one of the cases above) then the parent timeline will attempt to\n * merge the styles used within the sub timelines into itself (only with group() this will happen).\n * This happens with a merge operation (much like how the merge works in mergeSort) and it will only\n * copy the most recently used styles from the sub timelines into the parent timeline. This ensures\n * that if the styles are used later on in another phase of the animation then they will be the most\n * up-to-date values.\n *\n * [How Missing Styles Are Updated]\n * Each timeline has a `backFill` property which is responsible for filling in new styles into\n * already processed keyframes if a new style shows up later within the animation sequence.\n *\n * ```\n * sequence([\n * style({ width: 0 }),\n * animate(1000, style({ width: 100 })),\n * animate(1000, style({ width: 200 })),\n * animate(1000, style({ width: 300 }))\n * animate(1000, style({ width: 400, height: 400 })) // notice how `height` doesn't exist anywhere\n * else\n * ])\n * ```\n *\n * What is happening here is that the `height` value is added later in the sequence, but is missing\n * from all previous animation steps. Therefore when a keyframe is created it would also be missing\n * from all previous keyframes up until where it is first used. For the timeline keyframe generation\n * to properly fill in the style it will place the previous value (the value from the parent\n * timeline) or a default value of `*` into the backFill map.\n *\n * When a sub-timeline is created it will have its own backFill property. This is done so that\n * styles present within the sub-timeline do not accidentally seep into the previous/future timeline\n * keyframes\n *\n * [Validation]\n * The code in this file is not responsible for validation. That functionality happens with within\n * the `AnimationValidatorVisitor` code.\n */\nfunction buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles = new Map(), finalStyles = new Map(), options, subInstructions, errors = []) {\n return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors);\n}\nclass AnimationTimelineBuilderVisitor {\n buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors = []) {\n subInstructions = subInstructions || new ElementInstructionMap();\n const context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);\n context.options = options;\n const delay = options.delay ? resolveTimingValue(options.delay) : 0;\n context.currentTimeline.delayNextStep(delay);\n context.currentTimeline.setStyles([startingStyles], null, context.errors, options);\n visitDslNode(this, ast, context);\n // this checks to see if an actual animation happened\n const timelines = context.timelines.filter((timeline) => timeline.containsAnimation());\n // note: we just want to apply the final styles for the rootElement, so we do not\n // just apply the styles to the last timeline but the last timeline which\n // element is the root one (basically `*`-styles are replaced with the actual\n // state style values only for the root element)\n if (timelines.length && finalStyles.size) {\n let lastRootTimeline;\n for (let i = timelines.length - 1; i >= 0; i--) {\n const timeline = timelines[i];\n if (timeline.element === rootElement) {\n lastRootTimeline = timeline;\n break;\n }\n }\n if (lastRootTimeline && !lastRootTimeline.allowOnlyTimelineStyles()) {\n lastRootTimeline.setStyles([finalStyles], null, context.errors, options);\n }\n }\n return timelines.length\n ? timelines.map((timeline) => timeline.buildKeyframes())\n : [createTimelineInstruction(rootElement, [], [], [], 0, delay, '', false)];\n }\n visitTrigger(ast, context) {\n // these values are not visited in this AST\n }\n visitState(ast, context) {\n // these values are not visited in this AST\n }\n visitTransition(ast, context) {\n // these values are not visited in this AST\n }\n visitAnimateChild(ast, context) {\n const elementInstructions = context.subInstructions.get(context.element);\n if (elementInstructions) {\n const innerContext = context.createSubContext(ast.options);\n const startTime = context.currentTimeline.currentTime;\n const endTime = this._visitSubInstructions(elementInstructions, innerContext, innerContext.options);\n if (startTime != endTime) {\n // we do this on the upper context because we created a sub context for\n // the sub child animations\n context.transformIntoNewTimeline(endTime);\n }\n }\n context.previousNode = ast;\n }\n visitAnimateRef(ast, context) {\n const innerContext = context.createSubContext(ast.options);\n innerContext.transformIntoNewTimeline();\n this._applyAnimationRefDelays([ast.options, ast.animation.options], context, innerContext);\n this.visitReference(ast.animation, innerContext);\n context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);\n context.previousNode = ast;\n }\n _applyAnimationRefDelays(animationsRefsOptions, context, innerContext) {\n for (const animationRefOptions of animationsRefsOptions) {\n const animationDelay = animationRefOptions?.delay;\n if (animationDelay) {\n const animationDelayValue = typeof animationDelay === 'number'\n ? animationDelay\n : resolveTimingValue(interpolateParams(animationDelay, animationRefOptions?.params ?? {}, context.errors));\n innerContext.delayNextStep(animationDelayValue);\n }\n }\n }\n _visitSubInstructions(instructions, context, options) {\n const startTime = context.currentTimeline.currentTime;\n let furthestTime = startTime;\n // this is a special-case for when a user wants to skip a sub\n // animation from being fired entirely.\n const duration = options.duration != null ? resolveTimingValue(options.duration) : null;\n const delay = options.delay != null ? resolveTimingValue(options.delay) : null;\n if (duration !== 0) {\n instructions.forEach((instruction) => {\n const instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);\n furthestTime = Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);\n });\n }\n return furthestTime;\n }\n visitReference(ast, context) {\n context.updateOptions(ast.options, true);\n visitDslNode(this, ast.animation, context);\n context.previousNode = ast;\n }\n visitSequence(ast, context) {\n const subContextCount = context.subContextCount;\n let ctx = context;\n const options = ast.options;\n if (options && (options.params || options.delay)) {\n ctx = context.createSubContext(options);\n ctx.transformIntoNewTimeline();\n if (options.delay != null) {\n if (ctx.previousNode.type == AnimationMetadataType.Style) {\n ctx.currentTimeline.snapshotCurrentStyles();\n ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n }\n const delay = resolveTimingValue(options.delay);\n ctx.delayNextStep(delay);\n }\n }\n if (ast.steps.length) {\n ast.steps.forEach((s) => visitDslNode(this, s, ctx));\n // this is here just in case the inner steps only contain or end with a style() call\n ctx.currentTimeline.applyStylesToKeyframe();\n // this means that some animation function within the sequence\n // ended up creating a sub timeline (which means the current\n // timeline cannot overlap with the contents of the sequence)\n if (ctx.subContextCount > subContextCount) {\n ctx.transformIntoNewTimeline();\n }\n }\n context.previousNode = ast;\n }\n visitGroup(ast, context) {\n const innerTimelines = [];\n let furthestTime = context.currentTimeline.currentTime;\n const delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;\n ast.steps.forEach((s) => {\n const innerContext = context.createSubContext(ast.options);\n if (delay) {\n innerContext.delayNextStep(delay);\n }\n visitDslNode(this, s, innerContext);\n furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);\n innerTimelines.push(innerContext.currentTimeline);\n });\n // this operation is run after the AST loop because otherwise\n // if the parent timeline's collected styles were updated then\n // it would pass in invalid data into the new-to-be forked items\n innerTimelines.forEach((timeline) => context.currentTimeline.mergeTimelineCollectedStyles(timeline));\n context.transformIntoNewTimeline(furthestTime);\n context.previousNode = ast;\n }\n _visitTiming(ast, context) {\n if (ast.dynamic) {\n const strValue = ast.strValue;\n const timingValue = context.params\n ? interpolateParams(strValue, context.params, context.errors)\n : strValue;\n return resolveTiming(timingValue, context.errors);\n }\n else {\n return { duration: ast.duration, delay: ast.delay, easing: ast.easing };\n }\n }\n visitAnimate(ast, context) {\n const timings = (context.currentAnimateTimings = this._visitTiming(ast.timings, context));\n const timeline = context.currentTimeline;\n if (timings.delay) {\n context.incrementTime(timings.delay);\n timeline.snapshotCurrentStyles();\n }\n const style = ast.style;\n if (style.type == AnimationMetadataType.Keyframes) {\n this.visitKeyframes(style, context);\n }\n else {\n context.incrementTime(timings.duration);\n this.visitStyle(style, context);\n timeline.applyStylesToKeyframe();\n }\n context.currentAnimateTimings = null;\n context.previousNode = ast;\n }\n visitStyle(ast, context) {\n const timeline = context.currentTimeline;\n const timings = context.currentAnimateTimings;\n // this is a special case for when a style() call\n // directly follows an animate() call (but not inside of an animate() call)\n if (!timings && timeline.hasCurrentStyleProperties()) {\n timeline.forwardFrame();\n }\n const easing = (timings && timings.easing) || ast.easing;\n if (ast.isEmptyStep) {\n timeline.applyEmptyStep(easing);\n }\n else {\n timeline.setStyles(ast.styles, easing, context.errors, context.options);\n }\n context.previousNode = ast;\n }\n visitKeyframes(ast, context) {\n const currentAnimateTimings = context.currentAnimateTimings;\n const startTime = context.currentTimeline.duration;\n const duration = currentAnimateTimings.duration;\n const innerContext = context.createSubContext();\n const innerTimeline = innerContext.currentTimeline;\n innerTimeline.easing = currentAnimateTimings.easing;\n ast.styles.forEach((step) => {\n const offset = step.offset || 0;\n innerTimeline.forwardTime(offset * duration);\n innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);\n innerTimeline.applyStylesToKeyframe();\n });\n // this will ensure that the parent timeline gets all the styles from\n // the child even if the new timeline below is not used\n context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline);\n // we do this because the window between this timeline and the sub timeline\n // should ensure that the styles within are exactly the same as they were before\n context.transformIntoNewTimeline(startTime + duration);\n context.previousNode = ast;\n }\n visitQuery(ast, context) {\n // in the event that the first step before this is a style step we need\n // to ensure the styles are applied before the children are animated\n const startTime = context.currentTimeline.currentTime;\n const options = (ast.options || {});\n const delay = options.delay ? resolveTimingValue(options.delay) : 0;\n if (delay &&\n (context.previousNode.type === AnimationMetadataType.Style ||\n (startTime == 0 && context.currentTimeline.hasCurrentStyleProperties()))) {\n context.currentTimeline.snapshotCurrentStyles();\n context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n }\n let furthestTime = startTime;\n const elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);\n context.currentQueryTotal = elms.length;\n let sameElementTimeline = null;\n elms.forEach((element, i) => {\n context.currentQueryIndex = i;\n const innerContext = context.createSubContext(ast.options, element);\n if (delay) {\n innerContext.delayNextStep(delay);\n }\n if (element === context.element) {\n sameElementTimeline = innerContext.currentTimeline;\n }\n visitDslNode(this, ast.animation, innerContext);\n // this is here just incase the inner steps only contain or end\n // with a style() call (which is here to signal that this is a preparatory\n // call to style an element before it is animated again)\n innerContext.currentTimeline.applyStylesToKeyframe();\n const endTime = innerContext.currentTimeline.currentTime;\n furthestTime = Math.max(furthestTime, endTime);\n });\n context.currentQueryIndex = 0;\n context.currentQueryTotal = 0;\n context.transformIntoNewTimeline(furthestTime);\n if (sameElementTimeline) {\n context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);\n context.currentTimeline.snapshotCurrentStyles();\n }\n context.previousNode = ast;\n }\n visitStagger(ast, context) {\n const parentContext = context.parentContext;\n const tl = context.currentTimeline;\n const timings = ast.timings;\n const duration = Math.abs(timings.duration);\n const maxTime = duration * (context.currentQueryTotal - 1);\n let delay = duration * context.currentQueryIndex;\n let staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing;\n switch (staggerTransformer) {\n case 'reverse':\n delay = maxTime - delay;\n break;\n case 'full':\n delay = parentContext.currentStaggerTime;\n break;\n }\n const timeline = context.currentTimeline;\n if (delay) {\n timeline.delayNextStep(delay);\n }\n const startingTime = timeline.currentTime;\n visitDslNode(this, ast.animation, context);\n context.previousNode = ast;\n // time = duration + delay\n // the reason why this computation is so complex is because\n // the inner timeline may either have a delay value or a stretched\n // keyframe depending on if a subtimeline is not used or is used.\n parentContext.currentStaggerTime =\n tl.currentTime - startingTime + (tl.startTime - parentContext.currentTimeline.startTime);\n }\n}\nconst DEFAULT_NOOP_PREVIOUS_NODE = {};\nclass AnimationTimelineContext {\n constructor(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) {\n this._driver = _driver;\n this.element = element;\n this.subInstructions = subInstructions;\n this._enterClassName = _enterClassName;\n this._leaveClassName = _leaveClassName;\n this.errors = errors;\n this.timelines = timelines;\n this.parentContext = null;\n this.currentAnimateTimings = null;\n this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n this.subContextCount = 0;\n this.options = {};\n this.currentQueryIndex = 0;\n this.currentQueryTotal = 0;\n this.currentStaggerTime = 0;\n this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0);\n timelines.push(this.currentTimeline);\n }\n get params() {\n return this.options.params;\n }\n updateOptions(options, skipIfExists) {\n if (!options)\n return;\n const newOptions = options;\n let optionsToUpdate = this.options;\n // NOTE: this will get patched up when other animation methods support duration overrides\n if (newOptions.duration != null) {\n optionsToUpdate.duration = resolveTimingValue(newOptions.duration);\n }\n if (newOptions.delay != null) {\n optionsToUpdate.delay = resolveTimingValue(newOptions.delay);\n }\n const newParams = newOptions.params;\n if (newParams) {\n let paramsToUpdate = optionsToUpdate.params;\n if (!paramsToUpdate) {\n paramsToUpdate = this.options.params = {};\n }\n Object.keys(newParams).forEach((name) => {\n if (!skipIfExists || !paramsToUpdate.hasOwnProperty(name)) {\n paramsToUpdate[name] = interpolateParams(newParams[name], paramsToUpdate, this.errors);\n }\n });\n }\n }\n _copyOptions() {\n const options = {};\n if (this.options) {\n const oldParams = this.options.params;\n if (oldParams) {\n const params = (options['params'] = {});\n Object.keys(oldParams).forEach((name) => {\n params[name] = oldParams[name];\n });\n }\n }\n return options;\n }\n createSubContext(options = null, element, newTime) {\n const target = element || this.element;\n const context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));\n context.previousNode = this.previousNode;\n context.currentAnimateTimings = this.currentAnimateTimings;\n context.options = this._copyOptions();\n context.updateOptions(options);\n context.currentQueryIndex = this.currentQueryIndex;\n context.currentQueryTotal = this.currentQueryTotal;\n context.parentContext = this;\n this.subContextCount++;\n return context;\n }\n transformIntoNewTimeline(newTime) {\n this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n this.currentTimeline = this.currentTimeline.fork(this.element, newTime);\n this.timelines.push(this.currentTimeline);\n return this.currentTimeline;\n }\n appendInstructionToTimeline(instruction, duration, delay) {\n const updatedTimings = {\n duration: duration != null ? duration : instruction.duration,\n delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,\n easing: '',\n };\n const builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);\n this.timelines.push(builder);\n return updatedTimings;\n }\n incrementTime(time) {\n this.currentTimeline.forwardTime(this.currentTimeline.duration + time);\n }\n delayNextStep(delay) {\n // negative delays are not yet supported\n if (delay > 0) {\n this.currentTimeline.delayNextStep(delay);\n }\n }\n invokeQuery(selector, originalSelector, limit, includeSelf, optional, errors) {\n let results = [];\n if (includeSelf) {\n results.push(this.element);\n }\n if (selector.length > 0) {\n // only if :self is used then the selector can be empty\n selector = selector.replace(ENTER_TOKEN_REGEX, '.' + this._enterClassName);\n selector = selector.replace(LEAVE_TOKEN_REGEX, '.' + this._leaveClassName);\n const multi = limit != 1;\n let elements = this._driver.query(this.element, selector, multi);\n if (limit !== 0) {\n elements =\n limit < 0\n ? elements.slice(elements.length + limit, elements.length)\n : elements.slice(0, limit);\n }\n results.push(...elements);\n }\n if (!optional && results.length == 0) {\n errors.push(invalidQuery(originalSelector));\n }\n return results;\n }\n}\nclass TimelineBuilder {\n constructor(_driver, element, startTime, _elementTimelineStylesLookup) {\n this._driver = _driver;\n this.element = element;\n this.startTime = startTime;\n this._elementTimelineStylesLookup = _elementTimelineStylesLookup;\n this.duration = 0;\n this.easing = null;\n this._previousKeyframe = new Map();\n this._currentKeyframe = new Map();\n this._keyframes = new Map();\n this._styleSummary = new Map();\n this._localTimelineStyles = new Map();\n this._pendingStyles = new Map();\n this._backFill = new Map();\n this._currentEmptyStepKeyframe = null;\n if (!this._elementTimelineStylesLookup) {\n this._elementTimelineStylesLookup = new Map();\n }\n this._globalTimelineStyles = this._elementTimelineStylesLookup.get(element);\n if (!this._globalTimelineStyles) {\n this._globalTimelineStyles = this._localTimelineStyles;\n this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);\n }\n this._loadKeyframe();\n }\n containsAnimation() {\n switch (this._keyframes.size) {\n case 0:\n return false;\n case 1:\n return this.hasCurrentStyleProperties();\n default:\n return true;\n }\n }\n hasCurrentStyleProperties() {\n return this._currentKeyframe.size > 0;\n }\n get currentTime() {\n return this.startTime + this.duration;\n }\n delayNextStep(delay) {\n // in the event that a style() step is placed right before a stagger()\n // and that style() step is the very first style() value in the animation\n // then we need to make a copy of the keyframe [0, copy, 1] so that the delay\n // properly applies the style() values to work with the stagger...\n const hasPreStyleStep = this._keyframes.size === 1 && this._pendingStyles.size;\n if (this.duration || hasPreStyleStep) {\n this.forwardTime(this.currentTime + delay);\n if (hasPreStyleStep) {\n this.snapshotCurrentStyles();\n }\n }\n else {\n this.startTime += delay;\n }\n }\n fork(element, currentTime) {\n this.applyStylesToKeyframe();\n return new TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup);\n }\n _loadKeyframe() {\n if (this._currentKeyframe) {\n this._previousKeyframe = this._currentKeyframe;\n }\n this._currentKeyframe = this._keyframes.get(this.duration);\n if (!this._currentKeyframe) {\n this._currentKeyframe = new Map();\n this._keyframes.set(this.duration, this._currentKeyframe);\n }\n }\n forwardFrame() {\n this.duration += ONE_FRAME_IN_MILLISECONDS;\n this._loadKeyframe();\n }\n forwardTime(time) {\n this.applyStylesToKeyframe();\n this.duration = time;\n this._loadKeyframe();\n }\n _updateStyle(prop, value) {\n this._localTimelineStyles.set(prop, value);\n this._globalTimelineStyles.set(prop, value);\n this._styleSummary.set(prop, { time: this.currentTime, value });\n }\n allowOnlyTimelineStyles() {\n return this._currentEmptyStepKeyframe !== this._currentKeyframe;\n }\n applyEmptyStep(easing) {\n if (easing) {\n this._previousKeyframe.set('easing', easing);\n }\n // special case for animate(duration):\n // all missing styles are filled with a `*` value then\n // if any destination styles are filled in later on the same\n // keyframe then they will override the overridden styles\n // We use `_globalTimelineStyles` here because there may be\n // styles in previous keyframes that are not present in this timeline\n for (let [prop, value] of this._globalTimelineStyles) {\n this._backFill.set(prop, value || AUTO_STYLE);\n this._currentKeyframe.set(prop, AUTO_STYLE);\n }\n this._currentEmptyStepKeyframe = this._currentKeyframe;\n }\n setStyles(input, easing, errors, options) {\n if (easing) {\n this._previousKeyframe.set('easing', easing);\n }\n const params = (options && options.params) || {};\n const styles = flattenStyles(input, this._globalTimelineStyles);\n for (let [prop, value] of styles) {\n const val = interpolateParams(value, params, errors);\n this._pendingStyles.set(prop, val);\n if (!this._localTimelineStyles.has(prop)) {\n this._backFill.set(prop, this._globalTimelineStyles.get(prop) ?? AUTO_STYLE);\n }\n this._updateStyle(prop, val);\n }\n }\n applyStylesToKeyframe() {\n if (this._pendingStyles.size == 0)\n return;\n this._pendingStyles.forEach((val, prop) => {\n this._currentKeyframe.set(prop, val);\n });\n this._pendingStyles.clear();\n this._localTimelineStyles.forEach((val, prop) => {\n if (!this._currentKeyframe.has(prop)) {\n this._currentKeyframe.set(prop, val);\n }\n });\n }\n snapshotCurrentStyles() {\n for (let [prop, val] of this._localTimelineStyles) {\n this._pendingStyles.set(prop, val);\n this._updateStyle(prop, val);\n }\n }\n getFinalKeyframe() {\n return this._keyframes.get(this.duration);\n }\n get properties() {\n const properties = [];\n for (let prop in this._currentKeyframe) {\n properties.push(prop);\n }\n return properties;\n }\n mergeTimelineCollectedStyles(timeline) {\n timeline._styleSummary.forEach((details1, prop) => {\n const details0 = this._styleSummary.get(prop);\n if (!details0 || details1.time > details0.time) {\n this._updateStyle(prop, details1.value);\n }\n });\n }\n buildKeyframes() {\n this.applyStylesToKeyframe();\n const preStyleProps = new Set();\n const postStyleProps = new Set();\n const isEmpty = this._keyframes.size === 1 && this.duration === 0;\n let finalKeyframes = [];\n this._keyframes.forEach((keyframe, time) => {\n const finalKeyframe = new Map([...this._backFill, ...keyframe]);\n finalKeyframe.forEach((value, prop) => {\n if (value === ɵPRE_STYLE) {\n preStyleProps.add(prop);\n }\n else if (value === AUTO_STYLE) {\n postStyleProps.add(prop);\n }\n });\n if (!isEmpty) {\n finalKeyframe.set('offset', time / this.duration);\n }\n finalKeyframes.push(finalKeyframe);\n });\n const preProps = [...preStyleProps.values()];\n const postProps = [...postStyleProps.values()];\n // special case for a 0-second animation (which is designed just to place styles onscreen)\n if (isEmpty) {\n const kf0 = finalKeyframes[0];\n const kf1 = new Map(kf0);\n kf0.set('offset', 0);\n kf1.set('offset', 1);\n finalKeyframes = [kf0, kf1];\n }\n return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);\n }\n}\nclass SubTimelineBuilder extends TimelineBuilder {\n constructor(driver, element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe = false) {\n super(driver, element, timings.delay);\n this.keyframes = keyframes;\n this.preStyleProps = preStyleProps;\n this.postStyleProps = postStyleProps;\n this._stretchStartingKeyframe = _stretchStartingKeyframe;\n this.timings = { duration: timings.duration, delay: timings.delay, easing: timings.easing };\n }\n containsAnimation() {\n return this.keyframes.length > 1;\n }\n buildKeyframes() {\n let keyframes = this.keyframes;\n let { delay, duration, easing } = this.timings;\n if (this._stretchStartingKeyframe && delay) {\n const newKeyframes = [];\n const totalTime = duration + delay;\n const startingGap = delay / totalTime;\n // the original starting keyframe now starts once the delay is done\n const newFirstKeyframe = new Map(keyframes[0]);\n newFirstKeyframe.set('offset', 0);\n newKeyframes.push(newFirstKeyframe);\n const oldFirstKeyframe = new Map(keyframes[0]);\n oldFirstKeyframe.set('offset', roundOffset(startingGap));\n newKeyframes.push(oldFirstKeyframe);\n /*\n When the keyframe is stretched then it means that the delay before the animation\n starts is gone. Instead the first keyframe is placed at the start of the animation\n and it is then copied to where it starts when the original delay is over. This basically\n means nothing animates during that delay, but the styles are still rendered. For this\n to work the original offset values that exist in the original keyframes must be \"warped\"\n so that they can take the new keyframe + delay into account.\n \n delay=1000, duration=1000, keyframes = 0 .5 1\n \n turns into\n \n delay=0, duration=2000, keyframes = 0 .33 .66 1\n */\n // offsets between 1 ... n -1 are all warped by the keyframe stretch\n const limit = keyframes.length - 1;\n for (let i = 1; i <= limit; i++) {\n let kf = new Map(keyframes[i]);\n const oldOffset = kf.get('offset');\n const timeAtKeyframe = delay + oldOffset * duration;\n kf.set('offset', roundOffset(timeAtKeyframe / totalTime));\n newKeyframes.push(kf);\n }\n // the new starting keyframe should be added at the start\n duration = totalTime;\n delay = 0;\n easing = '';\n keyframes = newKeyframes;\n }\n return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);\n }\n}\nfunction roundOffset(offset, decimalPoints = 3) {\n const mult = Math.pow(10, decimalPoints - 1);\n return Math.round(offset * mult) / mult;\n}\nfunction flattenStyles(input, allStyles) {\n const styles = new Map();\n let allProperties;\n input.forEach((token) => {\n if (token === '*') {\n allProperties ??= allStyles.keys();\n for (let prop of allProperties) {\n styles.set(prop, AUTO_STYLE);\n }\n }\n else {\n for (let [prop, val] of token) {\n styles.set(prop, val);\n }\n }\n });\n return styles;\n}\n\nfunction createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, totalTime, errors) {\n return {\n type: 0 /* AnimationTransitionInstructionType.TransitionAnimation */,\n element,\n triggerName,\n isRemovalTransition,\n fromState,\n fromStyles,\n toState,\n toStyles,\n timelines,\n queriedElements,\n preStyleProps,\n postStyleProps,\n totalTime,\n errors,\n };\n}\n\nconst EMPTY_OBJECT = {};\nclass AnimationTransitionFactory {\n constructor(_triggerName, ast, _stateStyles) {\n this._triggerName = _triggerName;\n this.ast = ast;\n this._stateStyles = _stateStyles;\n }\n match(currentState, nextState, element, params) {\n return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState, element, params);\n }\n buildStyles(stateName, params, errors) {\n let styler = this._stateStyles.get('*');\n if (stateName !== undefined) {\n styler = this._stateStyles.get(stateName?.toString()) || styler;\n }\n return styler ? styler.buildStyles(params, errors) : new Map();\n }\n build(driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions, skipAstBuild) {\n const errors = [];\n const transitionAnimationParams = (this.ast.options && this.ast.options.params) || EMPTY_OBJECT;\n const currentAnimationParams = (currentOptions && currentOptions.params) || EMPTY_OBJECT;\n const currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);\n const nextAnimationParams = (nextOptions && nextOptions.params) || EMPTY_OBJECT;\n const nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);\n const queriedElements = new Set();\n const preStyleMap = new Map();\n const postStyleMap = new Map();\n const isRemoval = nextState === 'void';\n const animationOptions = {\n params: applyParamDefaults(nextAnimationParams, transitionAnimationParams),\n delay: this.ast.options?.delay,\n };\n const timelines = skipAstBuild\n ? []\n : buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);\n let totalTime = 0;\n timelines.forEach((tl) => {\n totalTime = Math.max(tl.duration + tl.delay, totalTime);\n });\n if (errors.length) {\n return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, totalTime, errors);\n }\n timelines.forEach((tl) => {\n const elm = tl.element;\n const preProps = getOrSetDefaultValue(preStyleMap, elm, new Set());\n tl.preStyleProps.forEach((prop) => preProps.add(prop));\n const postProps = getOrSetDefaultValue(postStyleMap, elm, new Set());\n tl.postStyleProps.forEach((prop) => postProps.add(prop));\n if (elm !== element) {\n queriedElements.add(elm);\n }\n });\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n checkNonAnimatableInTimelines(timelines, this._triggerName, driver);\n }\n return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, [...queriedElements.values()], preStyleMap, postStyleMap, totalTime);\n }\n}\n/**\n * Checks inside a set of timelines if they try to animate a css property which is not considered\n * animatable, in that case it prints a warning on the console.\n * Besides that the function doesn't have any other effect.\n *\n * Note: this check is done here after the timelines are built instead of doing on a lower level so\n * that we can make sure that the warning appears only once per instruction (we can aggregate here\n * all the issues instead of finding them separately).\n *\n * @param timelines The built timelines for the current instruction.\n * @param triggerName The name of the trigger for the current instruction.\n * @param driver Animation driver used to perform the check.\n *\n */\nfunction checkNonAnimatableInTimelines(timelines, triggerName, driver) {\n if (!driver.validateAnimatableStyleProperty) {\n return;\n }\n const allowedNonAnimatableProps = new Set([\n // 'easing' is a utility/synthetic prop we use to represent\n // easing functions, it represents a property of the animation\n // which is not animatable but different values can be used\n // in different steps\n 'easing',\n ]);\n const invalidNonAnimatableProps = new Set();\n timelines.forEach(({ keyframes }) => {\n const nonAnimatablePropsInitialValues = new Map();\n keyframes.forEach((keyframe) => {\n const entriesToCheck = Array.from(keyframe.entries()).filter(([prop]) => !allowedNonAnimatableProps.has(prop));\n for (const [prop, value] of entriesToCheck) {\n if (!driver.validateAnimatableStyleProperty(prop)) {\n if (nonAnimatablePropsInitialValues.has(prop) && !invalidNonAnimatableProps.has(prop)) {\n const propInitialValue = nonAnimatablePropsInitialValues.get(prop);\n if (propInitialValue !== value) {\n invalidNonAnimatableProps.add(prop);\n }\n }\n else {\n nonAnimatablePropsInitialValues.set(prop, value);\n }\n }\n }\n });\n });\n if (invalidNonAnimatableProps.size > 0) {\n console.warn(`Warning: The animation trigger \"${triggerName}\" is attempting to animate the following` +\n ' not animatable properties: ' +\n Array.from(invalidNonAnimatableProps).join(', ') +\n '\\n' +\n '(to check the list of all animatable properties visit https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties)');\n }\n}\nfunction oneOrMoreTransitionsMatch(matchFns, currentState, nextState, element, params) {\n return matchFns.some((fn) => fn(currentState, nextState, element, params));\n}\nfunction applyParamDefaults(userParams, defaults) {\n const result = { ...defaults };\n Object.entries(userParams).forEach(([key, value]) => {\n if (value != null) {\n result[key] = value;\n }\n });\n return result;\n}\nclass AnimationStateStyles {\n constructor(styles, defaultParams, normalizer) {\n this.styles = styles;\n this.defaultParams = defaultParams;\n this.normalizer = normalizer;\n }\n buildStyles(params, errors) {\n const finalStyles = new Map();\n const combinedParams = applyParamDefaults(params, this.defaultParams);\n this.styles.styles.forEach((value) => {\n if (typeof value !== 'string') {\n value.forEach((val, prop) => {\n if (val) {\n val = interpolateParams(val, combinedParams, errors);\n }\n const normalizedProp = this.normalizer.normalizePropertyName(prop, errors);\n val = this.normalizer.normalizeStyleValue(prop, normalizedProp, val, errors);\n finalStyles.set(prop, val);\n });\n }\n });\n return finalStyles;\n }\n}\n\nfunction buildTrigger(name, ast, normalizer) {\n return new AnimationTrigger(name, ast, normalizer);\n}\nclass AnimationTrigger {\n constructor(name, ast, _normalizer) {\n this.name = name;\n this.ast = ast;\n this._normalizer = _normalizer;\n this.transitionFactories = [];\n this.states = new Map();\n ast.states.forEach((ast) => {\n const defaultParams = (ast.options && ast.options.params) || {};\n this.states.set(ast.name, new AnimationStateStyles(ast.style, defaultParams, _normalizer));\n });\n balanceProperties(this.states, 'true', '1');\n balanceProperties(this.states, 'false', '0');\n ast.transitions.forEach((ast) => {\n this.transitionFactories.push(new AnimationTransitionFactory(name, ast, this.states));\n });\n this.fallbackTransition = createFallbackTransition(name, this.states, this._normalizer);\n }\n get containsQueries() {\n return this.ast.queryCount > 0;\n }\n matchTransition(currentState, nextState, element, params) {\n const entry = this.transitionFactories.find((f) => f.match(currentState, nextState, element, params));\n return entry || null;\n }\n matchStyles(currentState, params, errors) {\n return this.fallbackTransition.buildStyles(currentState, params, errors);\n }\n}\nfunction createFallbackTransition(triggerName, states, normalizer) {\n const matchers = [(fromState, toState) => true];\n const animation = { type: AnimationMetadataType.Sequence, steps: [], options: null };\n const transition = {\n type: AnimationMetadataType.Transition,\n animation,\n matchers,\n options: null,\n queryCount: 0,\n depCount: 0,\n };\n return new AnimationTransitionFactory(triggerName, transition, states);\n}\nfunction balanceProperties(stateMap, key1, key2) {\n if (stateMap.has(key1)) {\n if (!stateMap.has(key2)) {\n stateMap.set(key2, stateMap.get(key1));\n }\n }\n else if (stateMap.has(key2)) {\n stateMap.set(key1, stateMap.get(key2));\n }\n}\n\nconst EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();\nclass TimelineAnimationEngine {\n constructor(bodyNode, _driver, _normalizer) {\n this.bodyNode = bodyNode;\n this._driver = _driver;\n this._normalizer = _normalizer;\n this._animations = new Map();\n this._playersById = new Map();\n this.players = [];\n }\n register(id, metadata) {\n const errors = [];\n const warnings = [];\n const ast = buildAnimationAst(this._driver, metadata, errors, warnings);\n if (errors.length) {\n throw registerFailed(errors);\n }\n else {\n if (warnings.length) {\n warnRegister(warnings);\n }\n this._animations.set(id, ast);\n }\n }\n _buildPlayer(i, preStyles, postStyles) {\n const element = i.element;\n const keyframes = normalizeKeyframes$1(this._normalizer, i.keyframes, preStyles, postStyles);\n return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, [], true);\n }\n create(id, element, options = {}) {\n const errors = [];\n const ast = this._animations.get(id);\n let instructions;\n const autoStylesMap = new Map();\n if (ast) {\n instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, new Map(), new Map(), options, EMPTY_INSTRUCTION_MAP, errors);\n instructions.forEach((inst) => {\n const styles = getOrSetDefaultValue(autoStylesMap, inst.element, new Map());\n inst.postStyleProps.forEach((prop) => styles.set(prop, null));\n });\n }\n else {\n errors.push(missingOrDestroyedAnimation());\n instructions = [];\n }\n if (errors.length) {\n throw createAnimationFailed(errors);\n }\n autoStylesMap.forEach((styles, element) => {\n styles.forEach((_, prop) => {\n styles.set(prop, this._driver.computeStyle(element, prop, AUTO_STYLE));\n });\n });\n const players = instructions.map((i) => {\n const styles = autoStylesMap.get(i.element);\n return this._buildPlayer(i, new Map(), styles);\n });\n const player = optimizeGroupPlayer(players);\n this._playersById.set(id, player);\n player.onDestroy(() => this.destroy(id));\n this.players.push(player);\n return player;\n }\n destroy(id) {\n const player = this._getPlayer(id);\n player.destroy();\n this._playersById.delete(id);\n const index = this.players.indexOf(player);\n if (index >= 0) {\n this.players.splice(index, 1);\n }\n }\n _getPlayer(id) {\n const player = this._playersById.get(id);\n if (!player) {\n throw missingPlayer(id);\n }\n return player;\n }\n listen(id, element, eventName, callback) {\n // triggerName, fromState, toState are all ignored for timeline animations\n const baseEvent = makeAnimationEvent(element, '', '', '');\n listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);\n return () => { };\n }\n command(id, element, command, args) {\n if (command == 'register') {\n this.register(id, args[0]);\n return;\n }\n if (command == 'create') {\n const options = (args[0] || {});\n this.create(id, element, options);\n return;\n }\n const player = this._getPlayer(id);\n switch (command) {\n case 'play':\n player.play();\n break;\n case 'pause':\n player.pause();\n break;\n case 'reset':\n player.reset();\n break;\n case 'restart':\n player.restart();\n break;\n case 'finish':\n player.finish();\n break;\n case 'init':\n player.init();\n break;\n case 'setPosition':\n player.setPosition(parseFloat(args[0]));\n break;\n case 'destroy':\n this.destroy(id);\n break;\n }\n }\n}\n\nconst QUEUED_CLASSNAME = 'ng-animate-queued';\nconst QUEUED_SELECTOR = '.ng-animate-queued';\nconst DISABLED_CLASSNAME = 'ng-animate-disabled';\nconst DISABLED_SELECTOR = '.ng-animate-disabled';\nconst STAR_CLASSNAME = 'ng-star-inserted';\nconst STAR_SELECTOR = '.ng-star-inserted';\nconst EMPTY_PLAYER_ARRAY = [];\nconst NULL_REMOVAL_STATE = {\n namespaceId: '',\n setForRemoval: false,\n setForMove: false,\n hasAnimation: false,\n removedBeforeQueried: false,\n};\nconst NULL_REMOVED_QUERIED_STATE = {\n namespaceId: '',\n setForMove: false,\n setForRemoval: false,\n hasAnimation: false,\n removedBeforeQueried: true,\n};\nconst REMOVAL_FLAG = '__ng_removed';\nclass StateValue {\n get params() {\n return this.options.params;\n }\n constructor(input, namespaceId = '') {\n this.namespaceId = namespaceId;\n const isObj = input && input.hasOwnProperty('value');\n const value = isObj ? input['value'] : input;\n this.value = normalizeTriggerValue(value);\n if (isObj) {\n // we drop the value property from options.\n const { value, ...options } = input;\n this.options = options;\n }\n else {\n this.options = {};\n }\n if (!this.options.params) {\n this.options.params = {};\n }\n }\n absorbOptions(options) {\n const newParams = options.params;\n if (newParams) {\n const oldParams = this.options.params;\n Object.keys(newParams).forEach((prop) => {\n if (oldParams[prop] == null) {\n oldParams[prop] = newParams[prop];\n }\n });\n }\n }\n}\nconst VOID_VALUE = 'void';\nconst DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);\nclass AnimationTransitionNamespace {\n constructor(id, hostElement, _engine) {\n this.id = id;\n this.hostElement = hostElement;\n this._engine = _engine;\n this.players = [];\n this._triggers = new Map();\n this._queue = [];\n this._elementListeners = new Map();\n this._hostClassName = 'ng-tns-' + id;\n addClass(hostElement, this._hostClassName);\n }\n listen(element, name, phase, callback) {\n if (!this._triggers.has(name)) {\n throw missingTrigger(phase, name);\n }\n if (phase == null || phase.length == 0) {\n throw missingEvent(name);\n }\n if (!isTriggerEventValid(phase)) {\n throw unsupportedTriggerEvent(phase, name);\n }\n const listeners = getOrSetDefaultValue(this._elementListeners, element, []);\n const data = { name, phase, callback };\n listeners.push(data);\n const triggersWithStates = getOrSetDefaultValue(this._engine.statesByElement, element, new Map());\n if (!triggersWithStates.has(name)) {\n addClass(element, NG_TRIGGER_CLASSNAME);\n addClass(element, NG_TRIGGER_CLASSNAME + '-' + name);\n triggersWithStates.set(name, DEFAULT_STATE_VALUE);\n }\n return () => {\n // the event listener is removed AFTER the flush has occurred such\n // that leave animations callbacks can fire (otherwise if the node\n // is removed in between then the listeners would be deregistered)\n this._engine.afterFlush(() => {\n const index = listeners.indexOf(data);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n if (!this._triggers.has(name)) {\n triggersWithStates.delete(name);\n }\n });\n };\n }\n register(name, ast) {\n if (this._triggers.has(name)) {\n // throw\n return false;\n }\n else {\n this._triggers.set(name, ast);\n return true;\n }\n }\n _getTrigger(name) {\n const trigger = this._triggers.get(name);\n if (!trigger) {\n throw unregisteredTrigger(name);\n }\n return trigger;\n }\n trigger(element, triggerName, value, defaultToFallback = true) {\n const trigger = this._getTrigger(triggerName);\n const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n let triggersWithStates = this._engine.statesByElement.get(element);\n if (!triggersWithStates) {\n addClass(element, NG_TRIGGER_CLASSNAME);\n addClass(element, NG_TRIGGER_CLASSNAME + '-' + triggerName);\n this._engine.statesByElement.set(element, (triggersWithStates = new Map()));\n }\n let fromState = triggersWithStates.get(triggerName);\n const toState = new StateValue(value, this.id);\n const isObj = value && value.hasOwnProperty('value');\n if (!isObj && fromState) {\n toState.absorbOptions(fromState.options);\n }\n triggersWithStates.set(triggerName, toState);\n if (!fromState) {\n fromState = DEFAULT_STATE_VALUE;\n }\n const isRemoval = toState.value === VOID_VALUE;\n // normally this isn't reached by here, however, if an object expression\n // is passed in then it may be a new object each time. Comparing the value\n // is important since that will stay the same despite there being a new object.\n // The removal arc here is special cased because the same element is triggered\n // twice in the event that it contains animations on the outer/inner portions\n // of the host container\n if (!isRemoval && fromState.value === toState.value) {\n // this means that despite the value not changing, some inner params\n // have changed which means that the animation final styles need to be applied\n if (!objEquals(fromState.params, toState.params)) {\n const errors = [];\n const fromStyles = trigger.matchStyles(fromState.value, fromState.params, errors);\n const toStyles = trigger.matchStyles(toState.value, toState.params, errors);\n if (errors.length) {\n this._engine.reportError(errors);\n }\n else {\n this._engine.afterFlush(() => {\n eraseStyles(element, fromStyles);\n setStyles(element, toStyles);\n });\n }\n }\n return;\n }\n const playersOnElement = getOrSetDefaultValue(this._engine.playersByElement, element, []);\n playersOnElement.forEach((player) => {\n // only remove the player if it is queued on the EXACT same trigger/namespace\n // we only also deal with queued players here because if the animation has\n // started then we want to keep the player alive until the flush happens\n // (which is where the previousPlayers are passed into the new player)\n if (player.namespaceId == this.id && player.triggerName == triggerName && player.queued) {\n player.destroy();\n }\n });\n let transition = trigger.matchTransition(fromState.value, toState.value, element, toState.params);\n let isFallbackTransition = false;\n if (!transition) {\n if (!defaultToFallback)\n return;\n transition = trigger.fallbackTransition;\n isFallbackTransition = true;\n }\n this._engine.totalQueuedPlayers++;\n this._queue.push({\n element,\n triggerName,\n transition,\n fromState,\n toState,\n player,\n isFallbackTransition,\n });\n if (!isFallbackTransition) {\n addClass(element, QUEUED_CLASSNAME);\n player.onStart(() => {\n removeClass(element, QUEUED_CLASSNAME);\n });\n }\n player.onDone(() => {\n let index = this.players.indexOf(player);\n if (index >= 0) {\n this.players.splice(index, 1);\n }\n const players = this._engine.playersByElement.get(element);\n if (players) {\n let index = players.indexOf(player);\n if (index >= 0) {\n players.splice(index, 1);\n }\n }\n });\n this.players.push(player);\n playersOnElement.push(player);\n return player;\n }\n deregister(name) {\n this._triggers.delete(name);\n this._engine.statesByElement.forEach((stateMap) => stateMap.delete(name));\n this._elementListeners.forEach((listeners, element) => {\n this._elementListeners.set(element, listeners.filter((entry) => {\n return entry.name != name;\n }));\n });\n }\n clearElementCache(element) {\n this._engine.statesByElement.delete(element);\n this._elementListeners.delete(element);\n const elementPlayers = this._engine.playersByElement.get(element);\n if (elementPlayers) {\n elementPlayers.forEach((player) => player.destroy());\n this._engine.playersByElement.delete(element);\n }\n }\n _signalRemovalForInnerTriggers(rootElement, context) {\n const elements = this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true);\n // emulate a leave animation for all inner nodes within this node.\n // If there are no animations found for any of the nodes then clear the cache\n // for the element.\n elements.forEach((elm) => {\n // this means that an inner remove() operation has already kicked off\n // the animation on this element...\n if (elm[REMOVAL_FLAG])\n return;\n const namespaces = this._engine.fetchNamespacesByElement(elm);\n if (namespaces.size) {\n namespaces.forEach((ns) => ns.triggerLeaveAnimation(elm, context, false, true));\n }\n else {\n this.clearElementCache(elm);\n }\n });\n // If the child elements were removed along with the parent, their animations might not\n // have completed. Clear all the elements from the cache so we don't end up with a memory leak.\n this._engine.afterFlushAnimationsDone(() => elements.forEach((elm) => this.clearElementCache(elm)));\n }\n triggerLeaveAnimation(element, context, destroyAfterComplete, defaultToFallback) {\n const triggerStates = this._engine.statesByElement.get(element);\n const previousTriggersValues = new Map();\n if (triggerStates) {\n const players = [];\n triggerStates.forEach((state, triggerName) => {\n previousTriggersValues.set(triggerName, state.value);\n // this check is here in the event that an element is removed\n // twice (both on the host level and the component level)\n if (this._triggers.has(triggerName)) {\n const player = this.trigger(element, triggerName, VOID_VALUE, defaultToFallback);\n if (player) {\n players.push(player);\n }\n }\n });\n if (players.length) {\n this._engine.markElementAsRemoved(this.id, element, true, context, previousTriggersValues);\n if (destroyAfterComplete) {\n optimizeGroupPlayer(players).onDone(() => this._engine.processLeaveNode(element));\n }\n return true;\n }\n }\n return false;\n }\n prepareLeaveAnimationListeners(element) {\n const listeners = this._elementListeners.get(element);\n const elementStates = this._engine.statesByElement.get(element);\n // if this statement fails then it means that the element was picked up\n // by an earlier flush (or there are no listeners at all to track the leave).\n if (listeners && elementStates) {\n const visitedTriggers = new Set();\n listeners.forEach((listener) => {\n const triggerName = listener.name;\n if (visitedTriggers.has(triggerName))\n return;\n visitedTriggers.add(triggerName);\n const trigger = this._triggers.get(triggerName);\n const transition = trigger.fallbackTransition;\n const fromState = elementStates.get(triggerName) || DEFAULT_STATE_VALUE;\n const toState = new StateValue(VOID_VALUE);\n const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n this._engine.totalQueuedPlayers++;\n this._queue.push({\n element,\n triggerName,\n transition,\n fromState,\n toState,\n player,\n isFallbackTransition: true,\n });\n });\n }\n }\n removeNode(element, context) {\n const engine = this._engine;\n if (element.childElementCount) {\n this._signalRemovalForInnerTriggers(element, context);\n }\n // this means that a * => VOID animation was detected and kicked off\n if (this.triggerLeaveAnimation(element, context, true))\n return;\n // find the player that is animating and make sure that the\n // removal is delayed until that player has completed\n let containsPotentialParentTransition = false;\n if (engine.totalAnimations) {\n const currentPlayers = engine.players.length\n ? engine.playersByQueriedElement.get(element)\n : [];\n // when this `if statement` does not continue forward it means that\n // a previous animation query has selected the current element and\n // is animating it. In this situation want to continue forwards and\n // allow the element to be queued up for animation later.\n if (currentPlayers && currentPlayers.length) {\n containsPotentialParentTransition = true;\n }\n else {\n let parent = element;\n while ((parent = parent.parentNode)) {\n const triggers = engine.statesByElement.get(parent);\n if (triggers) {\n containsPotentialParentTransition = true;\n break;\n }\n }\n }\n }\n // at this stage we know that the element will either get removed\n // during flush or will be picked up by a parent query. Either way\n // we need to fire the listeners for this element when it DOES get\n // removed (once the query parent animation is done or after flush)\n this.prepareLeaveAnimationListeners(element);\n // whether or not a parent has an animation we need to delay the deferral of the leave\n // operation until we have more information (which we do after flush() has been called)\n if (containsPotentialParentTransition) {\n engine.markElementAsRemoved(this.id, element, false, context);\n }\n else {\n const removalFlag = element[REMOVAL_FLAG];\n if (!removalFlag || removalFlag === NULL_REMOVAL_STATE) {\n // we do this after the flush has occurred such\n // that the callbacks can be fired\n engine.afterFlush(() => this.clearElementCache(element));\n engine.destroyInnerAnimations(element);\n engine._onRemovalComplete(element, context);\n }\n }\n }\n insertNode(element, parent) {\n addClass(element, this._hostClassName);\n }\n drainQueuedTransitions(microtaskId) {\n const instructions = [];\n this._queue.forEach((entry) => {\n const player = entry.player;\n if (player.destroyed)\n return;\n const element = entry.element;\n const listeners = this._elementListeners.get(element);\n if (listeners) {\n listeners.forEach((listener) => {\n if (listener.name == entry.triggerName) {\n const baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);\n baseEvent['_data'] = microtaskId;\n listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);\n }\n });\n }\n if (player.markedForDestroy) {\n this._engine.afterFlush(() => {\n // now we can destroy the element properly since the event listeners have\n // been bound to the player\n player.destroy();\n });\n }\n else {\n instructions.push(entry);\n }\n });\n this._queue = [];\n return instructions.sort((a, b) => {\n // if depCount == 0 them move to front\n // otherwise if a contains b then move back\n const d0 = a.transition.ast.depCount;\n const d1 = b.transition.ast.depCount;\n if (d0 == 0 || d1 == 0) {\n return d0 - d1;\n }\n return this._engine.driver.containsElement(a.element, b.element) ? 1 : -1;\n });\n }\n destroy(context) {\n this.players.forEach((p) => p.destroy());\n this._signalRemovalForInnerTriggers(this.hostElement, context);\n }\n}\nclass TransitionAnimationEngine {\n /** @internal */\n _onRemovalComplete(element, context) {\n this.onRemovalComplete(element, context);\n }\n constructor(bodyNode, driver, _normalizer, scheduler) {\n this.bodyNode = bodyNode;\n this.driver = driver;\n this._normalizer = _normalizer;\n this.scheduler = scheduler;\n this.players = [];\n this.newHostElements = new Map();\n this.playersByElement = new Map();\n this.playersByQueriedElement = new Map();\n this.statesByElement = new Map();\n this.disabledNodes = new Set();\n this.totalAnimations = 0;\n this.totalQueuedPlayers = 0;\n this._namespaceLookup = {};\n this._namespaceList = [];\n this._flushFns = [];\n this._whenQuietFns = [];\n this.namespacesByHostElement = new Map();\n this.collectedEnterElements = [];\n this.collectedLeaveElements = [];\n // this method is designed to be overridden by the code that uses this engine\n this.onRemovalComplete = (element, context) => { };\n }\n get queuedPlayers() {\n const players = [];\n this._namespaceList.forEach((ns) => {\n ns.players.forEach((player) => {\n if (player.queued) {\n players.push(player);\n }\n });\n });\n return players;\n }\n createNamespace(namespaceId, hostElement) {\n const ns = new AnimationTransitionNamespace(namespaceId, hostElement, this);\n if (this.bodyNode && this.driver.containsElement(this.bodyNode, hostElement)) {\n this._balanceNamespaceList(ns, hostElement);\n }\n else {\n // defer this later until flush during when the host element has\n // been inserted so that we know exactly where to place it in\n // the namespace list\n this.newHostElements.set(hostElement, ns);\n // given that this host element is a part of the animation code, it\n // may or may not be inserted by a parent node that is of an\n // animation renderer type. If this happens then we can still have\n // access to this item when we query for :enter nodes. If the parent\n // is a renderer then the set data-structure will normalize the entry\n this.collectEnterElement(hostElement);\n }\n return (this._namespaceLookup[namespaceId] = ns);\n }\n _balanceNamespaceList(ns, hostElement) {\n const namespaceList = this._namespaceList;\n const namespacesByHostElement = this.namespacesByHostElement;\n const limit = namespaceList.length - 1;\n if (limit >= 0) {\n let found = false;\n // Find the closest ancestor with an existing namespace so we can then insert `ns` after it,\n // establishing a top-down ordering of namespaces in `this._namespaceList`.\n let ancestor = this.driver.getParentElement(hostElement);\n while (ancestor) {\n const ancestorNs = namespacesByHostElement.get(ancestor);\n if (ancestorNs) {\n // An animation namespace has been registered for this ancestor, so we insert `ns`\n // right after it to establish top-down ordering of animation namespaces.\n const index = namespaceList.indexOf(ancestorNs);\n namespaceList.splice(index + 1, 0, ns);\n found = true;\n break;\n }\n ancestor = this.driver.getParentElement(ancestor);\n }\n if (!found) {\n // No namespace exists that is an ancestor of `ns`, so `ns` is inserted at the front to\n // ensure that any existing descendants are ordered after `ns`, retaining the desired\n // top-down ordering.\n namespaceList.unshift(ns);\n }\n }\n else {\n namespaceList.push(ns);\n }\n namespacesByHostElement.set(hostElement, ns);\n return ns;\n }\n register(namespaceId, hostElement) {\n let ns = this._namespaceLookup[namespaceId];\n if (!ns) {\n ns = this.createNamespace(namespaceId, hostElement);\n }\n return ns;\n }\n registerTrigger(namespaceId, name, trigger) {\n let ns = this._namespaceLookup[namespaceId];\n if (ns && ns.register(name, trigger)) {\n this.totalAnimations++;\n }\n }\n destroy(namespaceId, context) {\n if (!namespaceId)\n return;\n this.afterFlush(() => { });\n this.afterFlushAnimationsDone(() => {\n const ns = this._fetchNamespace(namespaceId);\n this.namespacesByHostElement.delete(ns.hostElement);\n const index = this._namespaceList.indexOf(ns);\n if (index >= 0) {\n this._namespaceList.splice(index, 1);\n }\n ns.destroy(context);\n delete this._namespaceLookup[namespaceId];\n });\n }\n _fetchNamespace(id) {\n return this._namespaceLookup[id];\n }\n fetchNamespacesByElement(element) {\n // normally there should only be one namespace per element, however\n // if @triggers are placed on both the component element and then\n // its host element (within the component code) then there will be\n // two namespaces returned. We use a set here to simply deduplicate\n // the namespaces in case (for the reason described above) there are multiple triggers\n const namespaces = new Set();\n const elementStates = this.statesByElement.get(element);\n if (elementStates) {\n for (let stateValue of elementStates.values()) {\n if (stateValue.namespaceId) {\n const ns = this._fetchNamespace(stateValue.namespaceId);\n if (ns) {\n namespaces.add(ns);\n }\n }\n }\n }\n return namespaces;\n }\n trigger(namespaceId, element, name, value) {\n if (isElementNode(element)) {\n const ns = this._fetchNamespace(namespaceId);\n if (ns) {\n ns.trigger(element, name, value);\n return true;\n }\n }\n return false;\n }\n insertNode(namespaceId, element, parent, insertBefore) {\n if (!isElementNode(element))\n return;\n // special case for when an element is removed and reinserted (move operation)\n // when this occurs we do not want to use the element for deletion later\n const details = element[REMOVAL_FLAG];\n if (details && details.setForRemoval) {\n details.setForRemoval = false;\n details.setForMove = true;\n const index = this.collectedLeaveElements.indexOf(element);\n if (index >= 0) {\n this.collectedLeaveElements.splice(index, 1);\n }\n }\n // in the event that the namespaceId is blank then the caller\n // code does not contain any animation code in it, but it is\n // just being called so that the node is marked as being inserted\n if (namespaceId) {\n const ns = this._fetchNamespace(namespaceId);\n // This if-statement is a workaround for router issue #21947.\n // The router sometimes hits a race condition where while a route\n // is being instantiated a new navigation arrives, triggering leave\n // animation of DOM that has not been fully initialized, until this\n // is resolved, we need to handle the scenario when DOM is not in a\n // consistent state during the animation.\n if (ns) {\n ns.insertNode(element, parent);\n }\n }\n // only *directives and host elements are inserted before\n if (insertBefore) {\n this.collectEnterElement(element);\n }\n }\n collectEnterElement(element) {\n this.collectedEnterElements.push(element);\n }\n markElementAsDisabled(element, value) {\n if (value) {\n if (!this.disabledNodes.has(element)) {\n this.disabledNodes.add(element);\n addClass(element, DISABLED_CLASSNAME);\n }\n }\n else if (this.disabledNodes.has(element)) {\n this.disabledNodes.delete(element);\n removeClass(element, DISABLED_CLASSNAME);\n }\n }\n removeNode(namespaceId, element, context) {\n if (isElementNode(element)) {\n this.scheduler?.notify();\n const ns = namespaceId ? this._fetchNamespace(namespaceId) : null;\n if (ns) {\n ns.removeNode(element, context);\n }\n else {\n this.markElementAsRemoved(namespaceId, element, false, context);\n }\n const hostNS = this.namespacesByHostElement.get(element);\n if (hostNS && hostNS.id !== namespaceId) {\n hostNS.removeNode(element, context);\n }\n }\n else {\n this._onRemovalComplete(element, context);\n }\n }\n markElementAsRemoved(namespaceId, element, hasAnimation, context, previousTriggersValues) {\n this.collectedLeaveElements.push(element);\n element[REMOVAL_FLAG] = {\n namespaceId,\n setForRemoval: context,\n hasAnimation,\n removedBeforeQueried: false,\n previousTriggersValues,\n };\n }\n listen(namespaceId, element, name, phase, callback) {\n if (isElementNode(element)) {\n return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);\n }\n return () => { };\n }\n _buildInstruction(entry, subTimelines, enterClassName, leaveClassName, skipBuildAst) {\n return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines, skipBuildAst);\n }\n destroyInnerAnimations(containerElement) {\n let elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);\n elements.forEach((element) => this.destroyActiveAnimationsForElement(element));\n if (this.playersByQueriedElement.size == 0)\n return;\n elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);\n elements.forEach((element) => this.finishActiveQueriedAnimationOnElement(element));\n }\n destroyActiveAnimationsForElement(element) {\n const players = this.playersByElement.get(element);\n if (players) {\n players.forEach((player) => {\n // special case for when an element is set for destruction, but hasn't started.\n // in this situation we want to delay the destruction until the flush occurs\n // so that any event listeners attached to the player are triggered.\n if (player.queued) {\n player.markedForDestroy = true;\n }\n else {\n player.destroy();\n }\n });\n }\n }\n finishActiveQueriedAnimationOnElement(element) {\n const players = this.playersByQueriedElement.get(element);\n if (players) {\n players.forEach((player) => player.finish());\n }\n }\n whenRenderingDone() {\n return new Promise((resolve) => {\n if (this.players.length) {\n return optimizeGroupPlayer(this.players).onDone(() => resolve());\n }\n else {\n resolve();\n }\n });\n }\n processLeaveNode(element) {\n const details = element[REMOVAL_FLAG];\n if (details && details.setForRemoval) {\n // this will prevent it from removing it twice\n element[REMOVAL_FLAG] = NULL_REMOVAL_STATE;\n if (details.namespaceId) {\n this.destroyInnerAnimations(element);\n const ns = this._fetchNamespace(details.namespaceId);\n if (ns) {\n ns.clearElementCache(element);\n }\n }\n this._onRemovalComplete(element, details.setForRemoval);\n }\n if (element.classList?.contains(DISABLED_CLASSNAME)) {\n this.markElementAsDisabled(element, false);\n }\n this.driver.query(element, DISABLED_SELECTOR, true).forEach((node) => {\n this.markElementAsDisabled(node, false);\n });\n }\n flush(microtaskId = -1) {\n let players = [];\n if (this.newHostElements.size) {\n this.newHostElements.forEach((ns, element) => this._balanceNamespaceList(ns, element));\n this.newHostElements.clear();\n }\n if (this.totalAnimations && this.collectedEnterElements.length) {\n for (let i = 0; i < this.collectedEnterElements.length; i++) {\n const elm = this.collectedEnterElements[i];\n addClass(elm, STAR_CLASSNAME);\n }\n }\n if (this._namespaceList.length &&\n (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {\n const cleanupFns = [];\n try {\n players = this._flushAnimations(cleanupFns, microtaskId);\n }\n finally {\n for (let i = 0; i < cleanupFns.length; i++) {\n cleanupFns[i]();\n }\n }\n }\n else {\n for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n const element = this.collectedLeaveElements[i];\n this.processLeaveNode(element);\n }\n }\n this.totalQueuedPlayers = 0;\n this.collectedEnterElements.length = 0;\n this.collectedLeaveElements.length = 0;\n this._flushFns.forEach((fn) => fn());\n this._flushFns = [];\n if (this._whenQuietFns.length) {\n // we move these over to a variable so that\n // if any new callbacks are registered in another\n // flush they do not populate the existing set\n const quietFns = this._whenQuietFns;\n this._whenQuietFns = [];\n if (players.length) {\n optimizeGroupPlayer(players).onDone(() => {\n quietFns.forEach((fn) => fn());\n });\n }\n else {\n quietFns.forEach((fn) => fn());\n }\n }\n }\n reportError(errors) {\n throw triggerTransitionsFailed(errors);\n }\n _flushAnimations(cleanupFns, microtaskId) {\n const subTimelines = new ElementInstructionMap();\n const skippedPlayers = [];\n const skippedPlayersMap = new Map();\n const queuedInstructions = [];\n const queriedElements = new Map();\n const allPreStyleElements = new Map();\n const allPostStyleElements = new Map();\n const disabledElementsSet = new Set();\n this.disabledNodes.forEach((node) => {\n disabledElementsSet.add(node);\n const nodesThatAreDisabled = this.driver.query(node, QUEUED_SELECTOR, true);\n for (let i = 0; i < nodesThatAreDisabled.length; i++) {\n disabledElementsSet.add(nodesThatAreDisabled[i]);\n }\n });\n const bodyNode = this.bodyNode;\n const allTriggerElements = Array.from(this.statesByElement.keys());\n const enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements);\n // this must occur before the instructions are built below such that\n // the :enter queries match the elements (since the timeline queries\n // are fired during instruction building).\n const enterNodeMapIds = new Map();\n let i = 0;\n enterNodeMap.forEach((nodes, root) => {\n const className = ENTER_CLASSNAME + i++;\n enterNodeMapIds.set(root, className);\n nodes.forEach((node) => addClass(node, className));\n });\n const allLeaveNodes = [];\n const mergedLeaveNodes = new Set();\n const leaveNodesWithoutAnimations = new Set();\n for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n const element = this.collectedLeaveElements[i];\n const details = element[REMOVAL_FLAG];\n if (details && details.setForRemoval) {\n allLeaveNodes.push(element);\n mergedLeaveNodes.add(element);\n if (details.hasAnimation) {\n this.driver\n .query(element, STAR_SELECTOR, true)\n .forEach((elm) => mergedLeaveNodes.add(elm));\n }\n else {\n leaveNodesWithoutAnimations.add(element);\n }\n }\n }\n const leaveNodeMapIds = new Map();\n const leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes));\n leaveNodeMap.forEach((nodes, root) => {\n const className = LEAVE_CLASSNAME + i++;\n leaveNodeMapIds.set(root, className);\n nodes.forEach((node) => addClass(node, className));\n });\n cleanupFns.push(() => {\n enterNodeMap.forEach((nodes, root) => {\n const className = enterNodeMapIds.get(root);\n nodes.forEach((node) => removeClass(node, className));\n });\n leaveNodeMap.forEach((nodes, root) => {\n const className = leaveNodeMapIds.get(root);\n nodes.forEach((node) => removeClass(node, className));\n });\n allLeaveNodes.forEach((element) => {\n this.processLeaveNode(element);\n });\n });\n const allPlayers = [];\n const erroneousTransitions = [];\n for (let i = this._namespaceList.length - 1; i >= 0; i--) {\n const ns = this._namespaceList[i];\n ns.drainQueuedTransitions(microtaskId).forEach((entry) => {\n const player = entry.player;\n const element = entry.element;\n allPlayers.push(player);\n if (this.collectedEnterElements.length) {\n const details = element[REMOVAL_FLAG];\n // animations for move operations (elements being removed and reinserted,\n // e.g. when the order of an *ngFor list changes) are currently not supported\n if (details && details.setForMove) {\n if (details.previousTriggersValues &&\n details.previousTriggersValues.has(entry.triggerName)) {\n const previousValue = details.previousTriggersValues.get(entry.triggerName);\n // we need to restore the previous trigger value since the element has\n // only been moved and hasn't actually left the DOM\n const triggersWithStates = this.statesByElement.get(entry.element);\n if (triggersWithStates && triggersWithStates.has(entry.triggerName)) {\n const state = triggersWithStates.get(entry.triggerName);\n state.value = previousValue;\n triggersWithStates.set(entry.triggerName, state);\n }\n }\n player.destroy();\n return;\n }\n }\n const nodeIsOrphaned = !bodyNode || !this.driver.containsElement(bodyNode, element);\n const leaveClassName = leaveNodeMapIds.get(element);\n const enterClassName = enterNodeMapIds.get(element);\n const instruction = this._buildInstruction(entry, subTimelines, enterClassName, leaveClassName, nodeIsOrphaned);\n if (instruction.errors && instruction.errors.length) {\n erroneousTransitions.push(instruction);\n return;\n }\n // even though the element may not be in the DOM, it may still\n // be added at a later point (due to the mechanics of content\n // projection and/or dynamic component insertion) therefore it's\n // important to still style the element.\n if (nodeIsOrphaned) {\n player.onStart(() => eraseStyles(element, instruction.fromStyles));\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n skippedPlayers.push(player);\n return;\n }\n // if an unmatched transition is queued and ready to go\n // then it SHOULD NOT render an animation and cancel the\n // previously running animations.\n if (entry.isFallbackTransition) {\n player.onStart(() => eraseStyles(element, instruction.fromStyles));\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n skippedPlayers.push(player);\n return;\n }\n // this means that if a parent animation uses this animation as a sub-trigger\n // then it will instruct the timeline builder not to add a player delay, but\n // instead stretch the first keyframe gap until the animation starts. This is\n // important in order to prevent extra initialization styles from being\n // required by the user for the animation.\n const timelines = [];\n instruction.timelines.forEach((tl) => {\n tl.stretchStartingKeyframe = true;\n if (!this.disabledNodes.has(tl.element)) {\n timelines.push(tl);\n }\n });\n instruction.timelines = timelines;\n subTimelines.append(element, instruction.timelines);\n const tuple = { instruction, player, element };\n queuedInstructions.push(tuple);\n instruction.queriedElements.forEach((element) => getOrSetDefaultValue(queriedElements, element, []).push(player));\n instruction.preStyleProps.forEach((stringMap, element) => {\n if (stringMap.size) {\n let setVal = allPreStyleElements.get(element);\n if (!setVal) {\n allPreStyleElements.set(element, (setVal = new Set()));\n }\n stringMap.forEach((_, prop) => setVal.add(prop));\n }\n });\n instruction.postStyleProps.forEach((stringMap, element) => {\n let setVal = allPostStyleElements.get(element);\n if (!setVal) {\n allPostStyleElements.set(element, (setVal = new Set()));\n }\n stringMap.forEach((_, prop) => setVal.add(prop));\n });\n });\n }\n if (erroneousTransitions.length) {\n const errors = [];\n erroneousTransitions.forEach((instruction) => {\n errors.push(transitionFailed(instruction.triggerName, instruction.errors));\n });\n allPlayers.forEach((player) => player.destroy());\n this.reportError(errors);\n }\n const allPreviousPlayersMap = new Map();\n // this map tells us which element in the DOM tree is contained by\n // which animation. Further down this map will get populated once\n // the players are built and in doing so we can use it to efficiently\n // figure out if a sub player is skipped due to a parent player having priority.\n const animationElementMap = new Map();\n queuedInstructions.forEach((entry) => {\n const element = entry.element;\n if (subTimelines.has(element)) {\n animationElementMap.set(element, element);\n this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);\n }\n });\n skippedPlayers.forEach((player) => {\n const element = player.element;\n const previousPlayers = this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);\n previousPlayers.forEach((prevPlayer) => {\n getOrSetDefaultValue(allPreviousPlayersMap, element, []).push(prevPlayer);\n prevPlayer.destroy();\n });\n });\n // this is a special case for nodes that will be removed either by\n // having their own leave animations or by being queried in a container\n // that will be removed once a parent animation is complete. The idea\n // here is that * styles must be identical to ! styles because of\n // backwards compatibility (* is also filled in by default in many places).\n // Otherwise * styles will return an empty value or \"auto\" since the element\n // passed to getComputedStyle will not be visible (since * === destination)\n const replaceNodes = allLeaveNodes.filter((node) => {\n return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);\n });\n // POST STAGE: fill the * styles\n const postStylesMap = new Map();\n const allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, AUTO_STYLE);\n allLeaveQueriedNodes.forEach((node) => {\n if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {\n replaceNodes.push(node);\n }\n });\n // PRE STAGE: fill the ! styles\n const preStylesMap = new Map();\n enterNodeMap.forEach((nodes, root) => {\n cloakAndComputeStyles(preStylesMap, this.driver, new Set(nodes), allPreStyleElements, ɵPRE_STYLE);\n });\n replaceNodes.forEach((node) => {\n const post = postStylesMap.get(node);\n const pre = preStylesMap.get(node);\n postStylesMap.set(node, new Map([...(post?.entries() ?? []), ...(pre?.entries() ?? [])]));\n });\n const rootPlayers = [];\n const subPlayers = [];\n const NO_PARENT_ANIMATION_ELEMENT_DETECTED = {};\n queuedInstructions.forEach((entry) => {\n const { element, player, instruction } = entry;\n // this means that it was never consumed by a parent animation which\n // means that it is independent and therefore should be set for animation\n if (subTimelines.has(element)) {\n if (disabledElementsSet.has(element)) {\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n player.disabled = true;\n player.overrideTotalTime(instruction.totalTime);\n skippedPlayers.push(player);\n return;\n }\n // this will flow up the DOM and query the map to figure out\n // if a parent animation has priority over it. In the situation\n // that a parent is detected then it will cancel the loop. If\n // nothing is detected, or it takes a few hops to find a parent,\n // then it will fill in the missing nodes and signal them as having\n // a detected parent (or a NO_PARENT value via a special constant).\n let parentWithAnimation = NO_PARENT_ANIMATION_ELEMENT_DETECTED;\n if (animationElementMap.size > 1) {\n let elm = element;\n const parentsToAdd = [];\n while ((elm = elm.parentNode)) {\n const detectedParent = animationElementMap.get(elm);\n if (detectedParent) {\n parentWithAnimation = detectedParent;\n break;\n }\n parentsToAdd.push(elm);\n }\n parentsToAdd.forEach((parent) => animationElementMap.set(parent, parentWithAnimation));\n }\n const innerPlayer = this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);\n player.setRealPlayer(innerPlayer);\n if (parentWithAnimation === NO_PARENT_ANIMATION_ELEMENT_DETECTED) {\n rootPlayers.push(player);\n }\n else {\n const parentPlayers = this.playersByElement.get(parentWithAnimation);\n if (parentPlayers && parentPlayers.length) {\n player.parentPlayer = optimizeGroupPlayer(parentPlayers);\n }\n skippedPlayers.push(player);\n }\n }\n else {\n eraseStyles(element, instruction.fromStyles);\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n // there still might be a ancestor player animating this\n // element therefore we will still add it as a sub player\n // even if its animation may be disabled\n subPlayers.push(player);\n if (disabledElementsSet.has(element)) {\n skippedPlayers.push(player);\n }\n }\n });\n // find all of the sub players' corresponding inner animation players\n subPlayers.forEach((player) => {\n // even if no players are found for a sub animation it\n // will still complete itself after the next tick since it's Noop\n const playersForElement = skippedPlayersMap.get(player.element);\n if (playersForElement && playersForElement.length) {\n const innerPlayer = optimizeGroupPlayer(playersForElement);\n player.setRealPlayer(innerPlayer);\n }\n });\n // the reason why we don't actually play the animation is\n // because all that a skipped player is designed to do is to\n // fire the start/done transition callback events\n skippedPlayers.forEach((player) => {\n if (player.parentPlayer) {\n player.syncPlayerEvents(player.parentPlayer);\n }\n else {\n player.destroy();\n }\n });\n // run through all of the queued removals and see if they\n // were picked up by a query. If not then perform the removal\n // operation right away unless a parent animation is ongoing.\n for (let i = 0; i < allLeaveNodes.length; i++) {\n const element = allLeaveNodes[i];\n const details = element[REMOVAL_FLAG];\n removeClass(element, LEAVE_CLASSNAME);\n // this means the element has a removal animation that is being\n // taken care of and therefore the inner elements will hang around\n // until that animation is over (or the parent queried animation)\n if (details && details.hasAnimation)\n continue;\n let players = [];\n // if this element is queried or if it contains queried children\n // then we want for the element not to be removed from the page\n // until the queried animations have finished\n if (queriedElements.size) {\n let queriedPlayerResults = queriedElements.get(element);\n if (queriedPlayerResults && queriedPlayerResults.length) {\n players.push(...queriedPlayerResults);\n }\n let queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);\n for (let j = 0; j < queriedInnerElements.length; j++) {\n let queriedPlayers = queriedElements.get(queriedInnerElements[j]);\n if (queriedPlayers && queriedPlayers.length) {\n players.push(...queriedPlayers);\n }\n }\n }\n const activePlayers = players.filter((p) => !p.destroyed);\n if (activePlayers.length) {\n removeNodesAfterAnimationDone(this, element, activePlayers);\n }\n else {\n this.processLeaveNode(element);\n }\n }\n // this is required so the cleanup method doesn't remove them\n allLeaveNodes.length = 0;\n rootPlayers.forEach((player) => {\n this.players.push(player);\n player.onDone(() => {\n player.destroy();\n const index = this.players.indexOf(player);\n this.players.splice(index, 1);\n });\n player.play();\n });\n return rootPlayers;\n }\n afterFlush(callback) {\n this._flushFns.push(callback);\n }\n afterFlushAnimationsDone(callback) {\n this._whenQuietFns.push(callback);\n }\n _getPreviousPlayers(element, isQueriedElement, namespaceId, triggerName, toStateValue) {\n let players = [];\n if (isQueriedElement) {\n const queriedElementPlayers = this.playersByQueriedElement.get(element);\n if (queriedElementPlayers) {\n players = queriedElementPlayers;\n }\n }\n else {\n const elementPlayers = this.playersByElement.get(element);\n if (elementPlayers) {\n const isRemovalAnimation = !toStateValue || toStateValue == VOID_VALUE;\n elementPlayers.forEach((player) => {\n if (player.queued)\n return;\n if (!isRemovalAnimation && player.triggerName != triggerName)\n return;\n players.push(player);\n });\n }\n }\n if (namespaceId || triggerName) {\n players = players.filter((player) => {\n if (namespaceId && namespaceId != player.namespaceId)\n return false;\n if (triggerName && triggerName != player.triggerName)\n return false;\n return true;\n });\n }\n return players;\n }\n _beforeAnimationBuild(namespaceId, instruction, allPreviousPlayersMap) {\n const triggerName = instruction.triggerName;\n const rootElement = instruction.element;\n // when a removal animation occurs, ALL previous players are collected\n // and destroyed (even if they are outside of the current namespace)\n const targetNameSpaceId = instruction.isRemovalTransition\n ? undefined\n : namespaceId;\n const targetTriggerName = instruction.isRemovalTransition\n ? undefined\n : triggerName;\n for (const timelineInstruction of instruction.timelines) {\n const element = timelineInstruction.element;\n const isQueriedElement = element !== rootElement;\n const players = getOrSetDefaultValue(allPreviousPlayersMap, element, []);\n const previousPlayers = this._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);\n previousPlayers.forEach((player) => {\n const realPlayer = player.getRealPlayer();\n if (realPlayer.beforeDestroy) {\n realPlayer.beforeDestroy();\n }\n player.destroy();\n players.push(player);\n });\n }\n // this needs to be done so that the PRE/POST styles can be\n // computed properly without interfering with the previous animation\n eraseStyles(rootElement, instruction.fromStyles);\n }\n _buildAnimation(namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {\n const triggerName = instruction.triggerName;\n const rootElement = instruction.element;\n // we first run this so that the previous animation player\n // data can be passed into the successive animation players\n const allQueriedPlayers = [];\n const allConsumedElements = new Set();\n const allSubElements = new Set();\n const allNewPlayers = instruction.timelines.map((timelineInstruction) => {\n const element = timelineInstruction.element;\n allConsumedElements.add(element);\n // FIXME (matsko): make sure to-be-removed animations are removed properly\n const details = element[REMOVAL_FLAG];\n if (details && details.removedBeforeQueried)\n return new NoopAnimationPlayer(timelineInstruction.duration, timelineInstruction.delay);\n const isQueriedElement = element !== rootElement;\n const previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY).map((p) => p.getRealPlayer())).filter((p) => {\n // the `element` is not apart of the AnimationPlayer definition, but\n // Mock/WebAnimations\n // use the element within their implementation. This will be added in Angular5 to\n // AnimationPlayer\n const pp = p;\n return pp.element ? pp.element === element : false;\n });\n const preStyles = preStylesMap.get(element);\n const postStyles = postStylesMap.get(element);\n const keyframes = normalizeKeyframes$1(this._normalizer, timelineInstruction.keyframes, preStyles, postStyles);\n const player = this._buildPlayer(timelineInstruction, keyframes, previousPlayers);\n // this means that this particular player belongs to a sub trigger. It is\n // important that we match this player up with the corresponding (@trigger.listener)\n if (timelineInstruction.subTimeline && skippedPlayersMap) {\n allSubElements.add(element);\n }\n if (isQueriedElement) {\n const wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);\n wrappedPlayer.setRealPlayer(player);\n allQueriedPlayers.push(wrappedPlayer);\n }\n return player;\n });\n allQueriedPlayers.forEach((player) => {\n getOrSetDefaultValue(this.playersByQueriedElement, player.element, []).push(player);\n player.onDone(() => deleteOrUnsetInMap(this.playersByQueriedElement, player.element, player));\n });\n allConsumedElements.forEach((element) => addClass(element, NG_ANIMATING_CLASSNAME));\n const player = optimizeGroupPlayer(allNewPlayers);\n player.onDestroy(() => {\n allConsumedElements.forEach((element) => removeClass(element, NG_ANIMATING_CLASSNAME));\n setStyles(rootElement, instruction.toStyles);\n });\n // this basically makes all of the callbacks for sub element animations\n // be dependent on the upper players for when they finish\n allSubElements.forEach((element) => {\n getOrSetDefaultValue(skippedPlayersMap, element, []).push(player);\n });\n return player;\n }\n _buildPlayer(instruction, keyframes, previousPlayers) {\n if (keyframes.length > 0) {\n return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers);\n }\n // special case for when an empty transition|definition is provided\n // ... there is no point in rendering an empty animation\n return new NoopAnimationPlayer(instruction.duration, instruction.delay);\n }\n}\nclass TransitionAnimationPlayer {\n constructor(namespaceId, triggerName, element) {\n this.namespaceId = namespaceId;\n this.triggerName = triggerName;\n this.element = element;\n this._player = new NoopAnimationPlayer();\n this._containsRealPlayer = false;\n this._queuedCallbacks = new Map();\n this.destroyed = false;\n this.parentPlayer = null;\n this.markedForDestroy = false;\n this.disabled = false;\n this.queued = true;\n this.totalTime = 0;\n }\n setRealPlayer(player) {\n if (this._containsRealPlayer)\n return;\n this._player = player;\n this._queuedCallbacks.forEach((callbacks, phase) => {\n callbacks.forEach((callback) => listenOnPlayer(player, phase, undefined, callback));\n });\n this._queuedCallbacks.clear();\n this._containsRealPlayer = true;\n this.overrideTotalTime(player.totalTime);\n this.queued = false;\n }\n getRealPlayer() {\n return this._player;\n }\n overrideTotalTime(totalTime) {\n this.totalTime = totalTime;\n }\n syncPlayerEvents(player) {\n const p = this._player;\n if (p.triggerCallback) {\n player.onStart(() => p.triggerCallback('start'));\n }\n player.onDone(() => this.finish());\n player.onDestroy(() => this.destroy());\n }\n _queueEvent(name, callback) {\n getOrSetDefaultValue(this._queuedCallbacks, name, []).push(callback);\n }\n onDone(fn) {\n if (this.queued) {\n this._queueEvent('done', fn);\n }\n this._player.onDone(fn);\n }\n onStart(fn) {\n if (this.queued) {\n this._queueEvent('start', fn);\n }\n this._player.onStart(fn);\n }\n onDestroy(fn) {\n if (this.queued) {\n this._queueEvent('destroy', fn);\n }\n this._player.onDestroy(fn);\n }\n init() {\n this._player.init();\n }\n hasStarted() {\n return this.queued ? false : this._player.hasStarted();\n }\n play() {\n !this.queued && this._player.play();\n }\n pause() {\n !this.queued && this._player.pause();\n }\n restart() {\n !this.queued && this._player.restart();\n }\n finish() {\n this._player.finish();\n }\n destroy() {\n this.destroyed = true;\n this._player.destroy();\n }\n reset() {\n !this.queued && this._player.reset();\n }\n setPosition(p) {\n if (!this.queued) {\n this._player.setPosition(p);\n }\n }\n getPosition() {\n return this.queued ? 0 : this._player.getPosition();\n }\n /** @internal */\n triggerCallback(phaseName) {\n const p = this._player;\n if (p.triggerCallback) {\n p.triggerCallback(phaseName);\n }\n }\n}\nfunction deleteOrUnsetInMap(map, key, value) {\n let currentValues = map.get(key);\n if (currentValues) {\n if (currentValues.length) {\n const index = currentValues.indexOf(value);\n currentValues.splice(index, 1);\n }\n if (currentValues.length == 0) {\n map.delete(key);\n }\n }\n return currentValues;\n}\nfunction normalizeTriggerValue(value) {\n // we use `!= null` here because it's the most simple\n // way to test against a \"falsy\" value without mixing\n // in empty strings or a zero value. DO NOT OPTIMIZE.\n return value != null ? value : null;\n}\nfunction isElementNode(node) {\n return node && node['nodeType'] === 1;\n}\nfunction isTriggerEventValid(eventName) {\n return eventName == 'start' || eventName == 'done';\n}\nfunction cloakElement(element, value) {\n const oldValue = element.style.display;\n element.style.display = value != null ? value : 'none';\n return oldValue;\n}\nfunction cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) {\n const cloakVals = [];\n elements.forEach((element) => cloakVals.push(cloakElement(element)));\n const failedElements = [];\n elementPropsMap.forEach((props, element) => {\n const styles = new Map();\n props.forEach((prop) => {\n const value = driver.computeStyle(element, prop, defaultStyle);\n styles.set(prop, value);\n // there is no easy way to detect this because a sub element could be removed\n // by a parent animation element being detached.\n if (!value || value.length == 0) {\n element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE;\n failedElements.push(element);\n }\n });\n valuesMap.set(element, styles);\n });\n // we use a index variable here since Set.forEach(a, i) does not return\n // an index value for the closure (but instead just the value)\n let i = 0;\n elements.forEach((element) => cloakElement(element, cloakVals[i++]));\n return failedElements;\n}\n/*\nSince the Angular renderer code will return a collection of inserted\nnodes in all areas of a DOM tree, it's up to this algorithm to figure\nout which nodes are roots for each animation @trigger.\n\nBy placing each inserted node into a Set and traversing upwards, it\nis possible to find the @trigger elements and well any direct *star\ninsertion nodes, if a @trigger root is found then the enter element\nis placed into the Map[@trigger] spot.\n */\nfunction buildRootMap(roots, nodes) {\n const rootMap = new Map();\n roots.forEach((root) => rootMap.set(root, []));\n if (nodes.length == 0)\n return rootMap;\n const NULL_NODE = 1;\n const nodeSet = new Set(nodes);\n const localRootMap = new Map();\n function getRoot(node) {\n if (!node)\n return NULL_NODE;\n let root = localRootMap.get(node);\n if (root)\n return root;\n const parent = node.parentNode;\n if (rootMap.has(parent)) {\n // ngIf inside @trigger\n root = parent;\n }\n else if (nodeSet.has(parent)) {\n // ngIf inside ngIf\n root = NULL_NODE;\n }\n else {\n // recurse upwards\n root = getRoot(parent);\n }\n localRootMap.set(node, root);\n return root;\n }\n nodes.forEach((node) => {\n const root = getRoot(node);\n if (root !== NULL_NODE) {\n rootMap.get(root).push(node);\n }\n });\n return rootMap;\n}\nfunction addClass(element, className) {\n element.classList?.add(className);\n}\nfunction removeClass(element, className) {\n element.classList?.remove(className);\n}\nfunction removeNodesAfterAnimationDone(engine, element, players) {\n optimizeGroupPlayer(players).onDone(() => engine.processLeaveNode(element));\n}\nfunction flattenGroupPlayers(players) {\n const finalPlayers = [];\n _flattenGroupPlayersRecur(players, finalPlayers);\n return finalPlayers;\n}\nfunction _flattenGroupPlayersRecur(players, finalPlayers) {\n for (let i = 0; i < players.length; i++) {\n const player = players[i];\n if (player instanceof ɵAnimationGroupPlayer) {\n _flattenGroupPlayersRecur(player.players, finalPlayers);\n }\n else {\n finalPlayers.push(player);\n }\n }\n}\nfunction objEquals(a, b) {\n const k1 = Object.keys(a);\n const k2 = Object.keys(b);\n if (k1.length != k2.length)\n return false;\n for (let i = 0; i < k1.length; i++) {\n const prop = k1[i];\n if (!b.hasOwnProperty(prop) || a[prop] !== b[prop])\n return false;\n }\n return true;\n}\nfunction replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) {\n const postEntry = allPostStyleElements.get(element);\n if (!postEntry)\n return false;\n let preEntry = allPreStyleElements.get(element);\n if (preEntry) {\n postEntry.forEach((data) => preEntry.add(data));\n }\n else {\n allPreStyleElements.set(element, postEntry);\n }\n allPostStyleElements.delete(element);\n return true;\n}\n\nclass AnimationEngine {\n constructor(doc, _driver, _normalizer, scheduler) {\n this._driver = _driver;\n this._normalizer = _normalizer;\n this._triggerCache = {};\n // this method is designed to be overridden by the code that uses this engine\n this.onRemovalComplete = (element, context) => { };\n this._transitionEngine = new TransitionAnimationEngine(doc.body, _driver, _normalizer, scheduler);\n this._timelineEngine = new TimelineAnimationEngine(doc.body, _driver, _normalizer);\n this._transitionEngine.onRemovalComplete = (element, context) => this.onRemovalComplete(element, context);\n }\n registerTrigger(componentId, namespaceId, hostElement, name, metadata) {\n const cacheKey = componentId + '-' + name;\n let trigger = this._triggerCache[cacheKey];\n if (!trigger) {\n const errors = [];\n const warnings = [];\n const ast = buildAnimationAst(this._driver, metadata, errors, warnings);\n if (errors.length) {\n throw triggerBuildFailed(name, errors);\n }\n if (warnings.length) {\n warnTriggerBuild(name, warnings);\n }\n trigger = buildTrigger(name, ast, this._normalizer);\n this._triggerCache[cacheKey] = trigger;\n }\n this._transitionEngine.registerTrigger(namespaceId, name, trigger);\n }\n register(namespaceId, hostElement) {\n this._transitionEngine.register(namespaceId, hostElement);\n }\n destroy(namespaceId, context) {\n this._transitionEngine.destroy(namespaceId, context);\n }\n onInsert(namespaceId, element, parent, insertBefore) {\n this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);\n }\n onRemove(namespaceId, element, context) {\n this._transitionEngine.removeNode(namespaceId, element, context);\n }\n disableAnimations(element, disable) {\n this._transitionEngine.markElementAsDisabled(element, disable);\n }\n process(namespaceId, element, property, value) {\n if (property.charAt(0) == '@') {\n const [id, action] = parseTimelineCommand(property);\n const args = value;\n this._timelineEngine.command(id, element, action, args);\n }\n else {\n this._transitionEngine.trigger(namespaceId, element, property, value);\n }\n }\n listen(namespaceId, element, eventName, eventPhase, callback) {\n // @@listen\n if (eventName.charAt(0) == '@') {\n const [id, action] = parseTimelineCommand(eventName);\n return this._timelineEngine.listen(id, element, action, callback);\n }\n return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback);\n }\n flush(microtaskId = -1) {\n this._transitionEngine.flush(microtaskId);\n }\n get players() {\n return [...this._transitionEngine.players, ...this._timelineEngine.players];\n }\n whenRenderingDone() {\n return this._transitionEngine.whenRenderingDone();\n }\n afterFlushAnimationsDone(cb) {\n this._transitionEngine.afterFlushAnimationsDone(cb);\n }\n}\n\n/**\n * Returns an instance of `SpecialCasedStyles` if and when any special (non animateable) styles are\n * detected.\n *\n * In CSS there exist properties that cannot be animated within a keyframe animation\n * (whether it be via CSS keyframes or web-animations) and the animation implementation\n * will ignore them. This function is designed to detect those special cased styles and\n * return a container that will be executed at the start and end of the animation.\n *\n * @returns an instance of `SpecialCasedStyles` if any special styles are detected otherwise `null`\n */\nfunction packageNonAnimatableStyles(element, styles) {\n let startStyles = null;\n let endStyles = null;\n if (Array.isArray(styles) && styles.length) {\n startStyles = filterNonAnimatableStyles(styles[0]);\n if (styles.length > 1) {\n endStyles = filterNonAnimatableStyles(styles[styles.length - 1]);\n }\n }\n else if (styles instanceof Map) {\n startStyles = filterNonAnimatableStyles(styles);\n }\n return startStyles || endStyles ? new SpecialCasedStyles(element, startStyles, endStyles) : null;\n}\n/**\n * Designed to be executed during a keyframe-based animation to apply any special-cased styles.\n *\n * When started (when the `start()` method is run) then the provided `startStyles`\n * will be applied. When finished (when the `finish()` method is called) the\n * `endStyles` will be applied as well any any starting styles. Finally when\n * `destroy()` is called then all styles will be removed.\n */\nclass SpecialCasedStyles {\n static { this.initialStylesByElement = new WeakMap(); }\n constructor(_element, _startStyles, _endStyles) {\n this._element = _element;\n this._startStyles = _startStyles;\n this._endStyles = _endStyles;\n this._state = 0 /* SpecialCasedStylesState.Pending */;\n let initialStyles = SpecialCasedStyles.initialStylesByElement.get(_element);\n if (!initialStyles) {\n SpecialCasedStyles.initialStylesByElement.set(_element, (initialStyles = new Map()));\n }\n this._initialStyles = initialStyles;\n }\n start() {\n if (this._state < 1 /* SpecialCasedStylesState.Started */) {\n if (this._startStyles) {\n setStyles(this._element, this._startStyles, this._initialStyles);\n }\n this._state = 1 /* SpecialCasedStylesState.Started */;\n }\n }\n finish() {\n this.start();\n if (this._state < 2 /* SpecialCasedStylesState.Finished */) {\n setStyles(this._element, this._initialStyles);\n if (this._endStyles) {\n setStyles(this._element, this._endStyles);\n this._endStyles = null;\n }\n this._state = 1 /* SpecialCasedStylesState.Started */;\n }\n }\n destroy() {\n this.finish();\n if (this._state < 3 /* SpecialCasedStylesState.Destroyed */) {\n SpecialCasedStyles.initialStylesByElement.delete(this._element);\n if (this._startStyles) {\n eraseStyles(this._element, this._startStyles);\n this._endStyles = null;\n }\n if (this._endStyles) {\n eraseStyles(this._element, this._endStyles);\n this._endStyles = null;\n }\n setStyles(this._element, this._initialStyles);\n this._state = 3 /* SpecialCasedStylesState.Destroyed */;\n }\n }\n}\nfunction filterNonAnimatableStyles(styles) {\n let result = null;\n styles.forEach((val, prop) => {\n if (isNonAnimatableStyle(prop)) {\n result = result || new Map();\n result.set(prop, val);\n }\n });\n return result;\n}\nfunction isNonAnimatableStyle(prop) {\n return prop === 'display' || prop === 'position';\n}\n\nclass WebAnimationsPlayer {\n constructor(element, keyframes, options, _specialStyles) {\n this.element = element;\n this.keyframes = keyframes;\n this.options = options;\n this._specialStyles = _specialStyles;\n this._onDoneFns = [];\n this._onStartFns = [];\n this._onDestroyFns = [];\n this._initialized = false;\n this._finished = false;\n this._started = false;\n this._destroyed = false;\n // the following original fns are persistent copies of the _onStartFns and _onDoneFns\n // and are used to reset the fns to their original values upon reset()\n // (since the _onStartFns and _onDoneFns get deleted after they are called)\n this._originalOnDoneFns = [];\n this._originalOnStartFns = [];\n this.time = 0;\n this.parentPlayer = null;\n this.currentSnapshot = new Map();\n this._duration = options['duration'];\n this._delay = options['delay'] || 0;\n this.time = this._duration + this._delay;\n }\n _onFinish() {\n if (!this._finished) {\n this._finished = true;\n this._onDoneFns.forEach((fn) => fn());\n this._onDoneFns = [];\n }\n }\n init() {\n this._buildPlayer();\n this._preparePlayerBeforeStart();\n }\n _buildPlayer() {\n if (this._initialized)\n return;\n this._initialized = true;\n const keyframes = this.keyframes;\n // @ts-expect-error overwriting a readonly property\n this.domPlayer = this._triggerWebAnimation(this.element, keyframes, this.options);\n this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : new Map();\n const onFinish = () => this._onFinish();\n this.domPlayer.addEventListener('finish', onFinish);\n this.onDestroy(() => {\n // We must remove the `finish` event listener once an animation has completed all its\n // iterations. This action is necessary to prevent a memory leak since the listener captures\n // `this`, creating a closure that prevents `this` from being garbage collected.\n this.domPlayer.removeEventListener('finish', onFinish);\n });\n }\n _preparePlayerBeforeStart() {\n // this is required so that the player doesn't start to animate right away\n if (this._delay) {\n this._resetDomPlayerState();\n }\n else {\n this.domPlayer.pause();\n }\n }\n _convertKeyframesToObject(keyframes) {\n const kfs = [];\n keyframes.forEach((frame) => {\n kfs.push(Object.fromEntries(frame));\n });\n return kfs;\n }\n /** @internal */\n _triggerWebAnimation(element, keyframes, options) {\n return element.animate(this._convertKeyframesToObject(keyframes), options);\n }\n onStart(fn) {\n this._originalOnStartFns.push(fn);\n this._onStartFns.push(fn);\n }\n onDone(fn) {\n this._originalOnDoneFns.push(fn);\n this._onDoneFns.push(fn);\n }\n onDestroy(fn) {\n this._onDestroyFns.push(fn);\n }\n play() {\n this._buildPlayer();\n if (!this.hasStarted()) {\n this._onStartFns.forEach((fn) => fn());\n this._onStartFns = [];\n this._started = true;\n if (this._specialStyles) {\n this._specialStyles.start();\n }\n }\n this.domPlayer.play();\n }\n pause() {\n this.init();\n this.domPlayer.pause();\n }\n finish() {\n this.init();\n if (this._specialStyles) {\n this._specialStyles.finish();\n }\n this._onFinish();\n this.domPlayer.finish();\n }\n reset() {\n this._resetDomPlayerState();\n this._destroyed = false;\n this._finished = false;\n this._started = false;\n this._onStartFns = this._originalOnStartFns;\n this._onDoneFns = this._originalOnDoneFns;\n }\n _resetDomPlayerState() {\n if (this.domPlayer) {\n this.domPlayer.cancel();\n }\n }\n restart() {\n this.reset();\n this.play();\n }\n hasStarted() {\n return this._started;\n }\n destroy() {\n if (!this._destroyed) {\n this._destroyed = true;\n this._resetDomPlayerState();\n this._onFinish();\n if (this._specialStyles) {\n this._specialStyles.destroy();\n }\n this._onDestroyFns.forEach((fn) => fn());\n this._onDestroyFns = [];\n }\n }\n setPosition(p) {\n if (this.domPlayer === undefined) {\n this.init();\n }\n this.domPlayer.currentTime = p * this.time;\n }\n getPosition() {\n // tsc is complaining with TS2362 without the conversion to number\n return +(this.domPlayer.currentTime ?? 0) / this.time;\n }\n get totalTime() {\n return this._delay + this._duration;\n }\n beforeDestroy() {\n const styles = new Map();\n if (this.hasStarted()) {\n // note: this code is invoked only when the `play` function was called prior to this\n // (thus `hasStarted` returns true), this implies that the code that initializes\n // `_finalKeyframe` has also been executed and the non-null assertion can be safely used here\n const finalKeyframe = this._finalKeyframe;\n finalKeyframe.forEach((val, prop) => {\n if (prop !== 'offset') {\n styles.set(prop, this._finished ? val : computeStyle(this.element, prop));\n }\n });\n }\n this.currentSnapshot = styles;\n }\n /** @internal */\n triggerCallback(phaseName) {\n const methods = phaseName === 'start' ? this._onStartFns : this._onDoneFns;\n methods.forEach((fn) => fn());\n methods.length = 0;\n }\n}\n\nclass WebAnimationsDriver {\n validateStyleProperty(prop) {\n // Perform actual validation in dev mode only, in prod mode this check is a noop.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n return validateStyleProperty(prop);\n }\n return true;\n }\n validateAnimatableStyleProperty(prop) {\n // Perform actual validation in dev mode only, in prod mode this check is a noop.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const cssProp = camelCaseToDashCase(prop);\n return validateWebAnimatableStyleProperty(cssProp);\n }\n return true;\n }\n matchesElement(_element, _selector) {\n // This method is deprecated and no longer in use so we return false.\n return false;\n }\n containsElement(elm1, elm2) {\n return containsElement(elm1, elm2);\n }\n getParentElement(element) {\n return getParentElement(element);\n }\n query(element, selector, multi) {\n return invokeQuery(element, selector, multi);\n }\n computeStyle(element, prop, defaultValue) {\n return computeStyle(element, prop);\n }\n animate(element, keyframes, duration, delay, easing, previousPlayers = []) {\n const fill = delay == 0 ? 'both' : 'forwards';\n const playerOptions = { duration, delay, fill };\n // we check for this to avoid having a null|undefined value be present\n // for the easing (which results in an error for certain browsers #9752)\n if (easing) {\n playerOptions['easing'] = easing;\n }\n const previousStyles = new Map();\n const previousWebAnimationPlayers = (previousPlayers.filter((player) => player instanceof WebAnimationsPlayer));\n if (allowPreviousPlayerStylesMerge(duration, delay)) {\n previousWebAnimationPlayers.forEach((player) => {\n player.currentSnapshot.forEach((val, prop) => previousStyles.set(prop, val));\n });\n }\n let _keyframes = normalizeKeyframes(keyframes).map((styles) => new Map(styles));\n _keyframes = balancePreviousStylesIntoKeyframes(element, _keyframes, previousStyles);\n const specialStyles = packageNonAnimatableStyles(element, _keyframes);\n return new WebAnimationsPlayer(element, _keyframes, playerOptions, specialStyles);\n }\n}\n\nfunction createEngine(type, doc, scheduler) {\n // TODO: find a way to make this tree shakable.\n if (type === 'noop') {\n return new AnimationEngine(doc, new NoopAnimationDriver(), new NoopAnimationStyleNormalizer(), scheduler);\n }\n return new AnimationEngine(doc, new WebAnimationsDriver(), new WebAnimationsStyleNormalizer(), scheduler);\n}\n\nclass Animation {\n constructor(_driver, input) {\n this._driver = _driver;\n const errors = [];\n const warnings = [];\n const ast = buildAnimationAst(_driver, input, errors, warnings);\n if (errors.length) {\n throw validationFailed(errors);\n }\n if (warnings.length) {\n warnValidation(warnings);\n }\n this._animationAst = ast;\n }\n buildTimelines(element, startingStyles, destinationStyles, options, subInstructions) {\n const start = Array.isArray(startingStyles)\n ? normalizeStyles(startingStyles)\n : startingStyles;\n const dest = Array.isArray(destinationStyles)\n ? normalizeStyles(destinationStyles)\n : destinationStyles;\n const errors = [];\n subInstructions = subInstructions || new ElementInstructionMap();\n const result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);\n if (errors.length) {\n throw buildingFailed(errors);\n }\n return result;\n }\n}\n\nconst ANIMATION_PREFIX = '@';\nconst DISABLE_ANIMATIONS_FLAG = '@.disabled';\nclass BaseAnimationRenderer {\n constructor(namespaceId, delegate, engine, _onDestroy) {\n this.namespaceId = namespaceId;\n this.delegate = delegate;\n this.engine = engine;\n this._onDestroy = _onDestroy;\n // We need to explicitly type this property because of an api-extractor bug\n // See https://github.com/microsoft/rushstack/issues/4390\n this.ɵtype = 0 /* AnimationRendererType.Regular */;\n }\n get data() {\n return this.delegate.data;\n }\n destroyNode(node) {\n this.delegate.destroyNode?.(node);\n }\n destroy() {\n this.engine.destroy(this.namespaceId, this.delegate);\n this.engine.afterFlushAnimationsDone(() => {\n // Call the renderer destroy method after the animations has finished as otherwise\n // styles will be removed too early which will cause an unstyled animation.\n queueMicrotask(() => {\n this.delegate.destroy();\n });\n });\n this._onDestroy?.();\n }\n createElement(name, namespace) {\n return this.delegate.createElement(name, namespace);\n }\n createComment(value) {\n return this.delegate.createComment(value);\n }\n createText(value) {\n return this.delegate.createText(value);\n }\n appendChild(parent, newChild) {\n this.delegate.appendChild(parent, newChild);\n this.engine.onInsert(this.namespaceId, newChild, parent, false);\n }\n insertBefore(parent, newChild, refChild, isMove = true) {\n this.delegate.insertBefore(parent, newChild, refChild);\n // If `isMove` true than we should animate this insert.\n this.engine.onInsert(this.namespaceId, newChild, parent, isMove);\n }\n removeChild(parent, oldChild, isHostElement) {\n this.engine.onRemove(this.namespaceId, oldChild, this.delegate);\n }\n selectRootElement(selectorOrNode, preserveContent) {\n return this.delegate.selectRootElement(selectorOrNode, preserveContent);\n }\n parentNode(node) {\n return this.delegate.parentNode(node);\n }\n nextSibling(node) {\n return this.delegate.nextSibling(node);\n }\n setAttribute(el, name, value, namespace) {\n this.delegate.setAttribute(el, name, value, namespace);\n }\n removeAttribute(el, name, namespace) {\n this.delegate.removeAttribute(el, name, namespace);\n }\n addClass(el, name) {\n this.delegate.addClass(el, name);\n }\n removeClass(el, name) {\n this.delegate.removeClass(el, name);\n }\n setStyle(el, style, value, flags) {\n this.delegate.setStyle(el, style, value, flags);\n }\n removeStyle(el, style, flags) {\n this.delegate.removeStyle(el, style, flags);\n }\n setProperty(el, name, value) {\n if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {\n this.disableAnimations(el, !!value);\n }\n else {\n this.delegate.setProperty(el, name, value);\n }\n }\n setValue(node, value) {\n this.delegate.setValue(node, value);\n }\n listen(target, eventName, callback) {\n return this.delegate.listen(target, eventName, callback);\n }\n disableAnimations(element, value) {\n this.engine.disableAnimations(element, value);\n }\n}\nclass AnimationRenderer extends BaseAnimationRenderer {\n constructor(factory, namespaceId, delegate, engine, onDestroy) {\n super(namespaceId, delegate, engine, onDestroy);\n this.factory = factory;\n this.namespaceId = namespaceId;\n }\n setProperty(el, name, value) {\n if (name.charAt(0) == ANIMATION_PREFIX) {\n if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {\n value = value === undefined ? true : !!value;\n this.disableAnimations(el, value);\n }\n else {\n this.engine.process(this.namespaceId, el, name.slice(1), value);\n }\n }\n else {\n this.delegate.setProperty(el, name, value);\n }\n }\n listen(target, eventName, callback) {\n if (eventName.charAt(0) == ANIMATION_PREFIX) {\n const element = resolveElementFromTarget(target);\n let name = eventName.slice(1);\n let phase = '';\n // @listener.phase is for trigger animation callbacks\n // @@listener is for animation builder callbacks\n if (name.charAt(0) != ANIMATION_PREFIX) {\n [name, phase] = parseTriggerCallbackName(name);\n }\n return this.engine.listen(this.namespaceId, element, name, phase, (event) => {\n const countId = event['_data'] || -1;\n this.factory.scheduleListenerCallback(countId, callback, event);\n });\n }\n return this.delegate.listen(target, eventName, callback);\n }\n}\nfunction resolveElementFromTarget(target) {\n switch (target) {\n case 'body':\n return document.body;\n case 'document':\n return document;\n case 'window':\n return window;\n default:\n return target;\n }\n}\nfunction parseTriggerCallbackName(triggerName) {\n const dotIndex = triggerName.indexOf('.');\n const trigger = triggerName.substring(0, dotIndex);\n const phase = triggerName.slice(dotIndex + 1);\n return [trigger, phase];\n}\n\nclass AnimationRendererFactory {\n constructor(delegate, engine, _zone) {\n this.delegate = delegate;\n this.engine = engine;\n this._zone = _zone;\n this._currentId = 0;\n this._microtaskId = 1;\n this._animationCallbacksBuffer = [];\n this._rendererCache = new Map();\n this._cdRecurDepth = 0;\n engine.onRemovalComplete = (element, delegate) => {\n // Note: if a component element has a leave animation, and a host leave animation,\n // the view engine will call `removeChild` for the parent\n // component renderer as well as for the child component renderer.\n // Therefore, we need to check if we already removed the element.\n const parentNode = delegate?.parentNode(element);\n if (parentNode) {\n delegate.removeChild(parentNode, element);\n }\n };\n }\n createRenderer(hostElement, type) {\n const EMPTY_NAMESPACE_ID = '';\n // cache the delegates to find out which cached delegate can\n // be used by which cached renderer\n const delegate = this.delegate.createRenderer(hostElement, type);\n if (!hostElement || !type?.data?.['animation']) {\n const cache = this._rendererCache;\n let renderer = cache.get(delegate);\n if (!renderer) {\n // Ensure that the renderer is removed from the cache on destroy\n // since it may contain references to detached DOM nodes.\n const onRendererDestroy = () => cache.delete(delegate);\n renderer = new BaseAnimationRenderer(EMPTY_NAMESPACE_ID, delegate, this.engine, onRendererDestroy);\n // only cache this result when the base renderer is used\n cache.set(delegate, renderer);\n }\n return renderer;\n }\n const componentId = type.id;\n const namespaceId = type.id + '-' + this._currentId;\n this._currentId++;\n this.engine.register(namespaceId, hostElement);\n const registerTrigger = (trigger) => {\n if (Array.isArray(trigger)) {\n trigger.forEach(registerTrigger);\n }\n else {\n this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger);\n }\n };\n const animationTriggers = type.data['animation'];\n animationTriggers.forEach(registerTrigger);\n return new AnimationRenderer(this, namespaceId, delegate, this.engine);\n }\n begin() {\n this._cdRecurDepth++;\n if (this.delegate.begin) {\n this.delegate.begin();\n }\n }\n _scheduleCountTask() {\n queueMicrotask(() => {\n this._microtaskId++;\n });\n }\n /** @internal */\n scheduleListenerCallback(count, fn, data) {\n if (count >= 0 && count < this._microtaskId) {\n this._zone.run(() => fn(data));\n return;\n }\n const animationCallbacksBuffer = this._animationCallbacksBuffer;\n if (animationCallbacksBuffer.length == 0) {\n queueMicrotask(() => {\n this._zone.run(() => {\n animationCallbacksBuffer.forEach((tuple) => {\n const [fn, data] = tuple;\n fn(data);\n });\n this._animationCallbacksBuffer = [];\n });\n });\n }\n animationCallbacksBuffer.push([fn, data]);\n }\n end() {\n this._cdRecurDepth--;\n // this is to prevent animations from running twice when an inner\n // component does CD when a parent component instead has inserted it\n if (this._cdRecurDepth == 0) {\n this._zone.runOutsideAngular(() => {\n this._scheduleCountTask();\n this.engine.flush(this._microtaskId);\n });\n }\n if (this.delegate.end) {\n this.delegate.end();\n }\n }\n whenRenderingDone() {\n return this.engine.whenRenderingDone();\n }\n}\n\n/**\n * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AnimationDriver, NoopAnimationDriver, Animation as ɵAnimation, AnimationEngine as ɵAnimationEngine, AnimationRenderer as ɵAnimationRenderer, AnimationRendererFactory as ɵAnimationRendererFactory, AnimationStyleNormalizer as ɵAnimationStyleNormalizer, BaseAnimationRenderer as ɵBaseAnimationRenderer, NoopAnimationStyleNormalizer as ɵNoopAnimationStyleNormalizer, WebAnimationsDriver as ɵWebAnimationsDriver, WebAnimationsPlayer as ɵWebAnimationsPlayer, WebAnimationsStyleNormalizer as ɵWebAnimationsStyleNormalizer, allowPreviousPlayerStylesMerge as ɵallowPreviousPlayerStylesMerge, camelCaseToDashCase as ɵcamelCaseToDashCase, containsElement as ɵcontainsElement, createEngine as ɵcreateEngine, getParentElement as ɵgetParentElement, invokeQuery as ɵinvokeQuery, normalizeKeyframes as ɵnormalizeKeyframes, validateStyleProperty as ɵvalidateStyleProperty, validateWebAnimatableStyleProperty as ɵvalidateWebAnimatableStyleProperty };\n","/**\n * @license Angular v17.3.10\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { inject, ɵChangeDetectionScheduler, Injectable, Inject, RendererFactory2, NgZone, ANIMATION_MODULE_TYPE, NgModule, ɵperformanceMarkFeature } from '@angular/core';\nexport { ANIMATION_MODULE_TYPE } from '@angular/core';\nimport { ɵDomRendererFactory2, BrowserModule } from '@angular/platform-browser';\nimport * as i1 from '@angular/animations/browser';\nimport { ɵAnimationEngine, ɵWebAnimationsStyleNormalizer, ɵAnimationRendererFactory, ɵAnimationStyleNormalizer, AnimationDriver, ɵWebAnimationsDriver, NoopAnimationDriver } from '@angular/animations/browser';\nimport { DOCUMENT } from '@angular/common';\n\nclass InjectableAnimationEngine extends ɵAnimationEngine {\n // The `ApplicationRef` is injected here explicitly to force the dependency ordering.\n // Since the `ApplicationRef` should be created earlier before the `AnimationEngine`, they\n // both have `ngOnDestroy` hooks and `flush()` must be called after all views are destroyed.\n constructor(doc, driver, normalizer) {\n super(doc, driver, normalizer, inject(ɵChangeDetectionScheduler, { optional: true }));\n }\n ngOnDestroy() {\n this.flush();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: InjectableAnimationEngine, deps: [{ token: DOCUMENT }, { token: i1.AnimationDriver }, { token: i1.ɵAnimationStyleNormalizer }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: InjectableAnimationEngine }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: InjectableAnimationEngine, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: Document, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i1.AnimationDriver }, { type: i1.ɵAnimationStyleNormalizer }] });\nfunction instantiateDefaultStyleNormalizer() {\n return new ɵWebAnimationsStyleNormalizer();\n}\nfunction instantiateRendererFactory(renderer, engine, zone) {\n return new ɵAnimationRendererFactory(renderer, engine, zone);\n}\nconst SHARED_ANIMATION_PROVIDERS = [\n { provide: ɵAnimationStyleNormalizer, useFactory: instantiateDefaultStyleNormalizer },\n { provide: ɵAnimationEngine, useClass: InjectableAnimationEngine }, {\n provide: RendererFactory2,\n useFactory: instantiateRendererFactory,\n deps: [ɵDomRendererFactory2, ɵAnimationEngine, NgZone]\n }\n];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserModule.\n */\nconst BROWSER_ANIMATIONS_PROVIDERS = [\n { provide: AnimationDriver, useFactory: () => new ɵWebAnimationsDriver() },\n { provide: ANIMATION_MODULE_TYPE, useValue: 'BrowserAnimations' }, ...SHARED_ANIMATION_PROVIDERS\n];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserTestingModule.\n */\nconst BROWSER_NOOP_ANIMATIONS_PROVIDERS = [\n { provide: AnimationDriver, useClass: NoopAnimationDriver },\n { provide: ANIMATION_MODULE_TYPE, useValue: 'NoopAnimations' }, ...SHARED_ANIMATION_PROVIDERS\n];\n\n/**\n * Exports `BrowserModule` with additional [dependency-injection providers](guide/glossary#provider)\n * for use with animations. See [Animations](guide/animations).\n * @publicApi\n */\nclass BrowserAnimationsModule {\n /**\n * Configures the module based on the specified object.\n *\n * @param config Object used to configure the behavior of the `BrowserAnimationsModule`.\n * @see {@link BrowserAnimationsModuleConfig}\n *\n * @usageNotes\n * When registering the `BrowserAnimationsModule`, you can use the `withConfig`\n * function as follows:\n * ```\n * @NgModule({\n * imports: [BrowserAnimationsModule.withConfig(config)]\n * })\n * class MyNgModule {}\n * ```\n */\n static withConfig(config) {\n return {\n ngModule: BrowserAnimationsModule,\n providers: config.disableAnimations ? BROWSER_NOOP_ANIMATIONS_PROVIDERS :\n BROWSER_ANIMATIONS_PROVIDERS\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: BrowserAnimationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.3.10\", ngImport: i0, type: BrowserAnimationsModule, exports: [BrowserModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: BrowserAnimationsModule, providers: BROWSER_ANIMATIONS_PROVIDERS, imports: [BrowserModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: BrowserAnimationsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [BrowserModule],\n providers: BROWSER_ANIMATIONS_PROVIDERS,\n }]\n }] });\n/**\n * Returns the set of [dependency-injection providers](guide/glossary#provider)\n * to enable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * @usageNotes\n *\n * The function is useful when you want to enable animations in an application\n * bootstrapped using the `bootstrapApplication` function. In this scenario there\n * is no need to import the `BrowserAnimationsModule` NgModule at all, just add\n * providers returned by this function to the `providers` list as show below.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideAnimations()\n * ]\n * });\n * ```\n *\n * @publicApi\n */\nfunction provideAnimations() {\n ɵperformanceMarkFeature('NgEagerAnimations');\n // Return a copy to prevent changes to the original array in case any in-place\n // alterations are performed to the `provideAnimations` call results in app code.\n return [...BROWSER_ANIMATIONS_PROVIDERS];\n}\n/**\n * A null player that must be imported to allow disabling of animations.\n * @publicApi\n */\nclass NoopAnimationsModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: NoopAnimationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.3.10\", ngImport: i0, type: NoopAnimationsModule, exports: [BrowserModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: NoopAnimationsModule, providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS, imports: [BrowserModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.3.10\", ngImport: i0, type: NoopAnimationsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [BrowserModule],\n providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,\n }]\n }] });\n/**\n * Returns the set of [dependency-injection providers](guide/glossary#provider)\n * to disable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * @usageNotes\n *\n * The function is useful when you want to bootstrap an application using\n * the `bootstrapApplication` function, but you need to disable animations\n * (for example, when running tests).\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideNoopAnimations()\n * ]\n * });\n * ```\n *\n * @publicApi\n */\nfunction provideNoopAnimations() {\n // Return a copy to prevent changes to the original array in case any in-place\n // alterations are performed to the `provideNoopAnimations` call results in app code.\n return [...BROWSER_NOOP_ANIMATIONS_PROVIDERS];\n}\n\n/**\n * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BrowserAnimationsModule, NoopAnimationsModule, provideAnimations, provideNoopAnimations, InjectableAnimationEngine as ɵInjectableAnimationEngine };\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\r\n */\r\nconst CONSTANTS = {\r\n /**\r\n * @define {boolean} Whether this is the client Node.js SDK.\r\n */\r\n NODE_CLIENT: false,\r\n /**\r\n * @define {boolean} Whether this is the Admin Node.js SDK.\r\n */\r\n NODE_ADMIN: false,\r\n /**\r\n * Firebase SDK Version\r\n */\r\n SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws an error if the provided assertion is falsy\r\n */\r\nconst assert = function (assertion, message) {\r\n if (!assertion) {\r\n throw assertionError(message);\r\n }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n */\r\nconst assertionError = function (message) {\r\n return new Error('Firebase Database (' +\r\n CONSTANTS.SDK_VERSION +\r\n ') INTERNAL ASSERT FAILED: ' +\r\n message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst stringToByteArray$1 = function (str) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if ((c & 0xfc00) === 0xd800 &&\r\n i + 1 < str.length &&\r\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\r\n // Surrogate Pair\r\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param bytes Array of numbers representing characters.\r\n * @return Stringification of the array.\r\n */\r\nconst byteArrayToString = function (bytes) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let pos = 0, c = 0;\r\n while (pos < bytes.length) {\r\n const c1 = bytes[pos++];\r\n if (c1 < 128) {\r\n out[c++] = String.fromCharCode(c1);\r\n }\r\n else if (c1 > 191 && c1 < 224) {\r\n const c2 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n }\r\n else if (c1 > 239 && c1 < 365) {\r\n // Surrogate Pair\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n const c4 = bytes[pos++];\r\n const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n 0x10000;\r\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n }\r\n else {\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n }\r\n }\r\n return out.join('');\r\n};\r\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\r\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\r\n// Static lookup maps, lazily populated by init_()\r\nconst base64 = {\r\n /**\r\n * Maps bytes to characters.\r\n */\r\n byteToCharMap_: null,\r\n /**\r\n * Maps characters to bytes.\r\n */\r\n charToByteMap_: null,\r\n /**\r\n * Maps bytes to websafe characters.\r\n * @private\r\n */\r\n byteToCharMapWebSafe_: null,\r\n /**\r\n * Maps websafe characters to bytes.\r\n * @private\r\n */\r\n charToByteMapWebSafe_: null,\r\n /**\r\n * Our default alphabet, shared between\r\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n */\r\n ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n /**\r\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n */\r\n get ENCODED_VALS() {\r\n return this.ENCODED_VALS_BASE + '+/=';\r\n },\r\n /**\r\n * Our websafe alphabet.\r\n */\r\n get ENCODED_VALS_WEBSAFE() {\r\n return this.ENCODED_VALS_BASE + '-_.';\r\n },\r\n /**\r\n * Whether this browser supports the atob and btoa functions. This extension\r\n * started at Mozilla but is now implemented by many browsers. We use the\r\n * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n * but still allowing the standard per-browser compilations.\r\n *\r\n */\r\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n /**\r\n * Base64-encode an array of bytes.\r\n *\r\n * @param input An array of bytes (numbers with\r\n * value in [0, 255]) to encode.\r\n * @param webSafe Boolean indicating we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeByteArray(input, webSafe) {\r\n if (!Array.isArray(input)) {\r\n throw Error('encodeByteArray takes an array as a parameter');\r\n }\r\n this.init_();\r\n const byteToCharMap = webSafe\r\n ? this.byteToCharMapWebSafe_\r\n : this.byteToCharMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length; i += 3) {\r\n const byte1 = input[i];\r\n const haveByte2 = i + 1 < input.length;\r\n const byte2 = haveByte2 ? input[i + 1] : 0;\r\n const haveByte3 = i + 2 < input.length;\r\n const byte3 = haveByte3 ? input[i + 2] : 0;\r\n const outByte1 = byte1 >> 2;\r\n const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n let outByte4 = byte3 & 0x3f;\r\n if (!haveByte3) {\r\n outByte4 = 64;\r\n if (!haveByte2) {\r\n outByte3 = 64;\r\n }\r\n }\r\n output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n }\r\n return output.join('');\r\n },\r\n /**\r\n * Base64-encode a string.\r\n *\r\n * @param input A string to encode.\r\n * @param webSafe If true, we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return btoa(input);\r\n }\r\n return this.encodeByteArray(stringToByteArray$1(input), webSafe);\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * @param input to decode.\r\n * @param webSafe True if we should use the\r\n * alternative alphabet.\r\n * @return string representing the decoded value.\r\n */\r\n decodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return atob(input);\r\n }\r\n return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * In base-64 decoding, groups of four characters are converted into three\r\n * bytes. If the encoder did not apply padding, the input length may not\r\n * be a multiple of 4.\r\n *\r\n * In this case, the last group will have fewer than 4 characters, and\r\n * padding will be inferred. If the group has one or two characters, it decodes\r\n * to one byte. If the group has three characters, it decodes to two bytes.\r\n *\r\n * @param input Input to decode.\r\n * @param webSafe True if we should use the web-safe alphabet.\r\n * @return bytes representing the decoded value.\r\n */\r\n decodeStringToByteArray(input, webSafe) {\r\n this.init_();\r\n const charToByteMap = webSafe\r\n ? this.charToByteMapWebSafe_\r\n : this.charToByteMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length;) {\r\n const byte1 = charToByteMap[input.charAt(i++)];\r\n const haveByte2 = i < input.length;\r\n const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n ++i;\r\n const haveByte3 = i < input.length;\r\n const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n const haveByte4 = i < input.length;\r\n const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n throw new DecodeBase64StringError();\r\n }\r\n const outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n output.push(outByte1);\r\n if (byte3 !== 64) {\r\n const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n output.push(outByte2);\r\n if (byte4 !== 64) {\r\n const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n output.push(outByte3);\r\n }\r\n }\r\n }\r\n return output;\r\n },\r\n /**\r\n * Lazy static initialization function. Called before\r\n * accessing any of the static map variables.\r\n * @private\r\n */\r\n init_() {\r\n if (!this.byteToCharMap_) {\r\n this.byteToCharMap_ = {};\r\n this.charToByteMap_ = {};\r\n this.byteToCharMapWebSafe_ = {};\r\n this.charToByteMapWebSafe_ = {};\r\n // We want quick mappings back and forth, so we precompute two maps.\r\n for (let i = 0; i < this.ENCODED_VALS.length; i++) {\r\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n // Be forgiving when decoding and correctly decode both encodings.\r\n if (i >= this.ENCODED_VALS_BASE.length) {\r\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n/**\r\n * An error encountered while decoding base64 string.\r\n */\r\nclass DecodeBase64StringError extends Error {\r\n constructor() {\r\n super(...arguments);\r\n this.name = 'DecodeBase64StringError';\r\n }\r\n}\r\n/**\r\n * URL-safe base64 encoding\r\n */\r\nconst base64Encode = function (str) {\r\n const utf8Bytes = stringToByteArray$1(str);\r\n return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 encoding (without \".\" padding in the end).\r\n * e.g. Used in JSON Web Token (JWT) parts.\r\n */\r\nconst base64urlEncodeWithoutPadding = function (str) {\r\n // Use base64url encoding and remove padding in the end (dot characters).\r\n return base64Encode(str).replace(/\\./g, '');\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param str To be decoded\r\n * @return Decoded result, if possible\r\n */\r\nconst base64Decode = function (str) {\r\n try {\r\n return base64.decodeString(str, true);\r\n }\r\n catch (e) {\r\n console.error('base64Decode failed: ', e);\r\n }\r\n return null;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays). Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n *\r\n * Note: we don't merge __proto__ to prevent prototype pollution\r\n */\r\nfunction deepExtend(target, source) {\r\n if (!(source instanceof Object)) {\r\n return source;\r\n }\r\n switch (source.constructor) {\r\n case Date:\r\n // Treat Dates like scalars; if the target date object had any child\r\n // properties - they will be lost!\r\n const dateValue = source;\r\n return new Date(dateValue.getTime());\r\n case Object:\r\n if (target === undefined) {\r\n target = {};\r\n }\r\n break;\r\n case Array:\r\n // Always copy the array source and overwrite the target.\r\n target = [];\r\n break;\r\n default:\r\n // Not a plain Object - treat it as a scalar.\r\n return source;\r\n }\r\n for (const prop in source) {\r\n // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\r\n if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\r\n continue;\r\n }\r\n target[prop] = deepExtend(target[prop], source[prop]);\r\n }\r\n return target;\r\n}\r\nfunction isValidKey(key) {\r\n return key !== '__proto__';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Polyfill for `globalThis` object.\r\n * @returns the `globalThis` object for the given environment.\r\n * @public\r\n */\r\nfunction getGlobal() {\r\n if (typeof self !== 'undefined') {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined') {\r\n return window;\r\n }\r\n if (typeof global !== 'undefined') {\r\n return global;\r\n }\r\n throw new Error('Unable to locate global object.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;\r\n/**\r\n * Attempt to read defaults from a JSON string provided to\r\n * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in\r\n * process(.)env(.)__FIREBASE_DEFAULTS_PATH__\r\n * The dots are in parens because certain compilers (Vite?) cannot\r\n * handle seeing that variable in comments.\r\n * See https://github.com/firebase/firebase-js-sdk/issues/6838\r\n */\r\nconst getDefaultsFromEnvVariable = () => {\r\n if (typeof process === 'undefined' || typeof process.env === 'undefined') {\r\n return;\r\n }\r\n const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\r\n if (defaultsJsonString) {\r\n return JSON.parse(defaultsJsonString);\r\n }\r\n};\r\nconst getDefaultsFromCookie = () => {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n let match;\r\n try {\r\n match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\r\n }\r\n catch (e) {\r\n // Some environments such as Angular Universal SSR have a\r\n // `document` object but error on accessing `document.cookie`.\r\n return;\r\n }\r\n const decoded = match && base64Decode(match[1]);\r\n return decoded && JSON.parse(decoded);\r\n};\r\n/**\r\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\r\n * (1) if such an object exists as a property of `globalThis`\r\n * (2) if such an object was provided on a shell environment variable\r\n * (3) if such an object exists in a cookie\r\n * @public\r\n */\r\nconst getDefaults = () => {\r\n try {\r\n return (getDefaultsFromGlobal() ||\r\n getDefaultsFromEnvVariable() ||\r\n getDefaultsFromCookie());\r\n }\r\n catch (e) {\r\n /**\r\n * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\r\n * to any environment case we have not accounted for. Log to\r\n * info instead of swallowing so we can find these unknown cases\r\n * and add paths for them if needed.\r\n */\r\n console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\r\n return;\r\n }\r\n};\r\n/**\r\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };\r\n/**\r\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHostnameAndPort = (productName) => {\r\n const host = getDefaultEmulatorHost(productName);\r\n if (!host) {\r\n return undefined;\r\n }\r\n const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\r\n if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\r\n throw new Error(`Invalid host ${host} with no separate hostname and port!`);\r\n }\r\n // eslint-disable-next-line no-restricted-globals\r\n const port = parseInt(host.substring(separatorIndex + 1), 10);\r\n if (host[0] === '[') {\r\n // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\r\n return [host.substring(1, separatorIndex - 1), port];\r\n }\r\n else {\r\n return [host.substring(0, separatorIndex), port];\r\n }\r\n};\r\n/**\r\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\r\n * @public\r\n */\r\nconst getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };\r\n/**\r\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\r\n * prefixed by \"_\")\r\n * @public\r\n */\r\nconst getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Deferred {\r\n constructor() {\r\n this.reject = () => { };\r\n this.resolve = () => { };\r\n this.promise = new Promise((resolve, reject) => {\r\n this.resolve = resolve;\r\n this.reject = reject;\r\n });\r\n }\r\n /**\r\n * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n */\r\n wrapCallback(callback) {\r\n return (error, value) => {\r\n if (error) {\r\n this.reject(error);\r\n }\r\n else {\r\n this.resolve(value);\r\n }\r\n if (typeof callback === 'function') {\r\n // Attaching noop handler just in case developer wasn't expecting\r\n // promises\r\n this.promise.catch(() => { });\r\n // Some of our callbacks don't expect a value and our own tests\r\n // assert that the parameter length is 1\r\n if (callback.length === 1) {\r\n callback(error);\r\n }\r\n else {\r\n callback(error, value);\r\n }\r\n }\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction createMockUserToken(token, projectId) {\r\n if (token.uid) {\r\n throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\r\n }\r\n // Unsecured JWTs use \"none\" as the algorithm.\r\n const header = {\r\n alg: 'none',\r\n type: 'JWT'\r\n };\r\n const project = projectId || 'demo-project';\r\n const iat = token.iat || 0;\r\n const sub = token.sub || token.user_id;\r\n if (!sub) {\r\n throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\r\n }\r\n const payload = Object.assign({ \r\n // Set all required fields to decent defaults\r\n iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\r\n sign_in_provider: 'custom',\r\n identities: {}\r\n } }, token);\r\n // Unsecured JWTs use the empty string as a signature.\r\n const signature = '';\r\n return [\r\n base64urlEncodeWithoutPadding(JSON.stringify(header)),\r\n base64urlEncodeWithoutPadding(JSON.stringify(payload)),\r\n signature\r\n ].join('.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return user agent string\r\n */\r\nfunction getUA() {\r\n if (typeof navigator !== 'undefined' &&\r\n typeof navigator['userAgent'] === 'string') {\r\n return navigator['userAgent'];\r\n }\r\n else {\r\n return '';\r\n }\r\n}\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\r\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\r\n * wait for a callback.\r\n */\r\nfunction isMobileCordova() {\r\n return (typeof window !== 'undefined' &&\r\n // @ts-ignore Setting up an broadly applicable index signature for Window\r\n // just to deal with this case would probably be a bad idea.\r\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n}\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return true if Node.js environment is detected or specified.\r\n */\r\n// Node detection logic from: https://github.com/iliakan/detect-node/\r\nfunction isNode() {\r\n var _a;\r\n const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;\r\n if (forceEnvironment === 'node') {\r\n return true;\r\n }\r\n else if (forceEnvironment === 'browser') {\r\n return false;\r\n }\r\n try {\r\n return (Object.prototype.toString.call(global.process) === '[object process]');\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Detect Browser Environment\r\n */\r\nfunction isBrowser() {\r\n return typeof self === 'object' && self.self === self;\r\n}\r\nfunction isBrowserExtension() {\r\n const runtime = typeof chrome === 'object'\r\n ? chrome.runtime\r\n : typeof browser === 'object'\r\n ? browser.runtime\r\n : undefined;\r\n return typeof runtime === 'object' && runtime.id !== undefined;\r\n}\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return true if ReactNative environment is detected.\r\n */\r\nfunction isReactNative() {\r\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n}\r\n/** Detects Electron apps. */\r\nfunction isElectron() {\r\n return getUA().indexOf('Electron/') >= 0;\r\n}\r\n/** Detects Internet Explorer. */\r\nfunction isIE() {\r\n const ua = getUA();\r\n return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\r\n}\r\n/** Detects Universal Windows Platform apps. */\r\nfunction isUWP() {\r\n return getUA().indexOf('MSAppHost/') >= 0;\r\n}\r\n/**\r\n * Detect whether the current SDK build is the Node version.\r\n *\r\n * @return true if it's the Node SDK build.\r\n */\r\nfunction isNodeSdk() {\r\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n}\r\n/** Returns true if we are running in Safari. */\r\nfunction isSafari() {\r\n return (!isNode() &&\r\n navigator.userAgent.includes('Safari') &&\r\n !navigator.userAgent.includes('Chrome'));\r\n}\r\n/**\r\n * This method checks if indexedDB is supported by current browser/service worker context\r\n * @return true if indexedDB is supported by current browser/service worker context\r\n */\r\nfunction isIndexedDBAvailable() {\r\n try {\r\n return typeof indexedDB === 'object';\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\r\n * if errors occur during the database open operation.\r\n *\r\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\r\n * private browsing)\r\n */\r\nfunction validateIndexedDBOpenable() {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n let preExist = true;\r\n const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\r\n const request = self.indexedDB.open(DB_CHECK_NAME);\r\n request.onsuccess = () => {\r\n request.result.close();\r\n // delete database only when it doesn't pre-exist\r\n if (!preExist) {\r\n self.indexedDB.deleteDatabase(DB_CHECK_NAME);\r\n }\r\n resolve(true);\r\n };\r\n request.onupgradeneeded = () => {\r\n preExist = false;\r\n };\r\n request.onerror = () => {\r\n var _a;\r\n reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\r\n };\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n });\r\n}\r\n/**\r\n *\r\n * This method checks whether cookie is enabled within current browser\r\n * @return true if cookie is enabled within current browser\r\n */\r\nfunction areCookiesEnabled() {\r\n if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\r\n return false;\r\n }\r\n return true;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Standardized Firebase Error.\r\n *\r\n * Usage:\r\n *\r\n * // Typescript string literals for type-safe codes\r\n * type Err =\r\n * 'unknown' |\r\n * 'object-not-found'\r\n * ;\r\n *\r\n * // Closure enum for type-safe error codes\r\n * // at-enum {string}\r\n * var Err = {\r\n * UNKNOWN: 'unknown',\r\n * OBJECT_NOT_FOUND: 'object-not-found',\r\n * }\r\n *\r\n * let errors: Map = {\r\n * 'generic-error': \"Unknown error\",\r\n * 'file-not-found': \"Could not find file: {$file}\",\r\n * };\r\n *\r\n * // Type-safe function - must pass a valid error code as param.\r\n * let error = new ErrorFactory('service', 'Service', errors);\r\n *\r\n * ...\r\n * throw error.create(Err.GENERIC);\r\n * ...\r\n * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\r\n * ...\r\n * // Service: Could not file file: foo.txt (service/file-not-found).\r\n *\r\n * catch (e) {\r\n * assert(e.message === \"Could not find file: foo.txt.\");\r\n * if ((e as FirebaseError)?.code === 'service/file-not-found') {\r\n * console.log(\"Could not read file: \" + e['file']);\r\n * }\r\n * }\r\n */\r\nconst ERROR_NAME = 'FirebaseError';\r\n// Based on code from:\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\r\nclass FirebaseError extends Error {\r\n constructor(\r\n /** The error code for this error. */\r\n code, message, \r\n /** Custom data for this error. */\r\n customData) {\r\n super(message);\r\n this.code = code;\r\n this.customData = customData;\r\n /** The custom name for all FirebaseErrors. */\r\n this.name = ERROR_NAME;\r\n // Fix For ES5\r\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n Object.setPrototypeOf(this, FirebaseError.prototype);\r\n // Maintains proper stack trace for where our error was thrown.\r\n // Only available on V8.\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ErrorFactory.prototype.create);\r\n }\r\n }\r\n}\r\nclass ErrorFactory {\r\n constructor(service, serviceName, errors) {\r\n this.service = service;\r\n this.serviceName = serviceName;\r\n this.errors = errors;\r\n }\r\n create(code, ...data) {\r\n const customData = data[0] || {};\r\n const fullCode = `${this.service}/${code}`;\r\n const template = this.errors[code];\r\n const message = template ? replaceTemplate(template, customData) : 'Error';\r\n // Service Name: Error message (service/code).\r\n const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\r\n const error = new FirebaseError(fullCode, fullMessage, customData);\r\n return error;\r\n }\r\n}\r\nfunction replaceTemplate(template, data) {\r\n return template.replace(PATTERN, (_, key) => {\r\n const value = data[key];\r\n return value != null ? String(value) : `<${key}?>`;\r\n });\r\n}\r\nconst PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n return JSON.stringify(data);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst decode = function (token) {\r\n let header = {}, claims = {}, data = {}, signature = '';\r\n try {\r\n const parts = token.split('.');\r\n header = jsonEval(base64Decode(parts[0]) || '');\r\n claims = jsonEval(base64Decode(parts[1]) || '');\r\n signature = parts[2];\r\n data = claims['d'] || {};\r\n delete claims['d'];\r\n }\r\n catch (e) { }\r\n return {\r\n header,\r\n claims,\r\n data,\r\n signature\r\n };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidTimestamp = function (token) {\r\n const claims = decode(token).claims;\r\n const now = Math.floor(new Date().getTime() / 1000);\r\n let validSince = 0, validUntil = 0;\r\n if (typeof claims === 'object') {\r\n if (claims.hasOwnProperty('nbf')) {\r\n validSince = claims['nbf'];\r\n }\r\n else if (claims.hasOwnProperty('iat')) {\r\n validSince = claims['iat'];\r\n }\r\n if (claims.hasOwnProperty('exp')) {\r\n validUntil = claims['exp'];\r\n }\r\n else {\r\n // token will expire after 24h by default\r\n validUntil = validSince + 86400;\r\n }\r\n }\r\n return (!!now &&\r\n !!validSince &&\r\n !!validUntil &&\r\n now >= validSince &&\r\n now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst issuedAtTime = function (token) {\r\n const claims = decode(token).claims;\r\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n return claims['iat'];\r\n }\r\n return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidFormat = function (token) {\r\n const decoded = decode(token), claims = decoded.claims;\r\n return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isAdmin = function (token) {\r\n const claims = decode(token).claims;\r\n return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction contains(obj, key) {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n}\r\nfunction safeGet(obj, key) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return obj[key];\r\n }\r\n else {\r\n return undefined;\r\n }\r\n}\r\nfunction isEmpty(obj) {\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction map(obj, fn, contextObj) {\r\n const res = {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n res[key] = fn.call(contextObj, obj[key], key, obj);\r\n }\r\n }\r\n return res;\r\n}\r\n/**\r\n * Deep equal two objects. Support Arrays and Objects.\r\n */\r\nfunction deepEqual(a, b) {\r\n if (a === b) {\r\n return true;\r\n }\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n for (const k of aKeys) {\r\n if (!bKeys.includes(k)) {\r\n return false;\r\n }\r\n const aProp = a[k];\r\n const bProp = b[k];\r\n if (isObject(aProp) && isObject(bProp)) {\r\n if (!deepEqual(aProp, bProp)) {\r\n return false;\r\n }\r\n }\r\n else if (aProp !== bProp) {\r\n return false;\r\n }\r\n }\r\n for (const k of bKeys) {\r\n if (!aKeys.includes(k)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isObject(thing) {\r\n return thing !== null && typeof thing === 'object';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Rejects if the given promise doesn't resolve in timeInMS milliseconds.\r\n * @internal\r\n */\r\nfunction promiseWithTimeout(promise, timeInMS = 2000) {\r\n const deferredPromise = new Deferred();\r\n setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);\r\n promise.then(deferredPromise.resolve, deferredPromise.reject);\r\n return deferredPromise.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\r\n * params object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n */\r\nfunction querystring(querystringParams) {\r\n const params = [];\r\n for (const [key, value] of Object.entries(querystringParams)) {\r\n if (Array.isArray(value)) {\r\n value.forEach(arrayVal => {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n });\r\n }\r\n else {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n }\r\n }\r\n return params.length ? '&' + params.join('&') : '';\r\n}\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\r\n * (e.g. {arg: 'val', arg2: 'val2'})\r\n */\r\nfunction querystringDecode(querystring) {\r\n const obj = {};\r\n const tokens = querystring.replace(/^\\?/, '').split('&');\r\n tokens.forEach(token => {\r\n if (token) {\r\n const [key, value] = token.split('=');\r\n obj[decodeURIComponent(key)] = decodeURIComponent(value);\r\n }\r\n });\r\n return obj;\r\n}\r\n/**\r\n * Extract the query string part of a URL, including the leading question mark (if present).\r\n */\r\nfunction extractQuerystring(url) {\r\n const queryStart = url.indexOf('?');\r\n if (!queryStart) {\r\n return '';\r\n }\r\n const fragmentStart = url.indexOf('#', queryStart);\r\n return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n * var sha1 = new sha1();\r\n * sha1.update(bytes);\r\n * var hash = sha1.digest();\r\n *\r\n * Performance:\r\n * Chrome 23: ~400 Mbit/s\r\n * Firefox 16: ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @final\r\n * @struct\r\n */\r\nclass Sha1 {\r\n constructor() {\r\n /**\r\n * Holds the previous values of accumulated variables a-e in the compress_\r\n * function.\r\n * @private\r\n */\r\n this.chain_ = [];\r\n /**\r\n * A buffer holding the partially computed hash result.\r\n * @private\r\n */\r\n this.buf_ = [];\r\n /**\r\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\r\n * as the message schedule in the docs.\r\n * @private\r\n */\r\n this.W_ = [];\r\n /**\r\n * Contains data needed to pad messages less than 64 bytes.\r\n * @private\r\n */\r\n this.pad_ = [];\r\n /**\r\n * @private {number}\r\n */\r\n this.inbuf_ = 0;\r\n /**\r\n * @private {number}\r\n */\r\n this.total_ = 0;\r\n this.blockSize = 512 / 8;\r\n this.pad_[0] = 128;\r\n for (let i = 1; i < this.blockSize; ++i) {\r\n this.pad_[i] = 0;\r\n }\r\n this.reset();\r\n }\r\n reset() {\r\n this.chain_[0] = 0x67452301;\r\n this.chain_[1] = 0xefcdab89;\r\n this.chain_[2] = 0x98badcfe;\r\n this.chain_[3] = 0x10325476;\r\n this.chain_[4] = 0xc3d2e1f0;\r\n this.inbuf_ = 0;\r\n this.total_ = 0;\r\n }\r\n /**\r\n * Internal compress helper function.\r\n * @param buf Block to compress.\r\n * @param offset Offset of the block in the buffer.\r\n * @private\r\n */\r\n compress_(buf, offset) {\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n const W = this.W_;\r\n // get 16 big endian words\r\n if (typeof buf === 'string') {\r\n for (let i = 0; i < 16; i++) {\r\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n // have a bug that turns the post-increment ++ operator into pre-increment\r\n // during JIT compilation. We have code that depends heavily on SHA-1 for\r\n // correctness and which is affected by this bug, so I've removed all uses\r\n // of post-increment ++ in which the result value is used. We can revert\r\n // this change once the Safari bug\r\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n // most clients have been updated.\r\n W[i] =\r\n (buf.charCodeAt(offset) << 24) |\r\n (buf.charCodeAt(offset + 1) << 16) |\r\n (buf.charCodeAt(offset + 2) << 8) |\r\n buf.charCodeAt(offset + 3);\r\n offset += 4;\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < 16; i++) {\r\n W[i] =\r\n (buf[offset] << 24) |\r\n (buf[offset + 1] << 16) |\r\n (buf[offset + 2] << 8) |\r\n buf[offset + 3];\r\n offset += 4;\r\n }\r\n }\r\n // expand to 80 words\r\n for (let i = 16; i < 80; i++) {\r\n const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n }\r\n let a = this.chain_[0];\r\n let b = this.chain_[1];\r\n let c = this.chain_[2];\r\n let d = this.chain_[3];\r\n let e = this.chain_[4];\r\n let f, k;\r\n // TODO(user): Try to unroll this loop to speed up the computation.\r\n for (let i = 0; i < 80; i++) {\r\n if (i < 40) {\r\n if (i < 20) {\r\n f = d ^ (b & (c ^ d));\r\n k = 0x5a827999;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0x6ed9eba1;\r\n }\r\n }\r\n else {\r\n if (i < 60) {\r\n f = (b & c) | (d & (b | c));\r\n k = 0x8f1bbcdc;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0xca62c1d6;\r\n }\r\n }\r\n const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n e = d;\r\n d = c;\r\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n b = a;\r\n a = t;\r\n }\r\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n }\r\n update(bytes, length) {\r\n // TODO(johnlenz): tighten the function signature and remove this check\r\n if (bytes == null) {\r\n return;\r\n }\r\n if (length === undefined) {\r\n length = bytes.length;\r\n }\r\n const lengthMinusBlock = length - this.blockSize;\r\n let n = 0;\r\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n const buf = this.buf_;\r\n let inbuf = this.inbuf_;\r\n // The outer while loop should execute at most twice.\r\n while (n < length) {\r\n // When we have no data in the block to top up, we can directly process the\r\n // input buffer (assuming it contains sufficient data). This gives ~25%\r\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n // the data is provided in large chunks (or in multiples of 64 bytes).\r\n if (inbuf === 0) {\r\n while (n <= lengthMinusBlock) {\r\n this.compress_(bytes, n);\r\n n += this.blockSize;\r\n }\r\n }\r\n if (typeof bytes === 'string') {\r\n while (n < length) {\r\n buf[inbuf] = bytes.charCodeAt(n);\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n while (n < length) {\r\n buf[inbuf] = bytes[n];\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.inbuf_ = inbuf;\r\n this.total_ += length;\r\n }\r\n /** @override */\r\n digest() {\r\n const digest = [];\r\n let totalBits = this.total_ * 8;\r\n // Add pad 0x80 0x00*.\r\n if (this.inbuf_ < 56) {\r\n this.update(this.pad_, 56 - this.inbuf_);\r\n }\r\n else {\r\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n }\r\n // Add # bits.\r\n for (let i = this.blockSize - 1; i >= 56; i--) {\r\n this.buf_[i] = totalBits & 255;\r\n totalBits /= 256; // Don't use bit-shifting here!\r\n }\r\n this.compress_(this.buf_);\r\n let n = 0;\r\n for (let i = 0; i < 5; i++) {\r\n for (let j = 24; j >= 0; j -= 8) {\r\n digest[n] = (this.chain_[i] >> j) & 255;\r\n ++n;\r\n }\r\n }\r\n return digest;\r\n }\r\n}\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n const proxy = new ObserverProxy(executor, onNoObservers);\r\n return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nclass ObserverProxy {\r\n /**\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\n constructor(executor, onNoObservers) {\r\n this.observers = [];\r\n this.unsubscribes = [];\r\n this.observerCount = 0;\r\n // Micro-task scheduling by calling task.then().\r\n this.task = Promise.resolve();\r\n this.finalized = false;\r\n this.onNoObservers = onNoObservers;\r\n // Call the executor asynchronously so subscribers that are called\r\n // synchronously after the creation of the subscribe function\r\n // can still receive the very first value generated in the executor.\r\n this.task\r\n .then(() => {\r\n executor(this);\r\n })\r\n .catch(e => {\r\n this.error(e);\r\n });\r\n }\r\n next(value) {\r\n this.forEachObserver((observer) => {\r\n observer.next(value);\r\n });\r\n }\r\n error(error) {\r\n this.forEachObserver((observer) => {\r\n observer.error(error);\r\n });\r\n this.close(error);\r\n }\r\n complete() {\r\n this.forEachObserver((observer) => {\r\n observer.complete();\r\n });\r\n this.close();\r\n }\r\n /**\r\n * Subscribe function that can be used to add an Observer to the fan-out list.\r\n *\r\n * - We require that no event is sent to a subscriber sychronously to their\r\n * call to subscribe().\r\n */\r\n subscribe(nextOrObserver, error, complete) {\r\n let observer;\r\n if (nextOrObserver === undefined &&\r\n error === undefined &&\r\n complete === undefined) {\r\n throw new Error('Missing Observer.');\r\n }\r\n // Assemble an Observer object when passed as callback functions.\r\n if (implementsAnyMethods(nextOrObserver, [\r\n 'next',\r\n 'error',\r\n 'complete'\r\n ])) {\r\n observer = nextOrObserver;\r\n }\r\n else {\r\n observer = {\r\n next: nextOrObserver,\r\n error,\r\n complete\r\n };\r\n }\r\n if (observer.next === undefined) {\r\n observer.next = noop;\r\n }\r\n if (observer.error === undefined) {\r\n observer.error = noop;\r\n }\r\n if (observer.complete === undefined) {\r\n observer.complete = noop;\r\n }\r\n const unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n // Attempt to subscribe to a terminated Observable - we\r\n // just respond to the Observer with the final error or complete\r\n // event.\r\n if (this.finalized) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n try {\r\n if (this.finalError) {\r\n observer.error(this.finalError);\r\n }\r\n else {\r\n observer.complete();\r\n }\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n return;\r\n });\r\n }\r\n this.observers.push(observer);\r\n return unsub;\r\n }\r\n // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n // any unsubscribed Observer.\r\n unsubscribeOne(i) {\r\n if (this.observers === undefined || this.observers[i] === undefined) {\r\n return;\r\n }\r\n delete this.observers[i];\r\n this.observerCount -= 1;\r\n if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n this.onNoObservers(this);\r\n }\r\n }\r\n forEachObserver(fn) {\r\n if (this.finalized) {\r\n // Already closed by previous event....just eat the additional values.\r\n return;\r\n }\r\n // Since sendOne calls asynchronously - there is no chance that\r\n // this.observers will become undefined.\r\n for (let i = 0; i < this.observers.length; i++) {\r\n this.sendOne(i, fn);\r\n }\r\n }\r\n // Call the Observer via one of it's callback function. We are careful to\r\n // confirm that the observe has not been unsubscribed since this asynchronous\r\n // function had been queued.\r\n sendOne(i, fn) {\r\n // Execute the callback asynchronously\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n if (this.observers !== undefined && this.observers[i] !== undefined) {\r\n try {\r\n fn(this.observers[i]);\r\n }\r\n catch (e) {\r\n // Ignore exceptions raised in Observers or missing methods of an\r\n // Observer.\r\n // Log error to console. b/31404806\r\n if (typeof console !== 'undefined' && console.error) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n close(err) {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n if (err !== undefined) {\r\n this.finalError = err;\r\n }\r\n // Proxy is no longer needed - garbage collect references\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n this.observers = undefined;\r\n this.onNoObservers = undefined;\r\n });\r\n }\r\n}\r\n/** Turn synchronous function into one called asynchronously. */\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction async(fn, onError) {\r\n return (...args) => {\r\n Promise.resolve(true)\r\n .then(() => {\r\n fn(...args);\r\n })\r\n .catch((error) => {\r\n if (onError) {\r\n onError(error);\r\n }\r\n });\r\n };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n for (const method of methods) {\r\n if (method in obj && typeof obj[method] === 'function') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction noop() {\r\n // do nothing\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param fnName The function name\r\n * @param minCount The minimum number of arguments to allow for the function call\r\n * @param maxCount The maximum number of argument to allow for the function call\r\n * @param argCount The actual number of arguments provided.\r\n */\r\nconst validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n let argError;\r\n if (argCount < minCount) {\r\n argError = 'at least ' + minCount;\r\n }\r\n else if (argCount > maxCount) {\r\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n }\r\n if (argError) {\r\n const error = fnName +\r\n ' failed: Was called with ' +\r\n argCount +\r\n (argCount === 1 ? ' argument.' : ' arguments.') +\r\n ' Expects ' +\r\n argError +\r\n '.';\r\n throw new Error(error);\r\n }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param fnName The function name\r\n * @param argName The name of the argument\r\n * @return The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argName) {\r\n return `${fnName} failed: ${argName} argument `;\r\n}\r\n/**\r\n * @param fnName\r\n * @param argumentNumber\r\n * @param namespace\r\n * @param optional\r\n */\r\nfunction validateNamespace(fnName, namespace, optional) {\r\n if (optional && !namespace) {\r\n return;\r\n }\r\n if (typeof namespace !== 'string') {\r\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');\r\n }\r\n}\r\nfunction validateCallback(fnName, argumentName, \r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\ncallback, optional) {\r\n if (optional && !callback) {\r\n return;\r\n }\r\n if (typeof callback !== 'function') {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');\r\n }\r\n}\r\nfunction validateContextObject(fnName, argumentName, context, optional) {\r\n if (optional && !context) {\r\n return;\r\n }\r\n if (typeof context !== 'object' || context === null) {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript. All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nconst stringToByteArray = function (str) {\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n // Is this the lead surrogate in a surrogate pair?\r\n if (c >= 0xd800 && c <= 0xdbff) {\r\n const high = c - 0xd800; // the high 10 bits.\r\n i++;\r\n assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n c = 0x10000 + (high << 10) + low;\r\n }\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if (c < 65536) {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nconst stringLength = function (str) {\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const c = str.charCodeAt(i);\r\n if (c < 128) {\r\n p++;\r\n }\r\n else if (c < 2048) {\r\n p += 2;\r\n }\r\n else if (c >= 0xd800 && c <= 0xdbff) {\r\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\r\n p += 4;\r\n i++; // skip trail surrogate.\r\n }\r\n else {\r\n p += 3;\r\n }\r\n }\r\n return p;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Copied from https://stackoverflow.com/a/2117523\r\n * Generates a new uuid.\r\n * @public\r\n */\r\nconst uuidv4 = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The amount of milliseconds to exponentially increase.\r\n */\r\nconst DEFAULT_INTERVAL_MILLIS = 1000;\r\n/**\r\n * The factor to backoff by.\r\n * Should be a number greater than 1.\r\n */\r\nconst DEFAULT_BACKOFF_FACTOR = 2;\r\n/**\r\n * The maximum milliseconds to increase to.\r\n *\r\n *

Visible for testing\r\n */\r\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\r\n/**\r\n * The percentage of backoff time to randomize by.\r\n * See\r\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\r\n * for context.\r\n *\r\n *

Visible for testing\r\n */\r\nconst RANDOM_FACTOR = 0.5;\r\n/**\r\n * Based on the backoff method from\r\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\r\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\r\n */\r\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\r\n // Calculates an exponentially increasing value.\r\n // Deviation: calculates value from count and a constant interval, so we only need to save value\r\n // and count to restore state.\r\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\r\n // A random \"fuzz\" to avoid waves of retries.\r\n // Deviation: randomFactor is required.\r\n const randomWait = Math.round(\r\n // A fraction of the backoff value to add/subtract.\r\n // Deviation: changes multiplication order to improve readability.\r\n RANDOM_FACTOR *\r\n currBaseValue *\r\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\r\n // if we add or subtract.\r\n (Math.random() - 0.5) *\r\n 2);\r\n // Limits backoff to max to avoid effectively permanent backoff.\r\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provide English ordinal letters after a number\r\n */\r\nfunction ordinal(i) {\r\n if (!Number.isFinite(i)) {\r\n return `${i}`;\r\n }\r\n return i + indicator(i);\r\n}\r\nfunction indicator(i) {\r\n i = Math.abs(i);\r\n const cent = i % 100;\r\n if (cent >= 10 && cent <= 20) {\r\n return 'th';\r\n }\r\n const dec = i % 10;\r\n if (dec === 1) {\r\n return 'st';\r\n }\r\n if (dec === 2) {\r\n return 'nd';\r\n }\r\n if (dec === 3) {\r\n return 'rd';\r\n }\r\n return 'th';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getModularInstance(service) {\r\n if (service && service._delegate) {\r\n return service._delegate;\r\n }\r\n else {\r\n return service;\r\n }\r\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, uuidv4, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n","import { Deferred } from '@firebase/util';\n\n/**\r\n * Component for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass Component {\r\n /**\r\n *\r\n * @param name The public service name, e.g. app, auth, firestore, database\r\n * @param instanceFactory Service factory responsible for creating the public interface\r\n * @param type whether the service provided by the component is public or private\r\n */\r\n constructor(name, instanceFactory, type) {\r\n this.name = name;\r\n this.instanceFactory = instanceFactory;\r\n this.type = type;\r\n this.multipleInstances = false;\r\n /**\r\n * Properties to be added to the service namespace\r\n */\r\n this.serviceProps = {};\r\n this.instantiationMode = \"LAZY\" /* InstantiationMode.LAZY */;\r\n this.onInstanceCreated = null;\r\n }\r\n setInstantiationMode(mode) {\r\n this.instantiationMode = mode;\r\n return this;\r\n }\r\n setMultipleInstances(multipleInstances) {\r\n this.multipleInstances = multipleInstances;\r\n return this;\r\n }\r\n setServiceProps(props) {\r\n this.serviceProps = props;\r\n return this;\r\n }\r\n setInstanceCreatedCallback(callback) {\r\n this.onInstanceCreated = callback;\r\n return this;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\r\n * NameServiceMapping[T] is an alias for the type of the instance\r\n */\r\nclass Provider {\r\n constructor(name, container) {\r\n this.name = name;\r\n this.container = container;\r\n this.component = null;\r\n this.instances = new Map();\r\n this.instancesDeferred = new Map();\r\n this.instancesOptions = new Map();\r\n this.onInitCallbacks = new Map();\r\n }\r\n /**\r\n * @param identifier A provider can provide mulitple instances of a service\r\n * if this.component.multipleInstances is true.\r\n */\r\n get(identifier) {\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n if (!this.instancesDeferred.has(normalizedIdentifier)) {\r\n const deferred = new Deferred();\r\n this.instancesDeferred.set(normalizedIdentifier, deferred);\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n // initialize the service if it can be auto-initialized\r\n try {\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n if (instance) {\r\n deferred.resolve(instance);\r\n }\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception during get(), it should not cause\r\n // a fatal error. We just return the unresolved promise in this case.\r\n }\r\n }\r\n }\r\n return this.instancesDeferred.get(normalizedIdentifier).promise;\r\n }\r\n getImmediate(options) {\r\n var _a;\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(options === null || options === void 0 ? void 0 : options.identifier);\r\n const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n try {\r\n return this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n }\r\n catch (e) {\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n }\r\n else {\r\n // In case a component is not initialized and should/can not be auto-initialized at the moment, return null if the optional flag is set, or throw\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw Error(`Service ${this.name} is not available`);\r\n }\r\n }\r\n }\r\n getComponent() {\r\n return this.component;\r\n }\r\n setComponent(component) {\r\n if (component.name !== this.name) {\r\n throw Error(`Mismatching Component ${component.name} for Provider ${this.name}.`);\r\n }\r\n if (this.component) {\r\n throw Error(`Component for ${this.name} has already been provided`);\r\n }\r\n this.component = component;\r\n // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\r\n if (!this.shouldAutoInitialize()) {\r\n return;\r\n }\r\n // if the service is eager, initialize the default instance\r\n if (isComponentEager(component)) {\r\n try {\r\n this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\r\n }\r\n catch (e) {\r\n // when the instance factory for an eager Component throws an exception during the eager\r\n // initialization, it should not cause a fatal error.\r\n // TODO: Investigate if we need to make it configurable, because some component may want to cause\r\n // a fatal error in this case?\r\n }\r\n }\r\n // Create service instances for the pending promises and resolve them\r\n // NOTE: if this.multipleInstances is false, only the default instance will be created\r\n // and all promises with resolve with it regardless of the identifier.\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n try {\r\n // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n instanceDeferred.resolve(instance);\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception, it should not cause\r\n // a fatal error. We just leave the promise unresolved.\r\n }\r\n }\r\n }\r\n clearInstance(identifier = DEFAULT_ENTRY_NAME) {\r\n this.instancesDeferred.delete(identifier);\r\n this.instancesOptions.delete(identifier);\r\n this.instances.delete(identifier);\r\n }\r\n // app.delete() will call this method on every provider to delete the services\r\n // TODO: should we mark the provider as deleted?\r\n async delete() {\r\n const services = Array.from(this.instances.values());\r\n await Promise.all([\r\n ...services\r\n .filter(service => 'INTERNAL' in service) // legacy services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service.INTERNAL.delete()),\r\n ...services\r\n .filter(service => '_delete' in service) // modularized services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service._delete())\r\n ]);\r\n }\r\n isComponentSet() {\r\n return this.component != null;\r\n }\r\n isInitialized(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instances.has(identifier);\r\n }\r\n getOptions(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instancesOptions.get(identifier) || {};\r\n }\r\n initialize(opts = {}) {\r\n const { options = {} } = opts;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(opts.instanceIdentifier);\r\n if (this.isInitialized(normalizedIdentifier)) {\r\n throw Error(`${this.name}(${normalizedIdentifier}) has already been initialized`);\r\n }\r\n if (!this.isComponentSet()) {\r\n throw Error(`Component ${this.name} has not been registered yet`);\r\n }\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier,\r\n options\r\n });\r\n // resolve any pending promise waiting for the service instance\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n if (normalizedIdentifier === normalizedDeferredIdentifier) {\r\n instanceDeferred.resolve(instance);\r\n }\r\n }\r\n return instance;\r\n }\r\n /**\r\n *\r\n * @param callback - a function that will be invoked after the provider has been initialized by calling provider.initialize().\r\n * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\r\n *\r\n * @param identifier An optional instance identifier\r\n * @returns a function to unregister the callback\r\n */\r\n onInit(callback, identifier) {\r\n var _a;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n const existingCallbacks = (_a = this.onInitCallbacks.get(normalizedIdentifier)) !== null && _a !== void 0 ? _a : new Set();\r\n existingCallbacks.add(callback);\r\n this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\r\n const existingInstance = this.instances.get(normalizedIdentifier);\r\n if (existingInstance) {\r\n callback(existingInstance, normalizedIdentifier);\r\n }\r\n return () => {\r\n existingCallbacks.delete(callback);\r\n };\r\n }\r\n /**\r\n * Invoke onInit callbacks synchronously\r\n * @param instance the service instance`\r\n */\r\n invokeOnInitCallbacks(instance, identifier) {\r\n const callbacks = this.onInitCallbacks.get(identifier);\r\n if (!callbacks) {\r\n return;\r\n }\r\n for (const callback of callbacks) {\r\n try {\r\n callback(instance, identifier);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInit callback\r\n }\r\n }\r\n }\r\n getOrInitializeService({ instanceIdentifier, options = {} }) {\r\n let instance = this.instances.get(instanceIdentifier);\r\n if (!instance && this.component) {\r\n instance = this.component.instanceFactory(this.container, {\r\n instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\r\n options\r\n });\r\n this.instances.set(instanceIdentifier, instance);\r\n this.instancesOptions.set(instanceIdentifier, options);\r\n /**\r\n * Invoke onInit listeners.\r\n * Note this.component.onInstanceCreated is different, which is used by the component creator,\r\n * while onInit listeners are registered by consumers of the provider.\r\n */\r\n this.invokeOnInitCallbacks(instance, instanceIdentifier);\r\n /**\r\n * Order is important\r\n * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\r\n * makes `isInitialized()` return true.\r\n */\r\n if (this.component.onInstanceCreated) {\r\n try {\r\n this.component.onInstanceCreated(this.container, instanceIdentifier, instance);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInstanceCreatedCallback\r\n }\r\n }\r\n }\r\n return instance || null;\r\n }\r\n normalizeInstanceIdentifier(identifier = DEFAULT_ENTRY_NAME) {\r\n if (this.component) {\r\n return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\r\n }\r\n else {\r\n return identifier; // assume multiple instances are supported before the component is provided.\r\n }\r\n }\r\n shouldAutoInitialize() {\r\n return (!!this.component &&\r\n this.component.instantiationMode !== \"EXPLICIT\" /* InstantiationMode.EXPLICIT */);\r\n }\r\n}\r\n// undefined should be passed to the service factory for the default instance\r\nfunction normalizeIdentifierForFactory(identifier) {\r\n return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\r\n}\r\nfunction isComponentEager(component) {\r\n return component.instantiationMode === \"EAGER\" /* InstantiationMode.EAGER */;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass ComponentContainer {\r\n constructor(name) {\r\n this.name = name;\r\n this.providers = new Map();\r\n }\r\n /**\r\n *\r\n * @param component Component being added\r\n * @param overwrite When a component with the same name has already been registered,\r\n * if overwrite is true: overwrite the existing component with the new component and create a new\r\n * provider with the new component. It can be useful in tests where you want to use different mocks\r\n * for different tests.\r\n * if overwrite is false: throw an exception\r\n */\r\n addComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n throw new Error(`Component ${component.name} has already been registered with ${this.name}`);\r\n }\r\n provider.setComponent(component);\r\n }\r\n addOrOverwriteComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n // delete the existing provider from the container, so we can register the new component\r\n this.providers.delete(component.name);\r\n }\r\n this.addComponent(component);\r\n }\r\n /**\r\n * getProvider provides a type safe interface where it can only be called with a field name\r\n * present in NameServiceMapping interface.\r\n *\r\n * Firebase SDKs providing services should extend NameServiceMapping interface to register\r\n * themselves.\r\n */\r\n getProvider(name) {\r\n if (this.providers.has(name)) {\r\n return this.providers.get(name);\r\n }\r\n // create a Provider for a service that hasn't registered with Firebase\r\n const provider = new Provider(name, this);\r\n this.providers.set(name, provider);\r\n return provider;\r\n }\r\n getProviders() {\r\n return Array.from(this.providers.values());\r\n }\r\n}\n\nexport { Component, ComponentContainer, Provider };\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A container for all of the Logger instances\r\n */\r\nconst instances = [];\r\n/**\r\n * The JS SDK supports 5 log levels and also allows a user the ability to\r\n * silence the logs altogether.\r\n *\r\n * The order is a follows:\r\n * DEBUG < VERBOSE < INFO < WARN < ERROR\r\n *\r\n * All of the log types above the current log level will be captured (i.e. if\r\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\r\n * `VERBOSE` logs will not)\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\r\n LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\r\n LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\r\n LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\r\n LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\r\n LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\r\n})(LogLevel || (LogLevel = {}));\r\nconst levelStringToEnum = {\r\n 'debug': LogLevel.DEBUG,\r\n 'verbose': LogLevel.VERBOSE,\r\n 'info': LogLevel.INFO,\r\n 'warn': LogLevel.WARN,\r\n 'error': LogLevel.ERROR,\r\n 'silent': LogLevel.SILENT\r\n};\r\n/**\r\n * The default log level\r\n */\r\nconst defaultLogLevel = LogLevel.INFO;\r\n/**\r\n * By default, `console.debug` is not displayed in the developer console (in\r\n * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n * logs to the `console.log` function.\r\n */\r\nconst ConsoleMethod = {\r\n [LogLevel.DEBUG]: 'log',\r\n [LogLevel.VERBOSE]: 'log',\r\n [LogLevel.INFO]: 'info',\r\n [LogLevel.WARN]: 'warn',\r\n [LogLevel.ERROR]: 'error'\r\n};\r\n/**\r\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n * messages on to their corresponding console counterparts (if the log method\r\n * is supported by the current log level)\r\n */\r\nconst defaultLogHandler = (instance, logType, ...args) => {\r\n if (logType < instance.logLevel) {\r\n return;\r\n }\r\n const now = new Date().toISOString();\r\n const method = ConsoleMethod[logType];\r\n if (method) {\r\n console[method](`[${now}] ${instance.name}:`, ...args);\r\n }\r\n else {\r\n throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\r\n }\r\n};\r\nclass Logger {\r\n /**\r\n * Gives you an instance of a Logger to capture messages according to\r\n * Firebase's logging scheme.\r\n *\r\n * @param name The name that the logs will be associated with\r\n */\r\n constructor(name) {\r\n this.name = name;\r\n /**\r\n * The log level of the given Logger instance.\r\n */\r\n this._logLevel = defaultLogLevel;\r\n /**\r\n * The main (internal) log handler for the Logger instance.\r\n * Can be set to a new function in internal package code but not by user.\r\n */\r\n this._logHandler = defaultLogHandler;\r\n /**\r\n * The optional, additional, user-defined log handler for the Logger instance.\r\n */\r\n this._userLogHandler = null;\r\n /**\r\n * Capture the current instance for later use\r\n */\r\n instances.push(this);\r\n }\r\n get logLevel() {\r\n return this._logLevel;\r\n }\r\n set logLevel(val) {\r\n if (!(val in LogLevel)) {\r\n throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\r\n }\r\n this._logLevel = val;\r\n }\r\n // Workaround for setter/getter having to be the same type.\r\n setLogLevel(val) {\r\n this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\r\n }\r\n get logHandler() {\r\n return this._logHandler;\r\n }\r\n set logHandler(val) {\r\n if (typeof val !== 'function') {\r\n throw new TypeError('Value assigned to `logHandler` must be a function');\r\n }\r\n this._logHandler = val;\r\n }\r\n get userLogHandler() {\r\n return this._userLogHandler;\r\n }\r\n set userLogHandler(val) {\r\n this._userLogHandler = val;\r\n }\r\n /**\r\n * The functions below are all based on the `console` interface\r\n */\r\n debug(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\r\n this._logHandler(this, LogLevel.DEBUG, ...args);\r\n }\r\n log(...args) {\r\n this._userLogHandler &&\r\n this._userLogHandler(this, LogLevel.VERBOSE, ...args);\r\n this._logHandler(this, LogLevel.VERBOSE, ...args);\r\n }\r\n info(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\r\n this._logHandler(this, LogLevel.INFO, ...args);\r\n }\r\n warn(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\r\n this._logHandler(this, LogLevel.WARN, ...args);\r\n }\r\n error(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\r\n this._logHandler(this, LogLevel.ERROR, ...args);\r\n }\r\n}\r\nfunction setLogLevel(level) {\r\n instances.forEach(inst => {\r\n inst.setLogLevel(level);\r\n });\r\n}\r\nfunction setUserLogHandler(logCallback, options) {\r\n for (const instance of instances) {\r\n let customLogLevel = null;\r\n if (options && options.level) {\r\n customLogLevel = levelStringToEnum[options.level];\r\n }\r\n if (logCallback === null) {\r\n instance.userLogHandler = null;\r\n }\r\n else {\r\n instance.userLogHandler = (instance, level, ...args) => {\r\n const message = args\r\n .map(arg => {\r\n if (arg == null) {\r\n return null;\r\n }\r\n else if (typeof arg === 'string') {\r\n return arg;\r\n }\r\n else if (typeof arg === 'number' || typeof arg === 'boolean') {\r\n return arg.toString();\r\n }\r\n else if (arg instanceof Error) {\r\n return arg.message;\r\n }\r\n else {\r\n try {\r\n return JSON.stringify(arg);\r\n }\r\n catch (ignored) {\r\n return null;\r\n }\r\n }\r\n })\r\n .filter(arg => arg)\r\n .join(' ');\r\n if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\r\n logCallback({\r\n level: LogLevel[level].toLowerCase(),\r\n message,\r\n args,\r\n type: instance.name\r\n });\r\n }\r\n };\r\n }\r\n }\r\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };\n","import { Component, ComponentContainer } from '@firebase/component';\nimport { Logger, setUserLogHandler, setLogLevel as setLogLevel$1 } from '@firebase/logger';\nimport { ErrorFactory, getDefaultAppConfig, deepEqual, FirebaseError, base64urlEncodeWithoutPadding, isIndexedDBAvailable, validateIndexedDBOpenable } from '@firebase/util';\nexport { FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PlatformLoggerServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n }\r\n // In initial implementation, this will be called by installations on\r\n // auth token refresh, and installations will send this string.\r\n getPlatformInfoString() {\r\n const providers = this.container.getProviders();\r\n // Loop through providers and get library/version pairs from any that are\r\n // version components.\r\n return providers\r\n .map(provider => {\r\n if (isVersionServiceProvider(provider)) {\r\n const service = provider.getImmediate();\r\n return `${service.library}/${service.version}`;\r\n }\r\n else {\r\n return null;\r\n }\r\n })\r\n .filter(logString => logString)\r\n .join(' ');\r\n }\r\n}\r\n/**\r\n *\r\n * @param provider check if this provider provides a VersionService\r\n *\r\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\r\n * provides VersionService. The provider is not necessarily a 'app-version'\r\n * provider.\r\n */\r\nfunction isVersionServiceProvider(provider) {\r\n const component = provider.getComponent();\r\n return (component === null || component === void 0 ? void 0 : component.type) === \"VERSION\" /* ComponentType.VERSION */;\r\n}\n\nconst name$o = \"@firebase/app\";\nconst version$1 = \"0.9.13\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logger = new Logger('@firebase/app');\n\nconst name$n = \"@firebase/app-compat\";\n\nconst name$m = \"@firebase/analytics-compat\";\n\nconst name$l = \"@firebase/analytics\";\n\nconst name$k = \"@firebase/app-check-compat\";\n\nconst name$j = \"@firebase/app-check\";\n\nconst name$i = \"@firebase/auth\";\n\nconst name$h = \"@firebase/auth-compat\";\n\nconst name$g = \"@firebase/database\";\n\nconst name$f = \"@firebase/database-compat\";\n\nconst name$e = \"@firebase/functions\";\n\nconst name$d = \"@firebase/functions-compat\";\n\nconst name$c = \"@firebase/installations\";\n\nconst name$b = \"@firebase/installations-compat\";\n\nconst name$a = \"@firebase/messaging\";\n\nconst name$9 = \"@firebase/messaging-compat\";\n\nconst name$8 = \"@firebase/performance\";\n\nconst name$7 = \"@firebase/performance-compat\";\n\nconst name$6 = \"@firebase/remote-config\";\n\nconst name$5 = \"@firebase/remote-config-compat\";\n\nconst name$4 = \"@firebase/storage\";\n\nconst name$3 = \"@firebase/storage-compat\";\n\nconst name$2 = \"@firebase/firestore\";\n\nconst name$1 = \"@firebase/firestore-compat\";\n\nconst name = \"firebase\";\nconst version = \"9.23.0\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The default app name\r\n *\r\n * @internal\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\r\nconst PLATFORM_LOG_STRING = {\r\n [name$o]: 'fire-core',\r\n [name$n]: 'fire-core-compat',\r\n [name$l]: 'fire-analytics',\r\n [name$m]: 'fire-analytics-compat',\r\n [name$j]: 'fire-app-check',\r\n [name$k]: 'fire-app-check-compat',\r\n [name$i]: 'fire-auth',\r\n [name$h]: 'fire-auth-compat',\r\n [name$g]: 'fire-rtdb',\r\n [name$f]: 'fire-rtdb-compat',\r\n [name$e]: 'fire-fn',\r\n [name$d]: 'fire-fn-compat',\r\n [name$c]: 'fire-iid',\r\n [name$b]: 'fire-iid-compat',\r\n [name$a]: 'fire-fcm',\r\n [name$9]: 'fire-fcm-compat',\r\n [name$8]: 'fire-perf',\r\n [name$7]: 'fire-perf-compat',\r\n [name$6]: 'fire-rc',\r\n [name$5]: 'fire-rc-compat',\r\n [name$4]: 'fire-gcs',\r\n [name$3]: 'fire-gcs-compat',\r\n [name$2]: 'fire-fst',\r\n [name$1]: 'fire-fst-compat',\r\n 'fire-js': 'fire-js',\r\n [name]: 'fire-js-all'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nconst _apps = new Map();\r\n/**\r\n * Registered components.\r\n *\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst _components = new Map();\r\n/**\r\n * @param component - the component being added to this app's container\r\n *\r\n * @internal\r\n */\r\nfunction _addComponent(app, component) {\r\n try {\r\n app.container.addComponent(component);\r\n }\r\n catch (e) {\r\n logger.debug(`Component ${component.name} failed to register with FirebaseApp ${app.name}`, e);\r\n }\r\n}\r\n/**\r\n *\r\n * @internal\r\n */\r\nfunction _addOrOverwriteComponent(app, component) {\r\n app.container.addOrOverwriteComponent(component);\r\n}\r\n/**\r\n *\r\n * @param component - the component to register\r\n * @returns whether or not the component is registered successfully\r\n *\r\n * @internal\r\n */\r\nfunction _registerComponent(component) {\r\n const componentName = component.name;\r\n if (_components.has(componentName)) {\r\n logger.debug(`There were multiple attempts to register component ${componentName}.`);\r\n return false;\r\n }\r\n _components.set(componentName, component);\r\n // add the component to existing app instances\r\n for (const app of _apps.values()) {\r\n _addComponent(app, component);\r\n }\r\n return true;\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n *\r\n * @returns the provider for the service with the matching name\r\n *\r\n * @internal\r\n */\r\nfunction _getProvider(app, name) {\r\n const heartbeatController = app.container\r\n .getProvider('heartbeat')\r\n .getImmediate({ optional: true });\r\n if (heartbeatController) {\r\n void heartbeatController.triggerHeartbeat();\r\n }\r\n return app.container.getProvider(name);\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\r\n *\r\n * @internal\r\n */\r\nfunction _removeServiceInstance(app, name, instanceIdentifier = DEFAULT_ENTRY_NAME) {\r\n _getProvider(app, name).clearInstance(instanceIdentifier);\r\n}\r\n/**\r\n * Test only\r\n *\r\n * @internal\r\n */\r\nfunction _clearComponents() {\r\n _components.clear();\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERRORS = {\r\n [\"no-app\" /* AppError.NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\r\n 'call initializeApp() first',\r\n [\"bad-app-name\" /* AppError.BAD_APP_NAME */]: \"Illegal App name: '{$appName}\",\r\n [\"duplicate-app\" /* AppError.DUPLICATE_APP */]: \"Firebase App named '{$appName}' already exists with different options or config\",\r\n [\"app-deleted\" /* AppError.APP_DELETED */]: \"Firebase App named '{$appName}' already deleted\",\r\n [\"no-options\" /* AppError.NO_OPTIONS */]: 'Need to provide options, when not being deployed to hosting via source.',\r\n [\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\r\n 'Firebase App instance.',\r\n [\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */]: 'First argument to `onLog` must be null or a function.',\r\n [\"idb-open\" /* AppError.IDB_OPEN */]: 'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-get\" /* AppError.IDB_GET */]: 'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-set\" /* AppError.IDB_WRITE */]: 'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-delete\" /* AppError.IDB_DELETE */]: 'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('app', 'Firebase', ERRORS);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FirebaseAppImpl {\r\n constructor(options, config, container) {\r\n this._isDeleted = false;\r\n this._options = Object.assign({}, options);\r\n this._config = Object.assign({}, config);\r\n this._name = config.name;\r\n this._automaticDataCollectionEnabled =\r\n config.automaticDataCollectionEnabled;\r\n this._container = container;\r\n this.container.addComponent(new Component('app', () => this, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n }\r\n get automaticDataCollectionEnabled() {\r\n this.checkDestroyed();\r\n return this._automaticDataCollectionEnabled;\r\n }\r\n set automaticDataCollectionEnabled(val) {\r\n this.checkDestroyed();\r\n this._automaticDataCollectionEnabled = val;\r\n }\r\n get name() {\r\n this.checkDestroyed();\r\n return this._name;\r\n }\r\n get options() {\r\n this.checkDestroyed();\r\n return this._options;\r\n }\r\n get config() {\r\n this.checkDestroyed();\r\n return this._config;\r\n }\r\n get container() {\r\n return this._container;\r\n }\r\n get isDeleted() {\r\n return this._isDeleted;\r\n }\r\n set isDeleted(val) {\r\n this._isDeleted = val;\r\n }\r\n /**\r\n * This function will throw an Error if the App has already been deleted -\r\n * use before performing API actions on the App.\r\n */\r\n checkDestroyed() {\r\n if (this.isDeleted) {\r\n throw ERROR_FACTORY.create(\"app-deleted\" /* AppError.APP_DELETED */, { appName: this._name });\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The current SDK version.\r\n *\r\n * @public\r\n */\r\nconst SDK_VERSION = version;\r\nfunction initializeApp(_options, rawConfig = {}) {\r\n let options = _options;\r\n if (typeof rawConfig !== 'object') {\r\n const name = rawConfig;\r\n rawConfig = { name };\r\n }\r\n const config = Object.assign({ name: DEFAULT_ENTRY_NAME, automaticDataCollectionEnabled: false }, rawConfig);\r\n const name = config.name;\r\n if (typeof name !== 'string' || !name) {\r\n throw ERROR_FACTORY.create(\"bad-app-name\" /* AppError.BAD_APP_NAME */, {\r\n appName: String(name)\r\n });\r\n }\r\n options || (options = getDefaultAppConfig());\r\n if (!options) {\r\n throw ERROR_FACTORY.create(\"no-options\" /* AppError.NO_OPTIONS */);\r\n }\r\n const existingApp = _apps.get(name);\r\n if (existingApp) {\r\n // return the existing app if options and config deep equal the ones in the existing app.\r\n if (deepEqual(options, existingApp.options) &&\r\n deepEqual(config, existingApp.config)) {\r\n return existingApp;\r\n }\r\n else {\r\n throw ERROR_FACTORY.create(\"duplicate-app\" /* AppError.DUPLICATE_APP */, { appName: name });\r\n }\r\n }\r\n const container = new ComponentContainer(name);\r\n for (const component of _components.values()) {\r\n container.addComponent(component);\r\n }\r\n const newApp = new FirebaseAppImpl(options, config, container);\r\n _apps.set(name, newApp);\r\n return newApp;\r\n}\r\n/**\r\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\r\n *\r\n * When called with no arguments, the default app is returned. When an app name\r\n * is provided, the app corresponding to that name is returned.\r\n *\r\n * An exception is thrown if the app being retrieved has not yet been\r\n * initialized.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return the default app\r\n * const app = getApp();\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return a named app\r\n * const otherApp = getApp(\"otherApp\");\r\n * ```\r\n *\r\n * @param name - Optional name of the app to return. If no name is\r\n * provided, the default is `\"[DEFAULT]\"`.\r\n *\r\n * @returns The app corresponding to the provided app name.\r\n * If no app name is provided, the default app is returned.\r\n *\r\n * @public\r\n */\r\nfunction getApp(name = DEFAULT_ENTRY_NAME) {\r\n const app = _apps.get(name);\r\n if (!app && name === DEFAULT_ENTRY_NAME && getDefaultAppConfig()) {\r\n return initializeApp();\r\n }\r\n if (!app) {\r\n throw ERROR_FACTORY.create(\"no-app\" /* AppError.NO_APP */, { appName: name });\r\n }\r\n return app;\r\n}\r\n/**\r\n * A (read-only) array of all initialized apps.\r\n * @public\r\n */\r\nfunction getApps() {\r\n return Array.from(_apps.values());\r\n}\r\n/**\r\n * Renders this app unusable and frees the resources of all associated\r\n * services.\r\n *\r\n * @example\r\n * ```javascript\r\n * deleteApp(app)\r\n * .then(function() {\r\n * console.log(\"App deleted successfully\");\r\n * })\r\n * .catch(function(error) {\r\n * console.log(\"Error deleting app:\", error);\r\n * });\r\n * ```\r\n *\r\n * @public\r\n */\r\nasync function deleteApp(app) {\r\n const name = app.name;\r\n if (_apps.has(name)) {\r\n _apps.delete(name);\r\n await Promise.all(app.container\r\n .getProviders()\r\n .map(provider => provider.delete()));\r\n app.isDeleted = true;\r\n }\r\n}\r\n/**\r\n * Registers a library's name and version for platform logging purposes.\r\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\r\n * @param version - Current version of that library.\r\n * @param variant - Bundle variant, e.g., node, rn, etc.\r\n *\r\n * @public\r\n */\r\nfunction registerVersion(libraryKeyOrName, version, variant) {\r\n var _a;\r\n // TODO: We can use this check to whitelist strings when/if we set up\r\n // a good whitelist system.\r\n let library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;\r\n if (variant) {\r\n library += `-${variant}`;\r\n }\r\n const libraryMismatch = library.match(/\\s|\\//);\r\n const versionMismatch = version.match(/\\s|\\//);\r\n if (libraryMismatch || versionMismatch) {\r\n const warning = [\r\n `Unable to register library \"${library}\" with version \"${version}\":`\r\n ];\r\n if (libraryMismatch) {\r\n warning.push(`library name \"${library}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n if (libraryMismatch && versionMismatch) {\r\n warning.push('and');\r\n }\r\n if (versionMismatch) {\r\n warning.push(`version name \"${version}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n logger.warn(warning.join(' '));\r\n return;\r\n }\r\n _registerComponent(new Component(`${library}-version`, () => ({ library, version }), \"VERSION\" /* ComponentType.VERSION */));\r\n}\r\n/**\r\n * Sets log handler for all Firebase SDKs.\r\n * @param logCallback - An optional custom log handler that executes user code whenever\r\n * the Firebase SDK makes a logging call.\r\n *\r\n * @public\r\n */\r\nfunction onLog(logCallback, options) {\r\n if (logCallback !== null && typeof logCallback !== 'function') {\r\n throw ERROR_FACTORY.create(\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */);\r\n }\r\n setUserLogHandler(logCallback, options);\r\n}\r\n/**\r\n * Sets log level for all Firebase SDKs.\r\n *\r\n * All of the log types above the current log level are captured (i.e. if\r\n * you set the log level to `info`, errors are logged, but `debug` and\r\n * `verbose` logs are not).\r\n *\r\n * @public\r\n */\r\nfunction setLogLevel(logLevel) {\r\n setLogLevel$1(logLevel);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DB_NAME = 'firebase-heartbeat-database';\r\nconst DB_VERSION = 1;\r\nconst STORE_NAME = 'firebase-heartbeat-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DB_NAME, DB_VERSION, {\r\n upgrade: (db, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through\r\n // behavior is what we want, because if there are multiple versions between\r\n // the old version and the current version, we want ALL the migrations\r\n // that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n db.createObjectStore(STORE_NAME);\r\n }\r\n }\r\n }).catch(e => {\r\n throw ERROR_FACTORY.create(\"idb-open\" /* AppError.IDB_OPEN */, {\r\n originalErrorMessage: e.message\r\n });\r\n });\r\n }\r\n return dbPromise;\r\n}\r\nasync function readHeartbeatsFromIndexedDB(app) {\r\n try {\r\n const db = await getDbPromise();\r\n const result = await db\r\n .transaction(STORE_NAME)\r\n .objectStore(STORE_NAME)\r\n .get(computeKey(app));\r\n return result;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-get\" /* AppError.IDB_GET */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nasync function writeHeartbeatsToIndexedDB(app, heartbeatObject) {\r\n try {\r\n const db = await getDbPromise();\r\n const tx = db.transaction(STORE_NAME, 'readwrite');\r\n const objectStore = tx.objectStore(STORE_NAME);\r\n await objectStore.put(heartbeatObject, computeKey(app));\r\n await tx.done;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-set\" /* AppError.IDB_WRITE */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nfunction computeKey(app) {\r\n return `${app.name}!${app.options.appId}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst MAX_HEADER_BYTES = 1024;\r\n// 30 days\r\nconst STORED_HEARTBEAT_RETENTION_MAX_MILLIS = 30 * 24 * 60 * 60 * 1000;\r\nclass HeartbeatServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n /**\r\n * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\r\n * the header string.\r\n * Stores one record per date. This will be consolidated into the standard\r\n * format of one record per user agent string before being sent as a header.\r\n * Populated from indexedDB when the controller is instantiated and should\r\n * be kept in sync with indexedDB.\r\n * Leave public for easier testing.\r\n */\r\n this._heartbeatsCache = null;\r\n const app = this.container.getProvider('app').getImmediate();\r\n this._storage = new HeartbeatStorageImpl(app);\r\n this._heartbeatsCachePromise = this._storage.read().then(result => {\r\n this._heartbeatsCache = result;\r\n return result;\r\n });\r\n }\r\n /**\r\n * Called to report a heartbeat. The function will generate\r\n * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\r\n * to IndexedDB.\r\n * Note that we only store one heartbeat per day. So if a heartbeat for today is\r\n * already logged, subsequent calls to this function in the same day will be ignored.\r\n */\r\n async triggerHeartbeat() {\r\n const platformLogger = this.container\r\n .getProvider('platform-logger')\r\n .getImmediate();\r\n // This is the \"Firebase user agent\" string from the platform logger\r\n // service, not the browser user agent.\r\n const agent = platformLogger.getPlatformInfoString();\r\n const date = getUTCDateString();\r\n if (this._heartbeatsCache === null) {\r\n this._heartbeatsCache = await this._heartbeatsCachePromise;\r\n }\r\n // Do not store a heartbeat if one is already stored for this day\r\n // or if a header has already been sent today.\r\n if (this._heartbeatsCache.lastSentHeartbeatDate === date ||\r\n this._heartbeatsCache.heartbeats.some(singleDateHeartbeat => singleDateHeartbeat.date === date)) {\r\n return;\r\n }\r\n else {\r\n // There is no entry for this date. Create one.\r\n this._heartbeatsCache.heartbeats.push({ date, agent });\r\n }\r\n // Remove entries older than 30 days.\r\n this._heartbeatsCache.heartbeats = this._heartbeatsCache.heartbeats.filter(singleDateHeartbeat => {\r\n const hbTimestamp = new Date(singleDateHeartbeat.date).valueOf();\r\n const now = Date.now();\r\n return now - hbTimestamp <= STORED_HEARTBEAT_RETENTION_MAX_MILLIS;\r\n });\r\n return this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n /**\r\n * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\r\n * It also clears all heartbeats from memory as well as in IndexedDB.\r\n *\r\n * NOTE: Consuming product SDKs should not send the header if this method\r\n * returns an empty string.\r\n */\r\n async getHeartbeatsHeader() {\r\n if (this._heartbeatsCache === null) {\r\n await this._heartbeatsCachePromise;\r\n }\r\n // If it's still null or the array is empty, there is no data to send.\r\n if (this._heartbeatsCache === null ||\r\n this._heartbeatsCache.heartbeats.length === 0) {\r\n return '';\r\n }\r\n const date = getUTCDateString();\r\n // Extract as many heartbeats from the cache as will fit under the size limit.\r\n const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(this._heartbeatsCache.heartbeats);\r\n const headerString = base64urlEncodeWithoutPadding(JSON.stringify({ version: 2, heartbeats: heartbeatsToSend }));\r\n // Store last sent date to prevent another being logged/sent for the same day.\r\n this._heartbeatsCache.lastSentHeartbeatDate = date;\r\n if (unsentEntries.length > 0) {\r\n // Store any unsent entries if they exist.\r\n this._heartbeatsCache.heartbeats = unsentEntries;\r\n // This seems more likely than emptying the array (below) to lead to some odd state\r\n // since the cache isn't empty and this will be called again on the next request,\r\n // and is probably safest if we await it.\r\n await this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n else {\r\n this._heartbeatsCache.heartbeats = [];\r\n // Do not wait for this, to reduce latency.\r\n void this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n return headerString;\r\n }\r\n}\r\nfunction getUTCDateString() {\r\n const today = new Date();\r\n // Returns date format 'YYYY-MM-DD'\r\n return today.toISOString().substring(0, 10);\r\n}\r\nfunction extractHeartbeatsForHeader(heartbeatsCache, maxSize = MAX_HEADER_BYTES) {\r\n // Heartbeats grouped by user agent in the standard format to be sent in\r\n // the header.\r\n const heartbeatsToSend = [];\r\n // Single date format heartbeats that are not sent.\r\n let unsentEntries = heartbeatsCache.slice();\r\n for (const singleDateHeartbeat of heartbeatsCache) {\r\n // Look for an existing entry with the same user agent.\r\n const heartbeatEntry = heartbeatsToSend.find(hb => hb.agent === singleDateHeartbeat.agent);\r\n if (!heartbeatEntry) {\r\n // If no entry for this user agent exists, create one.\r\n heartbeatsToSend.push({\r\n agent: singleDateHeartbeat.agent,\r\n dates: [singleDateHeartbeat.date]\r\n });\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n // If the header would exceed max size, remove the added heartbeat\r\n // entry and stop adding to the header.\r\n heartbeatsToSend.pop();\r\n break;\r\n }\r\n }\r\n else {\r\n heartbeatEntry.dates.push(singleDateHeartbeat.date);\r\n // If the header would exceed max size, remove the added date\r\n // and stop adding to the header.\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n heartbeatEntry.dates.pop();\r\n break;\r\n }\r\n }\r\n // Pop unsent entry from queue. (Skipped if adding the entry exceeded\r\n // quota and the loop breaks early.)\r\n unsentEntries = unsentEntries.slice(1);\r\n }\r\n return {\r\n heartbeatsToSend,\r\n unsentEntries\r\n };\r\n}\r\nclass HeartbeatStorageImpl {\r\n constructor(app) {\r\n this.app = app;\r\n this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\r\n }\r\n async runIndexedDBEnvironmentCheck() {\r\n if (!isIndexedDBAvailable()) {\r\n return false;\r\n }\r\n else {\r\n return validateIndexedDBOpenable()\r\n .then(() => true)\r\n .catch(() => false);\r\n }\r\n }\r\n /**\r\n * Read all heartbeats.\r\n */\r\n async read() {\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return { heartbeats: [] };\r\n }\r\n else {\r\n const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\r\n return idbHeartbeatObject || { heartbeats: [] };\r\n }\r\n }\r\n // overwrite the storage with the provided heartbeats\r\n async overwrite(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: heartbeatsObject.heartbeats\r\n });\r\n }\r\n }\r\n // add heartbeats\r\n async add(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: [\r\n ...existingHeartbeatsObject.heartbeats,\r\n ...heartbeatsObject.heartbeats\r\n ]\r\n });\r\n }\r\n }\r\n}\r\n/**\r\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\r\n * in a platform logging header JSON object, stringified, and converted\r\n * to base 64.\r\n */\r\nfunction countBytes(heartbeatsCache) {\r\n // base64 has a restricted set of characters, all of which should be 1 byte.\r\n return base64urlEncodeWithoutPadding(\r\n // heartbeatsCache wrapper properties\r\n JSON.stringify({ version: 2, heartbeats: heartbeatsCache })).length;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerCoreComponents(variant) {\r\n _registerComponent(new Component('platform-logger', container => new PlatformLoggerServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n _registerComponent(new Component('heartbeat', container => new HeartbeatServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n // Register `app` package.\r\n registerVersion(name$o, version$1, variant);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name$o, version$1, 'esm2017');\r\n // Register platform SDK identifier (no version).\r\n registerVersion('fire-js', '');\r\n}\n\n/**\r\n * Firebase App\r\n *\r\n * @remarks This package coordinates the communication between the different Firebase components\r\n * @packageDocumentation\r\n */\r\nregisterCoreComponents('');\n\nexport { SDK_VERSION, DEFAULT_ENTRY_NAME as _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _registerComponent, _removeServiceInstance, deleteApp, getApp, getApps, initializeApp, onLog, registerVersion, setLogLevel };\n","import { ErrorFactory, contains, deepExtend, createSubscribe, isBrowser } from '@firebase/util';\nimport { Component } from '@firebase/component';\nimport * as modularAPIs from '@firebase/app';\nimport { _addComponent, deleteApp, _DEFAULT_ENTRY_NAME, _addOrOverwriteComponent, registerVersion } from '@firebase/app';\nimport { Logger } from '@firebase/logger';\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Global context object for a collection of services using\r\n * a shared authentication state.\r\n *\r\n * marked as internal because it references internal types exported from @firebase/app\r\n * @internal\r\n */\r\nclass FirebaseAppImpl {\r\n constructor(_delegate, firebase) {\r\n this._delegate = _delegate;\r\n this.firebase = firebase;\r\n // add itself to container\r\n _addComponent(_delegate, new Component('app-compat', () => this, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n this.container = _delegate.container;\r\n }\r\n get automaticDataCollectionEnabled() {\r\n return this._delegate.automaticDataCollectionEnabled;\r\n }\r\n set automaticDataCollectionEnabled(val) {\r\n this._delegate.automaticDataCollectionEnabled = val;\r\n }\r\n get name() {\r\n return this._delegate.name;\r\n }\r\n get options() {\r\n return this._delegate.options;\r\n }\r\n delete() {\r\n return new Promise(resolve => {\r\n this._delegate.checkDestroyed();\r\n resolve();\r\n }).then(() => {\r\n this.firebase.INTERNAL.removeApp(this.name);\r\n return deleteApp(this._delegate);\r\n });\r\n }\r\n /**\r\n * Return a service instance associated with this app (creating it\r\n * on demand), identified by the passed instanceIdentifier.\r\n *\r\n * NOTE: Currently storage and functions are the only ones that are leveraging this\r\n * functionality. They invoke it by calling:\r\n *\r\n * ```javascript\r\n * firebase.app().storage('STORAGE BUCKET ID')\r\n * ```\r\n *\r\n * The service name is passed to this already\r\n * @internal\r\n */\r\n _getService(name, instanceIdentifier = _DEFAULT_ENTRY_NAME) {\r\n var _a;\r\n this._delegate.checkDestroyed();\r\n // Initialize instance if InstatiationMode is `EXPLICIT`.\r\n const provider = this._delegate.container.getProvider(name);\r\n if (!provider.isInitialized() &&\r\n ((_a = provider.getComponent()) === null || _a === void 0 ? void 0 : _a.instantiationMode) === \"EXPLICIT\" /* InstantiationMode.EXPLICIT */) {\r\n provider.initialize();\r\n }\r\n // getImmediate will always succeed because _getService is only called for registered components.\r\n return provider.getImmediate({\r\n identifier: instanceIdentifier\r\n });\r\n }\r\n /**\r\n * Remove a service instance from the cache, so we will create a new instance for this service\r\n * when people try to get it again.\r\n *\r\n * NOTE: currently only firestore uses this functionality to support firestore shutdown.\r\n *\r\n * @param name The service name\r\n * @param instanceIdentifier instance identifier in case multiple instances are allowed\r\n * @internal\r\n */\r\n _removeServiceInstance(name, instanceIdentifier = _DEFAULT_ENTRY_NAME) {\r\n this._delegate.container\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .getProvider(name)\r\n .clearInstance(instanceIdentifier);\r\n }\r\n /**\r\n * @param component the component being added to this app's container\r\n * @internal\r\n */\r\n _addComponent(component) {\r\n _addComponent(this._delegate, component);\r\n }\r\n _addOrOverwriteComponent(component) {\r\n _addOrOverwriteComponent(this._delegate, component);\r\n }\r\n toJSON() {\r\n return {\r\n name: this.name,\r\n automaticDataCollectionEnabled: this.automaticDataCollectionEnabled,\r\n options: this.options\r\n };\r\n }\r\n}\r\n// TODO: investigate why the following needs to be commented out\r\n// Prevent dead-code elimination of these methods w/o invalid property\r\n// copying.\r\n// (FirebaseAppImpl.prototype.name && FirebaseAppImpl.prototype.options) ||\r\n// FirebaseAppImpl.prototype.delete ||\r\n// console.log('dc');\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERRORS = {\r\n [\"no-app\" /* AppError.NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\r\n 'call Firebase App.initializeApp()',\r\n [\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\r\n 'Firebase App instance.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('app-compat', 'Firebase', ERRORS);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Because auth can't share code with other components, we attach the utility functions\r\n * in an internal namespace to share code.\r\n * This function return a firebase namespace object without\r\n * any utility functions, so it can be shared between the regular firebaseNamespace and\r\n * the lite version.\r\n */\r\nfunction createFirebaseNamespaceCore(firebaseAppImpl) {\r\n const apps = {};\r\n // // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n // const components = new Map>();\r\n // A namespace is a plain JavaScript Object.\r\n const namespace = {\r\n // Hack to prevent Babel from modifying the object returned\r\n // as the firebase namespace.\r\n // @ts-ignore\r\n __esModule: true,\r\n initializeApp: initializeAppCompat,\r\n // @ts-ignore\r\n app,\r\n registerVersion: modularAPIs.registerVersion,\r\n setLogLevel: modularAPIs.setLogLevel,\r\n onLog: modularAPIs.onLog,\r\n // @ts-ignore\r\n apps: null,\r\n SDK_VERSION: modularAPIs.SDK_VERSION,\r\n INTERNAL: {\r\n registerComponent: registerComponentCompat,\r\n removeApp,\r\n useAsService,\r\n modularAPIs\r\n }\r\n };\r\n // Inject a circular default export to allow Babel users who were previously\r\n // using:\r\n //\r\n // import firebase from 'firebase';\r\n // which becomes: var firebase = require('firebase').default;\r\n //\r\n // instead of\r\n //\r\n // import * as firebase from 'firebase';\r\n // which becomes: var firebase = require('firebase');\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n namespace['default'] = namespace;\r\n // firebase.apps is a read-only getter.\r\n Object.defineProperty(namespace, 'apps', {\r\n get: getApps\r\n });\r\n /**\r\n * Called by App.delete() - but before any services associated with the App\r\n * are deleted.\r\n */\r\n function removeApp(name) {\r\n delete apps[name];\r\n }\r\n /**\r\n * Get the App object for a given name (or DEFAULT).\r\n */\r\n function app(name) {\r\n name = name || modularAPIs._DEFAULT_ENTRY_NAME;\r\n if (!contains(apps, name)) {\r\n throw ERROR_FACTORY.create(\"no-app\" /* AppError.NO_APP */, { appName: name });\r\n }\r\n return apps[name];\r\n }\r\n // @ts-ignore\r\n app['App'] = firebaseAppImpl;\r\n /**\r\n * Create a new App instance (name must be unique).\r\n *\r\n * This function is idempotent. It can be called more than once and return the same instance using the same options and config.\r\n */\r\n function initializeAppCompat(options, rawConfig = {}) {\r\n const app = modularAPIs.initializeApp(options, rawConfig);\r\n if (contains(apps, app.name)) {\r\n return apps[app.name];\r\n }\r\n const appCompat = new firebaseAppImpl(app, namespace);\r\n apps[app.name] = appCompat;\r\n return appCompat;\r\n }\r\n /*\r\n * Return an array of all the non-deleted FirebaseApps.\r\n */\r\n function getApps() {\r\n // Make a copy so caller cannot mutate the apps list.\r\n return Object.keys(apps).map(name => apps[name]);\r\n }\r\n function registerComponentCompat(component) {\r\n const componentName = component.name;\r\n const componentNameWithoutCompat = componentName.replace('-compat', '');\r\n if (modularAPIs._registerComponent(component) &&\r\n component.type === \"PUBLIC\" /* ComponentType.PUBLIC */) {\r\n // create service namespace for public components\r\n // The Service namespace is an accessor function ...\r\n const serviceNamespace = (appArg = app()) => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n if (typeof appArg[componentNameWithoutCompat] !== 'function') {\r\n // Invalid argument.\r\n // This happens in the following case: firebase.storage('gs:/')\r\n throw ERROR_FACTORY.create(\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */, {\r\n appName: componentName\r\n });\r\n }\r\n // Forward service instance lookup to the FirebaseApp.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return appArg[componentNameWithoutCompat]();\r\n };\r\n // ... and a container for service-level properties.\r\n if (component.serviceProps !== undefined) {\r\n deepExtend(serviceNamespace, component.serviceProps);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n namespace[componentNameWithoutCompat] = serviceNamespace;\r\n // Patch the FirebaseAppImpl prototype\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n firebaseAppImpl.prototype[componentNameWithoutCompat] =\r\n // TODO: The eslint disable can be removed and the 'ignoreRestArgs'\r\n // option added to the no-explicit-any rule when ESlint releases it.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n function (...args) {\r\n const serviceFxn = this._getService.bind(this, componentName);\r\n return serviceFxn.apply(this, component.multipleInstances ? args : []);\r\n };\r\n }\r\n return component.type === \"PUBLIC\" /* ComponentType.PUBLIC */\r\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n namespace[componentNameWithoutCompat]\r\n : null;\r\n }\r\n // Map the requested service to a registered service name\r\n // (used to map auth to serverAuth service when needed).\r\n function useAsService(app, name) {\r\n if (name === 'serverAuth') {\r\n return null;\r\n }\r\n const useService = name;\r\n return useService;\r\n }\r\n return namespace;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Return a firebase namespace object.\r\n *\r\n * In production, this will be called exactly once and the result\r\n * assigned to the 'firebase' global. It may be called multiple times\r\n * in unit tests.\r\n */\r\nfunction createFirebaseNamespace() {\r\n const namespace = createFirebaseNamespaceCore(FirebaseAppImpl);\r\n namespace.INTERNAL = Object.assign(Object.assign({}, namespace.INTERNAL), { createFirebaseNamespace,\r\n extendNamespace,\r\n createSubscribe,\r\n ErrorFactory,\r\n deepExtend });\r\n /**\r\n * Patch the top-level firebase namespace with additional properties.\r\n *\r\n * firebase.INTERNAL.extendNamespace()\r\n */\r\n function extendNamespace(props) {\r\n deepExtend(namespace, props);\r\n }\r\n return namespace;\r\n}\r\nconst firebase$1 = createFirebaseNamespace();\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logger = new Logger('@firebase/app-compat');\n\nconst name = \"@firebase/app-compat\";\nconst version = \"0.2.13\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerCoreComponents(variant) {\r\n // Register `app` package.\r\n registerVersion(name, version, variant);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Firebase Lite detection\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nif (isBrowser() && self.firebase !== undefined) {\r\n logger.warn(`\n Warning: Firebase is already defined in the global scope. Please make sure\n Firebase library is only loaded once.\n `);\r\n // eslint-disable-next-line\r\n const sdkVersion = self.firebase.SDK_VERSION;\r\n if (sdkVersion && sdkVersion.indexOf('LITE') >= 0) {\r\n logger.warn(`\n Warning: You are trying to load Firebase while using Firebase Performance standalone script.\n You should load Firebase Performance with this instance of Firebase to avoid loading duplicate code.\n `);\r\n }\r\n}\r\nconst firebase = firebase$1;\r\nregisterCoreComponents();\n\nexport { firebase as default };\n","import firebase from '@firebase/app-compat';\nexport { default } from '@firebase/app-compat';\n\nvar name = \"firebase\";\nvar version = \"9.23.0\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfirebase.registerVersion(name, version, 'app-compat');\n","import { ErrorFactory, isBrowserExtension, isMobileCordova, isReactNative, FirebaseError, querystring, getModularInstance, base64Decode, getUA, isIE, createSubscribe, deepEqual, querystringDecode, extractQuerystring, isEmpty, getExperimentalSetting, getDefaultEmulatorHost } from '@firebase/util';\nimport { SDK_VERSION, _getProvider, _registerComponent, registerVersion, getApp } from '@firebase/app';\nimport { __rest } from 'tslib';\nimport { Logger, LogLevel } from '@firebase/logger';\nimport { Component } from '@firebase/component';\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An enum of factors that may be used for multifactor authentication.\r\n *\r\n * @public\r\n */\r\nconst FactorId = {\r\n /** Phone as second factor */\r\n PHONE: 'phone',\r\n TOTP: 'totp'\r\n};\r\n/**\r\n * Enumeration of supported providers.\r\n *\r\n * @public\r\n */\r\nconst ProviderId = {\r\n /** Facebook provider ID */\r\n FACEBOOK: 'facebook.com',\r\n /** GitHub provider ID */\r\n GITHUB: 'github.com',\r\n /** Google provider ID */\r\n GOOGLE: 'google.com',\r\n /** Password provider */\r\n PASSWORD: 'password',\r\n /** Phone provider */\r\n PHONE: 'phone',\r\n /** Twitter provider ID */\r\n TWITTER: 'twitter.com'\r\n};\r\n/**\r\n * Enumeration of supported sign-in methods.\r\n *\r\n * @public\r\n */\r\nconst SignInMethod = {\r\n /** Email link sign in method */\r\n EMAIL_LINK: 'emailLink',\r\n /** Email/password sign in method */\r\n EMAIL_PASSWORD: 'password',\r\n /** Facebook sign in method */\r\n FACEBOOK: 'facebook.com',\r\n /** GitHub sign in method */\r\n GITHUB: 'github.com',\r\n /** Google sign in method */\r\n GOOGLE: 'google.com',\r\n /** Phone sign in method */\r\n PHONE: 'phone',\r\n /** Twitter sign in method */\r\n TWITTER: 'twitter.com'\r\n};\r\n/**\r\n * Enumeration of supported operation types.\r\n *\r\n * @public\r\n */\r\nconst OperationType = {\r\n /** Operation involving linking an additional provider to an already signed-in user. */\r\n LINK: 'link',\r\n /** Operation involving using a provider to reauthenticate an already signed-in user. */\r\n REAUTHENTICATE: 'reauthenticate',\r\n /** Operation involving signing in a user. */\r\n SIGN_IN: 'signIn'\r\n};\r\n/**\r\n * An enumeration of the possible email action types.\r\n *\r\n * @public\r\n */\r\nconst ActionCodeOperation = {\r\n /** The email link sign-in action. */\r\n EMAIL_SIGNIN: 'EMAIL_SIGNIN',\r\n /** The password reset action. */\r\n PASSWORD_RESET: 'PASSWORD_RESET',\r\n /** The email revocation action. */\r\n RECOVER_EMAIL: 'RECOVER_EMAIL',\r\n /** The revert second factor addition email action. */\r\n REVERT_SECOND_FACTOR_ADDITION: 'REVERT_SECOND_FACTOR_ADDITION',\r\n /** The revert second factor addition email action. */\r\n VERIFY_AND_CHANGE_EMAIL: 'VERIFY_AND_CHANGE_EMAIL',\r\n /** The email verification action. */\r\n VERIFY_EMAIL: 'VERIFY_EMAIL'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _debugErrorMap() {\r\n return {\r\n [\"admin-restricted-operation\" /* AuthErrorCode.ADMIN_ONLY_OPERATION */]: 'This operation is restricted to administrators only.',\r\n [\"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */]: '',\r\n [\"app-not-authorized\" /* AuthErrorCode.APP_NOT_AUTHORIZED */]: \"This app, identified by the domain where it's hosted, is not \" +\r\n 'authorized to use Firebase Authentication with the provided API key. ' +\r\n 'Review your key configuration in the Google API console.',\r\n [\"app-not-installed\" /* AuthErrorCode.APP_NOT_INSTALLED */]: 'The requested mobile application corresponding to the identifier (' +\r\n 'Android package name or iOS bundle ID) provided is not installed on ' +\r\n 'this device.',\r\n [\"captcha-check-failed\" /* AuthErrorCode.CAPTCHA_CHECK_FAILED */]: 'The reCAPTCHA response token provided is either invalid, expired, ' +\r\n 'already used or the domain associated with it does not match the list ' +\r\n 'of whitelisted domains.',\r\n [\"code-expired\" /* AuthErrorCode.CODE_EXPIRED */]: 'The SMS code has expired. Please re-send the verification code to try ' +\r\n 'again.',\r\n [\"cordova-not-ready\" /* AuthErrorCode.CORDOVA_NOT_READY */]: 'Cordova framework is not ready.',\r\n [\"cors-unsupported\" /* AuthErrorCode.CORS_UNSUPPORTED */]: 'This browser is not supported.',\r\n [\"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */]: 'This credential is already associated with a different user account.',\r\n [\"custom-token-mismatch\" /* AuthErrorCode.CREDENTIAL_MISMATCH */]: 'The custom token corresponds to a different audience.',\r\n [\"requires-recent-login\" /* AuthErrorCode.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */]: 'This operation is sensitive and requires recent authentication. Log in ' +\r\n 'again before retrying this request.',\r\n [\"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */]: 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\r\n 'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\r\n 'starting any other Firebase SDK.',\r\n [\"dynamic-link-not-activated\" /* AuthErrorCode.DYNAMIC_LINK_NOT_ACTIVATED */]: 'Please activate Dynamic Links in the Firebase Console and agree to the terms and ' +\r\n 'conditions.',\r\n [\"email-change-needs-verification\" /* AuthErrorCode.EMAIL_CHANGE_NEEDS_VERIFICATION */]: 'Multi-factor users must always have a verified email.',\r\n [\"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */]: 'The email address is already in use by another account.',\r\n [\"emulator-config-failed\" /* AuthErrorCode.EMULATOR_CONFIG_FAILED */]: 'Auth instance has already been used to make a network call. Auth can ' +\r\n 'no longer be configured to use the emulator. Try calling ' +\r\n '\"connectAuthEmulator()\" sooner.',\r\n [\"expired-action-code\" /* AuthErrorCode.EXPIRED_OOB_CODE */]: 'The action code has expired.',\r\n [\"cancelled-popup-request\" /* AuthErrorCode.EXPIRED_POPUP_REQUEST */]: 'This operation has been cancelled due to another conflicting popup being opened.',\r\n [\"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */]: 'An internal AuthError has occurred.',\r\n [\"invalid-app-credential\" /* AuthErrorCode.INVALID_APP_CREDENTIAL */]: 'The phone verification request contains an invalid application verifier.' +\r\n ' The reCAPTCHA token response is either invalid or expired.',\r\n [\"invalid-app-id\" /* AuthErrorCode.INVALID_APP_ID */]: 'The mobile app identifier is not registed for the current project.',\r\n [\"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */]: \"This user's credential isn't valid for this project. This can happen \" +\r\n \"if the user's token has been tampered with, or if the user isn't for \" +\r\n 'the project associated with this API key.',\r\n [\"invalid-auth-event\" /* AuthErrorCode.INVALID_AUTH_EVENT */]: 'An internal AuthError has occurred.',\r\n [\"invalid-verification-code\" /* AuthErrorCode.INVALID_CODE */]: 'The SMS verification code used to create the phone auth credential is ' +\r\n 'invalid. Please resend the verification code sms and be sure to use the ' +\r\n 'verification code provided by the user.',\r\n [\"invalid-continue-uri\" /* AuthErrorCode.INVALID_CONTINUE_URI */]: 'The continue URL provided in the request is invalid.',\r\n [\"invalid-cordova-configuration\" /* AuthErrorCode.INVALID_CORDOVA_CONFIGURATION */]: 'The following Cordova plugins must be installed to enable OAuth sign-in: ' +\r\n 'cordova-plugin-buildinfo, cordova-universal-links-plugin, ' +\r\n 'cordova-plugin-browsertab, cordova-plugin-inappbrowser and ' +\r\n 'cordova-plugin-customurlscheme.',\r\n [\"invalid-custom-token\" /* AuthErrorCode.INVALID_CUSTOM_TOKEN */]: 'The custom token format is incorrect. Please check the documentation.',\r\n [\"invalid-dynamic-link-domain\" /* AuthErrorCode.INVALID_DYNAMIC_LINK_DOMAIN */]: 'The provided dynamic link domain is not configured or authorized for the current project.',\r\n [\"invalid-email\" /* AuthErrorCode.INVALID_EMAIL */]: 'The email address is badly formatted.',\r\n [\"invalid-emulator-scheme\" /* AuthErrorCode.INVALID_EMULATOR_SCHEME */]: 'Emulator URL must start with a valid scheme (http:// or https://).',\r\n [\"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */]: 'Your API key is invalid, please check you have copied it correctly.',\r\n [\"invalid-cert-hash\" /* AuthErrorCode.INVALID_CERT_HASH */]: 'The SHA-1 certificate hash provided is invalid.',\r\n [\"invalid-credential\" /* AuthErrorCode.INVALID_IDP_RESPONSE */]: 'The supplied auth credential is malformed or has expired.',\r\n [\"invalid-message-payload\" /* AuthErrorCode.INVALID_MESSAGE_PAYLOAD */]: 'The email template corresponding to this action contains invalid characters in its message. ' +\r\n 'Please fix by going to the Auth email templates section in the Firebase Console.',\r\n [\"invalid-multi-factor-session\" /* AuthErrorCode.INVALID_MFA_SESSION */]: 'The request does not contain a valid proof of first factor successful sign-in.',\r\n [\"invalid-oauth-provider\" /* AuthErrorCode.INVALID_OAUTH_PROVIDER */]: 'EmailAuthProvider is not supported for this operation. This operation ' +\r\n 'only supports OAuth providers.',\r\n [\"invalid-oauth-client-id\" /* AuthErrorCode.INVALID_OAUTH_CLIENT_ID */]: 'The OAuth client ID provided is either invalid or does not match the ' +\r\n 'specified API key.',\r\n [\"unauthorized-domain\" /* AuthErrorCode.INVALID_ORIGIN */]: 'This domain is not authorized for OAuth operations for your Firebase ' +\r\n 'project. Edit the list of authorized domains from the Firebase console.',\r\n [\"invalid-action-code\" /* AuthErrorCode.INVALID_OOB_CODE */]: 'The action code is invalid. This can happen if the code is malformed, ' +\r\n 'expired, or has already been used.',\r\n [\"wrong-password\" /* AuthErrorCode.INVALID_PASSWORD */]: 'The password is invalid or the user does not have a password.',\r\n [\"invalid-persistence-type\" /* AuthErrorCode.INVALID_PERSISTENCE */]: 'The specified persistence type is invalid. It can only be local, session or none.',\r\n [\"invalid-phone-number\" /* AuthErrorCode.INVALID_PHONE_NUMBER */]: 'The format of the phone number provided is incorrect. Please enter the ' +\r\n 'phone number in a format that can be parsed into E.164 format. E.164 ' +\r\n 'phone numbers are written in the format [+][country code][subscriber ' +\r\n 'number including area code].',\r\n [\"invalid-provider-id\" /* AuthErrorCode.INVALID_PROVIDER_ID */]: 'The specified provider ID is invalid.',\r\n [\"invalid-recipient-email\" /* AuthErrorCode.INVALID_RECIPIENT_EMAIL */]: 'The email corresponding to this action failed to send as the provided ' +\r\n 'recipient email address is invalid.',\r\n [\"invalid-sender\" /* AuthErrorCode.INVALID_SENDER */]: 'The email template corresponding to this action contains an invalid sender email or name. ' +\r\n 'Please fix by going to the Auth email templates section in the Firebase Console.',\r\n [\"invalid-verification-id\" /* AuthErrorCode.INVALID_SESSION_INFO */]: 'The verification ID used to create the phone auth credential is invalid.',\r\n [\"invalid-tenant-id\" /* AuthErrorCode.INVALID_TENANT_ID */]: \"The Auth instance's tenant ID is invalid.\",\r\n [\"login-blocked\" /* AuthErrorCode.LOGIN_BLOCKED */]: 'Login blocked by user-provided method: {$originalMessage}',\r\n [\"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */]: 'An Android Package Name must be provided if the Android App is required to be installed.',\r\n [\"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */]: 'Be sure to include authDomain when calling firebase.initializeApp(), ' +\r\n 'by following the instructions in the Firebase console.',\r\n [\"missing-app-credential\" /* AuthErrorCode.MISSING_APP_CREDENTIAL */]: 'The phone verification request is missing an application verifier ' +\r\n 'assertion. A reCAPTCHA response token needs to be provided.',\r\n [\"missing-verification-code\" /* AuthErrorCode.MISSING_CODE */]: 'The phone auth credential was created with an empty SMS verification code.',\r\n [\"missing-continue-uri\" /* AuthErrorCode.MISSING_CONTINUE_URI */]: 'A continue URL must be provided in the request.',\r\n [\"missing-iframe-start\" /* AuthErrorCode.MISSING_IFRAME_START */]: 'An internal AuthError has occurred.',\r\n [\"missing-ios-bundle-id\" /* AuthErrorCode.MISSING_IOS_BUNDLE_ID */]: 'An iOS Bundle ID must be provided if an App Store ID is provided.',\r\n [\"missing-or-invalid-nonce\" /* AuthErrorCode.MISSING_OR_INVALID_NONCE */]: 'The request does not contain a valid nonce. This can occur if the ' +\r\n 'SHA-256 hash of the provided raw nonce does not match the hashed nonce ' +\r\n 'in the ID token payload.',\r\n [\"missing-password\" /* AuthErrorCode.MISSING_PASSWORD */]: 'A non-empty password must be provided',\r\n [\"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */]: 'No second factor identifier is provided.',\r\n [\"missing-multi-factor-session\" /* AuthErrorCode.MISSING_MFA_SESSION */]: 'The request is missing proof of first factor successful sign-in.',\r\n [\"missing-phone-number\" /* AuthErrorCode.MISSING_PHONE_NUMBER */]: 'To send verification codes, provide a phone number for the recipient.',\r\n [\"missing-verification-id\" /* AuthErrorCode.MISSING_SESSION_INFO */]: 'The phone auth credential was created with an empty verification ID.',\r\n [\"app-deleted\" /* AuthErrorCode.MODULE_DESTROYED */]: 'This instance of FirebaseApp has been deleted.',\r\n [\"multi-factor-info-not-found\" /* AuthErrorCode.MFA_INFO_NOT_FOUND */]: 'The user does not have a second factor matching the identifier provided.',\r\n [\"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */]: 'Proof of ownership of a second factor is required to complete sign-in.',\r\n [\"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */]: 'An account already exists with the same email address but different ' +\r\n 'sign-in credentials. Sign in using a provider associated with this ' +\r\n 'email address.',\r\n [\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */]: 'A network AuthError (such as timeout, interrupted connection or unreachable host) has occurred.',\r\n [\"no-auth-event\" /* AuthErrorCode.NO_AUTH_EVENT */]: 'An internal AuthError has occurred.',\r\n [\"no-such-provider\" /* AuthErrorCode.NO_SUCH_PROVIDER */]: 'User was not linked to an account with the given provider.',\r\n [\"null-user\" /* AuthErrorCode.NULL_USER */]: 'A null user object was provided as the argument for an operation which ' +\r\n 'requires a non-null user object.',\r\n [\"operation-not-allowed\" /* AuthErrorCode.OPERATION_NOT_ALLOWED */]: 'The given sign-in provider is disabled for this Firebase project. ' +\r\n 'Enable it in the Firebase console, under the sign-in method tab of the ' +\r\n 'Auth section.',\r\n [\"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */]: 'This operation is not supported in the environment this application is ' +\r\n 'running on. \"location.protocol\" must be http, https or chrome-extension' +\r\n ' and web storage must be enabled.',\r\n [\"popup-blocked\" /* AuthErrorCode.POPUP_BLOCKED */]: 'Unable to establish a connection with the popup. It may have been blocked by the browser.',\r\n [\"popup-closed-by-user\" /* AuthErrorCode.POPUP_CLOSED_BY_USER */]: 'The popup has been closed by the user before finalizing the operation.',\r\n [\"provider-already-linked\" /* AuthErrorCode.PROVIDER_ALREADY_LINKED */]: 'User can only be linked to one identity for the given provider.',\r\n [\"quota-exceeded\" /* AuthErrorCode.QUOTA_EXCEEDED */]: \"The project's quota for this operation has been exceeded.\",\r\n [\"redirect-cancelled-by-user\" /* AuthErrorCode.REDIRECT_CANCELLED_BY_USER */]: 'The redirect operation has been cancelled by the user before finalizing.',\r\n [\"redirect-operation-pending\" /* AuthErrorCode.REDIRECT_OPERATION_PENDING */]: 'A redirect sign-in operation is already pending.',\r\n [\"rejected-credential\" /* AuthErrorCode.REJECTED_CREDENTIAL */]: 'The request contains malformed or mismatching credentials.',\r\n [\"second-factor-already-in-use\" /* AuthErrorCode.SECOND_FACTOR_ALREADY_ENROLLED */]: 'The second factor is already enrolled on this account.',\r\n [\"maximum-second-factor-count-exceeded\" /* AuthErrorCode.SECOND_FACTOR_LIMIT_EXCEEDED */]: 'The maximum allowed number of second factors on a user has been exceeded.',\r\n [\"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */]: \"The provided tenant ID does not match the Auth instance's tenant ID\",\r\n [\"timeout\" /* AuthErrorCode.TIMEOUT */]: 'The operation has timed out.',\r\n [\"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */]: \"The user's credential is no longer valid. The user must sign in again.\",\r\n [\"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */]: 'We have blocked all requests from this device due to unusual activity. ' +\r\n 'Try again later.',\r\n [\"unauthorized-continue-uri\" /* AuthErrorCode.UNAUTHORIZED_DOMAIN */]: 'The domain of the continue URL is not whitelisted. Please whitelist ' +\r\n 'the domain in the Firebase console.',\r\n [\"unsupported-first-factor\" /* AuthErrorCode.UNSUPPORTED_FIRST_FACTOR */]: 'Enrolling a second factor or signing in with a multi-factor account requires sign-in with a supported first factor.',\r\n [\"unsupported-persistence-type\" /* AuthErrorCode.UNSUPPORTED_PERSISTENCE */]: 'The current environment does not support the specified persistence type.',\r\n [\"unsupported-tenant-operation\" /* AuthErrorCode.UNSUPPORTED_TENANT_OPERATION */]: 'This operation is not supported in a multi-tenant context.',\r\n [\"unverified-email\" /* AuthErrorCode.UNVERIFIED_EMAIL */]: 'The operation requires a verified email.',\r\n [\"user-cancelled\" /* AuthErrorCode.USER_CANCELLED */]: 'The user did not grant your application the permissions it requested.',\r\n [\"user-not-found\" /* AuthErrorCode.USER_DELETED */]: 'There is no user record corresponding to this identifier. The user may ' +\r\n 'have been deleted.',\r\n [\"user-disabled\" /* AuthErrorCode.USER_DISABLED */]: 'The user account has been disabled by an administrator.',\r\n [\"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */]: 'The supplied credentials do not correspond to the previously signed in user.',\r\n [\"user-signed-out\" /* AuthErrorCode.USER_SIGNED_OUT */]: '',\r\n [\"weak-password\" /* AuthErrorCode.WEAK_PASSWORD */]: 'The password must be 6 characters long or more.',\r\n [\"web-storage-unsupported\" /* AuthErrorCode.WEB_STORAGE_UNSUPPORTED */]: 'This browser is not supported or 3rd party cookies and data may be disabled.',\r\n [\"already-initialized\" /* AuthErrorCode.ALREADY_INITIALIZED */]: 'initializeAuth() has already been called with ' +\r\n 'different options. To avoid this error, call initializeAuth() with the ' +\r\n 'same options as when it was originally called, or call getAuth() to return the' +\r\n ' already initialized instance.',\r\n [\"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */]: 'The reCAPTCHA token is missing when sending request to the backend.',\r\n [\"invalid-recaptcha-token\" /* AuthErrorCode.INVALID_RECAPTCHA_TOKEN */]: 'The reCAPTCHA token is invalid when sending request to the backend.',\r\n [\"invalid-recaptcha-action\" /* AuthErrorCode.INVALID_RECAPTCHA_ACTION */]: 'The reCAPTCHA action is invalid when sending request to the backend.',\r\n [\"recaptcha-not-enabled\" /* AuthErrorCode.RECAPTCHA_NOT_ENABLED */]: 'reCAPTCHA Enterprise integration is not enabled for this project.',\r\n [\"missing-client-type\" /* AuthErrorCode.MISSING_CLIENT_TYPE */]: 'The reCAPTCHA client type is missing when sending request to the backend.',\r\n [\"missing-recaptcha-version\" /* AuthErrorCode.MISSING_RECAPTCHA_VERSION */]: 'The reCAPTCHA version is missing when sending request to the backend.',\r\n [\"invalid-req-type\" /* AuthErrorCode.INVALID_REQ_TYPE */]: 'Invalid request parameters.',\r\n [\"invalid-recaptcha-version\" /* AuthErrorCode.INVALID_RECAPTCHA_VERSION */]: 'The reCAPTCHA version is invalid when sending request to the backend.'\r\n };\r\n}\r\nfunction _prodErrorMap() {\r\n // We will include this one message in the prod error map since by the very\r\n // nature of this error, developers will never be able to see the message\r\n // using the debugErrorMap (which is installed during auth initialization).\r\n return {\r\n [\"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */]: 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\r\n 'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\r\n 'starting any other Firebase SDK.'\r\n };\r\n}\r\n/**\r\n * A verbose error map with detailed descriptions for most error codes.\r\n *\r\n * See discussion at {@link AuthErrorMap}\r\n *\r\n * @public\r\n */\r\nconst debugErrorMap = _debugErrorMap;\r\n/**\r\n * A minimal error map with all verbose error messages stripped.\r\n *\r\n * See discussion at {@link AuthErrorMap}\r\n *\r\n * @public\r\n */\r\nconst prodErrorMap = _prodErrorMap;\r\nconst _DEFAULT_AUTH_ERROR_FACTORY = new ErrorFactory('auth', 'Firebase', _prodErrorMap());\r\n/**\r\n * A map of potential `Auth` error codes, for easier comparison with errors\r\n * thrown by the SDK.\r\n *\r\n * @remarks\r\n * Note that you can't tree-shake individual keys\r\n * in the map, so by using the map you might substantially increase your\r\n * bundle size.\r\n *\r\n * @public\r\n */\r\nconst AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY = {\r\n ADMIN_ONLY_OPERATION: 'auth/admin-restricted-operation',\r\n ARGUMENT_ERROR: 'auth/argument-error',\r\n APP_NOT_AUTHORIZED: 'auth/app-not-authorized',\r\n APP_NOT_INSTALLED: 'auth/app-not-installed',\r\n CAPTCHA_CHECK_FAILED: 'auth/captcha-check-failed',\r\n CODE_EXPIRED: 'auth/code-expired',\r\n CORDOVA_NOT_READY: 'auth/cordova-not-ready',\r\n CORS_UNSUPPORTED: 'auth/cors-unsupported',\r\n CREDENTIAL_ALREADY_IN_USE: 'auth/credential-already-in-use',\r\n CREDENTIAL_MISMATCH: 'auth/custom-token-mismatch',\r\n CREDENTIAL_TOO_OLD_LOGIN_AGAIN: 'auth/requires-recent-login',\r\n DEPENDENT_SDK_INIT_BEFORE_AUTH: 'auth/dependent-sdk-initialized-before-auth',\r\n DYNAMIC_LINK_NOT_ACTIVATED: 'auth/dynamic-link-not-activated',\r\n EMAIL_CHANGE_NEEDS_VERIFICATION: 'auth/email-change-needs-verification',\r\n EMAIL_EXISTS: 'auth/email-already-in-use',\r\n EMULATOR_CONFIG_FAILED: 'auth/emulator-config-failed',\r\n EXPIRED_OOB_CODE: 'auth/expired-action-code',\r\n EXPIRED_POPUP_REQUEST: 'auth/cancelled-popup-request',\r\n INTERNAL_ERROR: 'auth/internal-error',\r\n INVALID_API_KEY: 'auth/invalid-api-key',\r\n INVALID_APP_CREDENTIAL: 'auth/invalid-app-credential',\r\n INVALID_APP_ID: 'auth/invalid-app-id',\r\n INVALID_AUTH: 'auth/invalid-user-token',\r\n INVALID_AUTH_EVENT: 'auth/invalid-auth-event',\r\n INVALID_CERT_HASH: 'auth/invalid-cert-hash',\r\n INVALID_CODE: 'auth/invalid-verification-code',\r\n INVALID_CONTINUE_URI: 'auth/invalid-continue-uri',\r\n INVALID_CORDOVA_CONFIGURATION: 'auth/invalid-cordova-configuration',\r\n INVALID_CUSTOM_TOKEN: 'auth/invalid-custom-token',\r\n INVALID_DYNAMIC_LINK_DOMAIN: 'auth/invalid-dynamic-link-domain',\r\n INVALID_EMAIL: 'auth/invalid-email',\r\n INVALID_EMULATOR_SCHEME: 'auth/invalid-emulator-scheme',\r\n INVALID_IDP_RESPONSE: 'auth/invalid-credential',\r\n INVALID_MESSAGE_PAYLOAD: 'auth/invalid-message-payload',\r\n INVALID_MFA_SESSION: 'auth/invalid-multi-factor-session',\r\n INVALID_OAUTH_CLIENT_ID: 'auth/invalid-oauth-client-id',\r\n INVALID_OAUTH_PROVIDER: 'auth/invalid-oauth-provider',\r\n INVALID_OOB_CODE: 'auth/invalid-action-code',\r\n INVALID_ORIGIN: 'auth/unauthorized-domain',\r\n INVALID_PASSWORD: 'auth/wrong-password',\r\n INVALID_PERSISTENCE: 'auth/invalid-persistence-type',\r\n INVALID_PHONE_NUMBER: 'auth/invalid-phone-number',\r\n INVALID_PROVIDER_ID: 'auth/invalid-provider-id',\r\n INVALID_RECIPIENT_EMAIL: 'auth/invalid-recipient-email',\r\n INVALID_SENDER: 'auth/invalid-sender',\r\n INVALID_SESSION_INFO: 'auth/invalid-verification-id',\r\n INVALID_TENANT_ID: 'auth/invalid-tenant-id',\r\n MFA_INFO_NOT_FOUND: 'auth/multi-factor-info-not-found',\r\n MFA_REQUIRED: 'auth/multi-factor-auth-required',\r\n MISSING_ANDROID_PACKAGE_NAME: 'auth/missing-android-pkg-name',\r\n MISSING_APP_CREDENTIAL: 'auth/missing-app-credential',\r\n MISSING_AUTH_DOMAIN: 'auth/auth-domain-config-required',\r\n MISSING_CODE: 'auth/missing-verification-code',\r\n MISSING_CONTINUE_URI: 'auth/missing-continue-uri',\r\n MISSING_IFRAME_START: 'auth/missing-iframe-start',\r\n MISSING_IOS_BUNDLE_ID: 'auth/missing-ios-bundle-id',\r\n MISSING_OR_INVALID_NONCE: 'auth/missing-or-invalid-nonce',\r\n MISSING_MFA_INFO: 'auth/missing-multi-factor-info',\r\n MISSING_MFA_SESSION: 'auth/missing-multi-factor-session',\r\n MISSING_PHONE_NUMBER: 'auth/missing-phone-number',\r\n MISSING_SESSION_INFO: 'auth/missing-verification-id',\r\n MODULE_DESTROYED: 'auth/app-deleted',\r\n NEED_CONFIRMATION: 'auth/account-exists-with-different-credential',\r\n NETWORK_REQUEST_FAILED: 'auth/network-request-failed',\r\n NULL_USER: 'auth/null-user',\r\n NO_AUTH_EVENT: 'auth/no-auth-event',\r\n NO_SUCH_PROVIDER: 'auth/no-such-provider',\r\n OPERATION_NOT_ALLOWED: 'auth/operation-not-allowed',\r\n OPERATION_NOT_SUPPORTED: 'auth/operation-not-supported-in-this-environment',\r\n POPUP_BLOCKED: 'auth/popup-blocked',\r\n POPUP_CLOSED_BY_USER: 'auth/popup-closed-by-user',\r\n PROVIDER_ALREADY_LINKED: 'auth/provider-already-linked',\r\n QUOTA_EXCEEDED: 'auth/quota-exceeded',\r\n REDIRECT_CANCELLED_BY_USER: 'auth/redirect-cancelled-by-user',\r\n REDIRECT_OPERATION_PENDING: 'auth/redirect-operation-pending',\r\n REJECTED_CREDENTIAL: 'auth/rejected-credential',\r\n SECOND_FACTOR_ALREADY_ENROLLED: 'auth/second-factor-already-in-use',\r\n SECOND_FACTOR_LIMIT_EXCEEDED: 'auth/maximum-second-factor-count-exceeded',\r\n TENANT_ID_MISMATCH: 'auth/tenant-id-mismatch',\r\n TIMEOUT: 'auth/timeout',\r\n TOKEN_EXPIRED: 'auth/user-token-expired',\r\n TOO_MANY_ATTEMPTS_TRY_LATER: 'auth/too-many-requests',\r\n UNAUTHORIZED_DOMAIN: 'auth/unauthorized-continue-uri',\r\n UNSUPPORTED_FIRST_FACTOR: 'auth/unsupported-first-factor',\r\n UNSUPPORTED_PERSISTENCE: 'auth/unsupported-persistence-type',\r\n UNSUPPORTED_TENANT_OPERATION: 'auth/unsupported-tenant-operation',\r\n UNVERIFIED_EMAIL: 'auth/unverified-email',\r\n USER_CANCELLED: 'auth/user-cancelled',\r\n USER_DELETED: 'auth/user-not-found',\r\n USER_DISABLED: 'auth/user-disabled',\r\n USER_MISMATCH: 'auth/user-mismatch',\r\n USER_SIGNED_OUT: 'auth/user-signed-out',\r\n WEAK_PASSWORD: 'auth/weak-password',\r\n WEB_STORAGE_UNSUPPORTED: 'auth/web-storage-unsupported',\r\n ALREADY_INITIALIZED: 'auth/already-initialized',\r\n RECAPTCHA_NOT_ENABLED: 'auth/recaptcha-not-enabled',\r\n MISSING_RECAPTCHA_TOKEN: 'auth/missing-recaptcha-token',\r\n INVALID_RECAPTCHA_TOKEN: 'auth/invalid-recaptcha-token',\r\n INVALID_RECAPTCHA_ACTION: 'auth/invalid-recaptcha-action',\r\n MISSING_CLIENT_TYPE: 'auth/missing-client-type',\r\n MISSING_RECAPTCHA_VERSION: 'auth/missing-recaptcha-version',\r\n INVALID_RECAPTCHA_VERSION: 'auth/invalid-recaptcha-version',\r\n INVALID_REQ_TYPE: 'auth/invalid-req-type'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logClient = new Logger('@firebase/auth');\r\nfunction _logWarn(msg, ...args) {\r\n if (logClient.logLevel <= LogLevel.WARN) {\r\n logClient.warn(`Auth (${SDK_VERSION}): ${msg}`, ...args);\r\n }\r\n}\r\nfunction _logError(msg, ...args) {\r\n if (logClient.logLevel <= LogLevel.ERROR) {\r\n logClient.error(`Auth (${SDK_VERSION}): ${msg}`, ...args);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _fail(authOrCode, ...rest) {\r\n throw createErrorInternal(authOrCode, ...rest);\r\n}\r\nfunction _createError(authOrCode, ...rest) {\r\n return createErrorInternal(authOrCode, ...rest);\r\n}\r\nfunction _errorWithCustomMessage(auth, code, message) {\r\n const errorMap = Object.assign(Object.assign({}, prodErrorMap()), { [code]: message });\r\n const factory = new ErrorFactory('auth', 'Firebase', errorMap);\r\n return factory.create(code, {\r\n appName: auth.name\r\n });\r\n}\r\nfunction _assertInstanceOf(auth, object, instance) {\r\n const constructorInstance = instance;\r\n if (!(object instanceof constructorInstance)) {\r\n if (constructorInstance.name !== object.constructor.name) {\r\n _fail(auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n }\r\n throw _errorWithCustomMessage(auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */, `Type of ${object.constructor.name} does not match expected instance.` +\r\n `Did you pass a reference from a different Auth SDK?`);\r\n }\r\n}\r\nfunction createErrorInternal(authOrCode, ...rest) {\r\n if (typeof authOrCode !== 'string') {\r\n const code = rest[0];\r\n const fullParams = [...rest.slice(1)];\r\n if (fullParams[0]) {\r\n fullParams[0].appName = authOrCode.name;\r\n }\r\n return authOrCode._errorFactory.create(code, ...fullParams);\r\n }\r\n return _DEFAULT_AUTH_ERROR_FACTORY.create(authOrCode, ...rest);\r\n}\r\nfunction _assert(assertion, authOrCode, ...rest) {\r\n if (!assertion) {\r\n throw createErrorInternal(authOrCode, ...rest);\r\n }\r\n}\r\n/**\r\n * Unconditionally fails, throwing an internal error with the given message.\r\n *\r\n * @param failure type of failure encountered\r\n * @throws Error\r\n */\r\nfunction debugFail(failure) {\r\n // Log the failure in addition to throw an exception, just in case the\r\n // exception is swallowed.\r\n const message = `INTERNAL ASSERTION FAILED: ` + failure;\r\n _logError(message);\r\n // NOTE: We don't use FirebaseError here because these are internal failures\r\n // that cannot be handled by the user. (Also it would create a circular\r\n // dependency between the error and assert modules which doesn't work.)\r\n throw new Error(message);\r\n}\r\n/**\r\n * Fails if the given assertion condition is false, throwing an Error with the\r\n * given message if it did.\r\n *\r\n * @param assertion\r\n * @param message\r\n */\r\nfunction debugAssert(assertion, message) {\r\n if (!assertion) {\r\n debugFail(message);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _getCurrentUrl() {\r\n var _a;\r\n return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.href)) || '';\r\n}\r\nfunction _isHttpOrHttps() {\r\n return _getCurrentScheme() === 'http:' || _getCurrentScheme() === 'https:';\r\n}\r\nfunction _getCurrentScheme() {\r\n var _a;\r\n return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.protocol)) || null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Determine whether the browser is working online\r\n */\r\nfunction _isOnline() {\r\n if (typeof navigator !== 'undefined' &&\r\n navigator &&\r\n 'onLine' in navigator &&\r\n typeof navigator.onLine === 'boolean' &&\r\n // Apply only for traditional web apps and Chrome extensions.\r\n // This is especially true for Cordova apps which have unreliable\r\n // navigator.onLine behavior unless cordova-plugin-network-information is\r\n // installed which overwrites the native navigator.onLine value and\r\n // defines navigator.connection.\r\n (_isHttpOrHttps() || isBrowserExtension() || 'connection' in navigator)) {\r\n return navigator.onLine;\r\n }\r\n // If we can't determine the state, assume it is online.\r\n return true;\r\n}\r\nfunction _getUserLanguage() {\r\n if (typeof navigator === 'undefined') {\r\n return null;\r\n }\r\n const navigatorLanguage = navigator;\r\n return (\r\n // Most reliable, but only supported in Chrome/Firefox.\r\n (navigatorLanguage.languages && navigatorLanguage.languages[0]) ||\r\n // Supported in most browsers, but returns the language of the browser\r\n // UI, not the language set in browser settings.\r\n navigatorLanguage.language ||\r\n // Couldn't determine language.\r\n null);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A structure to help pick between a range of long and short delay durations\r\n * depending on the current environment. In general, the long delay is used for\r\n * mobile environments whereas short delays are used for desktop environments.\r\n */\r\nclass Delay {\r\n constructor(shortDelay, longDelay) {\r\n this.shortDelay = shortDelay;\r\n this.longDelay = longDelay;\r\n // Internal error when improperly initialized.\r\n debugAssert(longDelay > shortDelay, 'Short delay should be less than long delay!');\r\n this.isMobile = isMobileCordova() || isReactNative();\r\n }\r\n get() {\r\n if (!_isOnline()) {\r\n // Pick the shorter timeout.\r\n return Math.min(5000 /* DelayMin.OFFLINE */, this.shortDelay);\r\n }\r\n // If running in a mobile environment, return the long delay, otherwise\r\n // return the short delay.\r\n // This could be improved in the future to dynamically change based on other\r\n // variables instead of just reading the current environment.\r\n return this.isMobile ? this.longDelay : this.shortDelay;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _emulatorUrl(config, path) {\r\n debugAssert(config.emulator, 'Emulator should always be set here');\r\n const { url } = config.emulator;\r\n if (!path) {\r\n return url;\r\n }\r\n return `${url}${path.startsWith('/') ? path.slice(1) : path}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FetchProvider {\r\n static initialize(fetchImpl, headersImpl, responseImpl) {\r\n this.fetchImpl = fetchImpl;\r\n if (headersImpl) {\r\n this.headersImpl = headersImpl;\r\n }\r\n if (responseImpl) {\r\n this.responseImpl = responseImpl;\r\n }\r\n }\r\n static fetch() {\r\n if (this.fetchImpl) {\r\n return this.fetchImpl;\r\n }\r\n if (typeof self !== 'undefined' && 'fetch' in self) {\r\n return self.fetch;\r\n }\r\n debugFail('Could not find fetch implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n }\r\n static headers() {\r\n if (this.headersImpl) {\r\n return this.headersImpl;\r\n }\r\n if (typeof self !== 'undefined' && 'Headers' in self) {\r\n return self.Headers;\r\n }\r\n debugFail('Could not find Headers implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n }\r\n static response() {\r\n if (this.responseImpl) {\r\n return this.responseImpl;\r\n }\r\n if (typeof self !== 'undefined' && 'Response' in self) {\r\n return self.Response;\r\n }\r\n debugFail('Could not find Response implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Map from errors returned by the server to errors to developer visible errors\r\n */\r\nconst SERVER_ERROR_MAP = {\r\n // Custom token errors.\r\n [\"CREDENTIAL_MISMATCH\" /* ServerError.CREDENTIAL_MISMATCH */]: \"custom-token-mismatch\" /* AuthErrorCode.CREDENTIAL_MISMATCH */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_CUSTOM_TOKEN\" /* ServerError.MISSING_CUSTOM_TOKEN */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Create Auth URI errors.\r\n [\"INVALID_IDENTIFIER\" /* ServerError.INVALID_IDENTIFIER */]: \"invalid-email\" /* AuthErrorCode.INVALID_EMAIL */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_CONTINUE_URI\" /* ServerError.MISSING_CONTINUE_URI */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Sign in with email and password errors (some apply to sign up too).\r\n [\"INVALID_PASSWORD\" /* ServerError.INVALID_PASSWORD */]: \"wrong-password\" /* AuthErrorCode.INVALID_PASSWORD */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_PASSWORD\" /* ServerError.MISSING_PASSWORD */]: \"missing-password\" /* AuthErrorCode.MISSING_PASSWORD */,\r\n // Sign up with email and password errors.\r\n [\"EMAIL_EXISTS\" /* ServerError.EMAIL_EXISTS */]: \"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */,\r\n [\"PASSWORD_LOGIN_DISABLED\" /* ServerError.PASSWORD_LOGIN_DISABLED */]: \"operation-not-allowed\" /* AuthErrorCode.OPERATION_NOT_ALLOWED */,\r\n // Verify assertion for sign in with credential errors:\r\n [\"INVALID_IDP_RESPONSE\" /* ServerError.INVALID_IDP_RESPONSE */]: \"invalid-credential\" /* AuthErrorCode.INVALID_IDP_RESPONSE */,\r\n [\"INVALID_PENDING_TOKEN\" /* ServerError.INVALID_PENDING_TOKEN */]: \"invalid-credential\" /* AuthErrorCode.INVALID_IDP_RESPONSE */,\r\n [\"FEDERATED_USER_ID_ALREADY_LINKED\" /* ServerError.FEDERATED_USER_ID_ALREADY_LINKED */]: \"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_REQ_TYPE\" /* ServerError.MISSING_REQ_TYPE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Send Password reset email errors:\r\n [\"EMAIL_NOT_FOUND\" /* ServerError.EMAIL_NOT_FOUND */]: \"user-not-found\" /* AuthErrorCode.USER_DELETED */,\r\n [\"RESET_PASSWORD_EXCEED_LIMIT\" /* ServerError.RESET_PASSWORD_EXCEED_LIMIT */]: \"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */,\r\n [\"EXPIRED_OOB_CODE\" /* ServerError.EXPIRED_OOB_CODE */]: \"expired-action-code\" /* AuthErrorCode.EXPIRED_OOB_CODE */,\r\n [\"INVALID_OOB_CODE\" /* ServerError.INVALID_OOB_CODE */]: \"invalid-action-code\" /* AuthErrorCode.INVALID_OOB_CODE */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_OOB_CODE\" /* ServerError.MISSING_OOB_CODE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Operations that require ID token in request:\r\n [\"CREDENTIAL_TOO_OLD_LOGIN_AGAIN\" /* ServerError.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */]: \"requires-recent-login\" /* AuthErrorCode.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */,\r\n [\"INVALID_ID_TOKEN\" /* ServerError.INVALID_ID_TOKEN */]: \"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */,\r\n [\"TOKEN_EXPIRED\" /* ServerError.TOKEN_EXPIRED */]: \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */,\r\n [\"USER_NOT_FOUND\" /* ServerError.USER_NOT_FOUND */]: \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */,\r\n // Other errors.\r\n [\"TOO_MANY_ATTEMPTS_TRY_LATER\" /* ServerError.TOO_MANY_ATTEMPTS_TRY_LATER */]: \"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */,\r\n // Phone Auth related errors.\r\n [\"INVALID_CODE\" /* ServerError.INVALID_CODE */]: \"invalid-verification-code\" /* AuthErrorCode.INVALID_CODE */,\r\n [\"INVALID_SESSION_INFO\" /* ServerError.INVALID_SESSION_INFO */]: \"invalid-verification-id\" /* AuthErrorCode.INVALID_SESSION_INFO */,\r\n [\"INVALID_TEMPORARY_PROOF\" /* ServerError.INVALID_TEMPORARY_PROOF */]: \"invalid-credential\" /* AuthErrorCode.INVALID_IDP_RESPONSE */,\r\n [\"MISSING_SESSION_INFO\" /* ServerError.MISSING_SESSION_INFO */]: \"missing-verification-id\" /* AuthErrorCode.MISSING_SESSION_INFO */,\r\n [\"SESSION_EXPIRED\" /* ServerError.SESSION_EXPIRED */]: \"code-expired\" /* AuthErrorCode.CODE_EXPIRED */,\r\n // Other action code errors when additional settings passed.\r\n // MISSING_CONTINUE_URI is getting mapped to INTERNAL_ERROR above.\r\n // This is OK as this error will be caught by client side validation.\r\n [\"MISSING_ANDROID_PACKAGE_NAME\" /* ServerError.MISSING_ANDROID_PACKAGE_NAME */]: \"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */,\r\n [\"UNAUTHORIZED_DOMAIN\" /* ServerError.UNAUTHORIZED_DOMAIN */]: \"unauthorized-continue-uri\" /* AuthErrorCode.UNAUTHORIZED_DOMAIN */,\r\n // getProjectConfig errors when clientId is passed.\r\n [\"INVALID_OAUTH_CLIENT_ID\" /* ServerError.INVALID_OAUTH_CLIENT_ID */]: \"invalid-oauth-client-id\" /* AuthErrorCode.INVALID_OAUTH_CLIENT_ID */,\r\n // User actions (sign-up or deletion) disabled errors.\r\n [\"ADMIN_ONLY_OPERATION\" /* ServerError.ADMIN_ONLY_OPERATION */]: \"admin-restricted-operation\" /* AuthErrorCode.ADMIN_ONLY_OPERATION */,\r\n // Multi factor related errors.\r\n [\"INVALID_MFA_PENDING_CREDENTIAL\" /* ServerError.INVALID_MFA_PENDING_CREDENTIAL */]: \"invalid-multi-factor-session\" /* AuthErrorCode.INVALID_MFA_SESSION */,\r\n [\"MFA_ENROLLMENT_NOT_FOUND\" /* ServerError.MFA_ENROLLMENT_NOT_FOUND */]: \"multi-factor-info-not-found\" /* AuthErrorCode.MFA_INFO_NOT_FOUND */,\r\n [\"MISSING_MFA_ENROLLMENT_ID\" /* ServerError.MISSING_MFA_ENROLLMENT_ID */]: \"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */,\r\n [\"MISSING_MFA_PENDING_CREDENTIAL\" /* ServerError.MISSING_MFA_PENDING_CREDENTIAL */]: \"missing-multi-factor-session\" /* AuthErrorCode.MISSING_MFA_SESSION */,\r\n [\"SECOND_FACTOR_EXISTS\" /* ServerError.SECOND_FACTOR_EXISTS */]: \"second-factor-already-in-use\" /* AuthErrorCode.SECOND_FACTOR_ALREADY_ENROLLED */,\r\n [\"SECOND_FACTOR_LIMIT_EXCEEDED\" /* ServerError.SECOND_FACTOR_LIMIT_EXCEEDED */]: \"maximum-second-factor-count-exceeded\" /* AuthErrorCode.SECOND_FACTOR_LIMIT_EXCEEDED */,\r\n // Blocking functions related errors.\r\n [\"BLOCKING_FUNCTION_ERROR_RESPONSE\" /* ServerError.BLOCKING_FUNCTION_ERROR_RESPONSE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Recaptcha related errors.\r\n [\"RECAPTCHA_NOT_ENABLED\" /* ServerError.RECAPTCHA_NOT_ENABLED */]: \"recaptcha-not-enabled\" /* AuthErrorCode.RECAPTCHA_NOT_ENABLED */,\r\n [\"MISSING_RECAPTCHA_TOKEN\" /* ServerError.MISSING_RECAPTCHA_TOKEN */]: \"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */,\r\n [\"INVALID_RECAPTCHA_TOKEN\" /* ServerError.INVALID_RECAPTCHA_TOKEN */]: \"invalid-recaptcha-token\" /* AuthErrorCode.INVALID_RECAPTCHA_TOKEN */,\r\n [\"INVALID_RECAPTCHA_ACTION\" /* ServerError.INVALID_RECAPTCHA_ACTION */]: \"invalid-recaptcha-action\" /* AuthErrorCode.INVALID_RECAPTCHA_ACTION */,\r\n [\"MISSING_CLIENT_TYPE\" /* ServerError.MISSING_CLIENT_TYPE */]: \"missing-client-type\" /* AuthErrorCode.MISSING_CLIENT_TYPE */,\r\n [\"MISSING_RECAPTCHA_VERSION\" /* ServerError.MISSING_RECAPTCHA_VERSION */]: \"missing-recaptcha-version\" /* AuthErrorCode.MISSING_RECAPTCHA_VERSION */,\r\n [\"INVALID_RECAPTCHA_VERSION\" /* ServerError.INVALID_RECAPTCHA_VERSION */]: \"invalid-recaptcha-version\" /* AuthErrorCode.INVALID_RECAPTCHA_VERSION */,\r\n [\"INVALID_REQ_TYPE\" /* ServerError.INVALID_REQ_TYPE */]: \"invalid-req-type\" /* AuthErrorCode.INVALID_REQ_TYPE */\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_API_TIMEOUT_MS = new Delay(30000, 60000);\r\nfunction _addTidIfNecessary(auth, request) {\r\n if (auth.tenantId && !request.tenantId) {\r\n return Object.assign(Object.assign({}, request), { tenantId: auth.tenantId });\r\n }\r\n return request;\r\n}\r\nasync function _performApiRequest(auth, method, path, request, customErrorMap = {}) {\r\n return _performFetchWithErrorHandling(auth, customErrorMap, async () => {\r\n let body = {};\r\n let params = {};\r\n if (request) {\r\n if (method === \"GET\" /* HttpMethod.GET */) {\r\n params = request;\r\n }\r\n else {\r\n body = {\r\n body: JSON.stringify(request)\r\n };\r\n }\r\n }\r\n const query = querystring(Object.assign({ key: auth.config.apiKey }, params)).slice(1);\r\n const headers = await auth._getAdditionalHeaders();\r\n headers[\"Content-Type\" /* HttpHeader.CONTENT_TYPE */] = 'application/json';\r\n if (auth.languageCode) {\r\n headers[\"X-Firebase-Locale\" /* HttpHeader.X_FIREBASE_LOCALE */] = auth.languageCode;\r\n }\r\n return FetchProvider.fetch()(_getFinalTarget(auth, auth.config.apiHost, path, query), Object.assign({ method,\r\n headers, referrerPolicy: 'no-referrer' }, body));\r\n });\r\n}\r\nasync function _performFetchWithErrorHandling(auth, customErrorMap, fetchFn) {\r\n auth._canInitEmulator = false;\r\n const errorMap = Object.assign(Object.assign({}, SERVER_ERROR_MAP), customErrorMap);\r\n try {\r\n const networkTimeout = new NetworkTimeout(auth);\r\n const response = await Promise.race([\r\n fetchFn(),\r\n networkTimeout.promise\r\n ]);\r\n // If we've reached this point, the fetch succeeded and the networkTimeout\r\n // didn't throw; clear the network timeout delay so that Node won't hang\r\n networkTimeout.clearNetworkTimeout();\r\n const json = await response.json();\r\n if ('needConfirmation' in json) {\r\n throw _makeTaggedError(auth, \"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */, json);\r\n }\r\n if (response.ok && !('errorMessage' in json)) {\r\n return json;\r\n }\r\n else {\r\n const errorMessage = response.ok ? json.errorMessage : json.error.message;\r\n const [serverErrorCode, serverErrorMessage] = errorMessage.split(' : ');\r\n if (serverErrorCode === \"FEDERATED_USER_ID_ALREADY_LINKED\" /* ServerError.FEDERATED_USER_ID_ALREADY_LINKED */) {\r\n throw _makeTaggedError(auth, \"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */, json);\r\n }\r\n else if (serverErrorCode === \"EMAIL_EXISTS\" /* ServerError.EMAIL_EXISTS */) {\r\n throw _makeTaggedError(auth, \"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */, json);\r\n }\r\n else if (serverErrorCode === \"USER_DISABLED\" /* ServerError.USER_DISABLED */) {\r\n throw _makeTaggedError(auth, \"user-disabled\" /* AuthErrorCode.USER_DISABLED */, json);\r\n }\r\n const authError = errorMap[serverErrorCode] ||\r\n serverErrorCode\r\n .toLowerCase()\r\n .replace(/[_\\s]+/g, '-');\r\n if (serverErrorMessage) {\r\n throw _errorWithCustomMessage(auth, authError, serverErrorMessage);\r\n }\r\n else {\r\n _fail(auth, authError);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n throw e;\r\n }\r\n // Changing this to a different error code will log user out when there is a network error\r\n // because we treat any error other than NETWORK_REQUEST_FAILED as token is invalid.\r\n // https://github.com/firebase/firebase-js-sdk/blob/4fbc73610d70be4e0852e7de63a39cb7897e8546/packages/auth/src/core/auth/auth_impl.ts#L309-L316\r\n _fail(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */, { 'message': String(e) });\r\n }\r\n}\r\nasync function _performSignInRequest(auth, method, path, request, customErrorMap = {}) {\r\n const serverResponse = (await _performApiRequest(auth, method, path, request, customErrorMap));\r\n if ('mfaPendingCredential' in serverResponse) {\r\n _fail(auth, \"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */, {\r\n _serverResponse: serverResponse\r\n });\r\n }\r\n return serverResponse;\r\n}\r\nfunction _getFinalTarget(auth, host, path, query) {\r\n const base = `${host}${path}?${query}`;\r\n if (!auth.config.emulator) {\r\n return `${auth.config.apiScheme}://${base}`;\r\n }\r\n return _emulatorUrl(auth.config, base);\r\n}\r\nclass NetworkTimeout {\r\n constructor(auth) {\r\n this.auth = auth;\r\n // Node timers and browser timers are fundamentally incompatible, but we\r\n // don't care about the value here\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.timer = null;\r\n this.promise = new Promise((_, reject) => {\r\n this.timer = setTimeout(() => {\r\n return reject(_createError(this.auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n }, DEFAULT_API_TIMEOUT_MS.get());\r\n });\r\n }\r\n clearNetworkTimeout() {\r\n clearTimeout(this.timer);\r\n }\r\n}\r\nfunction _makeTaggedError(auth, code, response) {\r\n const errorParams = {\r\n appName: auth.name\r\n };\r\n if (response.email) {\r\n errorParams.email = response.email;\r\n }\r\n if (response.phoneNumber) {\r\n errorParams.phoneNumber = response.phoneNumber;\r\n }\r\n const error = _createError(auth, code, errorParams);\r\n // We know customData is defined on error because errorParams is defined\r\n error.customData._tokenResponse = response;\r\n return error;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function deleteAccount(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:delete\" /* Endpoint.DELETE_ACCOUNT */, request);\r\n}\r\nasync function deleteLinkedAccounts(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\r\n}\r\nasync function getAccountInfo(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:lookup\" /* Endpoint.GET_ACCOUNT_INFO */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction utcTimestampToDateString(utcTimestamp) {\r\n if (!utcTimestamp) {\r\n return undefined;\r\n }\r\n try {\r\n // Convert to date object.\r\n const date = new Date(Number(utcTimestamp));\r\n // Test date is valid.\r\n if (!isNaN(date.getTime())) {\r\n // Convert to UTC date string.\r\n return date.toUTCString();\r\n }\r\n }\r\n catch (e) {\r\n // Do nothing. undefined will be returned.\r\n }\r\n return undefined;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a JSON Web Token (JWT) used to identify the user to a Firebase service.\r\n *\r\n * @remarks\r\n * Returns the current token if it has not expired or if it will not expire in the next five\r\n * minutes. Otherwise, this will refresh the token and return a new one.\r\n *\r\n * @param user - The user.\r\n * @param forceRefresh - Force refresh regardless of token expiration.\r\n *\r\n * @public\r\n */\r\nfunction getIdToken(user, forceRefresh = false) {\r\n return getModularInstance(user).getIdToken(forceRefresh);\r\n}\r\n/**\r\n * Returns a deserialized JSON Web Token (JWT) used to identify the user to a Firebase service.\r\n *\r\n * @remarks\r\n * Returns the current token if it has not expired or if it will not expire in the next five\r\n * minutes. Otherwise, this will refresh the token and return a new one.\r\n *\r\n * @param user - The user.\r\n * @param forceRefresh - Force refresh regardless of token expiration.\r\n *\r\n * @public\r\n */\r\nasync function getIdTokenResult(user, forceRefresh = false) {\r\n const userInternal = getModularInstance(user);\r\n const token = await userInternal.getIdToken(forceRefresh);\r\n const claims = _parseToken(token);\r\n _assert(claims && claims.exp && claims.auth_time && claims.iat, userInternal.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const firebase = typeof claims.firebase === 'object' ? claims.firebase : undefined;\r\n const signInProvider = firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_provider'];\r\n return {\r\n claims,\r\n token,\r\n authTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.auth_time)),\r\n issuedAtTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.iat)),\r\n expirationTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.exp)),\r\n signInProvider: signInProvider || null,\r\n signInSecondFactor: (firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_second_factor']) || null\r\n };\r\n}\r\nfunction secondsStringToMilliseconds(seconds) {\r\n return Number(seconds) * 1000;\r\n}\r\nfunction _parseToken(token) {\r\n const [algorithm, payload, signature] = token.split('.');\r\n if (algorithm === undefined ||\r\n payload === undefined ||\r\n signature === undefined) {\r\n _logError('JWT malformed, contained fewer than 3 sections');\r\n return null;\r\n }\r\n try {\r\n const decoded = base64Decode(payload);\r\n if (!decoded) {\r\n _logError('Failed to decode base64 JWT payload');\r\n return null;\r\n }\r\n return JSON.parse(decoded);\r\n }\r\n catch (e) {\r\n _logError('Caught error parsing JWT payload as JSON', e === null || e === void 0 ? void 0 : e.toString());\r\n return null;\r\n }\r\n}\r\n/**\r\n * Extract expiresIn TTL from a token by subtracting the expiration from the issuance.\r\n */\r\nfunction _tokenExpiresIn(token) {\r\n const parsedToken = _parseToken(token);\r\n _assert(parsedToken, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof parsedToken.exp !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof parsedToken.iat !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return Number(parsedToken.exp) - Number(parsedToken.iat);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _logoutIfInvalidated(user, promise, bypassAuthState = false) {\r\n if (bypassAuthState) {\r\n return promise;\r\n }\r\n try {\r\n return await promise;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError && isUserInvalidated(e)) {\r\n if (user.auth.currentUser === user) {\r\n await user.auth.signOut();\r\n }\r\n }\r\n throw e;\r\n }\r\n}\r\nfunction isUserInvalidated({ code }) {\r\n return (code === `auth/${\"user-disabled\" /* AuthErrorCode.USER_DISABLED */}` ||\r\n code === `auth/${\"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */}`);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ProactiveRefresh {\r\n constructor(user) {\r\n this.user = user;\r\n this.isRunning = false;\r\n // Node timers and browser timers return fundamentally different types.\r\n // We don't actually care what the value is but TS won't accept unknown and\r\n // we can't cast properly in both environments.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.timerId = null;\r\n this.errorBackoff = 30000 /* Duration.RETRY_BACKOFF_MIN */;\r\n }\r\n _start() {\r\n if (this.isRunning) {\r\n return;\r\n }\r\n this.isRunning = true;\r\n this.schedule();\r\n }\r\n _stop() {\r\n if (!this.isRunning) {\r\n return;\r\n }\r\n this.isRunning = false;\r\n if (this.timerId !== null) {\r\n clearTimeout(this.timerId);\r\n }\r\n }\r\n getInterval(wasError) {\r\n var _a;\r\n if (wasError) {\r\n const interval = this.errorBackoff;\r\n this.errorBackoff = Math.min(this.errorBackoff * 2, 960000 /* Duration.RETRY_BACKOFF_MAX */);\r\n return interval;\r\n }\r\n else {\r\n // Reset the error backoff\r\n this.errorBackoff = 30000 /* Duration.RETRY_BACKOFF_MIN */;\r\n const expTime = (_a = this.user.stsTokenManager.expirationTime) !== null && _a !== void 0 ? _a : 0;\r\n const interval = expTime - Date.now() - 300000 /* Duration.OFFSET */;\r\n return Math.max(0, interval);\r\n }\r\n }\r\n schedule(wasError = false) {\r\n if (!this.isRunning) {\r\n // Just in case...\r\n return;\r\n }\r\n const interval = this.getInterval(wasError);\r\n this.timerId = setTimeout(async () => {\r\n await this.iteration();\r\n }, interval);\r\n }\r\n async iteration() {\r\n try {\r\n await this.user.getIdToken(true);\r\n }\r\n catch (e) {\r\n // Only retry on network errors\r\n if ((e === null || e === void 0 ? void 0 : e.code) ===\r\n `auth/${\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */}`) {\r\n this.schedule(/* wasError */ true);\r\n }\r\n return;\r\n }\r\n this.schedule();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass UserMetadata {\r\n constructor(createdAt, lastLoginAt) {\r\n this.createdAt = createdAt;\r\n this.lastLoginAt = lastLoginAt;\r\n this._initializeTime();\r\n }\r\n _initializeTime() {\r\n this.lastSignInTime = utcTimestampToDateString(this.lastLoginAt);\r\n this.creationTime = utcTimestampToDateString(this.createdAt);\r\n }\r\n _copy(metadata) {\r\n this.createdAt = metadata.createdAt;\r\n this.lastLoginAt = metadata.lastLoginAt;\r\n this._initializeTime();\r\n }\r\n toJSON() {\r\n return {\r\n createdAt: this.createdAt,\r\n lastLoginAt: this.lastLoginAt\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _reloadWithoutSaving(user) {\r\n var _a;\r\n const auth = user.auth;\r\n const idToken = await user.getIdToken();\r\n const response = await _logoutIfInvalidated(user, getAccountInfo(auth, { idToken }));\r\n _assert(response === null || response === void 0 ? void 0 : response.users.length, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const coreAccount = response.users[0];\r\n user._notifyReloadListener(coreAccount);\r\n const newProviderData = ((_a = coreAccount.providerUserInfo) === null || _a === void 0 ? void 0 : _a.length)\r\n ? extractProviderData(coreAccount.providerUserInfo)\r\n : [];\r\n const providerData = mergeProviderData(user.providerData, newProviderData);\r\n // Preserves the non-nonymous status of the stored user, even if no more\r\n // credentials (federated or email/password) are linked to the user. If\r\n // the user was previously anonymous, then use provider data to update.\r\n // On the other hand, if it was not anonymous before, it should never be\r\n // considered anonymous now.\r\n const oldIsAnonymous = user.isAnonymous;\r\n const newIsAnonymous = !(user.email && coreAccount.passwordHash) && !(providerData === null || providerData === void 0 ? void 0 : providerData.length);\r\n const isAnonymous = !oldIsAnonymous ? false : newIsAnonymous;\r\n const updates = {\r\n uid: coreAccount.localId,\r\n displayName: coreAccount.displayName || null,\r\n photoURL: coreAccount.photoUrl || null,\r\n email: coreAccount.email || null,\r\n emailVerified: coreAccount.emailVerified || false,\r\n phoneNumber: coreAccount.phoneNumber || null,\r\n tenantId: coreAccount.tenantId || null,\r\n providerData,\r\n metadata: new UserMetadata(coreAccount.createdAt, coreAccount.lastLoginAt),\r\n isAnonymous\r\n };\r\n Object.assign(user, updates);\r\n}\r\n/**\r\n * Reloads user account data, if signed in.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nasync function reload(user) {\r\n const userInternal = getModularInstance(user);\r\n await _reloadWithoutSaving(userInternal);\r\n // Even though the current user hasn't changed, update\r\n // current user will trigger a persistence update w/ the\r\n // new info.\r\n await userInternal.auth._persistUserIfCurrent(userInternal);\r\n userInternal.auth._notifyListenersIfCurrent(userInternal);\r\n}\r\nfunction mergeProviderData(original, newData) {\r\n const deduped = original.filter(o => !newData.some(n => n.providerId === o.providerId));\r\n return [...deduped, ...newData];\r\n}\r\nfunction extractProviderData(providers) {\r\n return providers.map((_a) => {\r\n var { providerId } = _a, provider = __rest(_a, [\"providerId\"]);\r\n return {\r\n providerId,\r\n uid: provider.rawId || '',\r\n displayName: provider.displayName || null,\r\n email: provider.email || null,\r\n phoneNumber: provider.phoneNumber || null,\r\n photoURL: provider.photoUrl || null\r\n };\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function requestStsToken(auth, refreshToken) {\r\n const response = await _performFetchWithErrorHandling(auth, {}, async () => {\r\n const body = querystring({\r\n 'grant_type': 'refresh_token',\r\n 'refresh_token': refreshToken\r\n }).slice(1);\r\n const { tokenApiHost, apiKey } = auth.config;\r\n const url = _getFinalTarget(auth, tokenApiHost, \"/v1/token\" /* Endpoint.TOKEN */, `key=${apiKey}`);\r\n const headers = await auth._getAdditionalHeaders();\r\n headers[\"Content-Type\" /* HttpHeader.CONTENT_TYPE */] = 'application/x-www-form-urlencoded';\r\n return FetchProvider.fetch()(url, {\r\n method: \"POST\" /* HttpMethod.POST */,\r\n headers,\r\n body\r\n });\r\n });\r\n // The response comes back in snake_case. Convert to camel:\r\n return {\r\n accessToken: response.access_token,\r\n expiresIn: response.expires_in,\r\n refreshToken: response.refresh_token\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * We need to mark this class as internal explicitly to exclude it in the public typings, because\r\n * it references AuthInternal which has a circular dependency with UserInternal.\r\n *\r\n * @internal\r\n */\r\nclass StsTokenManager {\r\n constructor() {\r\n this.refreshToken = null;\r\n this.accessToken = null;\r\n this.expirationTime = null;\r\n }\r\n get isExpired() {\r\n return (!this.expirationTime ||\r\n Date.now() > this.expirationTime - 30000 /* Buffer.TOKEN_REFRESH */);\r\n }\r\n updateFromServerResponse(response) {\r\n _assert(response.idToken, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof response.idToken !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof response.refreshToken !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const expiresIn = 'expiresIn' in response && typeof response.expiresIn !== 'undefined'\r\n ? Number(response.expiresIn)\r\n : _tokenExpiresIn(response.idToken);\r\n this.updateTokensAndExpiration(response.idToken, response.refreshToken, expiresIn);\r\n }\r\n async getToken(auth, forceRefresh = false) {\r\n _assert(!this.accessToken || this.refreshToken, auth, \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */);\r\n if (!forceRefresh && this.accessToken && !this.isExpired) {\r\n return this.accessToken;\r\n }\r\n if (this.refreshToken) {\r\n await this.refresh(auth, this.refreshToken);\r\n return this.accessToken;\r\n }\r\n return null;\r\n }\r\n clearRefreshToken() {\r\n this.refreshToken = null;\r\n }\r\n async refresh(auth, oldToken) {\r\n const { accessToken, refreshToken, expiresIn } = await requestStsToken(auth, oldToken);\r\n this.updateTokensAndExpiration(accessToken, refreshToken, Number(expiresIn));\r\n }\r\n updateTokensAndExpiration(accessToken, refreshToken, expiresInSec) {\r\n this.refreshToken = refreshToken || null;\r\n this.accessToken = accessToken || null;\r\n this.expirationTime = Date.now() + expiresInSec * 1000;\r\n }\r\n static fromJSON(appName, object) {\r\n const { refreshToken, accessToken, expirationTime } = object;\r\n const manager = new StsTokenManager();\r\n if (refreshToken) {\r\n _assert(typeof refreshToken === 'string', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\r\n appName\r\n });\r\n manager.refreshToken = refreshToken;\r\n }\r\n if (accessToken) {\r\n _assert(typeof accessToken === 'string', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\r\n appName\r\n });\r\n manager.accessToken = accessToken;\r\n }\r\n if (expirationTime) {\r\n _assert(typeof expirationTime === 'number', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\r\n appName\r\n });\r\n manager.expirationTime = expirationTime;\r\n }\r\n return manager;\r\n }\r\n toJSON() {\r\n return {\r\n refreshToken: this.refreshToken,\r\n accessToken: this.accessToken,\r\n expirationTime: this.expirationTime\r\n };\r\n }\r\n _assign(stsTokenManager) {\r\n this.accessToken = stsTokenManager.accessToken;\r\n this.refreshToken = stsTokenManager.refreshToken;\r\n this.expirationTime = stsTokenManager.expirationTime;\r\n }\r\n _clone() {\r\n return Object.assign(new StsTokenManager(), this.toJSON());\r\n }\r\n _performRefresh() {\r\n return debugFail('not implemented');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction assertStringOrUndefined(assertion, appName) {\r\n _assert(typeof assertion === 'string' || typeof assertion === 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, { appName });\r\n}\r\nclass UserImpl {\r\n constructor(_a) {\r\n var { uid, auth, stsTokenManager } = _a, opt = __rest(_a, [\"uid\", \"auth\", \"stsTokenManager\"]);\r\n // For the user object, provider is always Firebase.\r\n this.providerId = \"firebase\" /* ProviderId.FIREBASE */;\r\n this.proactiveRefresh = new ProactiveRefresh(this);\r\n this.reloadUserInfo = null;\r\n this.reloadListener = null;\r\n this.uid = uid;\r\n this.auth = auth;\r\n this.stsTokenManager = stsTokenManager;\r\n this.accessToken = stsTokenManager.accessToken;\r\n this.displayName = opt.displayName || null;\r\n this.email = opt.email || null;\r\n this.emailVerified = opt.emailVerified || false;\r\n this.phoneNumber = opt.phoneNumber || null;\r\n this.photoURL = opt.photoURL || null;\r\n this.isAnonymous = opt.isAnonymous || false;\r\n this.tenantId = opt.tenantId || null;\r\n this.providerData = opt.providerData ? [...opt.providerData] : [];\r\n this.metadata = new UserMetadata(opt.createdAt || undefined, opt.lastLoginAt || undefined);\r\n }\r\n async getIdToken(forceRefresh) {\r\n const accessToken = await _logoutIfInvalidated(this, this.stsTokenManager.getToken(this.auth, forceRefresh));\r\n _assert(accessToken, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n if (this.accessToken !== accessToken) {\r\n this.accessToken = accessToken;\r\n await this.auth._persistUserIfCurrent(this);\r\n this.auth._notifyListenersIfCurrent(this);\r\n }\r\n return accessToken;\r\n }\r\n getIdTokenResult(forceRefresh) {\r\n return getIdTokenResult(this, forceRefresh);\r\n }\r\n reload() {\r\n return reload(this);\r\n }\r\n _assign(user) {\r\n if (this === user) {\r\n return;\r\n }\r\n _assert(this.uid === user.uid, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n this.displayName = user.displayName;\r\n this.photoURL = user.photoURL;\r\n this.email = user.email;\r\n this.emailVerified = user.emailVerified;\r\n this.phoneNumber = user.phoneNumber;\r\n this.isAnonymous = user.isAnonymous;\r\n this.tenantId = user.tenantId;\r\n this.providerData = user.providerData.map(userInfo => (Object.assign({}, userInfo)));\r\n this.metadata._copy(user.metadata);\r\n this.stsTokenManager._assign(user.stsTokenManager);\r\n }\r\n _clone(auth) {\r\n const newUser = new UserImpl(Object.assign(Object.assign({}, this), { auth, stsTokenManager: this.stsTokenManager._clone() }));\r\n newUser.metadata._copy(this.metadata);\r\n return newUser;\r\n }\r\n _onReload(callback) {\r\n // There should only ever be one listener, and that is a single instance of MultiFactorUser\r\n _assert(!this.reloadListener, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n this.reloadListener = callback;\r\n if (this.reloadUserInfo) {\r\n this._notifyReloadListener(this.reloadUserInfo);\r\n this.reloadUserInfo = null;\r\n }\r\n }\r\n _notifyReloadListener(userInfo) {\r\n if (this.reloadListener) {\r\n this.reloadListener(userInfo);\r\n }\r\n else {\r\n // If no listener is subscribed yet, save the result so it's available when they do subscribe\r\n this.reloadUserInfo = userInfo;\r\n }\r\n }\r\n _startProactiveRefresh() {\r\n this.proactiveRefresh._start();\r\n }\r\n _stopProactiveRefresh() {\r\n this.proactiveRefresh._stop();\r\n }\r\n async _updateTokensIfNecessary(response, reload = false) {\r\n let tokensRefreshed = false;\r\n if (response.idToken &&\r\n response.idToken !== this.stsTokenManager.accessToken) {\r\n this.stsTokenManager.updateFromServerResponse(response);\r\n tokensRefreshed = true;\r\n }\r\n if (reload) {\r\n await _reloadWithoutSaving(this);\r\n }\r\n await this.auth._persistUserIfCurrent(this);\r\n if (tokensRefreshed) {\r\n this.auth._notifyListenersIfCurrent(this);\r\n }\r\n }\r\n async delete() {\r\n const idToken = await this.getIdToken();\r\n await _logoutIfInvalidated(this, deleteAccount(this.auth, { idToken }));\r\n this.stsTokenManager.clearRefreshToken();\r\n // TODO: Determine if cancellable-promises are necessary to use in this class so that delete()\r\n // cancels pending actions...\r\n return this.auth.signOut();\r\n }\r\n toJSON() {\r\n return Object.assign(Object.assign({ uid: this.uid, email: this.email || undefined, emailVerified: this.emailVerified, displayName: this.displayName || undefined, isAnonymous: this.isAnonymous, photoURL: this.photoURL || undefined, phoneNumber: this.phoneNumber || undefined, tenantId: this.tenantId || undefined, providerData: this.providerData.map(userInfo => (Object.assign({}, userInfo))), stsTokenManager: this.stsTokenManager.toJSON(), \r\n // Redirect event ID must be maintained in case there is a pending\r\n // redirect event.\r\n _redirectEventId: this._redirectEventId }, this.metadata.toJSON()), { \r\n // Required for compatibility with the legacy SDK (go/firebase-auth-sdk-persistence-parsing):\r\n apiKey: this.auth.config.apiKey, appName: this.auth.name });\r\n }\r\n get refreshToken() {\r\n return this.stsTokenManager.refreshToken || '';\r\n }\r\n static _fromJSON(auth, object) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h;\r\n const displayName = (_a = object.displayName) !== null && _a !== void 0 ? _a : undefined;\r\n const email = (_b = object.email) !== null && _b !== void 0 ? _b : undefined;\r\n const phoneNumber = (_c = object.phoneNumber) !== null && _c !== void 0 ? _c : undefined;\r\n const photoURL = (_d = object.photoURL) !== null && _d !== void 0 ? _d : undefined;\r\n const tenantId = (_e = object.tenantId) !== null && _e !== void 0 ? _e : undefined;\r\n const _redirectEventId = (_f = object._redirectEventId) !== null && _f !== void 0 ? _f : undefined;\r\n const createdAt = (_g = object.createdAt) !== null && _g !== void 0 ? _g : undefined;\r\n const lastLoginAt = (_h = object.lastLoginAt) !== null && _h !== void 0 ? _h : undefined;\r\n const { uid, emailVerified, isAnonymous, providerData, stsTokenManager: plainObjectTokenManager } = object;\r\n _assert(uid && plainObjectTokenManager, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const stsTokenManager = StsTokenManager.fromJSON(this.name, plainObjectTokenManager);\r\n _assert(typeof uid === 'string', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n assertStringOrUndefined(displayName, auth.name);\r\n assertStringOrUndefined(email, auth.name);\r\n _assert(typeof emailVerified === 'boolean', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof isAnonymous === 'boolean', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n assertStringOrUndefined(phoneNumber, auth.name);\r\n assertStringOrUndefined(photoURL, auth.name);\r\n assertStringOrUndefined(tenantId, auth.name);\r\n assertStringOrUndefined(_redirectEventId, auth.name);\r\n assertStringOrUndefined(createdAt, auth.name);\r\n assertStringOrUndefined(lastLoginAt, auth.name);\r\n const user = new UserImpl({\r\n uid,\r\n auth,\r\n email,\r\n emailVerified,\r\n displayName,\r\n isAnonymous,\r\n photoURL,\r\n phoneNumber,\r\n tenantId,\r\n stsTokenManager,\r\n createdAt,\r\n lastLoginAt\r\n });\r\n if (providerData && Array.isArray(providerData)) {\r\n user.providerData = providerData.map(userInfo => (Object.assign({}, userInfo)));\r\n }\r\n if (_redirectEventId) {\r\n user._redirectEventId = _redirectEventId;\r\n }\r\n return user;\r\n }\r\n /**\r\n * Initialize a User from an idToken server response\r\n * @param auth\r\n * @param idTokenResponse\r\n */\r\n static async _fromIdTokenResponse(auth, idTokenResponse, isAnonymous = false) {\r\n const stsTokenManager = new StsTokenManager();\r\n stsTokenManager.updateFromServerResponse(idTokenResponse);\r\n // Initialize the Firebase Auth user.\r\n const user = new UserImpl({\r\n uid: idTokenResponse.localId,\r\n auth,\r\n stsTokenManager,\r\n isAnonymous\r\n });\r\n // Updates the user info and data and resolves with a user instance.\r\n await _reloadWithoutSaving(user);\r\n return user;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst instanceCache = new Map();\r\nfunction _getInstance(cls) {\r\n debugAssert(cls instanceof Function, 'Expected a class definition');\r\n let instance = instanceCache.get(cls);\r\n if (instance) {\r\n debugAssert(instance instanceof cls, 'Instance stored in cache mismatched with class');\r\n return instance;\r\n }\r\n instance = new cls();\r\n instanceCache.set(cls, instance);\r\n return instance;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass InMemoryPersistence {\r\n constructor() {\r\n this.type = \"NONE\" /* PersistenceType.NONE */;\r\n this.storage = {};\r\n }\r\n async _isAvailable() {\r\n return true;\r\n }\r\n async _set(key, value) {\r\n this.storage[key] = value;\r\n }\r\n async _get(key) {\r\n const value = this.storage[key];\r\n return value === undefined ? null : value;\r\n }\r\n async _remove(key) {\r\n delete this.storage[key];\r\n }\r\n _addListener(_key, _listener) {\r\n // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\r\n return;\r\n }\r\n _removeListener(_key, _listener) {\r\n // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\r\n return;\r\n }\r\n}\r\nInMemoryPersistence.type = 'NONE';\r\n/**\r\n * An implementation of {@link Persistence} of type 'NONE'.\r\n *\r\n * @public\r\n */\r\nconst inMemoryPersistence = InMemoryPersistence;\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _persistenceKeyName(key, apiKey, appName) {\r\n return `${\"firebase\" /* Namespace.PERSISTENCE */}:${key}:${apiKey}:${appName}`;\r\n}\r\nclass PersistenceUserManager {\r\n constructor(persistence, auth, userKey) {\r\n this.persistence = persistence;\r\n this.auth = auth;\r\n this.userKey = userKey;\r\n const { config, name } = this.auth;\r\n this.fullUserKey = _persistenceKeyName(this.userKey, config.apiKey, name);\r\n this.fullPersistenceKey = _persistenceKeyName(\"persistence\" /* KeyName.PERSISTENCE_USER */, config.apiKey, name);\r\n this.boundEventHandler = auth._onStorageEvent.bind(auth);\r\n this.persistence._addListener(this.fullUserKey, this.boundEventHandler);\r\n }\r\n setCurrentUser(user) {\r\n return this.persistence._set(this.fullUserKey, user.toJSON());\r\n }\r\n async getCurrentUser() {\r\n const blob = await this.persistence._get(this.fullUserKey);\r\n return blob ? UserImpl._fromJSON(this.auth, blob) : null;\r\n }\r\n removeCurrentUser() {\r\n return this.persistence._remove(this.fullUserKey);\r\n }\r\n savePersistenceForRedirect() {\r\n return this.persistence._set(this.fullPersistenceKey, this.persistence.type);\r\n }\r\n async setPersistence(newPersistence) {\r\n if (this.persistence === newPersistence) {\r\n return;\r\n }\r\n const currentUser = await this.getCurrentUser();\r\n await this.removeCurrentUser();\r\n this.persistence = newPersistence;\r\n if (currentUser) {\r\n return this.setCurrentUser(currentUser);\r\n }\r\n }\r\n delete() {\r\n this.persistence._removeListener(this.fullUserKey, this.boundEventHandler);\r\n }\r\n static async create(auth, persistenceHierarchy, userKey = \"authUser\" /* KeyName.AUTH_USER */) {\r\n if (!persistenceHierarchy.length) {\r\n return new PersistenceUserManager(_getInstance(inMemoryPersistence), auth, userKey);\r\n }\r\n // Eliminate any persistences that are not available\r\n const availablePersistences = (await Promise.all(persistenceHierarchy.map(async (persistence) => {\r\n if (await persistence._isAvailable()) {\r\n return persistence;\r\n }\r\n return undefined;\r\n }))).filter(persistence => persistence);\r\n // Fall back to the first persistence listed, or in memory if none available\r\n let selectedPersistence = availablePersistences[0] ||\r\n _getInstance(inMemoryPersistence);\r\n const key = _persistenceKeyName(userKey, auth.config.apiKey, auth.name);\r\n // Pull out the existing user, setting the chosen persistence to that\r\n // persistence if the user exists.\r\n let userToMigrate = null;\r\n // Note, here we check for a user in _all_ persistences, not just the\r\n // ones deemed available. If we can migrate a user out of a broken\r\n // persistence, we will (but only if that persistence supports migration).\r\n for (const persistence of persistenceHierarchy) {\r\n try {\r\n const blob = await persistence._get(key);\r\n if (blob) {\r\n const user = UserImpl._fromJSON(auth, blob); // throws for unparsable blob (wrong format)\r\n if (persistence !== selectedPersistence) {\r\n userToMigrate = user;\r\n }\r\n selectedPersistence = persistence;\r\n break;\r\n }\r\n }\r\n catch (_a) { }\r\n }\r\n // If we find the user in a persistence that does support migration, use\r\n // that migration path (of only persistences that support migration)\r\n const migrationHierarchy = availablePersistences.filter(p => p._shouldAllowMigration);\r\n // If the persistence does _not_ allow migration, just finish off here\r\n if (!selectedPersistence._shouldAllowMigration ||\r\n !migrationHierarchy.length) {\r\n return new PersistenceUserManager(selectedPersistence, auth, userKey);\r\n }\r\n selectedPersistence = migrationHierarchy[0];\r\n if (userToMigrate) {\r\n // This normally shouldn't throw since chosenPersistence.isAvailable() is true, but if it does\r\n // we'll just let it bubble to surface the error.\r\n await selectedPersistence._set(key, userToMigrate.toJSON());\r\n }\r\n // Attempt to clear the key in other persistences but ignore errors. This helps prevent issues\r\n // such as users getting stuck with a previous account after signing out and refreshing the tab.\r\n await Promise.all(persistenceHierarchy.map(async (persistence) => {\r\n if (persistence !== selectedPersistence) {\r\n try {\r\n await persistence._remove(key);\r\n }\r\n catch (_a) { }\r\n }\r\n }));\r\n return new PersistenceUserManager(selectedPersistence, auth, userKey);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Determine the browser for the purposes of reporting usage to the API\r\n */\r\nfunction _getBrowserName(userAgent) {\r\n const ua = userAgent.toLowerCase();\r\n if (ua.includes('opera/') || ua.includes('opr/') || ua.includes('opios/')) {\r\n return \"Opera\" /* BrowserName.OPERA */;\r\n }\r\n else if (_isIEMobile(ua)) {\r\n // Windows phone IEMobile browser.\r\n return \"IEMobile\" /* BrowserName.IEMOBILE */;\r\n }\r\n else if (ua.includes('msie') || ua.includes('trident/')) {\r\n return \"IE\" /* BrowserName.IE */;\r\n }\r\n else if (ua.includes('edge/')) {\r\n return \"Edge\" /* BrowserName.EDGE */;\r\n }\r\n else if (_isFirefox(ua)) {\r\n return \"Firefox\" /* BrowserName.FIREFOX */;\r\n }\r\n else if (ua.includes('silk/')) {\r\n return \"Silk\" /* BrowserName.SILK */;\r\n }\r\n else if (_isBlackBerry(ua)) {\r\n // Blackberry browser.\r\n return \"Blackberry\" /* BrowserName.BLACKBERRY */;\r\n }\r\n else if (_isWebOS(ua)) {\r\n // WebOS default browser.\r\n return \"Webos\" /* BrowserName.WEBOS */;\r\n }\r\n else if (_isSafari(ua)) {\r\n return \"Safari\" /* BrowserName.SAFARI */;\r\n }\r\n else if ((ua.includes('chrome/') || _isChromeIOS(ua)) &&\r\n !ua.includes('edge/')) {\r\n return \"Chrome\" /* BrowserName.CHROME */;\r\n }\r\n else if (_isAndroid(ua)) {\r\n // Android stock browser.\r\n return \"Android\" /* BrowserName.ANDROID */;\r\n }\r\n else {\r\n // Most modern browsers have name/version at end of user agent string.\r\n const re = /([a-zA-Z\\d\\.]+)\\/[a-zA-Z\\d\\.]*$/;\r\n const matches = userAgent.match(re);\r\n if ((matches === null || matches === void 0 ? void 0 : matches.length) === 2) {\r\n return matches[1];\r\n }\r\n }\r\n return \"Other\" /* BrowserName.OTHER */;\r\n}\r\nfunction _isFirefox(ua = getUA()) {\r\n return /firefox\\//i.test(ua);\r\n}\r\nfunction _isSafari(userAgent = getUA()) {\r\n const ua = userAgent.toLowerCase();\r\n return (ua.includes('safari/') &&\r\n !ua.includes('chrome/') &&\r\n !ua.includes('crios/') &&\r\n !ua.includes('android'));\r\n}\r\nfunction _isChromeIOS(ua = getUA()) {\r\n return /crios\\//i.test(ua);\r\n}\r\nfunction _isIEMobile(ua = getUA()) {\r\n return /iemobile/i.test(ua);\r\n}\r\nfunction _isAndroid(ua = getUA()) {\r\n return /android/i.test(ua);\r\n}\r\nfunction _isBlackBerry(ua = getUA()) {\r\n return /blackberry/i.test(ua);\r\n}\r\nfunction _isWebOS(ua = getUA()) {\r\n return /webos/i.test(ua);\r\n}\r\nfunction _isIOS(ua = getUA()) {\r\n return (/iphone|ipad|ipod/i.test(ua) ||\r\n (/macintosh/i.test(ua) && /mobile/i.test(ua)));\r\n}\r\nfunction _isIOS7Or8(ua = getUA()) {\r\n return (/(iPad|iPhone|iPod).*OS 7_\\d/i.test(ua) ||\r\n /(iPad|iPhone|iPod).*OS 8_\\d/i.test(ua));\r\n}\r\nfunction _isIOSStandalone(ua = getUA()) {\r\n var _a;\r\n return _isIOS(ua) && !!((_a = window.navigator) === null || _a === void 0 ? void 0 : _a.standalone);\r\n}\r\nfunction _isIE10() {\r\n return isIE() && document.documentMode === 10;\r\n}\r\nfunction _isMobileBrowser(ua = getUA()) {\r\n // TODO: implement getBrowserName equivalent for OS.\r\n return (_isIOS(ua) ||\r\n _isAndroid(ua) ||\r\n _isWebOS(ua) ||\r\n _isBlackBerry(ua) ||\r\n /windows phone/i.test(ua) ||\r\n _isIEMobile(ua));\r\n}\r\nfunction _isIframe() {\r\n try {\r\n // Check that the current window is not the top window.\r\n // If so, return true.\r\n return !!(window && window !== window.top);\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/*\r\n * Determine the SDK version string\r\n */\r\nfunction _getClientVersion(clientPlatform, frameworks = []) {\r\n let reportedPlatform;\r\n switch (clientPlatform) {\r\n case \"Browser\" /* ClientPlatform.BROWSER */:\r\n // In a browser environment, report the browser name.\r\n reportedPlatform = _getBrowserName(getUA());\r\n break;\r\n case \"Worker\" /* ClientPlatform.WORKER */:\r\n // Technically a worker runs from a browser but we need to differentiate a\r\n // worker from a browser.\r\n // For example: Chrome-Worker/JsCore/4.9.1/FirebaseCore-web.\r\n reportedPlatform = `${_getBrowserName(getUA())}-${clientPlatform}`;\r\n break;\r\n default:\r\n reportedPlatform = clientPlatform;\r\n }\r\n const reportedFrameworks = frameworks.length\r\n ? frameworks.join(',')\r\n : 'FirebaseCore-web'; /* default value if no other framework is used */\r\n return `${reportedPlatform}/${\"JsCore\" /* ClientImplementation.CORE */}/${SDK_VERSION}/${reportedFrameworks}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function getRecaptchaParams(auth) {\r\n return ((await _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v1/recaptchaParams\" /* Endpoint.GET_RECAPTCHA_PARAM */)).recaptchaSiteKey || '');\r\n}\r\nasync function getRecaptchaConfig(auth, request) {\r\n return _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v2/recaptchaConfig\" /* Endpoint.GET_RECAPTCHA_CONFIG */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction isV2(grecaptcha) {\r\n return (grecaptcha !== undefined &&\r\n grecaptcha.getResponse !== undefined);\r\n}\r\nfunction isEnterprise(grecaptcha) {\r\n return (grecaptcha !== undefined &&\r\n grecaptcha.enterprise !== undefined);\r\n}\r\nclass RecaptchaConfig {\r\n constructor(response) {\r\n /**\r\n * The reCAPTCHA site key.\r\n */\r\n this.siteKey = '';\r\n /**\r\n * The reCAPTCHA enablement status of the {@link EmailAuthProvider} for the current tenant.\r\n */\r\n this.emailPasswordEnabled = false;\r\n if (response.recaptchaKey === undefined) {\r\n throw new Error('recaptchaKey undefined');\r\n }\r\n // Example response.recaptchaKey: \"projects/proj123/keys/sitekey123\"\r\n this.siteKey = response.recaptchaKey.split('/')[3];\r\n this.emailPasswordEnabled = response.recaptchaEnforcementState.some(enforcementState => enforcementState.provider === 'EMAIL_PASSWORD_PROVIDER' &&\r\n enforcementState.enforcementState !== 'OFF');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getScriptParentElement() {\r\n var _a, _b;\r\n return (_b = (_a = document.getElementsByTagName('head')) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : document;\r\n}\r\nfunction _loadJS(url) {\r\n // TODO: consider adding timeout support & cancellation\r\n return new Promise((resolve, reject) => {\r\n const el = document.createElement('script');\r\n el.setAttribute('src', url);\r\n el.onload = resolve;\r\n el.onerror = e => {\r\n const error = _createError(\"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n error.customData = e;\r\n reject(error);\r\n };\r\n el.type = 'text/javascript';\r\n el.charset = 'UTF-8';\r\n getScriptParentElement().appendChild(el);\r\n });\r\n}\r\nfunction _generateCallbackName(prefix) {\r\n return `__${prefix}${Math.floor(Math.random() * 1000000)}`;\r\n}\n\n/* eslint-disable @typescript-eslint/no-require-imports */\r\nconst RECAPTCHA_ENTERPRISE_URL = 'https://www.google.com/recaptcha/enterprise.js?render=';\r\nconst RECAPTCHA_ENTERPRISE_VERIFIER_TYPE = 'recaptcha-enterprise';\r\nconst FAKE_TOKEN = 'NO_RECAPTCHA';\r\nclass RecaptchaEnterpriseVerifier {\r\n /**\r\n *\r\n * @param authExtern - The corresponding Firebase {@link Auth} instance.\r\n *\r\n */\r\n constructor(authExtern) {\r\n /**\r\n * Identifies the type of application verifier (e.g. \"recaptcha-enterprise\").\r\n */\r\n this.type = RECAPTCHA_ENTERPRISE_VERIFIER_TYPE;\r\n this.auth = _castAuth(authExtern);\r\n }\r\n /**\r\n * Executes the verification process.\r\n *\r\n * @returns A Promise for a token that can be used to assert the validity of a request.\r\n */\r\n async verify(action = 'verify', forceRefresh = false) {\r\n async function retrieveSiteKey(auth) {\r\n if (!forceRefresh) {\r\n if (auth.tenantId == null && auth._agentRecaptchaConfig != null) {\r\n return auth._agentRecaptchaConfig.siteKey;\r\n }\r\n if (auth.tenantId != null &&\r\n auth._tenantRecaptchaConfigs[auth.tenantId] !== undefined) {\r\n return auth._tenantRecaptchaConfigs[auth.tenantId].siteKey;\r\n }\r\n }\r\n return new Promise(async (resolve, reject) => {\r\n getRecaptchaConfig(auth, {\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */,\r\n version: \"RECAPTCHA_ENTERPRISE\" /* RecaptchaVersion.ENTERPRISE */\r\n })\r\n .then(response => {\r\n if (response.recaptchaKey === undefined) {\r\n reject(new Error('recaptcha Enterprise site key undefined'));\r\n }\r\n else {\r\n const config = new RecaptchaConfig(response);\r\n if (auth.tenantId == null) {\r\n auth._agentRecaptchaConfig = config;\r\n }\r\n else {\r\n auth._tenantRecaptchaConfigs[auth.tenantId] = config;\r\n }\r\n return resolve(config.siteKey);\r\n }\r\n })\r\n .catch(error => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n function retrieveRecaptchaToken(siteKey, resolve, reject) {\r\n const grecaptcha = window.grecaptcha;\r\n if (isEnterprise(grecaptcha)) {\r\n grecaptcha.enterprise.ready(() => {\r\n grecaptcha.enterprise\r\n .execute(siteKey, { action })\r\n .then(token => {\r\n resolve(token);\r\n })\r\n .catch(() => {\r\n resolve(FAKE_TOKEN);\r\n });\r\n });\r\n }\r\n else {\r\n reject(Error('No reCAPTCHA enterprise script loaded.'));\r\n }\r\n }\r\n return new Promise((resolve, reject) => {\r\n retrieveSiteKey(this.auth)\r\n .then(siteKey => {\r\n if (!forceRefresh && isEnterprise(window.grecaptcha)) {\r\n retrieveRecaptchaToken(siteKey, resolve, reject);\r\n }\r\n else {\r\n if (typeof window === 'undefined') {\r\n reject(new Error('RecaptchaVerifier is only supported in browser'));\r\n return;\r\n }\r\n _loadJS(RECAPTCHA_ENTERPRISE_URL + siteKey)\r\n .then(() => {\r\n retrieveRecaptchaToken(siteKey, resolve, reject);\r\n })\r\n .catch(error => {\r\n reject(error);\r\n });\r\n }\r\n })\r\n .catch(error => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\nasync function injectRecaptchaFields(auth, request, action, captchaResp = false) {\r\n const verifier = new RecaptchaEnterpriseVerifier(auth);\r\n let captchaResponse;\r\n try {\r\n captchaResponse = await verifier.verify(action);\r\n }\r\n catch (error) {\r\n captchaResponse = await verifier.verify(action, true);\r\n }\r\n const newRequest = Object.assign({}, request);\r\n if (!captchaResp) {\r\n Object.assign(newRequest, { captchaResponse });\r\n }\r\n else {\r\n Object.assign(newRequest, { 'captchaResp': captchaResponse });\r\n }\r\n Object.assign(newRequest, { 'clientType': \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */ });\r\n Object.assign(newRequest, {\r\n 'recaptchaVersion': \"RECAPTCHA_ENTERPRISE\" /* RecaptchaVersion.ENTERPRISE */\r\n });\r\n return newRequest;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthMiddlewareQueue {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.queue = [];\r\n }\r\n pushCallback(callback, onAbort) {\r\n // The callback could be sync or async. Wrap it into a\r\n // function that is always async.\r\n const wrappedCallback = (user) => new Promise((resolve, reject) => {\r\n try {\r\n const result = callback(user);\r\n // Either resolve with existing promise or wrap a non-promise\r\n // return value into a promise.\r\n resolve(result);\r\n }\r\n catch (e) {\r\n // Sync callback throws.\r\n reject(e);\r\n }\r\n });\r\n // Attach the onAbort if present\r\n wrappedCallback.onAbort = onAbort;\r\n this.queue.push(wrappedCallback);\r\n const index = this.queue.length - 1;\r\n return () => {\r\n // Unsubscribe. Replace with no-op. Do not remove from array, or it will disturb\r\n // indexing of other elements.\r\n this.queue[index] = () => Promise.resolve();\r\n };\r\n }\r\n async runMiddleware(nextUser) {\r\n if (this.auth.currentUser === nextUser) {\r\n return;\r\n }\r\n // While running the middleware, build a temporary stack of onAbort\r\n // callbacks to call if one middleware callback rejects.\r\n const onAbortStack = [];\r\n try {\r\n for (const beforeStateCallback of this.queue) {\r\n await beforeStateCallback(nextUser);\r\n // Only push the onAbort if the callback succeeds\r\n if (beforeStateCallback.onAbort) {\r\n onAbortStack.push(beforeStateCallback.onAbort);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // Run all onAbort, with separate try/catch to ignore any errors and\r\n // continue\r\n onAbortStack.reverse();\r\n for (const onAbort of onAbortStack) {\r\n try {\r\n onAbort();\r\n }\r\n catch (_) {\r\n /* swallow error */\r\n }\r\n }\r\n throw this.auth._errorFactory.create(\"login-blocked\" /* AuthErrorCode.LOGIN_BLOCKED */, {\r\n originalMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthImpl {\r\n constructor(app, heartbeatServiceProvider, appCheckServiceProvider, config) {\r\n this.app = app;\r\n this.heartbeatServiceProvider = heartbeatServiceProvider;\r\n this.appCheckServiceProvider = appCheckServiceProvider;\r\n this.config = config;\r\n this.currentUser = null;\r\n this.emulatorConfig = null;\r\n this.operations = Promise.resolve();\r\n this.authStateSubscription = new Subscription(this);\r\n this.idTokenSubscription = new Subscription(this);\r\n this.beforeStateQueue = new AuthMiddlewareQueue(this);\r\n this.redirectUser = null;\r\n this.isProactiveRefreshEnabled = false;\r\n // Any network calls will set this to true and prevent subsequent emulator\r\n // initialization\r\n this._canInitEmulator = true;\r\n this._isInitialized = false;\r\n this._deleted = false;\r\n this._initializationPromise = null;\r\n this._popupRedirectResolver = null;\r\n this._errorFactory = _DEFAULT_AUTH_ERROR_FACTORY;\r\n this._agentRecaptchaConfig = null;\r\n this._tenantRecaptchaConfigs = {};\r\n // Tracks the last notified UID for state change listeners to prevent\r\n // repeated calls to the callbacks. Undefined means it's never been\r\n // called, whereas null means it's been called with a signed out user\r\n this.lastNotifiedUid = undefined;\r\n this.languageCode = null;\r\n this.tenantId = null;\r\n this.settings = { appVerificationDisabledForTesting: false };\r\n this.frameworks = [];\r\n this.name = app.name;\r\n this.clientVersion = config.sdkClientVersion;\r\n }\r\n _initializeWithPersistence(persistenceHierarchy, popupRedirectResolver) {\r\n if (popupRedirectResolver) {\r\n this._popupRedirectResolver = _getInstance(popupRedirectResolver);\r\n }\r\n // Have to check for app deletion throughout initialization (after each\r\n // promise resolution)\r\n this._initializationPromise = this.queue(async () => {\r\n var _a, _b;\r\n if (this._deleted) {\r\n return;\r\n }\r\n this.persistenceManager = await PersistenceUserManager.create(this, persistenceHierarchy);\r\n if (this._deleted) {\r\n return;\r\n }\r\n // Initialize the resolver early if necessary (only applicable to web:\r\n // this will cause the iframe to load immediately in certain cases)\r\n if ((_a = this._popupRedirectResolver) === null || _a === void 0 ? void 0 : _a._shouldInitProactively) {\r\n // If this fails, don't halt auth loading\r\n try {\r\n await this._popupRedirectResolver._initialize(this);\r\n }\r\n catch (e) {\r\n /* Ignore the error */\r\n }\r\n }\r\n await this.initializeCurrentUser(popupRedirectResolver);\r\n this.lastNotifiedUid = ((_b = this.currentUser) === null || _b === void 0 ? void 0 : _b.uid) || null;\r\n if (this._deleted) {\r\n return;\r\n }\r\n this._isInitialized = true;\r\n });\r\n return this._initializationPromise;\r\n }\r\n /**\r\n * If the persistence is changed in another window, the user manager will let us know\r\n */\r\n async _onStorageEvent() {\r\n if (this._deleted) {\r\n return;\r\n }\r\n const user = await this.assertedPersistence.getCurrentUser();\r\n if (!this.currentUser && !user) {\r\n // No change, do nothing (was signed out and remained signed out).\r\n return;\r\n }\r\n // If the same user is to be synchronized.\r\n if (this.currentUser && user && this.currentUser.uid === user.uid) {\r\n // Data update, simply copy data changes.\r\n this._currentUser._assign(user);\r\n // If tokens changed from previous user tokens, this will trigger\r\n // notifyAuthListeners_.\r\n await this.currentUser.getIdToken();\r\n return;\r\n }\r\n // Update current Auth state. Either a new login or logout.\r\n // Skip blocking callbacks, they should not apply to a change in another tab.\r\n await this._updateCurrentUser(user, /* skipBeforeStateCallbacks */ true);\r\n }\r\n async initializeCurrentUser(popupRedirectResolver) {\r\n var _a;\r\n // First check to see if we have a pending redirect event.\r\n const previouslyStoredUser = (await this.assertedPersistence.getCurrentUser());\r\n let futureCurrentUser = previouslyStoredUser;\r\n let needsTocheckMiddleware = false;\r\n if (popupRedirectResolver && this.config.authDomain) {\r\n await this.getOrInitRedirectPersistenceManager();\r\n const redirectUserEventId = (_a = this.redirectUser) === null || _a === void 0 ? void 0 : _a._redirectEventId;\r\n const storedUserEventId = futureCurrentUser === null || futureCurrentUser === void 0 ? void 0 : futureCurrentUser._redirectEventId;\r\n const result = await this.tryRedirectSignIn(popupRedirectResolver);\r\n // If the stored user (i.e. the old \"currentUser\") has a redirectId that\r\n // matches the redirect user, then we want to initially sign in with the\r\n // new user object from result.\r\n // TODO(samgho): More thoroughly test all of this\r\n if ((!redirectUserEventId || redirectUserEventId === storedUserEventId) &&\r\n (result === null || result === void 0 ? void 0 : result.user)) {\r\n futureCurrentUser = result.user;\r\n needsTocheckMiddleware = true;\r\n }\r\n }\r\n // If no user in persistence, there is no current user. Set to null.\r\n if (!futureCurrentUser) {\r\n return this.directlySetCurrentUser(null);\r\n }\r\n if (!futureCurrentUser._redirectEventId) {\r\n // This isn't a redirect link operation, we can reload and bail.\r\n // First though, ensure that we check the middleware is happy.\r\n if (needsTocheckMiddleware) {\r\n try {\r\n await this.beforeStateQueue.runMiddleware(futureCurrentUser);\r\n }\r\n catch (e) {\r\n futureCurrentUser = previouslyStoredUser;\r\n // We know this is available since the bit is only set when the\r\n // resolver is available\r\n this._popupRedirectResolver._overrideRedirectResult(this, () => Promise.reject(e));\r\n }\r\n }\r\n if (futureCurrentUser) {\r\n return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\r\n }\r\n else {\r\n return this.directlySetCurrentUser(null);\r\n }\r\n }\r\n _assert(this._popupRedirectResolver, this, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n await this.getOrInitRedirectPersistenceManager();\r\n // If the redirect user's event ID matches the current user's event ID,\r\n // DO NOT reload the current user, otherwise they'll be cleared from storage.\r\n // This is important for the reauthenticateWithRedirect() flow.\r\n if (this.redirectUser &&\r\n this.redirectUser._redirectEventId === futureCurrentUser._redirectEventId) {\r\n return this.directlySetCurrentUser(futureCurrentUser);\r\n }\r\n return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\r\n }\r\n async tryRedirectSignIn(redirectResolver) {\r\n // The redirect user needs to be checked (and signed in if available)\r\n // during auth initialization. All of the normal sign in and link/reauth\r\n // flows call back into auth and push things onto the promise queue. We\r\n // need to await the result of the redirect sign in *inside the promise\r\n // queue*. This presents a problem: we run into deadlock. See:\r\n // ┌> [Initialization] ─────┐\r\n // ┌> [] │\r\n // └─ [getRedirectResult] <─┘\r\n // where [] are tasks on the queue and arrows denote awaits\r\n // Initialization will never complete because it's waiting on something\r\n // that's waiting for initialization to complete!\r\n //\r\n // Instead, this method calls getRedirectResult() (stored in\r\n // _completeRedirectFn) with an optional parameter that instructs all of\r\n // the underlying auth operations to skip anything that mutates auth state.\r\n let result = null;\r\n try {\r\n // We know this._popupRedirectResolver is set since redirectResolver\r\n // is passed in. The _completeRedirectFn expects the unwrapped extern.\r\n result = await this._popupRedirectResolver._completeRedirectFn(this, redirectResolver, true);\r\n }\r\n catch (e) {\r\n // Swallow any errors here; the code can retrieve them in\r\n // getRedirectResult().\r\n await this._setRedirectUser(null);\r\n }\r\n return result;\r\n }\r\n async reloadAndSetCurrentUserOrClear(user) {\r\n try {\r\n await _reloadWithoutSaving(user);\r\n }\r\n catch (e) {\r\n if ((e === null || e === void 0 ? void 0 : e.code) !==\r\n `auth/${\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */}`) {\r\n // Something's wrong with the user's token. Log them out and remove\r\n // them from storage\r\n return this.directlySetCurrentUser(null);\r\n }\r\n }\r\n return this.directlySetCurrentUser(user);\r\n }\r\n useDeviceLanguage() {\r\n this.languageCode = _getUserLanguage();\r\n }\r\n async _delete() {\r\n this._deleted = true;\r\n }\r\n async updateCurrentUser(userExtern) {\r\n // The public updateCurrentUser method needs to make a copy of the user,\r\n // and also check that the project matches\r\n const user = userExtern\r\n ? getModularInstance(userExtern)\r\n : null;\r\n if (user) {\r\n _assert(user.auth.config.apiKey === this.config.apiKey, this, \"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */);\r\n }\r\n return this._updateCurrentUser(user && user._clone(this));\r\n }\r\n async _updateCurrentUser(user, skipBeforeStateCallbacks = false) {\r\n if (this._deleted) {\r\n return;\r\n }\r\n if (user) {\r\n _assert(this.tenantId === user.tenantId, this, \"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */);\r\n }\r\n if (!skipBeforeStateCallbacks) {\r\n await this.beforeStateQueue.runMiddleware(user);\r\n }\r\n return this.queue(async () => {\r\n await this.directlySetCurrentUser(user);\r\n this.notifyAuthListeners();\r\n });\r\n }\r\n async signOut() {\r\n // Run first, to block _setRedirectUser() if any callbacks fail.\r\n await this.beforeStateQueue.runMiddleware(null);\r\n // Clear the redirect user when signOut is called\r\n if (this.redirectPersistenceManager || this._popupRedirectResolver) {\r\n await this._setRedirectUser(null);\r\n }\r\n // Prevent callbacks from being called again in _updateCurrentUser, as\r\n // they were already called in the first line.\r\n return this._updateCurrentUser(null, /* skipBeforeStateCallbacks */ true);\r\n }\r\n setPersistence(persistence) {\r\n return this.queue(async () => {\r\n await this.assertedPersistence.setPersistence(_getInstance(persistence));\r\n });\r\n }\r\n async initializeRecaptchaConfig() {\r\n const response = await getRecaptchaConfig(this, {\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */,\r\n version: \"RECAPTCHA_ENTERPRISE\" /* RecaptchaVersion.ENTERPRISE */\r\n });\r\n const config = new RecaptchaConfig(response);\r\n if (this.tenantId == null) {\r\n this._agentRecaptchaConfig = config;\r\n }\r\n else {\r\n this._tenantRecaptchaConfigs[this.tenantId] = config;\r\n }\r\n if (config.emailPasswordEnabled) {\r\n const verifier = new RecaptchaEnterpriseVerifier(this);\r\n void verifier.verify();\r\n }\r\n }\r\n _getRecaptchaConfig() {\r\n if (this.tenantId == null) {\r\n return this._agentRecaptchaConfig;\r\n }\r\n else {\r\n return this._tenantRecaptchaConfigs[this.tenantId];\r\n }\r\n }\r\n _getPersistence() {\r\n return this.assertedPersistence.persistence.type;\r\n }\r\n _updateErrorMap(errorMap) {\r\n this._errorFactory = new ErrorFactory('auth', 'Firebase', errorMap());\r\n }\r\n onAuthStateChanged(nextOrObserver, error, completed) {\r\n return this.registerStateListener(this.authStateSubscription, nextOrObserver, error, completed);\r\n }\r\n beforeAuthStateChanged(callback, onAbort) {\r\n return this.beforeStateQueue.pushCallback(callback, onAbort);\r\n }\r\n onIdTokenChanged(nextOrObserver, error, completed) {\r\n return this.registerStateListener(this.idTokenSubscription, nextOrObserver, error, completed);\r\n }\r\n toJSON() {\r\n var _a;\r\n return {\r\n apiKey: this.config.apiKey,\r\n authDomain: this.config.authDomain,\r\n appName: this.name,\r\n currentUser: (_a = this._currentUser) === null || _a === void 0 ? void 0 : _a.toJSON()\r\n };\r\n }\r\n async _setRedirectUser(user, popupRedirectResolver) {\r\n const redirectManager = await this.getOrInitRedirectPersistenceManager(popupRedirectResolver);\r\n return user === null\r\n ? redirectManager.removeCurrentUser()\r\n : redirectManager.setCurrentUser(user);\r\n }\r\n async getOrInitRedirectPersistenceManager(popupRedirectResolver) {\r\n if (!this.redirectPersistenceManager) {\r\n const resolver = (popupRedirectResolver && _getInstance(popupRedirectResolver)) ||\r\n this._popupRedirectResolver;\r\n _assert(resolver, this, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n this.redirectPersistenceManager = await PersistenceUserManager.create(this, [_getInstance(resolver._redirectPersistence)], \"redirectUser\" /* KeyName.REDIRECT_USER */);\r\n this.redirectUser =\r\n await this.redirectPersistenceManager.getCurrentUser();\r\n }\r\n return this.redirectPersistenceManager;\r\n }\r\n async _redirectUserForId(id) {\r\n var _a, _b;\r\n // Make sure we've cleared any pending persistence actions if we're not in\r\n // the initializer\r\n if (this._isInitialized) {\r\n await this.queue(async () => { });\r\n }\r\n if (((_a = this._currentUser) === null || _a === void 0 ? void 0 : _a._redirectEventId) === id) {\r\n return this._currentUser;\r\n }\r\n if (((_b = this.redirectUser) === null || _b === void 0 ? void 0 : _b._redirectEventId) === id) {\r\n return this.redirectUser;\r\n }\r\n return null;\r\n }\r\n async _persistUserIfCurrent(user) {\r\n if (user === this.currentUser) {\r\n return this.queue(async () => this.directlySetCurrentUser(user));\r\n }\r\n }\r\n /** Notifies listeners only if the user is current */\r\n _notifyListenersIfCurrent(user) {\r\n if (user === this.currentUser) {\r\n this.notifyAuthListeners();\r\n }\r\n }\r\n _key() {\r\n return `${this.config.authDomain}:${this.config.apiKey}:${this.name}`;\r\n }\r\n _startProactiveRefresh() {\r\n this.isProactiveRefreshEnabled = true;\r\n if (this.currentUser) {\r\n this._currentUser._startProactiveRefresh();\r\n }\r\n }\r\n _stopProactiveRefresh() {\r\n this.isProactiveRefreshEnabled = false;\r\n if (this.currentUser) {\r\n this._currentUser._stopProactiveRefresh();\r\n }\r\n }\r\n /** Returns the current user cast as the internal type */\r\n get _currentUser() {\r\n return this.currentUser;\r\n }\r\n notifyAuthListeners() {\r\n var _a, _b;\r\n if (!this._isInitialized) {\r\n return;\r\n }\r\n this.idTokenSubscription.next(this.currentUser);\r\n const currentUid = (_b = (_a = this.currentUser) === null || _a === void 0 ? void 0 : _a.uid) !== null && _b !== void 0 ? _b : null;\r\n if (this.lastNotifiedUid !== currentUid) {\r\n this.lastNotifiedUid = currentUid;\r\n this.authStateSubscription.next(this.currentUser);\r\n }\r\n }\r\n registerStateListener(subscription, nextOrObserver, error, completed) {\r\n if (this._deleted) {\r\n return () => { };\r\n }\r\n const cb = typeof nextOrObserver === 'function'\r\n ? nextOrObserver\r\n : nextOrObserver.next.bind(nextOrObserver);\r\n const promise = this._isInitialized\r\n ? Promise.resolve()\r\n : this._initializationPromise;\r\n _assert(promise, this, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n // The callback needs to be called asynchronously per the spec.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n promise.then(() => cb(this.currentUser));\r\n if (typeof nextOrObserver === 'function') {\r\n return subscription.addObserver(nextOrObserver, error, completed);\r\n }\r\n else {\r\n return subscription.addObserver(nextOrObserver);\r\n }\r\n }\r\n /**\r\n * Unprotected (from race conditions) method to set the current user. This\r\n * should only be called from within a queued callback. This is necessary\r\n * because the queue shouldn't rely on another queued callback.\r\n */\r\n async directlySetCurrentUser(user) {\r\n if (this.currentUser && this.currentUser !== user) {\r\n this._currentUser._stopProactiveRefresh();\r\n }\r\n if (user && this.isProactiveRefreshEnabled) {\r\n user._startProactiveRefresh();\r\n }\r\n this.currentUser = user;\r\n if (user) {\r\n await this.assertedPersistence.setCurrentUser(user);\r\n }\r\n else {\r\n await this.assertedPersistence.removeCurrentUser();\r\n }\r\n }\r\n queue(action) {\r\n // In case something errors, the callback still should be called in order\r\n // to keep the promise chain alive\r\n this.operations = this.operations.then(action, action);\r\n return this.operations;\r\n }\r\n get assertedPersistence() {\r\n _assert(this.persistenceManager, this, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return this.persistenceManager;\r\n }\r\n _logFramework(framework) {\r\n if (!framework || this.frameworks.includes(framework)) {\r\n return;\r\n }\r\n this.frameworks.push(framework);\r\n // Sort alphabetically so that \"FirebaseCore-web,FirebaseUI-web\" and\r\n // \"FirebaseUI-web,FirebaseCore-web\" aren't viewed as different.\r\n this.frameworks.sort();\r\n this.clientVersion = _getClientVersion(this.config.clientPlatform, this._getFrameworks());\r\n }\r\n _getFrameworks() {\r\n return this.frameworks;\r\n }\r\n async _getAdditionalHeaders() {\r\n var _a;\r\n // Additional headers on every request\r\n const headers = {\r\n [\"X-Client-Version\" /* HttpHeader.X_CLIENT_VERSION */]: this.clientVersion\r\n };\r\n if (this.app.options.appId) {\r\n headers[\"X-Firebase-gmpid\" /* HttpHeader.X_FIREBASE_GMPID */] = this.app.options.appId;\r\n }\r\n // If the heartbeat service exists, add the heartbeat string\r\n const heartbeatsHeader = await ((_a = this.heartbeatServiceProvider\r\n .getImmediate({\r\n optional: true\r\n })) === null || _a === void 0 ? void 0 : _a.getHeartbeatsHeader());\r\n if (heartbeatsHeader) {\r\n headers[\"X-Firebase-Client\" /* HttpHeader.X_FIREBASE_CLIENT */] = heartbeatsHeader;\r\n }\r\n // If the App Check service exists, add the App Check token in the headers\r\n const appCheckToken = await this._getAppCheckToken();\r\n if (appCheckToken) {\r\n headers[\"X-Firebase-AppCheck\" /* HttpHeader.X_FIREBASE_APP_CHECK */] = appCheckToken;\r\n }\r\n return headers;\r\n }\r\n async _getAppCheckToken() {\r\n var _a;\r\n const appCheckTokenResult = await ((_a = this.appCheckServiceProvider\r\n .getImmediate({ optional: true })) === null || _a === void 0 ? void 0 : _a.getToken());\r\n if (appCheckTokenResult === null || appCheckTokenResult === void 0 ? void 0 : appCheckTokenResult.error) {\r\n // Context: appCheck.getToken() will never throw even if an error happened.\r\n // In the error case, a dummy token will be returned along with an error field describing\r\n // the error. In general, we shouldn't care about the error condition and just use\r\n // the token (actual or dummy) to send requests.\r\n _logWarn(`Error while retrieving App Check token: ${appCheckTokenResult.error}`);\r\n }\r\n return appCheckTokenResult === null || appCheckTokenResult === void 0 ? void 0 : appCheckTokenResult.token;\r\n }\r\n}\r\n/**\r\n * Method to be used to cast down to our private implmentation of Auth.\r\n * It will also handle unwrapping from the compat type if necessary\r\n *\r\n * @param auth Auth object passed in from developer\r\n */\r\nfunction _castAuth(auth) {\r\n return getModularInstance(auth);\r\n}\r\n/** Helper class to wrap subscriber logic */\r\nclass Subscription {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.observer = null;\r\n this.addObserver = createSubscribe(observer => (this.observer = observer));\r\n }\r\n get next() {\r\n _assert(this.observer, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return this.observer.next.bind(this.observer);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Initializes an {@link Auth} instance with fine-grained control over\r\n * {@link Dependencies}.\r\n *\r\n * @remarks\r\n *\r\n * This function allows more control over the {@link Auth} instance than\r\n * {@link getAuth}. `getAuth` uses platform-specific defaults to supply\r\n * the {@link Dependencies}. In general, `getAuth` is the easiest way to\r\n * initialize Auth and works for most use cases. Use `initializeAuth` if you\r\n * need control over which persistence layer is used, or to minimize bundle\r\n * size if you're not using either `signInWithPopup` or `signInWithRedirect`.\r\n *\r\n * For example, if your app only uses anonymous accounts and you only want\r\n * accounts saved for the current session, initialize `Auth` with:\r\n *\r\n * ```js\r\n * const auth = initializeAuth(app, {\r\n * persistence: browserSessionPersistence,\r\n * popupRedirectResolver: undefined,\r\n * });\r\n * ```\r\n *\r\n * @public\r\n */\r\nfunction initializeAuth(app, deps) {\r\n const provider = _getProvider(app, 'auth');\r\n if (provider.isInitialized()) {\r\n const auth = provider.getImmediate();\r\n const initialOptions = provider.getOptions();\r\n if (deepEqual(initialOptions, deps !== null && deps !== void 0 ? deps : {})) {\r\n return auth;\r\n }\r\n else {\r\n _fail(auth, \"already-initialized\" /* AuthErrorCode.ALREADY_INITIALIZED */);\r\n }\r\n }\r\n const auth = provider.initialize({ options: deps });\r\n return auth;\r\n}\r\nfunction _initializeAuthInstance(auth, deps) {\r\n const persistence = (deps === null || deps === void 0 ? void 0 : deps.persistence) || [];\r\n const hierarchy = (Array.isArray(persistence) ? persistence : [persistence]).map(_getInstance);\r\n if (deps === null || deps === void 0 ? void 0 : deps.errorMap) {\r\n auth._updateErrorMap(deps.errorMap);\r\n }\r\n // This promise is intended to float; auth initialization happens in the\r\n // background, meanwhile the auth object may be used by the app.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n auth._initializeWithPersistence(hierarchy, deps === null || deps === void 0 ? void 0 : deps.popupRedirectResolver);\r\n}\n\n/**\r\n * Changes the {@link Auth} instance to communicate with the Firebase Auth Emulator, instead of production\r\n * Firebase Auth services.\r\n *\r\n * @remarks\r\n * This must be called synchronously immediately following the first call to\r\n * {@link initializeAuth}. Do not use with production credentials as emulator\r\n * traffic is not encrypted.\r\n *\r\n *\r\n * @example\r\n * ```javascript\r\n * connectAuthEmulator(auth, 'http://127.0.0.1:9099', { disableWarnings: true });\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param url - The URL at which the emulator is running (eg, 'http://localhost:9099').\r\n * @param options - Optional. `options.disableWarnings` defaults to `false`. Set it to\r\n * `true` to disable the warning banner attached to the DOM.\r\n *\r\n * @public\r\n */\r\nfunction connectAuthEmulator(auth, url, options) {\r\n const authInternal = _castAuth(auth);\r\n _assert(authInternal._canInitEmulator, authInternal, \"emulator-config-failed\" /* AuthErrorCode.EMULATOR_CONFIG_FAILED */);\r\n _assert(/^https?:\\/\\//.test(url), authInternal, \"invalid-emulator-scheme\" /* AuthErrorCode.INVALID_EMULATOR_SCHEME */);\r\n const disableWarnings = !!(options === null || options === void 0 ? void 0 : options.disableWarnings);\r\n const protocol = extractProtocol(url);\r\n const { host, port } = extractHostAndPort(url);\r\n const portStr = port === null ? '' : `:${port}`;\r\n // Always replace path with \"/\" (even if input url had no path at all, or had a different one).\r\n authInternal.config.emulator = { url: `${protocol}//${host}${portStr}/` };\r\n authInternal.settings.appVerificationDisabledForTesting = true;\r\n authInternal.emulatorConfig = Object.freeze({\r\n host,\r\n port,\r\n protocol: protocol.replace(':', ''),\r\n options: Object.freeze({ disableWarnings })\r\n });\r\n if (!disableWarnings) {\r\n emitEmulatorWarning();\r\n }\r\n}\r\nfunction extractProtocol(url) {\r\n const protocolEnd = url.indexOf(':');\r\n return protocolEnd < 0 ? '' : url.substr(0, protocolEnd + 1);\r\n}\r\nfunction extractHostAndPort(url) {\r\n const protocol = extractProtocol(url);\r\n const authority = /(\\/\\/)?([^?#/]+)/.exec(url.substr(protocol.length)); // Between // and /, ? or #.\r\n if (!authority) {\r\n return { host: '', port: null };\r\n }\r\n const hostAndPort = authority[2].split('@').pop() || ''; // Strip out \"username:password@\".\r\n const bracketedIPv6 = /^(\\[[^\\]]+\\])(:|$)/.exec(hostAndPort);\r\n if (bracketedIPv6) {\r\n const host = bracketedIPv6[1];\r\n return { host, port: parsePort(hostAndPort.substr(host.length + 1)) };\r\n }\r\n else {\r\n const [host, port] = hostAndPort.split(':');\r\n return { host, port: parsePort(port) };\r\n }\r\n}\r\nfunction parsePort(portStr) {\r\n if (!portStr) {\r\n return null;\r\n }\r\n const port = Number(portStr);\r\n if (isNaN(port)) {\r\n return null;\r\n }\r\n return port;\r\n}\r\nfunction emitEmulatorWarning() {\r\n function attachBanner() {\r\n const el = document.createElement('p');\r\n const sty = el.style;\r\n el.innerText =\r\n 'Running in emulator mode. Do not use with production credentials.';\r\n sty.position = 'fixed';\r\n sty.width = '100%';\r\n sty.backgroundColor = '#ffffff';\r\n sty.border = '.1em solid #000000';\r\n sty.color = '#b50000';\r\n sty.bottom = '0px';\r\n sty.left = '0px';\r\n sty.margin = '0px';\r\n sty.zIndex = '10000';\r\n sty.textAlign = 'center';\r\n el.classList.add('firebase-emulator-warning');\r\n document.body.appendChild(el);\r\n }\r\n if (typeof console !== 'undefined' && typeof console.info === 'function') {\r\n console.info('WARNING: You are using the Auth Emulator,' +\r\n ' which is intended for local testing only. Do not use with' +\r\n ' production credentials.');\r\n }\r\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\r\n if (document.readyState === 'loading') {\r\n window.addEventListener('DOMContentLoaded', attachBanner);\r\n }\r\n else {\r\n attachBanner();\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface that represents the credentials returned by an {@link AuthProvider}.\r\n *\r\n * @remarks\r\n * Implementations specify the details about each auth provider's credential requirements.\r\n *\r\n * @public\r\n */\r\nclass AuthCredential {\r\n /** @internal */\r\n constructor(\r\n /**\r\n * The authentication provider ID for the credential.\r\n *\r\n * @remarks\r\n * For example, 'facebook.com', or 'google.com'.\r\n */\r\n providerId, \r\n /**\r\n * The authentication sign in method for the credential.\r\n *\r\n * @remarks\r\n * For example, {@link SignInMethod}.EMAIL_PASSWORD, or\r\n * {@link SignInMethod}.EMAIL_LINK. This corresponds to the sign-in method\r\n * identifier as returned in {@link fetchSignInMethodsForEmail}.\r\n */\r\n signInMethod) {\r\n this.providerId = providerId;\r\n this.signInMethod = signInMethod;\r\n }\r\n /**\r\n * Returns a JSON-serializable representation of this object.\r\n *\r\n * @returns a JSON-serializable representation of this object.\r\n */\r\n toJSON() {\r\n return debugFail('not implemented');\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(_auth) {\r\n return debugFail('not implemented');\r\n }\r\n /** @internal */\r\n _linkToIdToken(_auth, _idToken) {\r\n return debugFail('not implemented');\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(_auth) {\r\n return debugFail('not implemented');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function resetPassword(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:resetPassword\" /* Endpoint.RESET_PASSWORD */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function updateEmailPassword(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\r\n}\r\nasync function applyActionCode$1(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithPassword(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPassword\" /* Endpoint.SIGN_IN_WITH_PASSWORD */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function sendOobCode(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:sendOobCode\" /* Endpoint.SEND_OOB_CODE */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function sendEmailVerification$1(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\r\nasync function sendPasswordResetEmail$1(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\r\nasync function sendSignInLinkToEmail$1(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\r\nasync function verifyAndChangeEmail(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithEmailLink$1(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithEmailLink\" /* Endpoint.SIGN_IN_WITH_EMAIL_LINK */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function signInWithEmailLinkForLinking(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithEmailLink\" /* Endpoint.SIGN_IN_WITH_EMAIL_LINK */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface that represents the credentials returned by {@link EmailAuthProvider} for\r\n * {@link ProviderId}.PASSWORD\r\n *\r\n * @remarks\r\n * Covers both {@link SignInMethod}.EMAIL_PASSWORD and\r\n * {@link SignInMethod}.EMAIL_LINK.\r\n *\r\n * @public\r\n */\r\nclass EmailAuthCredential extends AuthCredential {\r\n /** @internal */\r\n constructor(\r\n /** @internal */\r\n _email, \r\n /** @internal */\r\n _password, signInMethod, \r\n /** @internal */\r\n _tenantId = null) {\r\n super(\"password\" /* ProviderId.PASSWORD */, signInMethod);\r\n this._email = _email;\r\n this._password = _password;\r\n this._tenantId = _tenantId;\r\n }\r\n /** @internal */\r\n static _fromEmailAndPassword(email, password) {\r\n return new EmailAuthCredential(email, password, \"password\" /* SignInMethod.EMAIL_PASSWORD */);\r\n }\r\n /** @internal */\r\n static _fromEmailAndCode(email, oobCode, tenantId = null) {\r\n return new EmailAuthCredential(email, oobCode, \"emailLink\" /* SignInMethod.EMAIL_LINK */, tenantId);\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n return {\r\n email: this._email,\r\n password: this._password,\r\n signInMethod: this.signInMethod,\r\n tenantId: this._tenantId\r\n };\r\n }\r\n /**\r\n * Static method to deserialize a JSON representation of an object into an {@link AuthCredential}.\r\n *\r\n * @param json - Either `object` or the stringified representation of the object. When string is\r\n * provided, `JSON.parse` would be called first.\r\n *\r\n * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\r\n */\r\n static fromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n if ((obj === null || obj === void 0 ? void 0 : obj.email) && (obj === null || obj === void 0 ? void 0 : obj.password)) {\r\n if (obj.signInMethod === \"password\" /* SignInMethod.EMAIL_PASSWORD */) {\r\n return this._fromEmailAndPassword(obj.email, obj.password);\r\n }\r\n else if (obj.signInMethod === \"emailLink\" /* SignInMethod.EMAIL_LINK */) {\r\n return this._fromEmailAndCode(obj.email, obj.password, obj.tenantId);\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n async _getIdTokenResponse(auth) {\r\n var _a;\r\n switch (this.signInMethod) {\r\n case \"password\" /* SignInMethod.EMAIL_PASSWORD */:\r\n const request = {\r\n returnSecureToken: true,\r\n email: this._email,\r\n password: this._password,\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\r\n };\r\n if ((_a = auth._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled) {\r\n const requestWithRecaptcha = await injectRecaptchaFields(auth, request, \"signInWithPassword\" /* RecaptchaActionName.SIGN_IN_WITH_PASSWORD */);\r\n return signInWithPassword(auth, requestWithRecaptcha);\r\n }\r\n else {\r\n return signInWithPassword(auth, request).catch(async (error) => {\r\n if (error.code === `auth/${\"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */}`) {\r\n console.log('Sign-in with email address and password is protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the sign-in flow.');\r\n const requestWithRecaptcha = await injectRecaptchaFields(auth, request, \"signInWithPassword\" /* RecaptchaActionName.SIGN_IN_WITH_PASSWORD */);\r\n return signInWithPassword(auth, requestWithRecaptcha);\r\n }\r\n else {\r\n return Promise.reject(error);\r\n }\r\n });\r\n }\r\n case \"emailLink\" /* SignInMethod.EMAIL_LINK */:\r\n return signInWithEmailLink$1(auth, {\r\n email: this._email,\r\n oobCode: this._password\r\n });\r\n default:\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n }\r\n /** @internal */\r\n async _linkToIdToken(auth, idToken) {\r\n switch (this.signInMethod) {\r\n case \"password\" /* SignInMethod.EMAIL_PASSWORD */:\r\n return updateEmailPassword(auth, {\r\n idToken,\r\n returnSecureToken: true,\r\n email: this._email,\r\n password: this._password\r\n });\r\n case \"emailLink\" /* SignInMethod.EMAIL_LINK */:\r\n return signInWithEmailLinkForLinking(auth, {\r\n idToken,\r\n email: this._email,\r\n oobCode: this._password\r\n });\r\n default:\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n return this._getIdTokenResponse(auth);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithIdp(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithIdp\" /* Endpoint.SIGN_IN_WITH_IDP */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IDP_REQUEST_URI$1 = 'http://localhost';\r\n/**\r\n * Represents the OAuth credentials returned by an {@link OAuthProvider}.\r\n *\r\n * @remarks\r\n * Implementations specify the details about each auth provider's credential requirements.\r\n *\r\n * @public\r\n */\r\nclass OAuthCredential extends AuthCredential {\r\n constructor() {\r\n super(...arguments);\r\n this.pendingToken = null;\r\n }\r\n /** @internal */\r\n static _fromParams(params) {\r\n const cred = new OAuthCredential(params.providerId, params.signInMethod);\r\n if (params.idToken || params.accessToken) {\r\n // OAuth 2 and either ID token or access token.\r\n if (params.idToken) {\r\n cred.idToken = params.idToken;\r\n }\r\n if (params.accessToken) {\r\n cred.accessToken = params.accessToken;\r\n }\r\n // Add nonce if available and no pendingToken is present.\r\n if (params.nonce && !params.pendingToken) {\r\n cred.nonce = params.nonce;\r\n }\r\n if (params.pendingToken) {\r\n cred.pendingToken = params.pendingToken;\r\n }\r\n }\r\n else if (params.oauthToken && params.oauthTokenSecret) {\r\n // OAuth 1 and OAuth token with token secret\r\n cred.accessToken = params.oauthToken;\r\n cred.secret = params.oauthTokenSecret;\r\n }\r\n else {\r\n _fail(\"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n }\r\n return cred;\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n return {\r\n idToken: this.idToken,\r\n accessToken: this.accessToken,\r\n secret: this.secret,\r\n nonce: this.nonce,\r\n pendingToken: this.pendingToken,\r\n providerId: this.providerId,\r\n signInMethod: this.signInMethod\r\n };\r\n }\r\n /**\r\n * Static method to deserialize a JSON representation of an object into an\r\n * {@link AuthCredential}.\r\n *\r\n * @param json - Input can be either Object or the stringified representation of the object.\r\n * When string is provided, JSON.parse would be called first.\r\n *\r\n * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\r\n */\r\n static fromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n const { providerId, signInMethod } = obj, rest = __rest(obj, [\"providerId\", \"signInMethod\"]);\r\n if (!providerId || !signInMethod) {\r\n return null;\r\n }\r\n const cred = new OAuthCredential(providerId, signInMethod);\r\n cred.idToken = rest.idToken || undefined;\r\n cred.accessToken = rest.accessToken || undefined;\r\n cred.secret = rest.secret;\r\n cred.nonce = rest.nonce;\r\n cred.pendingToken = rest.pendingToken || null;\r\n return cred;\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(auth) {\r\n const request = this.buildRequest();\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _linkToIdToken(auth, idToken) {\r\n const request = this.buildRequest();\r\n request.idToken = idToken;\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n const request = this.buildRequest();\r\n request.autoCreate = false;\r\n return signInWithIdp(auth, request);\r\n }\r\n buildRequest() {\r\n const request = {\r\n requestUri: IDP_REQUEST_URI$1,\r\n returnSecureToken: true\r\n };\r\n if (this.pendingToken) {\r\n request.pendingToken = this.pendingToken;\r\n }\r\n else {\r\n const postBody = {};\r\n if (this.idToken) {\r\n postBody['id_token'] = this.idToken;\r\n }\r\n if (this.accessToken) {\r\n postBody['access_token'] = this.accessToken;\r\n }\r\n if (this.secret) {\r\n postBody['oauth_token_secret'] = this.secret;\r\n }\r\n postBody['providerId'] = this.providerId;\r\n if (this.nonce && !this.pendingToken) {\r\n postBody['nonce'] = this.nonce;\r\n }\r\n request.postBody = querystring(postBody);\r\n }\r\n return request;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function sendPhoneVerificationCode(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:sendVerificationCode\" /* Endpoint.SEND_VERIFICATION_CODE */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function signInWithPhoneNumber$1(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function linkWithPhoneNumber$1(auth, request) {\r\n const response = await _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, request));\r\n if (response.temporaryProof) {\r\n throw _makeTaggedError(auth, \"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */, response);\r\n }\r\n return response;\r\n}\r\nconst VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_ = {\r\n [\"USER_NOT_FOUND\" /* ServerError.USER_NOT_FOUND */]: \"user-not-found\" /* AuthErrorCode.USER_DELETED */\r\n};\r\nasync function verifyPhoneNumberForExisting(auth, request) {\r\n const apiRequest = Object.assign(Object.assign({}, request), { operation: 'REAUTH' });\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, apiRequest), VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Represents the credentials returned by {@link PhoneAuthProvider}.\r\n *\r\n * @public\r\n */\r\nclass PhoneAuthCredential extends AuthCredential {\r\n constructor(params) {\r\n super(\"phone\" /* ProviderId.PHONE */, \"phone\" /* SignInMethod.PHONE */);\r\n this.params = params;\r\n }\r\n /** @internal */\r\n static _fromVerification(verificationId, verificationCode) {\r\n return new PhoneAuthCredential({ verificationId, verificationCode });\r\n }\r\n /** @internal */\r\n static _fromTokenResponse(phoneNumber, temporaryProof) {\r\n return new PhoneAuthCredential({ phoneNumber, temporaryProof });\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(auth) {\r\n return signInWithPhoneNumber$1(auth, this._makeVerificationRequest());\r\n }\r\n /** @internal */\r\n _linkToIdToken(auth, idToken) {\r\n return linkWithPhoneNumber$1(auth, Object.assign({ idToken }, this._makeVerificationRequest()));\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n return verifyPhoneNumberForExisting(auth, this._makeVerificationRequest());\r\n }\r\n /** @internal */\r\n _makeVerificationRequest() {\r\n const { temporaryProof, phoneNumber, verificationId, verificationCode } = this.params;\r\n if (temporaryProof && phoneNumber) {\r\n return { temporaryProof, phoneNumber };\r\n }\r\n return {\r\n sessionInfo: verificationId,\r\n code: verificationCode\r\n };\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n const obj = {\r\n providerId: this.providerId\r\n };\r\n if (this.params.phoneNumber) {\r\n obj.phoneNumber = this.params.phoneNumber;\r\n }\r\n if (this.params.temporaryProof) {\r\n obj.temporaryProof = this.params.temporaryProof;\r\n }\r\n if (this.params.verificationCode) {\r\n obj.verificationCode = this.params.verificationCode;\r\n }\r\n if (this.params.verificationId) {\r\n obj.verificationId = this.params.verificationId;\r\n }\r\n return obj;\r\n }\r\n /** Generates a phone credential based on a plain object or a JSON string. */\r\n static fromJSON(json) {\r\n if (typeof json === 'string') {\r\n json = JSON.parse(json);\r\n }\r\n const { verificationId, verificationCode, phoneNumber, temporaryProof } = json;\r\n if (!verificationCode &&\r\n !verificationId &&\r\n !phoneNumber &&\r\n !temporaryProof) {\r\n return null;\r\n }\r\n return new PhoneAuthCredential({\r\n verificationId,\r\n verificationCode,\r\n phoneNumber,\r\n temporaryProof\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Maps the mode string in action code URL to Action Code Info operation.\r\n *\r\n * @param mode\r\n */\r\nfunction parseMode(mode) {\r\n switch (mode) {\r\n case 'recoverEmail':\r\n return \"RECOVER_EMAIL\" /* ActionCodeOperation.RECOVER_EMAIL */;\r\n case 'resetPassword':\r\n return \"PASSWORD_RESET\" /* ActionCodeOperation.PASSWORD_RESET */;\r\n case 'signIn':\r\n return \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */;\r\n case 'verifyEmail':\r\n return \"VERIFY_EMAIL\" /* ActionCodeOperation.VERIFY_EMAIL */;\r\n case 'verifyAndChangeEmail':\r\n return \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */;\r\n case 'revertSecondFactorAddition':\r\n return \"REVERT_SECOND_FACTOR_ADDITION\" /* ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION */;\r\n default:\r\n return null;\r\n }\r\n}\r\n/**\r\n * Helper to parse FDL links\r\n *\r\n * @param url\r\n */\r\nfunction parseDeepLink(url) {\r\n const link = querystringDecode(extractQuerystring(url))['link'];\r\n // Double link case (automatic redirect).\r\n const doubleDeepLink = link\r\n ? querystringDecode(extractQuerystring(link))['deep_link_id']\r\n : null;\r\n // iOS custom scheme links.\r\n const iOSDeepLink = querystringDecode(extractQuerystring(url))['deep_link_id'];\r\n const iOSDoubleDeepLink = iOSDeepLink\r\n ? querystringDecode(extractQuerystring(iOSDeepLink))['link']\r\n : null;\r\n return iOSDoubleDeepLink || iOSDeepLink || doubleDeepLink || link || url;\r\n}\r\n/**\r\n * A utility class to parse email action URLs such as password reset, email verification,\r\n * email link sign in, etc.\r\n *\r\n * @public\r\n */\r\nclass ActionCodeURL {\r\n /**\r\n * @param actionLink - The link from which to extract the URL.\r\n * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\r\n *\r\n * @internal\r\n */\r\n constructor(actionLink) {\r\n var _a, _b, _c, _d, _e, _f;\r\n const searchParams = querystringDecode(extractQuerystring(actionLink));\r\n const apiKey = (_a = searchParams[\"apiKey\" /* QueryField.API_KEY */]) !== null && _a !== void 0 ? _a : null;\r\n const code = (_b = searchParams[\"oobCode\" /* QueryField.CODE */]) !== null && _b !== void 0 ? _b : null;\r\n const operation = parseMode((_c = searchParams[\"mode\" /* QueryField.MODE */]) !== null && _c !== void 0 ? _c : null);\r\n // Validate API key, code and mode.\r\n _assert(apiKey && code && operation, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n this.apiKey = apiKey;\r\n this.operation = operation;\r\n this.code = code;\r\n this.continueUrl = (_d = searchParams[\"continueUrl\" /* QueryField.CONTINUE_URL */]) !== null && _d !== void 0 ? _d : null;\r\n this.languageCode = (_e = searchParams[\"languageCode\" /* QueryField.LANGUAGE_CODE */]) !== null && _e !== void 0 ? _e : null;\r\n this.tenantId = (_f = searchParams[\"tenantId\" /* QueryField.TENANT_ID */]) !== null && _f !== void 0 ? _f : null;\r\n }\r\n /**\r\n * Parses the email action link string and returns an {@link ActionCodeURL} if the link is valid,\r\n * otherwise returns null.\r\n *\r\n * @param link - The email action link string.\r\n * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\r\n *\r\n * @public\r\n */\r\n static parseLink(link) {\r\n const actionLink = parseDeepLink(link);\r\n try {\r\n return new ActionCodeURL(actionLink);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/**\r\n * Parses the email action link string and returns an {@link ActionCodeURL} if\r\n * the link is valid, otherwise returns null.\r\n *\r\n * @public\r\n */\r\nfunction parseActionCodeURL(link) {\r\n return ActionCodeURL.parseLink(link);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating {@link EmailAuthCredential}.\r\n *\r\n * @public\r\n */\r\nclass EmailAuthProvider {\r\n constructor() {\r\n /**\r\n * Always set to {@link ProviderId}.PASSWORD, even for email link.\r\n */\r\n this.providerId = EmailAuthProvider.PROVIDER_ID;\r\n }\r\n /**\r\n * Initialize an {@link AuthCredential} using an email and password.\r\n *\r\n * @example\r\n * ```javascript\r\n * const authCredential = EmailAuthProvider.credential(email, password);\r\n * const userCredential = await signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * const userCredential = await signInWithEmailAndPassword(auth, email, password);\r\n * ```\r\n *\r\n * @param email - Email address.\r\n * @param password - User account password.\r\n * @returns The auth provider credential.\r\n */\r\n static credential(email, password) {\r\n return EmailAuthCredential._fromEmailAndPassword(email, password);\r\n }\r\n /**\r\n * Initialize an {@link AuthCredential} using an email and an email link after a sign in with\r\n * email link operation.\r\n *\r\n * @example\r\n * ```javascript\r\n * const authCredential = EmailAuthProvider.credentialWithLink(auth, email, emailLink);\r\n * const userCredential = await signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * await sendSignInLinkToEmail(auth, email);\r\n * // Obtain emailLink from user.\r\n * const userCredential = await signInWithEmailLink(auth, email, emailLink);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance used to verify the link.\r\n * @param email - Email address.\r\n * @param emailLink - Sign-in email link.\r\n * @returns - The auth provider credential.\r\n */\r\n static credentialWithLink(email, emailLink) {\r\n const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\r\n _assert(actionCodeUrl, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return EmailAuthCredential._fromEmailAndCode(email, actionCodeUrl.code, actionCodeUrl.tenantId);\r\n }\r\n}\r\n/**\r\n * Always set to {@link ProviderId}.PASSWORD, even for email link.\r\n */\r\nEmailAuthProvider.PROVIDER_ID = \"password\" /* ProviderId.PASSWORD */;\r\n/**\r\n * Always set to {@link SignInMethod}.EMAIL_PASSWORD.\r\n */\r\nEmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD = \"password\" /* SignInMethod.EMAIL_PASSWORD */;\r\n/**\r\n * Always set to {@link SignInMethod}.EMAIL_LINK.\r\n */\r\nEmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD = \"emailLink\" /* SignInMethod.EMAIL_LINK */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The base class for all Federated providers (OAuth (including OIDC), SAML).\r\n *\r\n * This class is not meant to be instantiated directly.\r\n *\r\n * @public\r\n */\r\nclass FederatedAuthProvider {\r\n /**\r\n * Constructor for generic OAuth providers.\r\n *\r\n * @param providerId - Provider for which credentials should be generated.\r\n */\r\n constructor(providerId) {\r\n this.providerId = providerId;\r\n /** @internal */\r\n this.defaultLanguageCode = null;\r\n /** @internal */\r\n this.customParameters = {};\r\n }\r\n /**\r\n * Set the language gode.\r\n *\r\n * @param languageCode - language code\r\n */\r\n setDefaultLanguage(languageCode) {\r\n this.defaultLanguageCode = languageCode;\r\n }\r\n /**\r\n * Sets the OAuth custom parameters to pass in an OAuth request for popup and redirect sign-in\r\n * operations.\r\n *\r\n * @remarks\r\n * For a detailed list, check the reserved required OAuth 2.0 parameters such as `client_id`,\r\n * `redirect_uri`, `scope`, `response_type`, and `state` are not allowed and will be ignored.\r\n *\r\n * @param customOAuthParameters - The custom OAuth parameters to pass in the OAuth request.\r\n */\r\n setCustomParameters(customOAuthParameters) {\r\n this.customParameters = customOAuthParameters;\r\n return this;\r\n }\r\n /**\r\n * Retrieve the current list of {@link CustomParameters}.\r\n */\r\n getCustomParameters() {\r\n return this.customParameters;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Common code to all OAuth providers. This is separate from the\r\n * {@link OAuthProvider} so that child providers (like\r\n * {@link GoogleAuthProvider}) don't inherit the `credential` instance method.\r\n * Instead, they rely on a static `credential` method.\r\n */\r\nclass BaseOAuthProvider extends FederatedAuthProvider {\r\n constructor() {\r\n super(...arguments);\r\n /** @internal */\r\n this.scopes = [];\r\n }\r\n /**\r\n * Add an OAuth scope to the credential.\r\n *\r\n * @param scope - Provider OAuth scope to add.\r\n */\r\n addScope(scope) {\r\n // If not already added, add scope to list.\r\n if (!this.scopes.includes(scope)) {\r\n this.scopes.push(scope);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Retrieve the current list of OAuth scopes.\r\n */\r\n getScopes() {\r\n return [...this.scopes];\r\n }\r\n}\r\n/**\r\n * Provider for generating generic {@link OAuthCredential}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new OAuthProvider('google.com');\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a OAuth Access Token for the provider.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new OAuthProvider('google.com');\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a OAuth Access Token for the provider.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * ```\r\n * @public\r\n */\r\nclass OAuthProvider extends BaseOAuthProvider {\r\n /**\r\n * Creates an {@link OAuthCredential} from a JSON string or a plain object.\r\n * @param json - A plain object or a JSON string\r\n */\r\n static credentialFromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n _assert('providerId' in obj && 'signInMethod' in obj, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return OAuthCredential._fromParams(obj);\r\n }\r\n /**\r\n * Creates a {@link OAuthCredential} from a generic OAuth provider's access token or ID token.\r\n *\r\n * @remarks\r\n * The raw nonce is required when an ID token with a nonce field is provided. The SHA-256 hash of\r\n * the raw nonce must match the nonce field in the ID token.\r\n *\r\n * @example\r\n * ```javascript\r\n * // `googleUser` from the onsuccess Google Sign In callback.\r\n * // Initialize a generate OAuth provider with a `google.com` providerId.\r\n * const provider = new OAuthProvider('google.com');\r\n * const credential = provider.credential({\r\n * idToken: googleUser.getAuthResponse().id_token,\r\n * });\r\n * const result = await signInWithCredential(credential);\r\n * ```\r\n *\r\n * @param params - Either the options object containing the ID token, access token and raw nonce\r\n * or the ID token string.\r\n */\r\n credential(params) {\r\n return this._credential(Object.assign(Object.assign({}, params), { nonce: params.rawNonce }));\r\n }\r\n /** An internal credential method that accepts more permissive options */\r\n _credential(params) {\r\n _assert(params.idToken || params.accessToken, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n // For OAuthCredential, sign in method is same as providerId.\r\n return OAuthCredential._fromParams(Object.assign(Object.assign({}, params), { providerId: this.providerId, signInMethod: this.providerId }));\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return OAuthProvider.oauthCredentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return OAuthProvider.oauthCredentialFromTaggedObject((error.customData || {}));\r\n }\r\n static oauthCredentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { oauthIdToken, oauthAccessToken, oauthTokenSecret, pendingToken, nonce, providerId } = tokenResponse;\r\n if (!oauthAccessToken &&\r\n !oauthTokenSecret &&\r\n !oauthIdToken &&\r\n !pendingToken) {\r\n return null;\r\n }\r\n if (!providerId) {\r\n return null;\r\n }\r\n try {\r\n return new OAuthProvider(providerId)._credential({\r\n idToken: oauthIdToken,\r\n accessToken: oauthAccessToken,\r\n nonce,\r\n pendingToken\r\n });\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.FACEBOOK.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('user_birthday');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = FacebookAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * provider.addScope('user_birthday');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = FacebookAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass FacebookAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"facebook.com\" /* ProviderId.FACEBOOK */);\r\n }\r\n /**\r\n * Creates a credential for Facebook.\r\n *\r\n * @example\r\n * ```javascript\r\n * // `event` from the Facebook auth.authResponseChange callback.\r\n * const credential = FacebookAuthProvider.credential(event.authResponse.accessToken);\r\n * const result = await signInWithCredential(credential);\r\n * ```\r\n *\r\n * @param accessToken - Facebook access token.\r\n */\r\n static credential(accessToken) {\r\n return OAuthCredential._fromParams({\r\n providerId: FacebookAuthProvider.PROVIDER_ID,\r\n signInMethod: FacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD,\r\n accessToken\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return FacebookAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return FacebookAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\r\n return null;\r\n }\r\n if (!tokenResponse.oauthAccessToken) {\r\n return null;\r\n }\r\n try {\r\n return FacebookAuthProvider.credential(tokenResponse.oauthAccessToken);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.FACEBOOK. */\r\nFacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD = \"facebook.com\" /* SignInMethod.FACEBOOK */;\r\n/** Always set to {@link ProviderId}.FACEBOOK. */\r\nFacebookAuthProvider.PROVIDER_ID = \"facebook.com\" /* ProviderId.FACEBOOK */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an an {@link OAuthCredential} for {@link ProviderId}.GOOGLE.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new GoogleAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Google Access Token.\r\n * const credential = GoogleAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new GoogleAuthProvider();\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Google Access Token.\r\n * const credential = GoogleAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass GoogleAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"google.com\" /* ProviderId.GOOGLE */);\r\n this.addScope('profile');\r\n }\r\n /**\r\n * Creates a credential for Google. At least one of ID token and access token is required.\r\n *\r\n * @example\r\n * ```javascript\r\n * // \\`googleUser\\` from the onsuccess Google Sign In callback.\r\n * const credential = GoogleAuthProvider.credential(googleUser.getAuthResponse().id_token);\r\n * const result = await signInWithCredential(credential);\r\n * ```\r\n *\r\n * @param idToken - Google ID token.\r\n * @param accessToken - Google access token.\r\n */\r\n static credential(idToken, accessToken) {\r\n return OAuthCredential._fromParams({\r\n providerId: GoogleAuthProvider.PROVIDER_ID,\r\n signInMethod: GoogleAuthProvider.GOOGLE_SIGN_IN_METHOD,\r\n idToken,\r\n accessToken\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return GoogleAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return GoogleAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { oauthIdToken, oauthAccessToken } = tokenResponse;\r\n if (!oauthIdToken && !oauthAccessToken) {\r\n // This could be an oauth 1 credential or a phone credential\r\n return null;\r\n }\r\n try {\r\n return GoogleAuthProvider.credential(oauthIdToken, oauthAccessToken);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.GOOGLE. */\r\nGoogleAuthProvider.GOOGLE_SIGN_IN_METHOD = \"google.com\" /* SignInMethod.GOOGLE */;\r\n/** Always set to {@link ProviderId}.GOOGLE. */\r\nGoogleAuthProvider.PROVIDER_ID = \"google.com\" /* ProviderId.GOOGLE */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.GITHUB.\r\n *\r\n * @remarks\r\n * GitHub requires an OAuth 2.0 redirect, so you can either handle the redirect directly, or use\r\n * the {@link signInWithPopup} handler:\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new GithubAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('repo');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Github Access Token.\r\n * const credential = GithubAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new GithubAuthProvider();\r\n * provider.addScope('repo');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Github Access Token.\r\n * const credential = GithubAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n * @public\r\n */\r\nclass GithubAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"github.com\" /* ProviderId.GITHUB */);\r\n }\r\n /**\r\n * Creates a credential for Github.\r\n *\r\n * @param accessToken - Github access token.\r\n */\r\n static credential(accessToken) {\r\n return OAuthCredential._fromParams({\r\n providerId: GithubAuthProvider.PROVIDER_ID,\r\n signInMethod: GithubAuthProvider.GITHUB_SIGN_IN_METHOD,\r\n accessToken\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return GithubAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return GithubAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\r\n return null;\r\n }\r\n if (!tokenResponse.oauthAccessToken) {\r\n return null;\r\n }\r\n try {\r\n return GithubAuthProvider.credential(tokenResponse.oauthAccessToken);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.GITHUB. */\r\nGithubAuthProvider.GITHUB_SIGN_IN_METHOD = \"github.com\" /* SignInMethod.GITHUB */;\r\n/** Always set to {@link ProviderId}.GITHUB. */\r\nGithubAuthProvider.PROVIDER_ID = \"github.com\" /* ProviderId.GITHUB */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IDP_REQUEST_URI = 'http://localhost';\r\n/**\r\n * @public\r\n */\r\nclass SAMLAuthCredential extends AuthCredential {\r\n /** @internal */\r\n constructor(providerId, pendingToken) {\r\n super(providerId, providerId);\r\n this.pendingToken = pendingToken;\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(auth) {\r\n const request = this.buildRequest();\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _linkToIdToken(auth, idToken) {\r\n const request = this.buildRequest();\r\n request.idToken = idToken;\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n const request = this.buildRequest();\r\n request.autoCreate = false;\r\n return signInWithIdp(auth, request);\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n return {\r\n signInMethod: this.signInMethod,\r\n providerId: this.providerId,\r\n pendingToken: this.pendingToken\r\n };\r\n }\r\n /**\r\n * Static method to deserialize a JSON representation of an object into an\r\n * {@link AuthCredential}.\r\n *\r\n * @param json - Input can be either Object or the stringified representation of the object.\r\n * When string is provided, JSON.parse would be called first.\r\n *\r\n * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\r\n */\r\n static fromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n const { providerId, signInMethod, pendingToken } = obj;\r\n if (!providerId ||\r\n !signInMethod ||\r\n !pendingToken ||\r\n providerId !== signInMethod) {\r\n return null;\r\n }\r\n return new SAMLAuthCredential(providerId, pendingToken);\r\n }\r\n /**\r\n * Helper static method to avoid exposing the constructor to end users.\r\n *\r\n * @internal\r\n */\r\n static _create(providerId, pendingToken) {\r\n return new SAMLAuthCredential(providerId, pendingToken);\r\n }\r\n buildRequest() {\r\n return {\r\n requestUri: IDP_REQUEST_URI,\r\n returnSecureToken: true,\r\n pendingToken: this.pendingToken\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst SAML_PROVIDER_PREFIX = 'saml.';\r\n/**\r\n * An {@link AuthProvider} for SAML.\r\n *\r\n * @public\r\n */\r\nclass SAMLAuthProvider extends FederatedAuthProvider {\r\n /**\r\n * Constructor. The providerId must start with \"saml.\"\r\n * @param providerId - SAML provider ID.\r\n */\r\n constructor(providerId) {\r\n _assert(providerId.startsWith(SAML_PROVIDER_PREFIX), \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n super(providerId);\r\n }\r\n /**\r\n * Generates an {@link AuthCredential} from a {@link UserCredential} after a\r\n * successful SAML flow completes.\r\n *\r\n * @remarks\r\n *\r\n * For example, to get an {@link AuthCredential}, you could write the\r\n * following code:\r\n *\r\n * ```js\r\n * const userCredential = await signInWithPopup(auth, samlProvider);\r\n * const credential = SAMLAuthProvider.credentialFromResult(userCredential);\r\n * ```\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return SAMLAuthProvider.samlCredentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return SAMLAuthProvider.samlCredentialFromTaggedObject((error.customData || {}));\r\n }\r\n /**\r\n * Creates an {@link AuthCredential} from a JSON string or a plain object.\r\n * @param json - A plain object or a JSON string\r\n */\r\n static credentialFromJSON(json) {\r\n const credential = SAMLAuthCredential.fromJSON(json);\r\n _assert(credential, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return credential;\r\n }\r\n static samlCredentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { pendingToken, providerId } = tokenResponse;\r\n if (!pendingToken || !providerId) {\r\n return null;\r\n }\r\n try {\r\n return SAMLAuthCredential._create(providerId, pendingToken);\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.TWITTER.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new TwitterAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Twitter Access Token and Secret.\r\n * const credential = TwitterAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * const secret = credential.secret;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new TwitterAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Twitter Access Token and Secret.\r\n * const credential = TwitterAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * const secret = credential.secret;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass TwitterAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"twitter.com\" /* ProviderId.TWITTER */);\r\n }\r\n /**\r\n * Creates a credential for Twitter.\r\n *\r\n * @param token - Twitter access token.\r\n * @param secret - Twitter secret.\r\n */\r\n static credential(token, secret) {\r\n return OAuthCredential._fromParams({\r\n providerId: TwitterAuthProvider.PROVIDER_ID,\r\n signInMethod: TwitterAuthProvider.TWITTER_SIGN_IN_METHOD,\r\n oauthToken: token,\r\n oauthTokenSecret: secret\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return TwitterAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return TwitterAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { oauthAccessToken, oauthTokenSecret } = tokenResponse;\r\n if (!oauthAccessToken || !oauthTokenSecret) {\r\n return null;\r\n }\r\n try {\r\n return TwitterAuthProvider.credential(oauthAccessToken, oauthTokenSecret);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.TWITTER. */\r\nTwitterAuthProvider.TWITTER_SIGN_IN_METHOD = \"twitter.com\" /* SignInMethod.TWITTER */;\r\n/** Always set to {@link ProviderId}.TWITTER. */\r\nTwitterAuthProvider.PROVIDER_ID = \"twitter.com\" /* ProviderId.TWITTER */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signUp(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signUp\" /* Endpoint.SIGN_UP */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass UserCredentialImpl {\r\n constructor(params) {\r\n this.user = params.user;\r\n this.providerId = params.providerId;\r\n this._tokenResponse = params._tokenResponse;\r\n this.operationType = params.operationType;\r\n }\r\n static async _fromIdTokenResponse(auth, operationType, idTokenResponse, isAnonymous = false) {\r\n const user = await UserImpl._fromIdTokenResponse(auth, idTokenResponse, isAnonymous);\r\n const providerId = providerIdForResponse(idTokenResponse);\r\n const userCred = new UserCredentialImpl({\r\n user,\r\n providerId,\r\n _tokenResponse: idTokenResponse,\r\n operationType\r\n });\r\n return userCred;\r\n }\r\n static async _forOperation(user, operationType, response) {\r\n await user._updateTokensIfNecessary(response, /* reload */ true);\r\n const providerId = providerIdForResponse(response);\r\n return new UserCredentialImpl({\r\n user,\r\n providerId,\r\n _tokenResponse: response,\r\n operationType\r\n });\r\n }\r\n}\r\nfunction providerIdForResponse(response) {\r\n if (response.providerId) {\r\n return response.providerId;\r\n }\r\n if ('phoneNumber' in response) {\r\n return \"phone\" /* ProviderId.PHONE */;\r\n }\r\n return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Asynchronously signs in as an anonymous user.\r\n *\r\n * @remarks\r\n * If there is already an anonymous user signed in, that user will be returned; otherwise, a\r\n * new anonymous user identity will be created and returned.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nasync function signInAnonymously(auth) {\r\n var _a;\r\n const authInternal = _castAuth(auth);\r\n await authInternal._initializationPromise;\r\n if ((_a = authInternal.currentUser) === null || _a === void 0 ? void 0 : _a.isAnonymous) {\r\n // If an anonymous user is already signed in, no need to sign them in again.\r\n return new UserCredentialImpl({\r\n user: authInternal.currentUser,\r\n providerId: null,\r\n operationType: \"signIn\" /* OperationType.SIGN_IN */\r\n });\r\n }\r\n const response = await signUp(authInternal, {\r\n returnSecureToken: true\r\n });\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response, true);\r\n await authInternal._updateCurrentUser(userCredential.user);\r\n return userCredential;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorError extends FirebaseError {\r\n constructor(auth, error, operationType, user) {\r\n var _a;\r\n super(error.code, error.message);\r\n this.operationType = operationType;\r\n this.user = user;\r\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n Object.setPrototypeOf(this, MultiFactorError.prototype);\r\n this.customData = {\r\n appName: auth.name,\r\n tenantId: (_a = auth.tenantId) !== null && _a !== void 0 ? _a : undefined,\r\n _serverResponse: error.customData._serverResponse,\r\n operationType\r\n };\r\n }\r\n static _fromErrorAndOperation(auth, error, operationType, user) {\r\n return new MultiFactorError(auth, error, operationType, user);\r\n }\r\n}\r\nfunction _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user) {\r\n const idTokenProvider = operationType === \"reauthenticate\" /* OperationType.REAUTHENTICATE */\r\n ? credential._getReauthenticationResolver(auth)\r\n : credential._getIdTokenResponse(auth);\r\n return idTokenProvider.catch(error => {\r\n if (error.code === `auth/${\"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */}`) {\r\n throw MultiFactorError._fromErrorAndOperation(auth, error, operationType, user);\r\n }\r\n throw error;\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Takes a set of UserInfo provider data and converts it to a set of names\r\n */\r\nfunction providerDataAsNames(providerData) {\r\n return new Set(providerData\r\n .map(({ providerId }) => providerId)\r\n .filter(pid => !!pid));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Unlinks a provider from a user account.\r\n *\r\n * @param user - The user.\r\n * @param providerId - The provider to unlink.\r\n *\r\n * @public\r\n */\r\nasync function unlink(user, providerId) {\r\n const userInternal = getModularInstance(user);\r\n await _assertLinkedStatus(true, userInternal, providerId);\r\n const { providerUserInfo } = await deleteLinkedAccounts(userInternal.auth, {\r\n idToken: await userInternal.getIdToken(),\r\n deleteProvider: [providerId]\r\n });\r\n const providersLeft = providerDataAsNames(providerUserInfo || []);\r\n userInternal.providerData = userInternal.providerData.filter(pd => providersLeft.has(pd.providerId));\r\n if (!providersLeft.has(\"phone\" /* ProviderId.PHONE */)) {\r\n userInternal.phoneNumber = null;\r\n }\r\n await userInternal.auth._persistUserIfCurrent(userInternal);\r\n return userInternal;\r\n}\r\nasync function _link$1(user, credential, bypassAuthState = false) {\r\n const response = await _logoutIfInvalidated(user, credential._linkToIdToken(user.auth, await user.getIdToken()), bypassAuthState);\r\n return UserCredentialImpl._forOperation(user, \"link\" /* OperationType.LINK */, response);\r\n}\r\nasync function _assertLinkedStatus(expected, user, provider) {\r\n await _reloadWithoutSaving(user);\r\n const providerIds = providerDataAsNames(user.providerData);\r\n const code = expected === false\r\n ? \"provider-already-linked\" /* AuthErrorCode.PROVIDER_ALREADY_LINKED */\r\n : \"no-such-provider\" /* AuthErrorCode.NO_SUCH_PROVIDER */;\r\n _assert(providerIds.has(provider) === expected, user.auth, code);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _reauthenticate(user, credential, bypassAuthState = false) {\r\n const { auth } = user;\r\n const operationType = \"reauthenticate\" /* OperationType.REAUTHENTICATE */;\r\n try {\r\n const response = await _logoutIfInvalidated(user, _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user), bypassAuthState);\r\n _assert(response.idToken, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const parsed = _parseToken(response.idToken);\r\n _assert(parsed, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const { sub: localId } = parsed;\r\n _assert(user.uid === localId, auth, \"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */);\r\n return UserCredentialImpl._forOperation(user, operationType, response);\r\n }\r\n catch (e) {\r\n // Convert user deleted error into user mismatch\r\n if ((e === null || e === void 0 ? void 0 : e.code) === `auth/${\"user-not-found\" /* AuthErrorCode.USER_DELETED */}`) {\r\n _fail(auth, \"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */);\r\n }\r\n throw e;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _signInWithCredential(auth, credential, bypassAuthState = false) {\r\n const operationType = \"signIn\" /* OperationType.SIGN_IN */;\r\n const response = await _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential);\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(auth, operationType, response);\r\n if (!bypassAuthState) {\r\n await auth._updateCurrentUser(userCredential.user);\r\n }\r\n return userCredential;\r\n}\r\n/**\r\n * Asynchronously signs in with the given credentials.\r\n *\r\n * @remarks\r\n * An {@link AuthProvider} can be used to generate the credential.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function signInWithCredential(auth, credential) {\r\n return _signInWithCredential(_castAuth(auth), credential);\r\n}\r\n/**\r\n * Links the user account with the given credentials.\r\n *\r\n * @remarks\r\n * An {@link AuthProvider} can be used to generate the credential.\r\n *\r\n * @param user - The user.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function linkWithCredential(user, credential) {\r\n const userInternal = getModularInstance(user);\r\n await _assertLinkedStatus(false, userInternal, credential.providerId);\r\n return _link$1(userInternal, credential);\r\n}\r\n/**\r\n * Re-authenticates a user using a fresh credential.\r\n *\r\n * @remarks\r\n * Use before operations such as {@link updatePassword} that require tokens from recent sign-in\r\n * attempts. This method can be used to recover from a `CREDENTIAL_TOO_OLD_LOGIN_AGAIN` error\r\n * or a `TOKEN_EXPIRED` error.\r\n *\r\n * @param user - The user.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithCredential(user, credential) {\r\n return _reauthenticate(getModularInstance(user), credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithCustomToken$1(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithCustomToken\" /* Endpoint.SIGN_IN_WITH_CUSTOM_TOKEN */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Asynchronously signs in using a custom token.\r\n *\r\n * @remarks\r\n * Custom tokens are used to integrate Firebase Auth with existing auth systems, and must\r\n * be generated by an auth backend using the\r\n * {@link https://firebase.google.com/docs/reference/admin/node/admin.auth.Auth#createcustomtoken | createCustomToken}\r\n * method in the {@link https://firebase.google.com/docs/auth/admin | Admin SDK} .\r\n *\r\n * Fails with an error if the token is invalid, expired, or not accepted by the Firebase Auth service.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param customToken - The custom token to sign in with.\r\n *\r\n * @public\r\n */\r\nasync function signInWithCustomToken(auth, customToken) {\r\n const authInternal = _castAuth(auth);\r\n const response = await signInWithCustomToken$1(authInternal, {\r\n token: customToken,\r\n returnSecureToken: true\r\n });\r\n const cred = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response);\r\n await authInternal._updateCurrentUser(cred.user);\r\n return cred;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorInfoImpl {\r\n constructor(factorId, response) {\r\n this.factorId = factorId;\r\n this.uid = response.mfaEnrollmentId;\r\n this.enrollmentTime = new Date(response.enrolledAt).toUTCString();\r\n this.displayName = response.displayName;\r\n }\r\n static _fromServerResponse(auth, enrollment) {\r\n if ('phoneInfo' in enrollment) {\r\n return PhoneMultiFactorInfoImpl._fromServerResponse(auth, enrollment);\r\n }\r\n else if ('totpInfo' in enrollment) {\r\n return TotpMultiFactorInfoImpl._fromServerResponse(auth, enrollment);\r\n }\r\n return _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n}\r\nclass PhoneMultiFactorInfoImpl extends MultiFactorInfoImpl {\r\n constructor(response) {\r\n super(\"phone\" /* FactorId.PHONE */, response);\r\n this.phoneNumber = response.phoneInfo;\r\n }\r\n static _fromServerResponse(_auth, enrollment) {\r\n return new PhoneMultiFactorInfoImpl(enrollment);\r\n }\r\n}\r\nclass TotpMultiFactorInfoImpl extends MultiFactorInfoImpl {\r\n constructor(response) {\r\n super(\"totp\" /* FactorId.TOTP */, response);\r\n }\r\n static _fromServerResponse(_auth, enrollment) {\r\n return new TotpMultiFactorInfoImpl(enrollment);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _setActionCodeSettingsOnRequest(auth, request, actionCodeSettings) {\r\n var _a;\r\n _assert(((_a = actionCodeSettings.url) === null || _a === void 0 ? void 0 : _a.length) > 0, auth, \"invalid-continue-uri\" /* AuthErrorCode.INVALID_CONTINUE_URI */);\r\n _assert(typeof actionCodeSettings.dynamicLinkDomain === 'undefined' ||\r\n actionCodeSettings.dynamicLinkDomain.length > 0, auth, \"invalid-dynamic-link-domain\" /* AuthErrorCode.INVALID_DYNAMIC_LINK_DOMAIN */);\r\n request.continueUrl = actionCodeSettings.url;\r\n request.dynamicLinkDomain = actionCodeSettings.dynamicLinkDomain;\r\n request.canHandleCodeInApp = actionCodeSettings.handleCodeInApp;\r\n if (actionCodeSettings.iOS) {\r\n _assert(actionCodeSettings.iOS.bundleId.length > 0, auth, \"missing-ios-bundle-id\" /* AuthErrorCode.MISSING_IOS_BUNDLE_ID */);\r\n request.iOSBundleId = actionCodeSettings.iOS.bundleId;\r\n }\r\n if (actionCodeSettings.android) {\r\n _assert(actionCodeSettings.android.packageName.length > 0, auth, \"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */);\r\n request.androidInstallApp = actionCodeSettings.android.installApp;\r\n request.androidMinimumVersionCode =\r\n actionCodeSettings.android.minimumVersion;\r\n request.androidPackageName = actionCodeSettings.android.packageName;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Sends a password reset email to the given email address.\r\n *\r\n * @remarks\r\n * To complete the password reset, call {@link confirmPasswordReset} with the code supplied in\r\n * the email sent to the user, along with the new password specified by the user.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendPasswordResetEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain code from user.\r\n * await confirmPasswordReset('user@example.com', code);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendPasswordResetEmail(auth, email, actionCodeSettings) {\r\n var _a;\r\n const authInternal = _castAuth(auth);\r\n const request = {\r\n requestType: \"PASSWORD_RESET\" /* ActionCodeOperation.PASSWORD_RESET */,\r\n email,\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\r\n };\r\n if ((_a = authInternal._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled) {\r\n const requestWithRecaptcha = await injectRecaptchaFields(authInternal, request, \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */, true);\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(authInternal, requestWithRecaptcha, actionCodeSettings);\r\n }\r\n await sendPasswordResetEmail$1(authInternal, requestWithRecaptcha);\r\n }\r\n else {\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);\r\n }\r\n await sendPasswordResetEmail$1(authInternal, request)\r\n .catch(async (error) => {\r\n if (error.code === `auth/${\"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */}`) {\r\n console.log('Password resets are protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the password reset flow.');\r\n const requestWithRecaptcha = await injectRecaptchaFields(authInternal, request, \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */, true);\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(authInternal, requestWithRecaptcha, actionCodeSettings);\r\n }\r\n await sendPasswordResetEmail$1(authInternal, requestWithRecaptcha);\r\n }\r\n else {\r\n return Promise.reject(error);\r\n }\r\n });\r\n }\r\n}\r\n/**\r\n * Completes the password reset process, given a confirmation code and new password.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A confirmation code sent to the user.\r\n * @param newPassword - The new password.\r\n *\r\n * @public\r\n */\r\nasync function confirmPasswordReset(auth, oobCode, newPassword) {\r\n await resetPassword(getModularInstance(auth), {\r\n oobCode,\r\n newPassword\r\n });\r\n // Do not return the email.\r\n}\r\n/**\r\n * Applies a verification code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function applyActionCode(auth, oobCode) {\r\n await applyActionCode$1(getModularInstance(auth), { oobCode });\r\n}\r\n/**\r\n * Checks a verification code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @returns metadata about the code.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function checkActionCode(auth, oobCode) {\r\n const authModular = getModularInstance(auth);\r\n const response = await resetPassword(authModular, { oobCode });\r\n // Email could be empty only if the request type is EMAIL_SIGNIN or\r\n // VERIFY_AND_CHANGE_EMAIL.\r\n // New email should not be empty if the request type is\r\n // VERIFY_AND_CHANGE_EMAIL.\r\n // Multi-factor info could not be empty if the request type is\r\n // REVERT_SECOND_FACTOR_ADDITION.\r\n const operation = response.requestType;\r\n _assert(operation, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n switch (operation) {\r\n case \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */:\r\n break;\r\n case \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */:\r\n _assert(response.newEmail, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n break;\r\n case \"REVERT_SECOND_FACTOR_ADDITION\" /* ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION */:\r\n _assert(response.mfaInfo, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n // fall through\r\n default:\r\n _assert(response.email, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n // The multi-factor info for revert second factor addition\r\n let multiFactorInfo = null;\r\n if (response.mfaInfo) {\r\n multiFactorInfo = MultiFactorInfoImpl._fromServerResponse(_castAuth(authModular), response.mfaInfo);\r\n }\r\n return {\r\n data: {\r\n email: (response.requestType === \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */\r\n ? response.newEmail\r\n : response.email) || null,\r\n previousEmail: (response.requestType === \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */\r\n ? response.email\r\n : response.newEmail) || null,\r\n multiFactorInfo\r\n },\r\n operation\r\n };\r\n}\r\n/**\r\n * Checks a password reset code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @returns the user's email address if valid.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param code - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function verifyPasswordResetCode(auth, code) {\r\n const { data } = await checkActionCode(getModularInstance(auth), code);\r\n // Email should always be present since a code was sent to it\r\n return data.email;\r\n}\r\n/**\r\n * Creates a new user account associated with the specified email address and password.\r\n *\r\n * @remarks\r\n * On successful creation of the user account, this user will also be signed in to your application.\r\n *\r\n * User account creation can fail if the account already exists or the password is invalid.\r\n *\r\n * Note: The email address acts as a unique identifier for the user and enables an email-based\r\n * password reset. This function will create a new user account and set the initial user password.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param password - The user's chosen password.\r\n *\r\n * @public\r\n */\r\nasync function createUserWithEmailAndPassword(auth, email, password) {\r\n var _a;\r\n const authInternal = _castAuth(auth);\r\n const request = {\r\n returnSecureToken: true,\r\n email,\r\n password,\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\r\n };\r\n let signUpResponse;\r\n if ((_a = authInternal._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled) {\r\n const requestWithRecaptcha = await injectRecaptchaFields(authInternal, request, \"signUpPassword\" /* RecaptchaActionName.SIGN_UP_PASSWORD */);\r\n signUpResponse = signUp(authInternal, requestWithRecaptcha);\r\n }\r\n else {\r\n signUpResponse = signUp(authInternal, request).catch(async (error) => {\r\n if (error.code === `auth/${\"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */}`) {\r\n console.log('Sign-up is protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the sign-up flow.');\r\n const requestWithRecaptcha = await injectRecaptchaFields(authInternal, request, \"signUpPassword\" /* RecaptchaActionName.SIGN_UP_PASSWORD */);\r\n return signUp(authInternal, requestWithRecaptcha);\r\n }\r\n else {\r\n return Promise.reject(error);\r\n }\r\n });\r\n }\r\n const response = await signUpResponse.catch(error => {\r\n return Promise.reject(error);\r\n });\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response);\r\n await authInternal._updateCurrentUser(userCredential.user);\r\n return userCredential;\r\n}\r\n/**\r\n * Asynchronously signs in using an email and password.\r\n *\r\n * @remarks\r\n * Fails with an error if the email address and password do not match.\r\n *\r\n * Note: The user's password is NOT the password used to access the user's email account. The\r\n * email address serves as a unique identifier for the user, and the password is used to access\r\n * the user's account in your Firebase project. See also: {@link createUserWithEmailAndPassword}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The users email address.\r\n * @param password - The users password.\r\n *\r\n * @public\r\n */\r\nfunction signInWithEmailAndPassword(auth, email, password) {\r\n return signInWithCredential(getModularInstance(auth), EmailAuthProvider.credential(email, password));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Sends a sign-in email link to the user with the specified email.\r\n *\r\n * @remarks\r\n * The sign-in operation has to always be completed in the app unlike other out of band email\r\n * actions (password reset and email verifications). This is because, at the end of the flow,\r\n * the user is expected to be signed in and their Auth state persisted within the app.\r\n *\r\n * To complete sign in with the email link, call {@link signInWithEmailLink} with the email\r\n * address and the email link supplied in the email sent to the user.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain emailLink from the user.\r\n * if(isSignInWithEmailLink(auth, emailLink)) {\r\n * await signInWithEmailLink(auth, 'user@example.com', emailLink);\r\n * }\r\n * ```\r\n *\r\n * @param authInternal - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendSignInLinkToEmail(auth, email, actionCodeSettings) {\r\n var _a;\r\n const authInternal = _castAuth(auth);\r\n const request = {\r\n requestType: \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */,\r\n email,\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\r\n };\r\n function setActionCodeSettings(request, actionCodeSettings) {\r\n _assert(actionCodeSettings.handleCodeInApp, authInternal, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);\r\n }\r\n }\r\n if ((_a = authInternal._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled) {\r\n const requestWithRecaptcha = await injectRecaptchaFields(authInternal, request, \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */, true);\r\n setActionCodeSettings(requestWithRecaptcha, actionCodeSettings);\r\n await sendSignInLinkToEmail$1(authInternal, requestWithRecaptcha);\r\n }\r\n else {\r\n setActionCodeSettings(request, actionCodeSettings);\r\n await sendSignInLinkToEmail$1(authInternal, request)\r\n .catch(async (error) => {\r\n if (error.code === `auth/${\"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */}`) {\r\n console.log('Email link sign-in is protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the sign-in flow.');\r\n const requestWithRecaptcha = await injectRecaptchaFields(authInternal, request, \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */, true);\r\n setActionCodeSettings(requestWithRecaptcha, actionCodeSettings);\r\n await sendSignInLinkToEmail$1(authInternal, requestWithRecaptcha);\r\n }\r\n else {\r\n return Promise.reject(error);\r\n }\r\n });\r\n }\r\n}\r\n/**\r\n * Checks if an incoming link is a sign-in with email link suitable for {@link signInWithEmailLink}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param emailLink - The link sent to the user's email address.\r\n *\r\n * @public\r\n */\r\nfunction isSignInWithEmailLink(auth, emailLink) {\r\n const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\r\n return (actionCodeUrl === null || actionCodeUrl === void 0 ? void 0 : actionCodeUrl.operation) === \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */;\r\n}\r\n/**\r\n * Asynchronously signs in using an email and sign-in email link.\r\n *\r\n * @remarks\r\n * If no link is passed, the link is inferred from the current URL.\r\n *\r\n * Fails with an error if the email address is invalid or OTP in email link expires.\r\n *\r\n * Note: Confirm the link is a sign-in email link before calling this method firebase.auth.Auth.isSignInWithEmailLink.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain emailLink from the user.\r\n * if(isSignInWithEmailLink(auth, emailLink)) {\r\n * await signInWithEmailLink(auth, 'user@example.com', emailLink);\r\n * }\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param emailLink - The link sent to the user's email address.\r\n *\r\n * @public\r\n */\r\nasync function signInWithEmailLink(auth, email, emailLink) {\r\n const authModular = getModularInstance(auth);\r\n const credential = EmailAuthProvider.credentialWithLink(email, emailLink || _getCurrentUrl());\r\n // Check if the tenant ID in the email link matches the tenant ID on Auth\r\n // instance.\r\n _assert(credential._tenantId === (authModular.tenantId || null), authModular, \"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */);\r\n return signInWithCredential(authModular, credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function createAuthUri(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:createAuthUri\" /* Endpoint.CREATE_AUTH_URI */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Gets the list of possible sign in methods for the given email address.\r\n *\r\n * @remarks\r\n * This is useful to differentiate methods of sign-in for the same provider, eg.\r\n * {@link EmailAuthProvider} which has 2 methods of sign-in,\r\n * {@link SignInMethod}.EMAIL_PASSWORD and\r\n * {@link SignInMethod}.EMAIL_LINK.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n *\r\n * @public\r\n */\r\nasync function fetchSignInMethodsForEmail(auth, email) {\r\n // createAuthUri returns an error if continue URI is not http or https.\r\n // For environments like Cordova, Chrome extensions, native frameworks, file\r\n // systems, etc, use http://localhost as continue URL.\r\n const continueUri = _isHttpOrHttps() ? _getCurrentUrl() : 'http://localhost';\r\n const request = {\r\n identifier: email,\r\n continueUri\r\n };\r\n const { signinMethods } = await createAuthUri(getModularInstance(auth), request);\r\n return signinMethods || [];\r\n}\r\n/**\r\n * Sends a verification email to a user.\r\n *\r\n * @remarks\r\n * The verification process is completed by calling {@link applyActionCode}.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendEmailVerification(user, actionCodeSettings);\r\n * // Obtain code from the user.\r\n * await applyActionCode(auth, code);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendEmailVerification(user, actionCodeSettings) {\r\n const userInternal = getModularInstance(user);\r\n const idToken = await user.getIdToken();\r\n const request = {\r\n requestType: \"VERIFY_EMAIL\" /* ActionCodeOperation.VERIFY_EMAIL */,\r\n idToken\r\n };\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);\r\n }\r\n const { email } = await sendEmailVerification$1(userInternal.auth, request);\r\n if (email !== user.email) {\r\n await user.reload();\r\n }\r\n}\r\n/**\r\n * Sends a verification email to a new email address.\r\n *\r\n * @remarks\r\n * The user's email will be updated to the new one after being verified.\r\n *\r\n * If you have a custom email action handler, you can complete the verification process by calling\r\n * {@link applyActionCode}.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await verifyBeforeUpdateEmail(user, 'newemail@example.com', actionCodeSettings);\r\n * // Obtain code from the user.\r\n * await applyActionCode(auth, code);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param newEmail - The new email address to be verified before update.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function verifyBeforeUpdateEmail(user, newEmail, actionCodeSettings) {\r\n const userInternal = getModularInstance(user);\r\n const idToken = await user.getIdToken();\r\n const request = {\r\n requestType: \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */,\r\n idToken,\r\n newEmail\r\n };\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);\r\n }\r\n const { email } = await verifyAndChangeEmail(userInternal.auth, request);\r\n if (email !== user.email) {\r\n // If the local copy of the email on user is outdated, reload the\r\n // user.\r\n await user.reload();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function updateProfile$1(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Updates a user's profile data.\r\n *\r\n * @param user - The user.\r\n * @param profile - The profile's `displayName` and `photoURL` to update.\r\n *\r\n * @public\r\n */\r\nasync function updateProfile(user, { displayName, photoURL: photoUrl }) {\r\n if (displayName === undefined && photoUrl === undefined) {\r\n return;\r\n }\r\n const userInternal = getModularInstance(user);\r\n const idToken = await userInternal.getIdToken();\r\n const profileRequest = {\r\n idToken,\r\n displayName,\r\n photoUrl,\r\n returnSecureToken: true\r\n };\r\n const response = await _logoutIfInvalidated(userInternal, updateProfile$1(userInternal.auth, profileRequest));\r\n userInternal.displayName = response.displayName || null;\r\n userInternal.photoURL = response.photoUrl || null;\r\n // Update the password provider as well\r\n const passwordProvider = userInternal.providerData.find(({ providerId }) => providerId === \"password\" /* ProviderId.PASSWORD */);\r\n if (passwordProvider) {\r\n passwordProvider.displayName = userInternal.displayName;\r\n passwordProvider.photoURL = userInternal.photoURL;\r\n }\r\n await userInternal._updateTokensIfNecessary(response);\r\n}\r\n/**\r\n * Updates the user's email address.\r\n *\r\n * @remarks\r\n * An email will be sent to the original email address (if it was set) that allows to revoke the\r\n * email address change, in order to protect them from account hijacking.\r\n *\r\n * Important: this is a security sensitive operation that requires the user to have recently signed\r\n * in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n * @param newEmail - The new email address.\r\n *\r\n * @public\r\n */\r\nfunction updateEmail(user, newEmail) {\r\n return updateEmailOrPassword(getModularInstance(user), newEmail, null);\r\n}\r\n/**\r\n * Updates the user's password.\r\n *\r\n * @remarks\r\n * Important: this is a security sensitive operation that requires the user to have recently signed\r\n * in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n * @param newPassword - The new password.\r\n *\r\n * @public\r\n */\r\nfunction updatePassword(user, newPassword) {\r\n return updateEmailOrPassword(getModularInstance(user), null, newPassword);\r\n}\r\nasync function updateEmailOrPassword(user, email, password) {\r\n const { auth } = user;\r\n const idToken = await user.getIdToken();\r\n const request = {\r\n idToken,\r\n returnSecureToken: true\r\n };\r\n if (email) {\r\n request.email = email;\r\n }\r\n if (password) {\r\n request.password = password;\r\n }\r\n const response = await _logoutIfInvalidated(user, updateEmailPassword(auth, request));\r\n await user._updateTokensIfNecessary(response, /* reload */ true);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Parse the `AdditionalUserInfo` from the ID token response.\r\n *\r\n */\r\nfunction _fromIdTokenResponse(idTokenResponse) {\r\n var _a, _b;\r\n if (!idTokenResponse) {\r\n return null;\r\n }\r\n const { providerId } = idTokenResponse;\r\n const profile = idTokenResponse.rawUserInfo\r\n ? JSON.parse(idTokenResponse.rawUserInfo)\r\n : {};\r\n const isNewUser = idTokenResponse.isNewUser ||\r\n idTokenResponse.kind === \"identitytoolkit#SignupNewUserResponse\" /* IdTokenResponseKind.SignupNewUser */;\r\n if (!providerId && (idTokenResponse === null || idTokenResponse === void 0 ? void 0 : idTokenResponse.idToken)) {\r\n const signInProvider = (_b = (_a = _parseToken(idTokenResponse.idToken)) === null || _a === void 0 ? void 0 : _a.firebase) === null || _b === void 0 ? void 0 : _b['sign_in_provider'];\r\n if (signInProvider) {\r\n const filteredProviderId = signInProvider !== \"anonymous\" /* ProviderId.ANONYMOUS */ &&\r\n signInProvider !== \"custom\" /* ProviderId.CUSTOM */\r\n ? signInProvider\r\n : null;\r\n // Uses generic class in accordance with the legacy SDK.\r\n return new GenericAdditionalUserInfo(isNewUser, filteredProviderId);\r\n }\r\n }\r\n if (!providerId) {\r\n return null;\r\n }\r\n switch (providerId) {\r\n case \"facebook.com\" /* ProviderId.FACEBOOK */:\r\n return new FacebookAdditionalUserInfo(isNewUser, profile);\r\n case \"github.com\" /* ProviderId.GITHUB */:\r\n return new GithubAdditionalUserInfo(isNewUser, profile);\r\n case \"google.com\" /* ProviderId.GOOGLE */:\r\n return new GoogleAdditionalUserInfo(isNewUser, profile);\r\n case \"twitter.com\" /* ProviderId.TWITTER */:\r\n return new TwitterAdditionalUserInfo(isNewUser, profile, idTokenResponse.screenName || null);\r\n case \"custom\" /* ProviderId.CUSTOM */:\r\n case \"anonymous\" /* ProviderId.ANONYMOUS */:\r\n return new GenericAdditionalUserInfo(isNewUser, null);\r\n default:\r\n return new GenericAdditionalUserInfo(isNewUser, providerId, profile);\r\n }\r\n}\r\nclass GenericAdditionalUserInfo {\r\n constructor(isNewUser, providerId, profile = {}) {\r\n this.isNewUser = isNewUser;\r\n this.providerId = providerId;\r\n this.profile = profile;\r\n }\r\n}\r\nclass FederatedAdditionalUserInfoWithUsername extends GenericAdditionalUserInfo {\r\n constructor(isNewUser, providerId, profile, username) {\r\n super(isNewUser, providerId, profile);\r\n this.username = username;\r\n }\r\n}\r\nclass FacebookAdditionalUserInfo extends GenericAdditionalUserInfo {\r\n constructor(isNewUser, profile) {\r\n super(isNewUser, \"facebook.com\" /* ProviderId.FACEBOOK */, profile);\r\n }\r\n}\r\nclass GithubAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\r\n constructor(isNewUser, profile) {\r\n super(isNewUser, \"github.com\" /* ProviderId.GITHUB */, profile, typeof (profile === null || profile === void 0 ? void 0 : profile.login) === 'string' ? profile === null || profile === void 0 ? void 0 : profile.login : null);\r\n }\r\n}\r\nclass GoogleAdditionalUserInfo extends GenericAdditionalUserInfo {\r\n constructor(isNewUser, profile) {\r\n super(isNewUser, \"google.com\" /* ProviderId.GOOGLE */, profile);\r\n }\r\n}\r\nclass TwitterAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\r\n constructor(isNewUser, profile, screenName) {\r\n super(isNewUser, \"twitter.com\" /* ProviderId.TWITTER */, profile, screenName);\r\n }\r\n}\r\n/**\r\n * Extracts provider specific {@link AdditionalUserInfo} for the given credential.\r\n *\r\n * @param userCredential - The user credential.\r\n *\r\n * @public\r\n */\r\nfunction getAdditionalUserInfo(userCredential) {\r\n const { user, _tokenResponse } = userCredential;\r\n if (user.isAnonymous && !_tokenResponse) {\r\n // Handle the special case where signInAnonymously() gets called twice.\r\n // No network call is made so there's nothing to actually fill this in\r\n return {\r\n providerId: null,\r\n isNewUser: false,\r\n profile: null\r\n };\r\n }\r\n return _fromIdTokenResponse(_tokenResponse);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Non-optional auth methods.\r\n/**\r\n * Changes the type of persistence on the {@link Auth} instance for the currently saved\r\n * `Auth` session and applies this type of persistence for future sign-in requests, including\r\n * sign-in with redirect requests.\r\n *\r\n * @remarks\r\n * This makes it easy for a user signing in to specify whether their session should be\r\n * remembered or not. It also makes it easier to never persist the `Auth` state for applications\r\n * that are shared by other users or have sensitive data.\r\n *\r\n * @example\r\n * ```javascript\r\n * setPersistence(auth, browserSessionPersistence);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param persistence - The {@link Persistence} to use.\r\n * @returns A `Promise` that resolves once the persistence change has completed\r\n *\r\n * @public\r\n */\r\nfunction setPersistence(auth, persistence) {\r\n return getModularInstance(auth).setPersistence(persistence);\r\n}\r\n/**\r\n * Loads the reCAPTCHA configuration into the `Auth` instance.\r\n *\r\n * @remarks\r\n * This will load the reCAPTCHA config, which indicates whether the reCAPTCHA\r\n * verification flow should be triggered for each auth provider, into the\r\n * current Auth session.\r\n *\r\n * If initializeRecaptchaConfig() is not invoked, the auth flow will always start\r\n * without reCAPTCHA verification. If the provider is configured to require reCAPTCHA\r\n * verification, the SDK will transparently load the reCAPTCHA config and restart the\r\n * auth flows.\r\n *\r\n * Thus, by calling this optional method, you will reduce the latency of future auth flows.\r\n * Loading the reCAPTCHA config early will also enhance the signal collected by reCAPTCHA.\r\n *\r\n * @example\r\n * ```javascript\r\n * initializeRecaptchaConfig(auth);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nfunction initializeRecaptchaConfig(auth) {\r\n const authInternal = _castAuth(auth);\r\n return authInternal.initializeRecaptchaConfig();\r\n}\r\n/**\r\n * Adds an observer for changes to the signed-in user's ID token.\r\n *\r\n * @remarks\r\n * This includes sign-in, sign-out, and token refresh events.\r\n * This will not be triggered automatically upon ID token expiration. Use {@link User.getIdToken} to refresh the ID token.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param nextOrObserver - callback triggered on change.\r\n * @param error - Deprecated. This callback is never triggered. Errors\r\n * on signing in/out can be caught in promises returned from\r\n * sign-in/sign-out functions.\r\n * @param completed - Deprecated. This callback is never triggered.\r\n *\r\n * @public\r\n */\r\nfunction onIdTokenChanged(auth, nextOrObserver, error, completed) {\r\n return getModularInstance(auth).onIdTokenChanged(nextOrObserver, error, completed);\r\n}\r\n/**\r\n * Adds a blocking callback that runs before an auth state change\r\n * sets a new user.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param callback - callback triggered before new user value is set.\r\n * If this throws, it blocks the user from being set.\r\n * @param onAbort - callback triggered if a later `beforeAuthStateChanged()`\r\n * callback throws, allowing you to undo any side effects.\r\n */\r\nfunction beforeAuthStateChanged(auth, callback, onAbort) {\r\n return getModularInstance(auth).beforeAuthStateChanged(callback, onAbort);\r\n}\r\n/**\r\n * Adds an observer for changes to the user's sign-in state.\r\n *\r\n * @remarks\r\n * To keep the old behavior, see {@link onIdTokenChanged}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param nextOrObserver - callback triggered on change.\r\n * @param error - Deprecated. This callback is never triggered. Errors\r\n * on signing in/out can be caught in promises returned from\r\n * sign-in/sign-out functions.\r\n * @param completed - Deprecated. This callback is never triggered.\r\n *\r\n * @public\r\n */\r\nfunction onAuthStateChanged(auth, nextOrObserver, error, completed) {\r\n return getModularInstance(auth).onAuthStateChanged(nextOrObserver, error, completed);\r\n}\r\n/**\r\n * Sets the current language to the default device/browser preference.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nfunction useDeviceLanguage(auth) {\r\n getModularInstance(auth).useDeviceLanguage();\r\n}\r\n/**\r\n * Asynchronously sets the provided user as {@link Auth.currentUser} on the\r\n * {@link Auth} instance.\r\n *\r\n * @remarks\r\n * A new instance copy of the user provided will be made and set as currentUser.\r\n *\r\n * This will trigger {@link onAuthStateChanged} and {@link onIdTokenChanged} listeners\r\n * like other sign in methods.\r\n *\r\n * The operation fails with an error if the user to be updated belongs to a different Firebase\r\n * project.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param user - The new {@link User}.\r\n *\r\n * @public\r\n */\r\nfunction updateCurrentUser(auth, user) {\r\n return getModularInstance(auth).updateCurrentUser(user);\r\n}\r\n/**\r\n * Signs out the current user.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nfunction signOut(auth) {\r\n return getModularInstance(auth).signOut();\r\n}\r\n/**\r\n * Deletes and signs out the user.\r\n *\r\n * @remarks\r\n * Important: this is a security-sensitive operation that requires the user to have recently\r\n * signed in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nasync function deleteUser(user) {\r\n return getModularInstance(user).delete();\r\n}\n\nclass MultiFactorSessionImpl {\r\n constructor(type, credential, auth) {\r\n this.type = type;\r\n this.credential = credential;\r\n this.auth = auth;\r\n }\r\n static _fromIdtoken(idToken, auth) {\r\n return new MultiFactorSessionImpl(\"enroll\" /* MultiFactorSessionType.ENROLL */, idToken, auth);\r\n }\r\n static _fromMfaPendingCredential(mfaPendingCredential) {\r\n return new MultiFactorSessionImpl(\"signin\" /* MultiFactorSessionType.SIGN_IN */, mfaPendingCredential);\r\n }\r\n toJSON() {\r\n const key = this.type === \"enroll\" /* MultiFactorSessionType.ENROLL */\r\n ? 'idToken'\r\n : 'pendingCredential';\r\n return {\r\n multiFactorSession: {\r\n [key]: this.credential\r\n }\r\n };\r\n }\r\n static fromJSON(obj) {\r\n var _a, _b;\r\n if (obj === null || obj === void 0 ? void 0 : obj.multiFactorSession) {\r\n if ((_a = obj.multiFactorSession) === null || _a === void 0 ? void 0 : _a.pendingCredential) {\r\n return MultiFactorSessionImpl._fromMfaPendingCredential(obj.multiFactorSession.pendingCredential);\r\n }\r\n else if ((_b = obj.multiFactorSession) === null || _b === void 0 ? void 0 : _b.idToken) {\r\n return MultiFactorSessionImpl._fromIdtoken(obj.multiFactorSession.idToken);\r\n }\r\n }\r\n return null;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorResolverImpl {\r\n constructor(session, hints, signInResolver) {\r\n this.session = session;\r\n this.hints = hints;\r\n this.signInResolver = signInResolver;\r\n }\r\n /** @internal */\r\n static _fromError(authExtern, error) {\r\n const auth = _castAuth(authExtern);\r\n const serverResponse = error.customData._serverResponse;\r\n const hints = (serverResponse.mfaInfo || []).map(enrollment => MultiFactorInfoImpl._fromServerResponse(auth, enrollment));\r\n _assert(serverResponse.mfaPendingCredential, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const session = MultiFactorSessionImpl._fromMfaPendingCredential(serverResponse.mfaPendingCredential);\r\n return new MultiFactorResolverImpl(session, hints, async (assertion) => {\r\n const mfaResponse = await assertion._process(auth, session);\r\n // Clear out the unneeded fields from the old login response\r\n delete serverResponse.mfaInfo;\r\n delete serverResponse.mfaPendingCredential;\r\n // Use in the new token & refresh token in the old response\r\n const idTokenResponse = Object.assign(Object.assign({}, serverResponse), { idToken: mfaResponse.idToken, refreshToken: mfaResponse.refreshToken });\r\n // TODO: we should collapse this switch statement into UserCredentialImpl._forOperation and have it support the SIGN_IN case\r\n switch (error.operationType) {\r\n case \"signIn\" /* OperationType.SIGN_IN */:\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(auth, error.operationType, idTokenResponse);\r\n await auth._updateCurrentUser(userCredential.user);\r\n return userCredential;\r\n case \"reauthenticate\" /* OperationType.REAUTHENTICATE */:\r\n _assert(error.user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return UserCredentialImpl._forOperation(error.user, error.operationType, idTokenResponse);\r\n default:\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n });\r\n }\r\n async resolveSignIn(assertionExtern) {\r\n const assertion = assertionExtern;\r\n return this.signInResolver(assertion);\r\n }\r\n}\r\n/**\r\n * Provides a {@link MultiFactorResolver} suitable for completion of a\r\n * multi-factor flow.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param error - The {@link MultiFactorError} raised during a sign-in, or\r\n * reauthentication operation.\r\n *\r\n * @public\r\n */\r\nfunction getMultiFactorResolver(auth, error) {\r\n var _a;\r\n const authModular = getModularInstance(auth);\r\n const errorInternal = error;\r\n _assert(error.customData.operationType, authModular, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert((_a = errorInternal.customData._serverResponse) === null || _a === void 0 ? void 0 : _a.mfaPendingCredential, authModular, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return MultiFactorResolverImpl._fromError(authModular, errorInternal);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction startEnrollPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:start\" /* Endpoint.START_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeEnrollPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:finalize\" /* Endpoint.FINALIZE_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction startEnrollTotpMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:start\" /* Endpoint.START_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeEnrollTotpMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:finalize\" /* Endpoint.FINALIZE_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction withdrawMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:withdraw\" /* Endpoint.WITHDRAW_MFA */, _addTidIfNecessary(auth, request));\r\n}\n\nclass MultiFactorUserImpl {\r\n constructor(user) {\r\n this.user = user;\r\n this.enrolledFactors = [];\r\n user._onReload(userInfo => {\r\n if (userInfo.mfaInfo) {\r\n this.enrolledFactors = userInfo.mfaInfo.map(enrollment => MultiFactorInfoImpl._fromServerResponse(user.auth, enrollment));\r\n }\r\n });\r\n }\r\n static _fromUser(user) {\r\n return new MultiFactorUserImpl(user);\r\n }\r\n async getSession() {\r\n return MultiFactorSessionImpl._fromIdtoken(await this.user.getIdToken(), this.user.auth);\r\n }\r\n async enroll(assertionExtern, displayName) {\r\n const assertion = assertionExtern;\r\n const session = (await this.getSession());\r\n const finalizeMfaResponse = await _logoutIfInvalidated(this.user, assertion._process(this.user.auth, session, displayName));\r\n // New tokens will be issued after enrollment of the new second factors.\r\n // They need to be updated on the user.\r\n await this.user._updateTokensIfNecessary(finalizeMfaResponse);\r\n // The user needs to be reloaded to get the new multi-factor information\r\n // from server. USER_RELOADED event will be triggered and `enrolledFactors`\r\n // will be updated.\r\n return this.user.reload();\r\n }\r\n async unenroll(infoOrUid) {\r\n const mfaEnrollmentId = typeof infoOrUid === 'string' ? infoOrUid : infoOrUid.uid;\r\n const idToken = await this.user.getIdToken();\r\n try {\r\n const idTokenResponse = await _logoutIfInvalidated(this.user, withdrawMfa(this.user.auth, {\r\n idToken,\r\n mfaEnrollmentId\r\n }));\r\n // Remove the second factor from the user's list.\r\n this.enrolledFactors = this.enrolledFactors.filter(({ uid }) => uid !== mfaEnrollmentId);\r\n // Depending on whether the backend decided to revoke the user's session,\r\n // the tokenResponse may be empty. If the tokens were not updated (and they\r\n // are now invalid), reloading the user will discover this and invalidate\r\n // the user's state accordingly.\r\n await this.user._updateTokensIfNecessary(idTokenResponse);\r\n await this.user.reload();\r\n }\r\n catch (e) {\r\n throw e;\r\n }\r\n }\r\n}\r\nconst multiFactorUserCache = new WeakMap();\r\n/**\r\n * The {@link MultiFactorUser} corresponding to the user.\r\n *\r\n * @remarks\r\n * This is used to access all multi-factor properties and operations related to the user.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nfunction multiFactor(user) {\r\n const userModular = getModularInstance(user);\r\n if (!multiFactorUserCache.has(userModular)) {\r\n multiFactorUserCache.set(userModular, MultiFactorUserImpl._fromUser(userModular));\r\n }\r\n return multiFactorUserCache.get(userModular);\r\n}\n\nconst STORAGE_AVAILABLE_KEY = '__sak';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// There are two different browser persistence types: local and session.\r\n// Both have the same implementation but use a different underlying storage\r\n// object.\r\nclass BrowserPersistenceClass {\r\n constructor(storageRetriever, type) {\r\n this.storageRetriever = storageRetriever;\r\n this.type = type;\r\n }\r\n _isAvailable() {\r\n try {\r\n if (!this.storage) {\r\n return Promise.resolve(false);\r\n }\r\n this.storage.setItem(STORAGE_AVAILABLE_KEY, '1');\r\n this.storage.removeItem(STORAGE_AVAILABLE_KEY);\r\n return Promise.resolve(true);\r\n }\r\n catch (_a) {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n _set(key, value) {\r\n this.storage.setItem(key, JSON.stringify(value));\r\n return Promise.resolve();\r\n }\r\n _get(key) {\r\n const json = this.storage.getItem(key);\r\n return Promise.resolve(json ? JSON.parse(json) : null);\r\n }\r\n _remove(key) {\r\n this.storage.removeItem(key);\r\n return Promise.resolve();\r\n }\r\n get storage() {\r\n return this.storageRetriever();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _iframeCannotSyncWebStorage() {\r\n const ua = getUA();\r\n return _isSafari(ua) || _isIOS(ua);\r\n}\r\n// The polling period in case events are not supported\r\nconst _POLLING_INTERVAL_MS$1 = 1000;\r\n// The IE 10 localStorage cross tab synchronization delay in milliseconds\r\nconst IE10_LOCAL_STORAGE_SYNC_DELAY = 10;\r\nclass BrowserLocalPersistence extends BrowserPersistenceClass {\r\n constructor() {\r\n super(() => window.localStorage, \"LOCAL\" /* PersistenceType.LOCAL */);\r\n this.boundEventHandler = (event, poll) => this.onStorageEvent(event, poll);\r\n this.listeners = {};\r\n this.localCache = {};\r\n // setTimeout return value is platform specific\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.pollTimer = null;\r\n // Safari or iOS browser and embedded in an iframe.\r\n this.safariLocalStorageNotSynced = _iframeCannotSyncWebStorage() && _isIframe();\r\n // Whether to use polling instead of depending on window events\r\n this.fallbackToPolling = _isMobileBrowser();\r\n this._shouldAllowMigration = true;\r\n }\r\n forAllChangedKeys(cb) {\r\n // Check all keys with listeners on them.\r\n for (const key of Object.keys(this.listeners)) {\r\n // Get value from localStorage.\r\n const newValue = this.storage.getItem(key);\r\n const oldValue = this.localCache[key];\r\n // If local map value does not match, trigger listener with storage event.\r\n // Differentiate this simulated event from the real storage event.\r\n if (newValue !== oldValue) {\r\n cb(key, oldValue, newValue);\r\n }\r\n }\r\n }\r\n onStorageEvent(event, poll = false) {\r\n // Key would be null in some situations, like when localStorage is cleared\r\n if (!event.key) {\r\n this.forAllChangedKeys((key, _oldValue, newValue) => {\r\n this.notifyListeners(key, newValue);\r\n });\r\n return;\r\n }\r\n const key = event.key;\r\n // Check the mechanism how this event was detected.\r\n // The first event will dictate the mechanism to be used.\r\n if (poll) {\r\n // Environment detects storage changes via polling.\r\n // Remove storage event listener to prevent possible event duplication.\r\n this.detachListener();\r\n }\r\n else {\r\n // Environment detects storage changes via storage event listener.\r\n // Remove polling listener to prevent possible event duplication.\r\n this.stopPolling();\r\n }\r\n // Safari embedded iframe. Storage event will trigger with the delta\r\n // changes but no changes will be applied to the iframe localStorage.\r\n if (this.safariLocalStorageNotSynced) {\r\n // Get current iframe page value.\r\n const storedValue = this.storage.getItem(key);\r\n // Value not synchronized, synchronize manually.\r\n if (event.newValue !== storedValue) {\r\n if (event.newValue !== null) {\r\n // Value changed from current value.\r\n this.storage.setItem(key, event.newValue);\r\n }\r\n else {\r\n // Current value deleted.\r\n this.storage.removeItem(key);\r\n }\r\n }\r\n else if (this.localCache[key] === event.newValue && !poll) {\r\n // Already detected and processed, do not trigger listeners again.\r\n return;\r\n }\r\n }\r\n const triggerListeners = () => {\r\n // Keep local map up to date in case storage event is triggered before\r\n // poll.\r\n const storedValue = this.storage.getItem(key);\r\n if (!poll && this.localCache[key] === storedValue) {\r\n // Real storage event which has already been detected, do nothing.\r\n // This seems to trigger in some IE browsers for some reason.\r\n return;\r\n }\r\n this.notifyListeners(key, storedValue);\r\n };\r\n const storedValue = this.storage.getItem(key);\r\n if (_isIE10() &&\r\n storedValue !== event.newValue &&\r\n event.newValue !== event.oldValue) {\r\n // IE 10 has this weird bug where a storage event would trigger with the\r\n // correct key, oldValue and newValue but localStorage.getItem(key) does\r\n // not yield the updated value until a few milliseconds. This ensures\r\n // this recovers from that situation.\r\n setTimeout(triggerListeners, IE10_LOCAL_STORAGE_SYNC_DELAY);\r\n }\r\n else {\r\n triggerListeners();\r\n }\r\n }\r\n notifyListeners(key, value) {\r\n this.localCache[key] = value;\r\n const listeners = this.listeners[key];\r\n if (listeners) {\r\n for (const listener of Array.from(listeners)) {\r\n listener(value ? JSON.parse(value) : value);\r\n }\r\n }\r\n }\r\n startPolling() {\r\n this.stopPolling();\r\n this.pollTimer = setInterval(() => {\r\n this.forAllChangedKeys((key, oldValue, newValue) => {\r\n this.onStorageEvent(new StorageEvent('storage', {\r\n key,\r\n oldValue,\r\n newValue\r\n }), \r\n /* poll */ true);\r\n });\r\n }, _POLLING_INTERVAL_MS$1);\r\n }\r\n stopPolling() {\r\n if (this.pollTimer) {\r\n clearInterval(this.pollTimer);\r\n this.pollTimer = null;\r\n }\r\n }\r\n attachListener() {\r\n window.addEventListener('storage', this.boundEventHandler);\r\n }\r\n detachListener() {\r\n window.removeEventListener('storage', this.boundEventHandler);\r\n }\r\n _addListener(key, listener) {\r\n if (Object.keys(this.listeners).length === 0) {\r\n // Whether browser can detect storage event when it had already been pushed to the background.\r\n // This may happen in some mobile browsers. A localStorage change in the foreground window\r\n // will not be detected in the background window via the storage event.\r\n // This was detected in iOS 7.x mobile browsers\r\n if (this.fallbackToPolling) {\r\n this.startPolling();\r\n }\r\n else {\r\n this.attachListener();\r\n }\r\n }\r\n if (!this.listeners[key]) {\r\n this.listeners[key] = new Set();\r\n // Populate the cache to avoid spuriously triggering on first poll.\r\n this.localCache[key] = this.storage.getItem(key);\r\n }\r\n this.listeners[key].add(listener);\r\n }\r\n _removeListener(key, listener) {\r\n if (this.listeners[key]) {\r\n this.listeners[key].delete(listener);\r\n if (this.listeners[key].size === 0) {\r\n delete this.listeners[key];\r\n }\r\n }\r\n if (Object.keys(this.listeners).length === 0) {\r\n this.detachListener();\r\n this.stopPolling();\r\n }\r\n }\r\n // Update local cache on base operations:\r\n async _set(key, value) {\r\n await super._set(key, value);\r\n this.localCache[key] = JSON.stringify(value);\r\n }\r\n async _get(key) {\r\n const value = await super._get(key);\r\n this.localCache[key] = JSON.stringify(value);\r\n return value;\r\n }\r\n async _remove(key) {\r\n await super._remove(key);\r\n delete this.localCache[key];\r\n }\r\n}\r\nBrowserLocalPersistence.type = 'LOCAL';\r\n/**\r\n * An implementation of {@link Persistence} of type `LOCAL` using `localStorage`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst browserLocalPersistence = BrowserLocalPersistence;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass BrowserSessionPersistence extends BrowserPersistenceClass {\r\n constructor() {\r\n super(() => window.sessionStorage, \"SESSION\" /* PersistenceType.SESSION */);\r\n }\r\n _addListener(_key, _listener) {\r\n // Listeners are not supported for session storage since it cannot be shared across windows\r\n return;\r\n }\r\n _removeListener(_key, _listener) {\r\n // Listeners are not supported for session storage since it cannot be shared across windows\r\n return;\r\n }\r\n}\r\nBrowserSessionPersistence.type = 'SESSION';\r\n/**\r\n * An implementation of {@link Persistence} of `SESSION` using `sessionStorage`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst browserSessionPersistence = BrowserSessionPersistence;\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Shim for Promise.allSettled, note the slightly different format of `fulfilled` vs `status`.\r\n *\r\n * @param promises - Array of promises to wait on.\r\n */\r\nfunction _allSettled(promises) {\r\n return Promise.all(promises.map(async (promise) => {\r\n try {\r\n const value = await promise;\r\n return {\r\n fulfilled: true,\r\n value\r\n };\r\n }\r\n catch (reason) {\r\n return {\r\n fulfilled: false,\r\n reason\r\n };\r\n }\r\n }));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface class for receiving messages.\r\n *\r\n */\r\nclass Receiver {\r\n constructor(eventTarget) {\r\n this.eventTarget = eventTarget;\r\n this.handlersMap = {};\r\n this.boundEventHandler = this.handleEvent.bind(this);\r\n }\r\n /**\r\n * Obtain an instance of a Receiver for a given event target, if none exists it will be created.\r\n *\r\n * @param eventTarget - An event target (such as window or self) through which the underlying\r\n * messages will be received.\r\n */\r\n static _getInstance(eventTarget) {\r\n // The results are stored in an array since objects can't be keys for other\r\n // objects. In addition, setting a unique property on an event target as a\r\n // hash map key may not be allowed due to CORS restrictions.\r\n const existingInstance = this.receivers.find(receiver => receiver.isListeningto(eventTarget));\r\n if (existingInstance) {\r\n return existingInstance;\r\n }\r\n const newInstance = new Receiver(eventTarget);\r\n this.receivers.push(newInstance);\r\n return newInstance;\r\n }\r\n isListeningto(eventTarget) {\r\n return this.eventTarget === eventTarget;\r\n }\r\n /**\r\n * Fans out a MessageEvent to the appropriate listeners.\r\n *\r\n * @remarks\r\n * Sends an {@link Status.ACK} upon receipt and a {@link Status.DONE} once all handlers have\r\n * finished processing.\r\n *\r\n * @param event - The MessageEvent.\r\n *\r\n */\r\n async handleEvent(event) {\r\n const messageEvent = event;\r\n const { eventId, eventType, data } = messageEvent.data;\r\n const handlers = this.handlersMap[eventType];\r\n if (!(handlers === null || handlers === void 0 ? void 0 : handlers.size)) {\r\n return;\r\n }\r\n messageEvent.ports[0].postMessage({\r\n status: \"ack\" /* _Status.ACK */,\r\n eventId,\r\n eventType\r\n });\r\n const promises = Array.from(handlers).map(async (handler) => handler(messageEvent.origin, data));\r\n const response = await _allSettled(promises);\r\n messageEvent.ports[0].postMessage({\r\n status: \"done\" /* _Status.DONE */,\r\n eventId,\r\n eventType,\r\n response\r\n });\r\n }\r\n /**\r\n * Subscribe an event handler for a particular event.\r\n *\r\n * @param eventType - Event name to subscribe to.\r\n * @param eventHandler - The event handler which should receive the events.\r\n *\r\n */\r\n _subscribe(eventType, eventHandler) {\r\n if (Object.keys(this.handlersMap).length === 0) {\r\n this.eventTarget.addEventListener('message', this.boundEventHandler);\r\n }\r\n if (!this.handlersMap[eventType]) {\r\n this.handlersMap[eventType] = new Set();\r\n }\r\n this.handlersMap[eventType].add(eventHandler);\r\n }\r\n /**\r\n * Unsubscribe an event handler from a particular event.\r\n *\r\n * @param eventType - Event name to unsubscribe from.\r\n * @param eventHandler - Optinoal event handler, if none provided, unsubscribe all handlers on this event.\r\n *\r\n */\r\n _unsubscribe(eventType, eventHandler) {\r\n if (this.handlersMap[eventType] && eventHandler) {\r\n this.handlersMap[eventType].delete(eventHandler);\r\n }\r\n if (!eventHandler || this.handlersMap[eventType].size === 0) {\r\n delete this.handlersMap[eventType];\r\n }\r\n if (Object.keys(this.handlersMap).length === 0) {\r\n this.eventTarget.removeEventListener('message', this.boundEventHandler);\r\n }\r\n }\r\n}\r\nReceiver.receivers = [];\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _generateEventId(prefix = '', digits = 10) {\r\n let random = '';\r\n for (let i = 0; i < digits; i++) {\r\n random += Math.floor(Math.random() * 10);\r\n }\r\n return prefix + random;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface for sending messages and waiting for a completion response.\r\n *\r\n */\r\nclass Sender {\r\n constructor(target) {\r\n this.target = target;\r\n this.handlers = new Set();\r\n }\r\n /**\r\n * Unsubscribe the handler and remove it from our tracking Set.\r\n *\r\n * @param handler - The handler to unsubscribe.\r\n */\r\n removeMessageHandler(handler) {\r\n if (handler.messageChannel) {\r\n handler.messageChannel.port1.removeEventListener('message', handler.onMessage);\r\n handler.messageChannel.port1.close();\r\n }\r\n this.handlers.delete(handler);\r\n }\r\n /**\r\n * Send a message to the Receiver located at {@link target}.\r\n *\r\n * @remarks\r\n * We'll first wait a bit for an ACK , if we get one we will wait significantly longer until the\r\n * receiver has had a chance to fully process the event.\r\n *\r\n * @param eventType - Type of event to send.\r\n * @param data - The payload of the event.\r\n * @param timeout - Timeout for waiting on an ACK from the receiver.\r\n *\r\n * @returns An array of settled promises from all the handlers that were listening on the receiver.\r\n */\r\n async _send(eventType, data, timeout = 50 /* _TimeoutDuration.ACK */) {\r\n const messageChannel = typeof MessageChannel !== 'undefined' ? new MessageChannel() : null;\r\n if (!messageChannel) {\r\n throw new Error(\"connection_unavailable\" /* _MessageError.CONNECTION_UNAVAILABLE */);\r\n }\r\n // Node timers and browser timers return fundamentally different types.\r\n // We don't actually care what the value is but TS won't accept unknown and\r\n // we can't cast properly in both environments.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let completionTimer;\r\n let handler;\r\n return new Promise((resolve, reject) => {\r\n const eventId = _generateEventId('', 20);\r\n messageChannel.port1.start();\r\n const ackTimer = setTimeout(() => {\r\n reject(new Error(\"unsupported_event\" /* _MessageError.UNSUPPORTED_EVENT */));\r\n }, timeout);\r\n handler = {\r\n messageChannel,\r\n onMessage(event) {\r\n const messageEvent = event;\r\n if (messageEvent.data.eventId !== eventId) {\r\n return;\r\n }\r\n switch (messageEvent.data.status) {\r\n case \"ack\" /* _Status.ACK */:\r\n // The receiver should ACK first.\r\n clearTimeout(ackTimer);\r\n completionTimer = setTimeout(() => {\r\n reject(new Error(\"timeout\" /* _MessageError.TIMEOUT */));\r\n }, 3000 /* _TimeoutDuration.COMPLETION */);\r\n break;\r\n case \"done\" /* _Status.DONE */:\r\n // Once the receiver's handlers are finished we will get the results.\r\n clearTimeout(completionTimer);\r\n resolve(messageEvent.data.response);\r\n break;\r\n default:\r\n clearTimeout(ackTimer);\r\n clearTimeout(completionTimer);\r\n reject(new Error(\"invalid_response\" /* _MessageError.INVALID_RESPONSE */));\r\n break;\r\n }\r\n }\r\n };\r\n this.handlers.add(handler);\r\n messageChannel.port1.addEventListener('message', handler.onMessage);\r\n this.target.postMessage({\r\n eventType,\r\n eventId,\r\n data\r\n }, [messageChannel.port2]);\r\n }).finally(() => {\r\n if (handler) {\r\n this.removeMessageHandler(handler);\r\n }\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Lazy accessor for window, since the compat layer won't tree shake this out,\r\n * we need to make sure not to mess with window unless we have to\r\n */\r\nfunction _window() {\r\n return window;\r\n}\r\nfunction _setWindowLocation(url) {\r\n _window().location.href = url;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _isWorker() {\r\n return (typeof _window()['WorkerGlobalScope'] !== 'undefined' &&\r\n typeof _window()['importScripts'] === 'function');\r\n}\r\nasync function _getActiveServiceWorker() {\r\n if (!(navigator === null || navigator === void 0 ? void 0 : navigator.serviceWorker)) {\r\n return null;\r\n }\r\n try {\r\n const registration = await navigator.serviceWorker.ready;\r\n return registration.active;\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n}\r\nfunction _getServiceWorkerController() {\r\n var _a;\r\n return ((_a = navigator === null || navigator === void 0 ? void 0 : navigator.serviceWorker) === null || _a === void 0 ? void 0 : _a.controller) || null;\r\n}\r\nfunction _getWorkerGlobalScope() {\r\n return _isWorker() ? self : null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DB_NAME = 'firebaseLocalStorageDb';\r\nconst DB_VERSION = 1;\r\nconst DB_OBJECTSTORE_NAME = 'firebaseLocalStorage';\r\nconst DB_DATA_KEYPATH = 'fbase_key';\r\n/**\r\n * Promise wrapper for IDBRequest\r\n *\r\n * Unfortunately we can't cleanly extend Promise since promises are not callable in ES6\r\n *\r\n */\r\nclass DBPromise {\r\n constructor(request) {\r\n this.request = request;\r\n }\r\n toPromise() {\r\n return new Promise((resolve, reject) => {\r\n this.request.addEventListener('success', () => {\r\n resolve(this.request.result);\r\n });\r\n this.request.addEventListener('error', () => {\r\n reject(this.request.error);\r\n });\r\n });\r\n }\r\n}\r\nfunction getObjectStore(db, isReadWrite) {\r\n return db\r\n .transaction([DB_OBJECTSTORE_NAME], isReadWrite ? 'readwrite' : 'readonly')\r\n .objectStore(DB_OBJECTSTORE_NAME);\r\n}\r\nfunction _deleteDatabase() {\r\n const request = indexedDB.deleteDatabase(DB_NAME);\r\n return new DBPromise(request).toPromise();\r\n}\r\nfunction _openDatabase() {\r\n const request = indexedDB.open(DB_NAME, DB_VERSION);\r\n return new Promise((resolve, reject) => {\r\n request.addEventListener('error', () => {\r\n reject(request.error);\r\n });\r\n request.addEventListener('upgradeneeded', () => {\r\n const db = request.result;\r\n try {\r\n db.createObjectStore(DB_OBJECTSTORE_NAME, { keyPath: DB_DATA_KEYPATH });\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n });\r\n request.addEventListener('success', async () => {\r\n const db = request.result;\r\n // Strange bug that occurs in Firefox when multiple tabs are opened at the\r\n // same time. The only way to recover seems to be deleting the database\r\n // and re-initializing it.\r\n // https://github.com/firebase/firebase-js-sdk/issues/634\r\n if (!db.objectStoreNames.contains(DB_OBJECTSTORE_NAME)) {\r\n // Need to close the database or else you get a `blocked` event\r\n db.close();\r\n await _deleteDatabase();\r\n resolve(await _openDatabase());\r\n }\r\n else {\r\n resolve(db);\r\n }\r\n });\r\n });\r\n}\r\nasync function _putObject(db, key, value) {\r\n const request = getObjectStore(db, true).put({\r\n [DB_DATA_KEYPATH]: key,\r\n value\r\n });\r\n return new DBPromise(request).toPromise();\r\n}\r\nasync function getObject(db, key) {\r\n const request = getObjectStore(db, false).get(key);\r\n const data = await new DBPromise(request).toPromise();\r\n return data === undefined ? null : data.value;\r\n}\r\nfunction _deleteObject(db, key) {\r\n const request = getObjectStore(db, true).delete(key);\r\n return new DBPromise(request).toPromise();\r\n}\r\nconst _POLLING_INTERVAL_MS = 800;\r\nconst _TRANSACTION_RETRY_COUNT = 3;\r\nclass IndexedDBLocalPersistence {\r\n constructor() {\r\n this.type = \"LOCAL\" /* PersistenceType.LOCAL */;\r\n this._shouldAllowMigration = true;\r\n this.listeners = {};\r\n this.localCache = {};\r\n // setTimeout return value is platform specific\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.pollTimer = null;\r\n this.pendingWrites = 0;\r\n this.receiver = null;\r\n this.sender = null;\r\n this.serviceWorkerReceiverAvailable = false;\r\n this.activeServiceWorker = null;\r\n // Fire & forget the service worker registration as it may never resolve\r\n this._workerInitializationPromise =\r\n this.initializeServiceWorkerMessaging().then(() => { }, () => { });\r\n }\r\n async _openDb() {\r\n if (this.db) {\r\n return this.db;\r\n }\r\n this.db = await _openDatabase();\r\n return this.db;\r\n }\r\n async _withRetries(op) {\r\n let numAttempts = 0;\r\n while (true) {\r\n try {\r\n const db = await this._openDb();\r\n return await op(db);\r\n }\r\n catch (e) {\r\n if (numAttempts++ > _TRANSACTION_RETRY_COUNT) {\r\n throw e;\r\n }\r\n if (this.db) {\r\n this.db.close();\r\n this.db = undefined;\r\n }\r\n // TODO: consider adding exponential backoff\r\n }\r\n }\r\n }\r\n /**\r\n * IndexedDB events do not propagate from the main window to the worker context. We rely on a\r\n * postMessage interface to send these events to the worker ourselves.\r\n */\r\n async initializeServiceWorkerMessaging() {\r\n return _isWorker() ? this.initializeReceiver() : this.initializeSender();\r\n }\r\n /**\r\n * As the worker we should listen to events from the main window.\r\n */\r\n async initializeReceiver() {\r\n this.receiver = Receiver._getInstance(_getWorkerGlobalScope());\r\n // Refresh from persistence if we receive a KeyChanged message.\r\n this.receiver._subscribe(\"keyChanged\" /* _EventType.KEY_CHANGED */, async (_origin, data) => {\r\n const keys = await this._poll();\r\n return {\r\n keyProcessed: keys.includes(data.key)\r\n };\r\n });\r\n // Let the sender know that we are listening so they give us more timeout.\r\n this.receiver._subscribe(\"ping\" /* _EventType.PING */, async (_origin, _data) => {\r\n return [\"keyChanged\" /* _EventType.KEY_CHANGED */];\r\n });\r\n }\r\n /**\r\n * As the main window, we should let the worker know when keys change (set and remove).\r\n *\r\n * @remarks\r\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/ready | ServiceWorkerContainer.ready}\r\n * may not resolve.\r\n */\r\n async initializeSender() {\r\n var _a, _b;\r\n // Check to see if there's an active service worker.\r\n this.activeServiceWorker = await _getActiveServiceWorker();\r\n if (!this.activeServiceWorker) {\r\n return;\r\n }\r\n this.sender = new Sender(this.activeServiceWorker);\r\n // Ping the service worker to check what events they can handle.\r\n const results = await this.sender._send(\"ping\" /* _EventType.PING */, {}, 800 /* _TimeoutDuration.LONG_ACK */);\r\n if (!results) {\r\n return;\r\n }\r\n if (((_a = results[0]) === null || _a === void 0 ? void 0 : _a.fulfilled) &&\r\n ((_b = results[0]) === null || _b === void 0 ? void 0 : _b.value.includes(\"keyChanged\" /* _EventType.KEY_CHANGED */))) {\r\n this.serviceWorkerReceiverAvailable = true;\r\n }\r\n }\r\n /**\r\n * Let the worker know about a changed key, the exact key doesn't technically matter since the\r\n * worker will just trigger a full sync anyway.\r\n *\r\n * @remarks\r\n * For now, we only support one service worker per page.\r\n *\r\n * @param key - Storage key which changed.\r\n */\r\n async notifyServiceWorker(key) {\r\n if (!this.sender ||\r\n !this.activeServiceWorker ||\r\n _getServiceWorkerController() !== this.activeServiceWorker) {\r\n return;\r\n }\r\n try {\r\n await this.sender._send(\"keyChanged\" /* _EventType.KEY_CHANGED */, { key }, \r\n // Use long timeout if receiver has previously responded to a ping from us.\r\n this.serviceWorkerReceiverAvailable\r\n ? 800 /* _TimeoutDuration.LONG_ACK */\r\n : 50 /* _TimeoutDuration.ACK */);\r\n }\r\n catch (_a) {\r\n // This is a best effort approach. Ignore errors.\r\n }\r\n }\r\n async _isAvailable() {\r\n try {\r\n if (!indexedDB) {\r\n return false;\r\n }\r\n const db = await _openDatabase();\r\n await _putObject(db, STORAGE_AVAILABLE_KEY, '1');\r\n await _deleteObject(db, STORAGE_AVAILABLE_KEY);\r\n return true;\r\n }\r\n catch (_a) { }\r\n return false;\r\n }\r\n async _withPendingWrite(write) {\r\n this.pendingWrites++;\r\n try {\r\n await write();\r\n }\r\n finally {\r\n this.pendingWrites--;\r\n }\r\n }\r\n async _set(key, value) {\r\n return this._withPendingWrite(async () => {\r\n await this._withRetries((db) => _putObject(db, key, value));\r\n this.localCache[key] = value;\r\n return this.notifyServiceWorker(key);\r\n });\r\n }\r\n async _get(key) {\r\n const obj = (await this._withRetries((db) => getObject(db, key)));\r\n this.localCache[key] = obj;\r\n return obj;\r\n }\r\n async _remove(key) {\r\n return this._withPendingWrite(async () => {\r\n await this._withRetries((db) => _deleteObject(db, key));\r\n delete this.localCache[key];\r\n return this.notifyServiceWorker(key);\r\n });\r\n }\r\n async _poll() {\r\n // TODO: check if we need to fallback if getAll is not supported\r\n const result = await this._withRetries((db) => {\r\n const getAllRequest = getObjectStore(db, false).getAll();\r\n return new DBPromise(getAllRequest).toPromise();\r\n });\r\n if (!result) {\r\n return [];\r\n }\r\n // If we have pending writes in progress abort, we'll get picked up on the next poll\r\n if (this.pendingWrites !== 0) {\r\n return [];\r\n }\r\n const keys = [];\r\n const keysInResult = new Set();\r\n for (const { fbase_key: key, value } of result) {\r\n keysInResult.add(key);\r\n if (JSON.stringify(this.localCache[key]) !== JSON.stringify(value)) {\r\n this.notifyListeners(key, value);\r\n keys.push(key);\r\n }\r\n }\r\n for (const localKey of Object.keys(this.localCache)) {\r\n if (this.localCache[localKey] && !keysInResult.has(localKey)) {\r\n // Deleted\r\n this.notifyListeners(localKey, null);\r\n keys.push(localKey);\r\n }\r\n }\r\n return keys;\r\n }\r\n notifyListeners(key, newValue) {\r\n this.localCache[key] = newValue;\r\n const listeners = this.listeners[key];\r\n if (listeners) {\r\n for (const listener of Array.from(listeners)) {\r\n listener(newValue);\r\n }\r\n }\r\n }\r\n startPolling() {\r\n this.stopPolling();\r\n this.pollTimer = setInterval(async () => this._poll(), _POLLING_INTERVAL_MS);\r\n }\r\n stopPolling() {\r\n if (this.pollTimer) {\r\n clearInterval(this.pollTimer);\r\n this.pollTimer = null;\r\n }\r\n }\r\n _addListener(key, listener) {\r\n if (Object.keys(this.listeners).length === 0) {\r\n this.startPolling();\r\n }\r\n if (!this.listeners[key]) {\r\n this.listeners[key] = new Set();\r\n // Populate the cache to avoid spuriously triggering on first poll.\r\n void this._get(key); // This can happen in the background async and we can return immediately.\r\n }\r\n this.listeners[key].add(listener);\r\n }\r\n _removeListener(key, listener) {\r\n if (this.listeners[key]) {\r\n this.listeners[key].delete(listener);\r\n if (this.listeners[key].size === 0) {\r\n delete this.listeners[key];\r\n }\r\n }\r\n if (Object.keys(this.listeners).length === 0) {\r\n this.stopPolling();\r\n }\r\n }\r\n}\r\nIndexedDBLocalPersistence.type = 'LOCAL';\r\n/**\r\n * An implementation of {@link Persistence} of type `LOCAL` using `indexedDB`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst indexedDBLocalPersistence = IndexedDBLocalPersistence;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction startSignInPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaSignIn:start\" /* Endpoint.START_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeSignInPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaSignIn:finalize\" /* Endpoint.FINALIZE_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeSignInTotpMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaSignIn:finalize\" /* Endpoint.FINALIZE_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _SOLVE_TIME_MS = 500;\r\nconst _EXPIRATION_TIME_MS = 60000;\r\nconst _WIDGET_ID_START = 1000000000000;\r\nclass MockReCaptcha {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.counter = _WIDGET_ID_START;\r\n this._widgets = new Map();\r\n }\r\n render(container, parameters) {\r\n const id = this.counter;\r\n this._widgets.set(id, new MockWidget(container, this.auth.name, parameters || {}));\r\n this.counter++;\r\n return id;\r\n }\r\n reset(optWidgetId) {\r\n var _a;\r\n const id = optWidgetId || _WIDGET_ID_START;\r\n void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.delete());\r\n this._widgets.delete(id);\r\n }\r\n getResponse(optWidgetId) {\r\n var _a;\r\n const id = optWidgetId || _WIDGET_ID_START;\r\n return ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.getResponse()) || '';\r\n }\r\n async execute(optWidgetId) {\r\n var _a;\r\n const id = optWidgetId || _WIDGET_ID_START;\r\n void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.execute());\r\n return '';\r\n }\r\n}\r\nclass MockWidget {\r\n constructor(containerOrId, appName, params) {\r\n this.params = params;\r\n this.timerId = null;\r\n this.deleted = false;\r\n this.responseToken = null;\r\n this.clickHandler = () => {\r\n this.execute();\r\n };\r\n const container = typeof containerOrId === 'string'\r\n ? document.getElementById(containerOrId)\r\n : containerOrId;\r\n _assert(container, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */, { appName });\r\n this.container = container;\r\n this.isVisible = this.params.size !== 'invisible';\r\n if (this.isVisible) {\r\n this.execute();\r\n }\r\n else {\r\n this.container.addEventListener('click', this.clickHandler);\r\n }\r\n }\r\n getResponse() {\r\n this.checkIfDeleted();\r\n return this.responseToken;\r\n }\r\n delete() {\r\n this.checkIfDeleted();\r\n this.deleted = true;\r\n if (this.timerId) {\r\n clearTimeout(this.timerId);\r\n this.timerId = null;\r\n }\r\n this.container.removeEventListener('click', this.clickHandler);\r\n }\r\n execute() {\r\n this.checkIfDeleted();\r\n if (this.timerId) {\r\n return;\r\n }\r\n this.timerId = window.setTimeout(() => {\r\n this.responseToken = generateRandomAlphaNumericString(50);\r\n const { callback, 'expired-callback': expiredCallback } = this.params;\r\n if (callback) {\r\n try {\r\n callback(this.responseToken);\r\n }\r\n catch (e) { }\r\n }\r\n this.timerId = window.setTimeout(() => {\r\n this.timerId = null;\r\n this.responseToken = null;\r\n if (expiredCallback) {\r\n try {\r\n expiredCallback();\r\n }\r\n catch (e) { }\r\n }\r\n if (this.isVisible) {\r\n this.execute();\r\n }\r\n }, _EXPIRATION_TIME_MS);\r\n }, _SOLVE_TIME_MS);\r\n }\r\n checkIfDeleted() {\r\n if (this.deleted) {\r\n throw new Error('reCAPTCHA mock was already deleted!');\r\n }\r\n }\r\n}\r\nfunction generateRandomAlphaNumericString(len) {\r\n const chars = [];\r\n const allowedChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n for (let i = 0; i < len; i++) {\r\n chars.push(allowedChars.charAt(Math.floor(Math.random() * allowedChars.length)));\r\n }\r\n return chars.join('');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// ReCaptcha will load using the same callback, so the callback function needs\r\n// to be kept around\r\nconst _JSLOAD_CALLBACK = _generateCallbackName('rcb');\r\nconst NETWORK_TIMEOUT_DELAY = new Delay(30000, 60000);\r\nconst RECAPTCHA_BASE = 'https://www.google.com/recaptcha/api.js?';\r\n/**\r\n * Loader for the GReCaptcha library. There should only ever be one of this.\r\n */\r\nclass ReCaptchaLoaderImpl {\r\n constructor() {\r\n var _a;\r\n this.hostLanguage = '';\r\n this.counter = 0;\r\n /**\r\n * Check for `render()` method. `window.grecaptcha` will exist if the Enterprise\r\n * version of the ReCAPTCHA script was loaded by someone else (e.g. App Check) but\r\n * `window.grecaptcha.render()` will not. Another load will add it.\r\n */\r\n this.librarySeparatelyLoaded = !!((_a = _window().grecaptcha) === null || _a === void 0 ? void 0 : _a.render);\r\n }\r\n load(auth, hl = '') {\r\n _assert(isHostLanguageValid(hl), auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n if (this.shouldResolveImmediately(hl) && isV2(_window().grecaptcha)) {\r\n return Promise.resolve(_window().grecaptcha);\r\n }\r\n return new Promise((resolve, reject) => {\r\n const networkTimeout = _window().setTimeout(() => {\r\n reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n }, NETWORK_TIMEOUT_DELAY.get());\r\n _window()[_JSLOAD_CALLBACK] = () => {\r\n _window().clearTimeout(networkTimeout);\r\n delete _window()[_JSLOAD_CALLBACK];\r\n const recaptcha = _window().grecaptcha;\r\n if (!recaptcha || !isV2(recaptcha)) {\r\n reject(_createError(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */));\r\n return;\r\n }\r\n // Wrap the greptcha render function so that we know if the developer has\r\n // called it separately\r\n const render = recaptcha.render;\r\n recaptcha.render = (container, params) => {\r\n const widgetId = render(container, params);\r\n this.counter++;\r\n return widgetId;\r\n };\r\n this.hostLanguage = hl;\r\n resolve(recaptcha);\r\n };\r\n const url = `${RECAPTCHA_BASE}?${querystring({\r\n onload: _JSLOAD_CALLBACK,\r\n render: 'explicit',\r\n hl\r\n })}`;\r\n _loadJS(url).catch(() => {\r\n clearTimeout(networkTimeout);\r\n reject(_createError(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */));\r\n });\r\n });\r\n }\r\n clearedOneInstance() {\r\n this.counter--;\r\n }\r\n shouldResolveImmediately(hl) {\r\n var _a;\r\n // We can resolve immediately if:\r\n // • grecaptcha is already defined AND (\r\n // 1. the requested language codes are the same OR\r\n // 2. there exists already a ReCaptcha on the page\r\n // 3. the library was already loaded by the app\r\n // In cases (2) and (3), we _can't_ reload as it would break the recaptchas\r\n // that are already in the page\r\n return (!!((_a = _window().grecaptcha) === null || _a === void 0 ? void 0 : _a.render) &&\r\n (hl === this.hostLanguage ||\r\n this.counter > 0 ||\r\n this.librarySeparatelyLoaded));\r\n }\r\n}\r\nfunction isHostLanguageValid(hl) {\r\n return hl.length <= 6 && /^\\s*[a-zA-Z0-9\\-]*\\s*$/.test(hl);\r\n}\r\nclass MockReCaptchaLoaderImpl {\r\n async load(auth) {\r\n return new MockReCaptcha(auth);\r\n }\r\n clearedOneInstance() { }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst RECAPTCHA_VERIFIER_TYPE = 'recaptcha';\r\nconst DEFAULT_PARAMS = {\r\n theme: 'light',\r\n type: 'image'\r\n};\r\n/**\r\n * An {@link https://www.google.com/recaptcha/ | reCAPTCHA}-based application verifier.\r\n *\r\n * @public\r\n */\r\nclass RecaptchaVerifier {\r\n /**\r\n *\r\n * @param containerOrId - The reCAPTCHA container parameter.\r\n *\r\n * @remarks\r\n * This has different meaning depending on whether the reCAPTCHA is hidden or visible. For a\r\n * visible reCAPTCHA the container must be empty. If a string is used, it has to correspond to\r\n * an element ID. The corresponding element must also must be in the DOM at the time of\r\n * initialization.\r\n *\r\n * @param parameters - The optional reCAPTCHA parameters.\r\n *\r\n * @remarks\r\n * Check the reCAPTCHA docs for a comprehensive list. All parameters are accepted except for\r\n * the sitekey. Firebase Auth backend provisions a reCAPTCHA for each project and will\r\n * configure this upon rendering. For an invisible reCAPTCHA, a size key must have the value\r\n * 'invisible'.\r\n *\r\n * @param authExtern - The corresponding Firebase {@link Auth} instance.\r\n */\r\n constructor(containerOrId, parameters = Object.assign({}, DEFAULT_PARAMS), authExtern) {\r\n this.parameters = parameters;\r\n /**\r\n * The application verifier type.\r\n *\r\n * @remarks\r\n * For a reCAPTCHA verifier, this is 'recaptcha'.\r\n */\r\n this.type = RECAPTCHA_VERIFIER_TYPE;\r\n this.destroyed = false;\r\n this.widgetId = null;\r\n this.tokenChangeListeners = new Set();\r\n this.renderPromise = null;\r\n this.recaptcha = null;\r\n this.auth = _castAuth(authExtern);\r\n this.isInvisible = this.parameters.size === 'invisible';\r\n _assert(typeof document !== 'undefined', this.auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n const container = typeof containerOrId === 'string'\r\n ? document.getElementById(containerOrId)\r\n : containerOrId;\r\n _assert(container, this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n this.container = container;\r\n this.parameters.callback = this.makeTokenCallback(this.parameters.callback);\r\n this._recaptchaLoader = this.auth.settings.appVerificationDisabledForTesting\r\n ? new MockReCaptchaLoaderImpl()\r\n : new ReCaptchaLoaderImpl();\r\n this.validateStartingState();\r\n // TODO: Figure out if sdk version is needed\r\n }\r\n /**\r\n * Waits for the user to solve the reCAPTCHA and resolves with the reCAPTCHA token.\r\n *\r\n * @returns A Promise for the reCAPTCHA token.\r\n */\r\n async verify() {\r\n this.assertNotDestroyed();\r\n const id = await this.render();\r\n const recaptcha = this.getAssertedRecaptcha();\r\n const response = recaptcha.getResponse(id);\r\n if (response) {\r\n return response;\r\n }\r\n return new Promise(resolve => {\r\n const tokenChange = (token) => {\r\n if (!token) {\r\n return; // Ignore token expirations.\r\n }\r\n this.tokenChangeListeners.delete(tokenChange);\r\n resolve(token);\r\n };\r\n this.tokenChangeListeners.add(tokenChange);\r\n if (this.isInvisible) {\r\n recaptcha.execute(id);\r\n }\r\n });\r\n }\r\n /**\r\n * Renders the reCAPTCHA widget on the page.\r\n *\r\n * @returns A Promise that resolves with the reCAPTCHA widget ID.\r\n */\r\n render() {\r\n try {\r\n this.assertNotDestroyed();\r\n }\r\n catch (e) {\r\n // This method returns a promise. Since it's not async (we want to return the\r\n // _same_ promise if rendering is still occurring), the API surface should\r\n // reject with the error rather than just throw\r\n return Promise.reject(e);\r\n }\r\n if (this.renderPromise) {\r\n return this.renderPromise;\r\n }\r\n this.renderPromise = this.makeRenderPromise().catch(e => {\r\n this.renderPromise = null;\r\n throw e;\r\n });\r\n return this.renderPromise;\r\n }\r\n /** @internal */\r\n _reset() {\r\n this.assertNotDestroyed();\r\n if (this.widgetId !== null) {\r\n this.getAssertedRecaptcha().reset(this.widgetId);\r\n }\r\n }\r\n /**\r\n * Clears the reCAPTCHA widget from the page and destroys the instance.\r\n */\r\n clear() {\r\n this.assertNotDestroyed();\r\n this.destroyed = true;\r\n this._recaptchaLoader.clearedOneInstance();\r\n if (!this.isInvisible) {\r\n this.container.childNodes.forEach(node => {\r\n this.container.removeChild(node);\r\n });\r\n }\r\n }\r\n validateStartingState() {\r\n _assert(!this.parameters.sitekey, this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert(this.isInvisible || !this.container.hasChildNodes(), this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert(typeof document !== 'undefined', this.auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n }\r\n makeTokenCallback(existing) {\r\n return token => {\r\n this.tokenChangeListeners.forEach(listener => listener(token));\r\n if (typeof existing === 'function') {\r\n existing(token);\r\n }\r\n else if (typeof existing === 'string') {\r\n const globalFunc = _window()[existing];\r\n if (typeof globalFunc === 'function') {\r\n globalFunc(token);\r\n }\r\n }\r\n };\r\n }\r\n assertNotDestroyed() {\r\n _assert(!this.destroyed, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n async makeRenderPromise() {\r\n await this.init();\r\n if (!this.widgetId) {\r\n let container = this.container;\r\n if (!this.isInvisible) {\r\n const guaranteedEmpty = document.createElement('div');\r\n container.appendChild(guaranteedEmpty);\r\n container = guaranteedEmpty;\r\n }\r\n this.widgetId = this.getAssertedRecaptcha().render(container, this.parameters);\r\n }\r\n return this.widgetId;\r\n }\r\n async init() {\r\n _assert(_isHttpOrHttps() && !_isWorker(), this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n await domReady();\r\n this.recaptcha = await this._recaptchaLoader.load(this.auth, this.auth.languageCode || undefined);\r\n const siteKey = await getRecaptchaParams(this.auth);\r\n _assert(siteKey, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n this.parameters.sitekey = siteKey;\r\n }\r\n getAssertedRecaptcha() {\r\n _assert(this.recaptcha, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return this.recaptcha;\r\n }\r\n}\r\nfunction domReady() {\r\n let resolver = null;\r\n return new Promise(resolve => {\r\n if (document.readyState === 'complete') {\r\n resolve();\r\n return;\r\n }\r\n // Document not ready, wait for load before resolving.\r\n // Save resolver, so we can remove listener in case it was externally\r\n // cancelled.\r\n resolver = () => resolve();\r\n window.addEventListener('load', resolver);\r\n }).catch(e => {\r\n if (resolver) {\r\n window.removeEventListener('load', resolver);\r\n }\r\n throw e;\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ConfirmationResultImpl {\r\n constructor(verificationId, onConfirmation) {\r\n this.verificationId = verificationId;\r\n this.onConfirmation = onConfirmation;\r\n }\r\n confirm(verificationCode) {\r\n const authCredential = PhoneAuthCredential._fromVerification(this.verificationId, verificationCode);\r\n return this.onConfirmation(authCredential);\r\n }\r\n}\r\n/**\r\n * Asynchronously signs in using a phone number.\r\n *\r\n * @remarks\r\n * This method sends a code via SMS to the given\r\n * phone number, and returns a {@link ConfirmationResult}. After the user\r\n * provides the code sent to their phone, call {@link ConfirmationResult.confirm}\r\n * with the code to sign the user in.\r\n *\r\n * For abuse prevention, this method also requires a {@link ApplicationVerifier}.\r\n * This SDK includes a reCAPTCHA-based implementation, {@link RecaptchaVerifier}.\r\n * This function can work on other platforms that do not support the\r\n * {@link RecaptchaVerifier} (like React Native), but you need to use a\r\n * third-party {@link ApplicationVerifier} implementation.\r\n *\r\n * @example\r\n * ```javascript\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container');\r\n * const confirmationResult = await signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n * // Obtain a verificationCode from the user.\r\n * const credential = await confirmationResult.confirm(verificationCode);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function signInWithPhoneNumber(auth, phoneNumber, appVerifier) {\r\n const authInternal = _castAuth(auth);\r\n const verificationId = await _verifyPhoneNumber(authInternal, phoneNumber, getModularInstance(appVerifier));\r\n return new ConfirmationResultImpl(verificationId, cred => signInWithCredential(authInternal, cred));\r\n}\r\n/**\r\n * Links the user account with the given phone number.\r\n *\r\n * @param user - The user.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function linkWithPhoneNumber(user, phoneNumber, appVerifier) {\r\n const userInternal = getModularInstance(user);\r\n await _assertLinkedStatus(false, userInternal, \"phone\" /* ProviderId.PHONE */);\r\n const verificationId = await _verifyPhoneNumber(userInternal.auth, phoneNumber, getModularInstance(appVerifier));\r\n return new ConfirmationResultImpl(verificationId, cred => linkWithCredential(userInternal, cred));\r\n}\r\n/**\r\n * Re-authenticates a user using a fresh phone credential.\r\n *\r\n * @remarks Use before operations such as {@link updatePassword} that require tokens from recent sign-in attempts.\r\n *\r\n * @param user - The user.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithPhoneNumber(user, phoneNumber, appVerifier) {\r\n const userInternal = getModularInstance(user);\r\n const verificationId = await _verifyPhoneNumber(userInternal.auth, phoneNumber, getModularInstance(appVerifier));\r\n return new ConfirmationResultImpl(verificationId, cred => reauthenticateWithCredential(userInternal, cred));\r\n}\r\n/**\r\n * Returns a verification ID to be used in conjunction with the SMS code that is sent.\r\n *\r\n */\r\nasync function _verifyPhoneNumber(auth, options, verifier) {\r\n var _a;\r\n const recaptchaToken = await verifier.verify();\r\n try {\r\n _assert(typeof recaptchaToken === 'string', auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert(verifier.type === RECAPTCHA_VERIFIER_TYPE, auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n let phoneInfoOptions;\r\n if (typeof options === 'string') {\r\n phoneInfoOptions = {\r\n phoneNumber: options\r\n };\r\n }\r\n else {\r\n phoneInfoOptions = options;\r\n }\r\n if ('session' in phoneInfoOptions) {\r\n const session = phoneInfoOptions.session;\r\n if ('phoneNumber' in phoneInfoOptions) {\r\n _assert(session.type === \"enroll\" /* MultiFactorSessionType.ENROLL */, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const response = await startEnrollPhoneMfa(auth, {\r\n idToken: session.credential,\r\n phoneEnrollmentInfo: {\r\n phoneNumber: phoneInfoOptions.phoneNumber,\r\n recaptchaToken\r\n }\r\n });\r\n return response.phoneSessionInfo.sessionInfo;\r\n }\r\n else {\r\n _assert(session.type === \"signin\" /* MultiFactorSessionType.SIGN_IN */, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const mfaEnrollmentId = ((_a = phoneInfoOptions.multiFactorHint) === null || _a === void 0 ? void 0 : _a.uid) ||\r\n phoneInfoOptions.multiFactorUid;\r\n _assert(mfaEnrollmentId, auth, \"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */);\r\n const response = await startSignInPhoneMfa(auth, {\r\n mfaPendingCredential: session.credential,\r\n mfaEnrollmentId,\r\n phoneSignInInfo: {\r\n recaptchaToken\r\n }\r\n });\r\n return response.phoneResponseInfo.sessionInfo;\r\n }\r\n }\r\n else {\r\n const { sessionInfo } = await sendPhoneVerificationCode(auth, {\r\n phoneNumber: phoneInfoOptions.phoneNumber,\r\n recaptchaToken\r\n });\r\n return sessionInfo;\r\n }\r\n }\r\n finally {\r\n verifier._reset();\r\n }\r\n}\r\n/**\r\n * Updates the user's phone number.\r\n *\r\n * @example\r\n * ```\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new RecaptchaVerifier('recaptcha-container');\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber('+16505550101', applicationVerifier);\r\n * // Obtain the verificationCode from the user.\r\n * const phoneCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * await updatePhoneNumber(user, phoneCredential);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param credential - A credential authenticating the new phone number.\r\n *\r\n * @public\r\n */\r\nasync function updatePhoneNumber(user, credential) {\r\n await _link$1(getModularInstance(user), credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link PhoneAuthCredential}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new RecaptchaVerifier('recaptcha-container');\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber('+16505550101', applicationVerifier);\r\n * // Obtain the verificationCode from the user.\r\n * const phoneCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * const userCredential = await signInWithCredential(auth, phoneCredential);\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass PhoneAuthProvider {\r\n /**\r\n * @param auth - The Firebase {@link Auth} instance in which sign-ins should occur.\r\n *\r\n */\r\n constructor(auth) {\r\n /** Always set to {@link ProviderId}.PHONE. */\r\n this.providerId = PhoneAuthProvider.PROVIDER_ID;\r\n this.auth = _castAuth(auth);\r\n }\r\n /**\r\n *\r\n * Starts a phone number authentication flow by sending a verification code to the given phone\r\n * number.\r\n *\r\n * @example\r\n * ```javascript\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber(phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const authCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * const userCredential = await signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * An alternative flow is provided using the `signInWithPhoneNumber` method.\r\n * ```javascript\r\n * const confirmationResult = signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const userCredential = confirmationResult.confirm(verificationCode);\r\n * ```\r\n *\r\n * @param phoneInfoOptions - The user's {@link PhoneInfoOptions}. The phone number should be in\r\n * E.164 format (e.g. +16505550101).\r\n * @param applicationVerifier - For abuse prevention, this method also requires a\r\n * {@link ApplicationVerifier}. This SDK includes a reCAPTCHA-based implementation,\r\n * {@link RecaptchaVerifier}.\r\n *\r\n * @returns A Promise for a verification ID that can be passed to\r\n * {@link PhoneAuthProvider.credential} to identify this flow..\r\n */\r\n verifyPhoneNumber(phoneOptions, applicationVerifier) {\r\n return _verifyPhoneNumber(this.auth, phoneOptions, getModularInstance(applicationVerifier));\r\n }\r\n /**\r\n * Creates a phone auth credential, given the verification ID from\r\n * {@link PhoneAuthProvider.verifyPhoneNumber} and the code that was sent to the user's\r\n * mobile device.\r\n *\r\n * @example\r\n * ```javascript\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = provider.verifyPhoneNumber(phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const authCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * const userCredential = signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * An alternative flow is provided using the `signInWithPhoneNumber` method.\r\n * ```javascript\r\n * const confirmationResult = await signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const userCredential = await confirmationResult.confirm(verificationCode);\r\n * ```\r\n *\r\n * @param verificationId - The verification ID returned from {@link PhoneAuthProvider.verifyPhoneNumber}.\r\n * @param verificationCode - The verification code sent to the user's mobile device.\r\n *\r\n * @returns The auth provider credential.\r\n */\r\n static credential(verificationId, verificationCode) {\r\n return PhoneAuthCredential._fromVerification(verificationId, verificationCode);\r\n }\r\n /**\r\n * Generates an {@link AuthCredential} from a {@link UserCredential}.\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n const credential = userCredential;\r\n return PhoneAuthProvider.credentialFromTaggedObject(credential);\r\n }\r\n /**\r\n * Returns an {@link AuthCredential} when passed an error.\r\n *\r\n * @remarks\r\n *\r\n * This method works for errors like\r\n * `auth/account-exists-with-different-credentials`. This is useful for\r\n * recovering when attempting to set a user's phone number but the number\r\n * in question is already tied to another account. For example, the following\r\n * code tries to update the current user's phone number, and if that\r\n * fails, links the user with the account associated with that number:\r\n *\r\n * ```js\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber(number, verifier);\r\n * try {\r\n * const code = ''; // Prompt the user for the verification code\r\n * await updatePhoneNumber(\r\n * auth.currentUser,\r\n * PhoneAuthProvider.credential(verificationId, code));\r\n * } catch (e) {\r\n * if ((e as FirebaseError)?.code === 'auth/account-exists-with-different-credential') {\r\n * const cred = PhoneAuthProvider.credentialFromError(e);\r\n * await linkWithCredential(auth.currentUser, cred);\r\n * }\r\n * }\r\n *\r\n * // At this point, auth.currentUser.phoneNumber === number.\r\n * ```\r\n *\r\n * @param error - The error to generate a credential from.\r\n */\r\n static credentialFromError(error) {\r\n return PhoneAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { phoneNumber, temporaryProof } = tokenResponse;\r\n if (phoneNumber && temporaryProof) {\r\n return PhoneAuthCredential._fromTokenResponse(phoneNumber, temporaryProof);\r\n }\r\n return null;\r\n }\r\n}\r\n/** Always set to {@link ProviderId}.PHONE. */\r\nPhoneAuthProvider.PROVIDER_ID = \"phone\" /* ProviderId.PHONE */;\r\n/** Always set to {@link SignInMethod}.PHONE. */\r\nPhoneAuthProvider.PHONE_SIGN_IN_METHOD = \"phone\" /* SignInMethod.PHONE */;\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Chooses a popup/redirect resolver to use. This prefers the override (which\r\n * is directly passed in), and falls back to the property set on the auth\r\n * object. If neither are available, this function errors w/ an argument error.\r\n */\r\nfunction _withDefaultResolver(auth, resolverOverride) {\r\n if (resolverOverride) {\r\n return _getInstance(resolverOverride);\r\n }\r\n _assert(auth._popupRedirectResolver, auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return auth._popupRedirectResolver;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass IdpCredential extends AuthCredential {\r\n constructor(params) {\r\n super(\"custom\" /* ProviderId.CUSTOM */, \"custom\" /* ProviderId.CUSTOM */);\r\n this.params = params;\r\n }\r\n _getIdTokenResponse(auth) {\r\n return signInWithIdp(auth, this._buildIdpRequest());\r\n }\r\n _linkToIdToken(auth, idToken) {\r\n return signInWithIdp(auth, this._buildIdpRequest(idToken));\r\n }\r\n _getReauthenticationResolver(auth) {\r\n return signInWithIdp(auth, this._buildIdpRequest());\r\n }\r\n _buildIdpRequest(idToken) {\r\n const request = {\r\n requestUri: this.params.requestUri,\r\n sessionId: this.params.sessionId,\r\n postBody: this.params.postBody,\r\n tenantId: this.params.tenantId,\r\n pendingToken: this.params.pendingToken,\r\n returnSecureToken: true,\r\n returnIdpCredential: true\r\n };\r\n if (idToken) {\r\n request.idToken = idToken;\r\n }\r\n return request;\r\n }\r\n}\r\nfunction _signIn(params) {\r\n return _signInWithCredential(params.auth, new IdpCredential(params), params.bypassAuthState);\r\n}\r\nfunction _reauth(params) {\r\n const { auth, user } = params;\r\n _assert(user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return _reauthenticate(user, new IdpCredential(params), params.bypassAuthState);\r\n}\r\nasync function _link(params) {\r\n const { auth, user } = params;\r\n _assert(user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return _link$1(user, new IdpCredential(params), params.bypassAuthState);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Popup event manager. Handles the popup's entire lifecycle; listens to auth\r\n * events\r\n */\r\nclass AbstractPopupRedirectOperation {\r\n constructor(auth, filter, resolver, user, bypassAuthState = false) {\r\n this.auth = auth;\r\n this.resolver = resolver;\r\n this.user = user;\r\n this.bypassAuthState = bypassAuthState;\r\n this.pendingPromise = null;\r\n this.eventManager = null;\r\n this.filter = Array.isArray(filter) ? filter : [filter];\r\n }\r\n execute() {\r\n return new Promise(async (resolve, reject) => {\r\n this.pendingPromise = { resolve, reject };\r\n try {\r\n this.eventManager = await this.resolver._initialize(this.auth);\r\n await this.onExecution();\r\n this.eventManager.registerConsumer(this);\r\n }\r\n catch (e) {\r\n this.reject(e);\r\n }\r\n });\r\n }\r\n async onAuthEvent(event) {\r\n const { urlResponse, sessionId, postBody, tenantId, error, type } = event;\r\n if (error) {\r\n this.reject(error);\r\n return;\r\n }\r\n const params = {\r\n auth: this.auth,\r\n requestUri: urlResponse,\r\n sessionId: sessionId,\r\n tenantId: tenantId || undefined,\r\n postBody: postBody || undefined,\r\n user: this.user,\r\n bypassAuthState: this.bypassAuthState\r\n };\r\n try {\r\n this.resolve(await this.getIdpTask(type)(params));\r\n }\r\n catch (e) {\r\n this.reject(e);\r\n }\r\n }\r\n onError(error) {\r\n this.reject(error);\r\n }\r\n getIdpTask(type) {\r\n switch (type) {\r\n case \"signInViaPopup\" /* AuthEventType.SIGN_IN_VIA_POPUP */:\r\n case \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */:\r\n return _signIn;\r\n case \"linkViaPopup\" /* AuthEventType.LINK_VIA_POPUP */:\r\n case \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */:\r\n return _link;\r\n case \"reauthViaPopup\" /* AuthEventType.REAUTH_VIA_POPUP */:\r\n case \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */:\r\n return _reauth;\r\n default:\r\n _fail(this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n }\r\n resolve(cred) {\r\n debugAssert(this.pendingPromise, 'Pending promise was never set');\r\n this.pendingPromise.resolve(cred);\r\n this.unregisterAndCleanUp();\r\n }\r\n reject(error) {\r\n debugAssert(this.pendingPromise, 'Pending promise was never set');\r\n this.pendingPromise.reject(error);\r\n this.unregisterAndCleanUp();\r\n }\r\n unregisterAndCleanUp() {\r\n if (this.eventManager) {\r\n this.eventManager.unregisterConsumer(this);\r\n }\r\n this.pendingPromise = null;\r\n this.cleanUp();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _POLL_WINDOW_CLOSE_TIMEOUT = new Delay(2000, 10000);\r\n/**\r\n * Authenticates a Firebase client using a popup-based OAuth authentication flow.\r\n *\r\n * @remarks\r\n * If succeeds, returns the signed in user along with the provider's credential. If sign in was\r\n * unsuccessful, returns an error object containing additional information about the error.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n *\r\n * @public\r\n */\r\nasync function signInWithPopup(auth, provider, resolver) {\r\n const authInternal = _castAuth(auth);\r\n _assertInstanceOf(auth, provider, FederatedAuthProvider);\r\n const resolverInternal = _withDefaultResolver(authInternal, resolver);\r\n const action = new PopupOperation(authInternal, \"signInViaPopup\" /* AuthEventType.SIGN_IN_VIA_POPUP */, provider, resolverInternal);\r\n return action.executeNotNull();\r\n}\r\n/**\r\n * Reauthenticates the current user with the specified {@link OAuthProvider} using a pop-up based\r\n * OAuth flow.\r\n *\r\n * @remarks\r\n * If the reauthentication is successful, the returned result will contain the user and the\r\n * provider's credential.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n * // Reauthenticate using a popup.\r\n * await reauthenticateWithPopup(result.user, provider);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithPopup(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n const action = new PopupOperation(userInternal.auth, \"reauthViaPopup\" /* AuthEventType.REAUTH_VIA_POPUP */, provider, resolverInternal, userInternal);\r\n return action.executeNotNull();\r\n}\r\n/**\r\n * Links the authenticated provider to the user account using a pop-up based OAuth flow.\r\n *\r\n * @remarks\r\n * If the linking is successful, the returned result will contain the user and the provider's credential.\r\n *\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using some other provider.\r\n * const result = await signInWithEmailAndPassword(auth, email, password);\r\n * // Link using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * await linkWithPopup(result.user, provider);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function linkWithPopup(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n const action = new PopupOperation(userInternal.auth, \"linkViaPopup\" /* AuthEventType.LINK_VIA_POPUP */, provider, resolverInternal, userInternal);\r\n return action.executeNotNull();\r\n}\r\n/**\r\n * Popup event manager. Handles the popup's entire lifecycle; listens to auth\r\n * events\r\n *\r\n */\r\nclass PopupOperation extends AbstractPopupRedirectOperation {\r\n constructor(auth, filter, provider, resolver, user) {\r\n super(auth, filter, resolver, user);\r\n this.provider = provider;\r\n this.authWindow = null;\r\n this.pollId = null;\r\n if (PopupOperation.currentPopupAction) {\r\n PopupOperation.currentPopupAction.cancel();\r\n }\r\n PopupOperation.currentPopupAction = this;\r\n }\r\n async executeNotNull() {\r\n const result = await this.execute();\r\n _assert(result, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return result;\r\n }\r\n async onExecution() {\r\n debugAssert(this.filter.length === 1, 'Popup operations only handle one event');\r\n const eventId = _generateEventId();\r\n this.authWindow = await this.resolver._openPopup(this.auth, this.provider, this.filter[0], // There's always one, see constructor\r\n eventId);\r\n this.authWindow.associatedEvent = eventId;\r\n // Check for web storage support and origin validation _after_ the popup is\r\n // loaded. These operations are slow (~1 second or so) Rather than\r\n // waiting on them before opening the window, optimistically open the popup\r\n // and check for storage support at the same time. If storage support is\r\n // not available, this will cause the whole thing to reject properly. It\r\n // will also close the popup, but since the promise has already rejected,\r\n // the popup closed by user poll will reject into the void.\r\n this.resolver._originValidation(this.auth).catch(e => {\r\n this.reject(e);\r\n });\r\n this.resolver._isIframeWebStorageSupported(this.auth, isSupported => {\r\n if (!isSupported) {\r\n this.reject(_createError(this.auth, \"web-storage-unsupported\" /* AuthErrorCode.WEB_STORAGE_UNSUPPORTED */));\r\n }\r\n });\r\n // Handle user closure. Notice this does *not* use await\r\n this.pollUserCancellation();\r\n }\r\n get eventId() {\r\n var _a;\r\n return ((_a = this.authWindow) === null || _a === void 0 ? void 0 : _a.associatedEvent) || null;\r\n }\r\n cancel() {\r\n this.reject(_createError(this.auth, \"cancelled-popup-request\" /* AuthErrorCode.EXPIRED_POPUP_REQUEST */));\r\n }\r\n cleanUp() {\r\n if (this.authWindow) {\r\n this.authWindow.close();\r\n }\r\n if (this.pollId) {\r\n window.clearTimeout(this.pollId);\r\n }\r\n this.authWindow = null;\r\n this.pollId = null;\r\n PopupOperation.currentPopupAction = null;\r\n }\r\n pollUserCancellation() {\r\n const poll = () => {\r\n var _a, _b;\r\n if ((_b = (_a = this.authWindow) === null || _a === void 0 ? void 0 : _a.window) === null || _b === void 0 ? void 0 : _b.closed) {\r\n // Make sure that there is sufficient time for whatever action to\r\n // complete. The window could have closed but the sign in network\r\n // call could still be in flight. This is specifically true for\r\n // Firefox or if the opener is in an iframe, in which case the oauth\r\n // helper closes the popup.\r\n this.pollId = window.setTimeout(() => {\r\n this.pollId = null;\r\n this.reject(_createError(this.auth, \"popup-closed-by-user\" /* AuthErrorCode.POPUP_CLOSED_BY_USER */));\r\n }, 8000 /* _Timeout.AUTH_EVENT */);\r\n return;\r\n }\r\n this.pollId = window.setTimeout(poll, _POLL_WINDOW_CLOSE_TIMEOUT.get());\r\n };\r\n poll();\r\n }\r\n}\r\n// Only one popup is ever shown at once. The lifecycle of the current popup\r\n// can be managed / cancelled by the constructor.\r\nPopupOperation.currentPopupAction = null;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PENDING_REDIRECT_KEY = 'pendingRedirect';\r\n// We only get one redirect outcome for any one auth, so just store it\r\n// in here.\r\nconst redirectOutcomeMap = new Map();\r\nclass RedirectAction extends AbstractPopupRedirectOperation {\r\n constructor(auth, resolver, bypassAuthState = false) {\r\n super(auth, [\r\n \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */,\r\n \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */,\r\n \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */,\r\n \"unknown\" /* AuthEventType.UNKNOWN */\r\n ], resolver, undefined, bypassAuthState);\r\n this.eventId = null;\r\n }\r\n /**\r\n * Override the execute function; if we already have a redirect result, then\r\n * just return it.\r\n */\r\n async execute() {\r\n let readyOutcome = redirectOutcomeMap.get(this.auth._key());\r\n if (!readyOutcome) {\r\n try {\r\n const hasPendingRedirect = await _getAndClearPendingRedirectStatus(this.resolver, this.auth);\r\n const result = hasPendingRedirect ? await super.execute() : null;\r\n readyOutcome = () => Promise.resolve(result);\r\n }\r\n catch (e) {\r\n readyOutcome = () => Promise.reject(e);\r\n }\r\n redirectOutcomeMap.set(this.auth._key(), readyOutcome);\r\n }\r\n // If we're not bypassing auth state, the ready outcome should be set to\r\n // null.\r\n if (!this.bypassAuthState) {\r\n redirectOutcomeMap.set(this.auth._key(), () => Promise.resolve(null));\r\n }\r\n return readyOutcome();\r\n }\r\n async onAuthEvent(event) {\r\n if (event.type === \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */) {\r\n return super.onAuthEvent(event);\r\n }\r\n else if (event.type === \"unknown\" /* AuthEventType.UNKNOWN */) {\r\n // This is a sentinel value indicating there's no pending redirect\r\n this.resolve(null);\r\n return;\r\n }\r\n if (event.eventId) {\r\n const user = await this.auth._redirectUserForId(event.eventId);\r\n if (user) {\r\n this.user = user;\r\n return super.onAuthEvent(event);\r\n }\r\n else {\r\n this.resolve(null);\r\n }\r\n }\r\n }\r\n async onExecution() { }\r\n cleanUp() { }\r\n}\r\nasync function _getAndClearPendingRedirectStatus(resolver, auth) {\r\n const key = pendingRedirectKey(auth);\r\n const persistence = resolverPersistence(resolver);\r\n if (!(await persistence._isAvailable())) {\r\n return false;\r\n }\r\n const hasPendingRedirect = (await persistence._get(key)) === 'true';\r\n await persistence._remove(key);\r\n return hasPendingRedirect;\r\n}\r\nasync function _setPendingRedirectStatus(resolver, auth) {\r\n return resolverPersistence(resolver)._set(pendingRedirectKey(auth), 'true');\r\n}\r\nfunction _clearRedirectOutcomes() {\r\n redirectOutcomeMap.clear();\r\n}\r\nfunction _overrideRedirectResult(auth, result) {\r\n redirectOutcomeMap.set(auth._key(), result);\r\n}\r\nfunction resolverPersistence(resolver) {\r\n return _getInstance(resolver._redirectPersistence);\r\n}\r\nfunction pendingRedirectKey(auth) {\r\n return _persistenceKeyName(PENDING_REDIRECT_KEY, auth.config.apiKey, auth.name);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Authenticates a Firebase client using a full-page redirect flow.\r\n *\r\n * @remarks\r\n * To handle the results and errors for this operation, refer to {@link getRedirectResult}.\r\n * Follow the {@link https://firebase.google.com/docs/auth/web/redirect-best-practices\r\n * | best practices} when using {@link signInWithRedirect}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // You can add additional scopes to the provider:\r\n * provider.addScope('user_birthday');\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * }\r\n * // As this API can be used for sign-in, linking and reauthentication,\r\n * // check the operationType to determine what triggered this redirect\r\n * // operation.\r\n * const operationType = result.operationType;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nfunction signInWithRedirect(auth, provider, resolver) {\r\n return _signInWithRedirect(auth, provider, resolver);\r\n}\r\nasync function _signInWithRedirect(auth, provider, resolver) {\r\n const authInternal = _castAuth(auth);\r\n _assertInstanceOf(auth, provider, FederatedAuthProvider);\r\n // Wait for auth initialization to complete, this will process pending redirects and clear the\r\n // PENDING_REDIRECT_KEY in persistence. This should be completed before starting a new\r\n // redirect and creating a PENDING_REDIRECT_KEY entry.\r\n await authInternal._initializationPromise;\r\n const resolverInternal = _withDefaultResolver(authInternal, resolver);\r\n await _setPendingRedirectStatus(resolverInternal, authInternal);\r\n return resolverInternal._openRedirect(authInternal, provider, \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */);\r\n}\r\n/**\r\n * Reauthenticates the current user with the specified {@link OAuthProvider} using a full-page redirect flow.\r\n * @remarks\r\n * To handle the results and errors for this operation, refer to {@link getRedirectResult}.\r\n * Follow the {@link https://firebase.google.com/docs/auth/web/redirect-best-practices\r\n * | best practices} when using {@link reauthenticateWithRedirect}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * // Reauthenticate using a redirect.\r\n * await reauthenticateWithRedirect(result.user, provider);\r\n * // This will again trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nfunction reauthenticateWithRedirect(user, provider, resolver) {\r\n return _reauthenticateWithRedirect(user, provider, resolver);\r\n}\r\nasync function _reauthenticateWithRedirect(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n // Wait for auth initialization to complete, this will process pending redirects and clear the\r\n // PENDING_REDIRECT_KEY in persistence. This should be completed before starting a new\r\n // redirect and creating a PENDING_REDIRECT_KEY entry.\r\n await userInternal.auth._initializationPromise;\r\n // Allow the resolver to error before persisting the redirect user\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n await _setPendingRedirectStatus(resolverInternal, userInternal.auth);\r\n const eventId = await prepareUserForRedirect(userInternal);\r\n return resolverInternal._openRedirect(userInternal.auth, provider, \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */, eventId);\r\n}\r\n/**\r\n * Links the {@link OAuthProvider} to the user account using a full-page redirect flow.\r\n * @remarks\r\n * To handle the results and errors for this operation, refer to {@link getRedirectResult}.\r\n * Follow the {@link https://firebase.google.com/docs/auth/web/redirect-best-practices\r\n * | best practices} when using {@link linkWithRedirect}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using some other provider.\r\n * const result = await signInWithEmailAndPassword(auth, email, password);\r\n * // Link using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * await linkWithRedirect(result.user, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n *\r\n * @public\r\n */\r\nfunction linkWithRedirect(user, provider, resolver) {\r\n return _linkWithRedirect(user, provider, resolver);\r\n}\r\nasync function _linkWithRedirect(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n // Wait for auth initialization to complete, this will process pending redirects and clear the\r\n // PENDING_REDIRECT_KEY in persistence. This should be completed before starting a new\r\n // redirect and creating a PENDING_REDIRECT_KEY entry.\r\n await userInternal.auth._initializationPromise;\r\n // Allow the resolver to error before persisting the redirect user\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n await _assertLinkedStatus(false, userInternal, provider.providerId);\r\n await _setPendingRedirectStatus(resolverInternal, userInternal.auth);\r\n const eventId = await prepareUserForRedirect(userInternal);\r\n return resolverInternal._openRedirect(userInternal.auth, provider, \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */, eventId);\r\n}\r\n/**\r\n * Returns a {@link UserCredential} from the redirect-based sign-in flow.\r\n *\r\n * @remarks\r\n * If sign-in succeeded, returns the signed in user. If sign-in was unsuccessful, fails with an\r\n * error. If no redirect operation was called, returns `null`.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // You can add additional scopes to the provider:\r\n * provider.addScope('user_birthday');\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * }\r\n * // As this API can be used for sign-in, linking and reauthentication,\r\n * // check the operationType to determine what triggered this redirect\r\n * // operation.\r\n * const operationType = result.operationType;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function getRedirectResult(auth, resolver) {\r\n await _castAuth(auth)._initializationPromise;\r\n return _getRedirectResult(auth, resolver, false);\r\n}\r\nasync function _getRedirectResult(auth, resolverExtern, bypassAuthState = false) {\r\n const authInternal = _castAuth(auth);\r\n const resolver = _withDefaultResolver(authInternal, resolverExtern);\r\n const action = new RedirectAction(authInternal, resolver, bypassAuthState);\r\n const result = await action.execute();\r\n if (result && !bypassAuthState) {\r\n delete result.user._redirectEventId;\r\n await authInternal._persistUserIfCurrent(result.user);\r\n await authInternal._setRedirectUser(null, resolverExtern);\r\n }\r\n return result;\r\n}\r\nasync function prepareUserForRedirect(user) {\r\n const eventId = _generateEventId(`${user.uid}:::`);\r\n user._redirectEventId = eventId;\r\n await user.auth._setRedirectUser(user);\r\n await user.auth._persistUserIfCurrent(user);\r\n return eventId;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// The amount of time to store the UIDs of seen events; this is\r\n// set to 10 min by default\r\nconst EVENT_DUPLICATION_CACHE_DURATION_MS = 10 * 60 * 1000;\r\nclass AuthEventManager {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.cachedEventUids = new Set();\r\n this.consumers = new Set();\r\n this.queuedRedirectEvent = null;\r\n this.hasHandledPotentialRedirect = false;\r\n this.lastProcessedEventTime = Date.now();\r\n }\r\n registerConsumer(authEventConsumer) {\r\n this.consumers.add(authEventConsumer);\r\n if (this.queuedRedirectEvent &&\r\n this.isEventForConsumer(this.queuedRedirectEvent, authEventConsumer)) {\r\n this.sendToConsumer(this.queuedRedirectEvent, authEventConsumer);\r\n this.saveEventToCache(this.queuedRedirectEvent);\r\n this.queuedRedirectEvent = null;\r\n }\r\n }\r\n unregisterConsumer(authEventConsumer) {\r\n this.consumers.delete(authEventConsumer);\r\n }\r\n onEvent(event) {\r\n // Check if the event has already been handled\r\n if (this.hasEventBeenHandled(event)) {\r\n return false;\r\n }\r\n let handled = false;\r\n this.consumers.forEach(consumer => {\r\n if (this.isEventForConsumer(event, consumer)) {\r\n handled = true;\r\n this.sendToConsumer(event, consumer);\r\n this.saveEventToCache(event);\r\n }\r\n });\r\n if (this.hasHandledPotentialRedirect || !isRedirectEvent(event)) {\r\n // If we've already seen a redirect before, or this is a popup event,\r\n // bail now\r\n return handled;\r\n }\r\n this.hasHandledPotentialRedirect = true;\r\n // If the redirect wasn't handled, hang on to it\r\n if (!handled) {\r\n this.queuedRedirectEvent = event;\r\n handled = true;\r\n }\r\n return handled;\r\n }\r\n sendToConsumer(event, consumer) {\r\n var _a;\r\n if (event.error && !isNullRedirectEvent(event)) {\r\n const code = ((_a = event.error.code) === null || _a === void 0 ? void 0 : _a.split('auth/')[1]) ||\r\n \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */;\r\n consumer.onError(_createError(this.auth, code));\r\n }\r\n else {\r\n consumer.onAuthEvent(event);\r\n }\r\n }\r\n isEventForConsumer(event, consumer) {\r\n const eventIdMatches = consumer.eventId === null ||\r\n (!!event.eventId && event.eventId === consumer.eventId);\r\n return consumer.filter.includes(event.type) && eventIdMatches;\r\n }\r\n hasEventBeenHandled(event) {\r\n if (Date.now() - this.lastProcessedEventTime >=\r\n EVENT_DUPLICATION_CACHE_DURATION_MS) {\r\n this.cachedEventUids.clear();\r\n }\r\n return this.cachedEventUids.has(eventUid(event));\r\n }\r\n saveEventToCache(event) {\r\n this.cachedEventUids.add(eventUid(event));\r\n this.lastProcessedEventTime = Date.now();\r\n }\r\n}\r\nfunction eventUid(e) {\r\n return [e.type, e.eventId, e.sessionId, e.tenantId].filter(v => v).join('-');\r\n}\r\nfunction isNullRedirectEvent({ type, error }) {\r\n return (type === \"unknown\" /* AuthEventType.UNKNOWN */ &&\r\n (error === null || error === void 0 ? void 0 : error.code) === `auth/${\"no-auth-event\" /* AuthErrorCode.NO_AUTH_EVENT */}`);\r\n}\r\nfunction isRedirectEvent(event) {\r\n switch (event.type) {\r\n case \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */:\r\n case \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */:\r\n case \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */:\r\n return true;\r\n case \"unknown\" /* AuthEventType.UNKNOWN */:\r\n return isNullRedirectEvent(event);\r\n default:\r\n return false;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _getProjectConfig(auth, request = {}) {\r\n return _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v1/projects\" /* Endpoint.GET_PROJECT_CONFIG */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IP_ADDRESS_REGEX = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\r\nconst HTTP_REGEX = /^https?/;\r\nasync function _validateOrigin(auth) {\r\n // Skip origin validation if we are in an emulated environment\r\n if (auth.config.emulator) {\r\n return;\r\n }\r\n const { authorizedDomains } = await _getProjectConfig(auth);\r\n for (const domain of authorizedDomains) {\r\n try {\r\n if (matchDomain(domain)) {\r\n return;\r\n }\r\n }\r\n catch (_a) {\r\n // Do nothing if there's a URL error; just continue searching\r\n }\r\n }\r\n // In the old SDK, this error also provides helpful messages.\r\n _fail(auth, \"unauthorized-domain\" /* AuthErrorCode.INVALID_ORIGIN */);\r\n}\r\nfunction matchDomain(expected) {\r\n const currentUrl = _getCurrentUrl();\r\n const { protocol, hostname } = new URL(currentUrl);\r\n if (expected.startsWith('chrome-extension://')) {\r\n const ceUrl = new URL(expected);\r\n if (ceUrl.hostname === '' && hostname === '') {\r\n // For some reason we're not parsing chrome URLs properly\r\n return (protocol === 'chrome-extension:' &&\r\n expected.replace('chrome-extension://', '') ===\r\n currentUrl.replace('chrome-extension://', ''));\r\n }\r\n return protocol === 'chrome-extension:' && ceUrl.hostname === hostname;\r\n }\r\n if (!HTTP_REGEX.test(protocol)) {\r\n return false;\r\n }\r\n if (IP_ADDRESS_REGEX.test(expected)) {\r\n // The domain has to be exactly equal to the pattern, as an IP domain will\r\n // only contain the IP, no extra character.\r\n return hostname === expected;\r\n }\r\n // Dots in pattern should be escaped.\r\n const escapedDomainPattern = expected.replace(/\\./g, '\\\\.');\r\n // Non ip address domains.\r\n // domain.com = *.domain.com OR domain.com\r\n const re = new RegExp('^(.+\\\\.' + escapedDomainPattern + '|' + escapedDomainPattern + ')$', 'i');\r\n return re.test(hostname);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst NETWORK_TIMEOUT = new Delay(30000, 60000);\r\n/**\r\n * Reset unlaoded GApi modules. If gapi.load fails due to a network error,\r\n * it will stop working after a retrial. This is a hack to fix this issue.\r\n */\r\nfunction resetUnloadedGapiModules() {\r\n // Clear last failed gapi.load state to force next gapi.load to first\r\n // load the failed gapi.iframes module.\r\n // Get gapix.beacon context.\r\n const beacon = _window().___jsl;\r\n // Get current hint.\r\n if (beacon === null || beacon === void 0 ? void 0 : beacon.H) {\r\n // Get gapi hint.\r\n for (const hint of Object.keys(beacon.H)) {\r\n // Requested modules.\r\n beacon.H[hint].r = beacon.H[hint].r || [];\r\n // Loaded modules.\r\n beacon.H[hint].L = beacon.H[hint].L || [];\r\n // Set requested modules to a copy of the loaded modules.\r\n beacon.H[hint].r = [...beacon.H[hint].L];\r\n // Clear pending callbacks.\r\n if (beacon.CP) {\r\n for (let i = 0; i < beacon.CP.length; i++) {\r\n // Remove all failed pending callbacks.\r\n beacon.CP[i] = null;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction loadGapi(auth) {\r\n return new Promise((resolve, reject) => {\r\n var _a, _b, _c;\r\n // Function to run when gapi.load is ready.\r\n function loadGapiIframe() {\r\n // The developer may have tried to previously run gapi.load and failed.\r\n // Run this to fix that.\r\n resetUnloadedGapiModules();\r\n gapi.load('gapi.iframes', {\r\n callback: () => {\r\n resolve(gapi.iframes.getContext());\r\n },\r\n ontimeout: () => {\r\n // The above reset may be sufficient, but having this reset after\r\n // failure ensures that if the developer calls gapi.load after the\r\n // connection is re-established and before another attempt to embed\r\n // the iframe, it would work and would not be broken because of our\r\n // failed attempt.\r\n // Timeout when gapi.iframes.Iframe not loaded.\r\n resetUnloadedGapiModules();\r\n reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n },\r\n timeout: NETWORK_TIMEOUT.get()\r\n });\r\n }\r\n if ((_b = (_a = _window().gapi) === null || _a === void 0 ? void 0 : _a.iframes) === null || _b === void 0 ? void 0 : _b.Iframe) {\r\n // If gapi.iframes.Iframe available, resolve.\r\n resolve(gapi.iframes.getContext());\r\n }\r\n else if (!!((_c = _window().gapi) === null || _c === void 0 ? void 0 : _c.load)) {\r\n // Gapi loader ready, load gapi.iframes.\r\n loadGapiIframe();\r\n }\r\n else {\r\n // Create a new iframe callback when this is called so as not to overwrite\r\n // any previous defined callback. This happens if this method is called\r\n // multiple times in parallel and could result in the later callback\r\n // overwriting the previous one. This would end up with a iframe\r\n // timeout.\r\n const cbName = _generateCallbackName('iframefcb');\r\n // GApi loader not available, dynamically load platform.js.\r\n _window()[cbName] = () => {\r\n // GApi loader should be ready.\r\n if (!!gapi.load) {\r\n loadGapiIframe();\r\n }\r\n else {\r\n // Gapi loader failed, throw error.\r\n reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n }\r\n };\r\n // Load GApi loader.\r\n return _loadJS(`https://apis.google.com/js/api.js?onload=${cbName}`)\r\n .catch(e => reject(e));\r\n }\r\n }).catch(error => {\r\n // Reset cached promise to allow for retrial.\r\n cachedGApiLoader = null;\r\n throw error;\r\n });\r\n}\r\nlet cachedGApiLoader = null;\r\nfunction _loadGapi(auth) {\r\n cachedGApiLoader = cachedGApiLoader || loadGapi(auth);\r\n return cachedGApiLoader;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PING_TIMEOUT = new Delay(5000, 15000);\r\nconst IFRAME_PATH = '__/auth/iframe';\r\nconst EMULATED_IFRAME_PATH = 'emulator/auth/iframe';\r\nconst IFRAME_ATTRIBUTES = {\r\n style: {\r\n position: 'absolute',\r\n top: '-100px',\r\n width: '1px',\r\n height: '1px'\r\n },\r\n 'aria-hidden': 'true',\r\n tabindex: '-1'\r\n};\r\n// Map from apiHost to endpoint ID for passing into iframe. In current SDK, apiHost can be set to\r\n// anything (not from a list of endpoints with IDs as in legacy), so this is the closest we can get.\r\nconst EID_FROM_APIHOST = new Map([\r\n [\"identitytoolkit.googleapis.com\" /* DefaultConfig.API_HOST */, 'p'],\r\n ['staging-identitytoolkit.sandbox.googleapis.com', 's'],\r\n ['test-identitytoolkit.sandbox.googleapis.com', 't'] // test\r\n]);\r\nfunction getIframeUrl(auth) {\r\n const config = auth.config;\r\n _assert(config.authDomain, auth, \"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */);\r\n const url = config.emulator\r\n ? _emulatorUrl(config, EMULATED_IFRAME_PATH)\r\n : `https://${auth.config.authDomain}/${IFRAME_PATH}`;\r\n const params = {\r\n apiKey: config.apiKey,\r\n appName: auth.name,\r\n v: SDK_VERSION\r\n };\r\n const eid = EID_FROM_APIHOST.get(auth.config.apiHost);\r\n if (eid) {\r\n params.eid = eid;\r\n }\r\n const frameworks = auth._getFrameworks();\r\n if (frameworks.length) {\r\n params.fw = frameworks.join(',');\r\n }\r\n return `${url}?${querystring(params).slice(1)}`;\r\n}\r\nasync function _openIframe(auth) {\r\n const context = await _loadGapi(auth);\r\n const gapi = _window().gapi;\r\n _assert(gapi, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return context.open({\r\n where: document.body,\r\n url: getIframeUrl(auth),\r\n messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER,\r\n attributes: IFRAME_ATTRIBUTES,\r\n dontclear: true\r\n }, (iframe) => new Promise(async (resolve, reject) => {\r\n await iframe.restyle({\r\n // Prevent iframe from closing on mouse out.\r\n setHideOnLeave: false\r\n });\r\n const networkError = _createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */);\r\n // Confirm iframe is correctly loaded.\r\n // To fallback on failure, set a timeout.\r\n const networkErrorTimer = _window().setTimeout(() => {\r\n reject(networkError);\r\n }, PING_TIMEOUT.get());\r\n // Clear timer and resolve pending iframe ready promise.\r\n function clearTimerAndResolve() {\r\n _window().clearTimeout(networkErrorTimer);\r\n resolve(iframe);\r\n }\r\n // This returns an IThenable. However the reject part does not call\r\n // when the iframe is not loaded.\r\n iframe.ping(clearTimerAndResolve).then(clearTimerAndResolve, () => {\r\n reject(networkError);\r\n });\r\n }));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst BASE_POPUP_OPTIONS = {\r\n location: 'yes',\r\n resizable: 'yes',\r\n statusbar: 'yes',\r\n toolbar: 'no'\r\n};\r\nconst DEFAULT_WIDTH = 500;\r\nconst DEFAULT_HEIGHT = 600;\r\nconst TARGET_BLANK = '_blank';\r\nconst FIREFOX_EMPTY_URL = 'http://localhost';\r\nclass AuthPopup {\r\n constructor(window) {\r\n this.window = window;\r\n this.associatedEvent = null;\r\n }\r\n close() {\r\n if (this.window) {\r\n try {\r\n this.window.close();\r\n }\r\n catch (e) { }\r\n }\r\n }\r\n}\r\nfunction _open(auth, url, name, width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT) {\r\n const top = Math.max((window.screen.availHeight - height) / 2, 0).toString();\r\n const left = Math.max((window.screen.availWidth - width) / 2, 0).toString();\r\n let target = '';\r\n const options = Object.assign(Object.assign({}, BASE_POPUP_OPTIONS), { width: width.toString(), height: height.toString(), top,\r\n left });\r\n // Chrome iOS 7 and 8 is returning an undefined popup win when target is\r\n // specified, even though the popup is not necessarily blocked.\r\n const ua = getUA().toLowerCase();\r\n if (name) {\r\n target = _isChromeIOS(ua) ? TARGET_BLANK : name;\r\n }\r\n if (_isFirefox(ua)) {\r\n // Firefox complains when invalid URLs are popped out. Hacky way to bypass.\r\n url = url || FIREFOX_EMPTY_URL;\r\n // Firefox disables by default scrolling on popup windows, which can create\r\n // issues when the user has many Google accounts, for instance.\r\n options.scrollbars = 'yes';\r\n }\r\n const optionsString = Object.entries(options).reduce((accum, [key, value]) => `${accum}${key}=${value},`, '');\r\n if (_isIOSStandalone(ua) && target !== '_self') {\r\n openAsNewWindowIOS(url || '', target);\r\n return new AuthPopup(null);\r\n }\r\n // about:blank getting sanitized causing browsers like IE/Edge to display\r\n // brief error message before redirecting to handler.\r\n const newWin = window.open(url || '', target, optionsString);\r\n _assert(newWin, auth, \"popup-blocked\" /* AuthErrorCode.POPUP_BLOCKED */);\r\n // Flaky on IE edge, encapsulate with a try and catch.\r\n try {\r\n newWin.focus();\r\n }\r\n catch (e) { }\r\n return new AuthPopup(newWin);\r\n}\r\nfunction openAsNewWindowIOS(url, target) {\r\n const el = document.createElement('a');\r\n el.href = url;\r\n el.target = target;\r\n const click = document.createEvent('MouseEvent');\r\n click.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 1, null);\r\n el.dispatchEvent(click);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * URL for Authentication widget which will initiate the OAuth handshake\r\n *\r\n * @internal\r\n */\r\nconst WIDGET_PATH = '__/auth/handler';\r\n/**\r\n * URL for emulated environment\r\n *\r\n * @internal\r\n */\r\nconst EMULATOR_WIDGET_PATH = 'emulator/auth/handler';\r\n/**\r\n * Fragment name for the App Check token that gets passed to the widget\r\n *\r\n * @internal\r\n */\r\nconst FIREBASE_APP_CHECK_FRAGMENT_ID = encodeURIComponent('fac');\r\nasync function _getRedirectUrl(auth, provider, authType, redirectUrl, eventId, additionalParams) {\r\n _assert(auth.config.authDomain, auth, \"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */);\r\n _assert(auth.config.apiKey, auth, \"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */);\r\n const params = {\r\n apiKey: auth.config.apiKey,\r\n appName: auth.name,\r\n authType,\r\n redirectUrl,\r\n v: SDK_VERSION,\r\n eventId\r\n };\r\n if (provider instanceof FederatedAuthProvider) {\r\n provider.setDefaultLanguage(auth.languageCode);\r\n params.providerId = provider.providerId || '';\r\n if (!isEmpty(provider.getCustomParameters())) {\r\n params.customParameters = JSON.stringify(provider.getCustomParameters());\r\n }\r\n // TODO set additionalParams from the provider as well?\r\n for (const [key, value] of Object.entries(additionalParams || {})) {\r\n params[key] = value;\r\n }\r\n }\r\n if (provider instanceof BaseOAuthProvider) {\r\n const scopes = provider.getScopes().filter(scope => scope !== '');\r\n if (scopes.length > 0) {\r\n params.scopes = scopes.join(',');\r\n }\r\n }\r\n if (auth.tenantId) {\r\n params.tid = auth.tenantId;\r\n }\r\n // TODO: maybe set eid as endipointId\r\n // TODO: maybe set fw as Frameworks.join(\",\")\r\n const paramsDict = params;\r\n for (const key of Object.keys(paramsDict)) {\r\n if (paramsDict[key] === undefined) {\r\n delete paramsDict[key];\r\n }\r\n }\r\n // Sets the App Check token to pass to the widget\r\n const appCheckToken = await auth._getAppCheckToken();\r\n const appCheckTokenFragment = appCheckToken\r\n ? `#${FIREBASE_APP_CHECK_FRAGMENT_ID}=${encodeURIComponent(appCheckToken)}`\r\n : '';\r\n // Start at index 1 to skip the leading '&' in the query string\r\n return `${getHandlerBase(auth)}?${querystring(paramsDict).slice(1)}${appCheckTokenFragment}`;\r\n}\r\nfunction getHandlerBase({ config }) {\r\n if (!config.emulator) {\r\n return `https://${config.authDomain}/${WIDGET_PATH}`;\r\n }\r\n return _emulatorUrl(config, EMULATOR_WIDGET_PATH);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The special web storage event\r\n *\r\n */\r\nconst WEB_STORAGE_SUPPORT_KEY = 'webStorageSupport';\r\nclass BrowserPopupRedirectResolver {\r\n constructor() {\r\n this.eventManagers = {};\r\n this.iframes = {};\r\n this.originValidationPromises = {};\r\n this._redirectPersistence = browserSessionPersistence;\r\n this._completeRedirectFn = _getRedirectResult;\r\n this._overrideRedirectResult = _overrideRedirectResult;\r\n }\r\n // Wrapping in async even though we don't await anywhere in order\r\n // to make sure errors are raised as promise rejections\r\n async _openPopup(auth, provider, authType, eventId) {\r\n var _a;\r\n debugAssert((_a = this.eventManagers[auth._key()]) === null || _a === void 0 ? void 0 : _a.manager, '_initialize() not called before _openPopup()');\r\n const url = await _getRedirectUrl(auth, provider, authType, _getCurrentUrl(), eventId);\r\n return _open(auth, url, _generateEventId());\r\n }\r\n async _openRedirect(auth, provider, authType, eventId) {\r\n await this._originValidation(auth);\r\n const url = await _getRedirectUrl(auth, provider, authType, _getCurrentUrl(), eventId);\r\n _setWindowLocation(url);\r\n return new Promise(() => { });\r\n }\r\n _initialize(auth) {\r\n const key = auth._key();\r\n if (this.eventManagers[key]) {\r\n const { manager, promise } = this.eventManagers[key];\r\n if (manager) {\r\n return Promise.resolve(manager);\r\n }\r\n else {\r\n debugAssert(promise, 'If manager is not set, promise should be');\r\n return promise;\r\n }\r\n }\r\n const promise = this.initAndGetManager(auth);\r\n this.eventManagers[key] = { promise };\r\n // If the promise is rejected, the key should be removed so that the\r\n // operation can be retried later.\r\n promise.catch(() => {\r\n delete this.eventManagers[key];\r\n });\r\n return promise;\r\n }\r\n async initAndGetManager(auth) {\r\n const iframe = await _openIframe(auth);\r\n const manager = new AuthEventManager(auth);\r\n iframe.register('authEvent', (iframeEvent) => {\r\n _assert(iframeEvent === null || iframeEvent === void 0 ? void 0 : iframeEvent.authEvent, auth, \"invalid-auth-event\" /* AuthErrorCode.INVALID_AUTH_EVENT */);\r\n // TODO: Consider splitting redirect and popup events earlier on\r\n const handled = manager.onEvent(iframeEvent.authEvent);\r\n return { status: handled ? \"ACK\" /* GapiOutcome.ACK */ : \"ERROR\" /* GapiOutcome.ERROR */ };\r\n }, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);\r\n this.eventManagers[auth._key()] = { manager };\r\n this.iframes[auth._key()] = iframe;\r\n return manager;\r\n }\r\n _isIframeWebStorageSupported(auth, cb) {\r\n const iframe = this.iframes[auth._key()];\r\n iframe.send(WEB_STORAGE_SUPPORT_KEY, { type: WEB_STORAGE_SUPPORT_KEY }, result => {\r\n var _a;\r\n const isSupported = (_a = result === null || result === void 0 ? void 0 : result[0]) === null || _a === void 0 ? void 0 : _a[WEB_STORAGE_SUPPORT_KEY];\r\n if (isSupported !== undefined) {\r\n cb(!!isSupported);\r\n }\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);\r\n }\r\n _originValidation(auth) {\r\n const key = auth._key();\r\n if (!this.originValidationPromises[key]) {\r\n this.originValidationPromises[key] = _validateOrigin(auth);\r\n }\r\n return this.originValidationPromises[key];\r\n }\r\n get _shouldInitProactively() {\r\n // Mobile browsers and Safari need to optimistically initialize\r\n return _isMobileBrowser() || _isSafari() || _isIOS();\r\n }\r\n}\r\n/**\r\n * An implementation of {@link PopupRedirectResolver} suitable for browser\r\n * based applications.\r\n *\r\n * @public\r\n */\r\nconst browserPopupRedirectResolver = BrowserPopupRedirectResolver;\n\nclass MultiFactorAssertionImpl {\r\n constructor(factorId) {\r\n this.factorId = factorId;\r\n }\r\n _process(auth, session, displayName) {\r\n switch (session.type) {\r\n case \"enroll\" /* MultiFactorSessionType.ENROLL */:\r\n return this._finalizeEnroll(auth, session.credential, displayName);\r\n case \"signin\" /* MultiFactorSessionType.SIGN_IN */:\r\n return this._finalizeSignIn(auth, session.credential);\r\n default:\r\n return debugFail('unexpected MultiFactorSessionType');\r\n }\r\n }\r\n}\n\n/**\r\n * {@inheritdoc PhoneMultiFactorAssertion}\r\n *\r\n * @public\r\n */\r\nclass PhoneMultiFactorAssertionImpl extends MultiFactorAssertionImpl {\r\n constructor(credential) {\r\n super(\"phone\" /* FactorId.PHONE */);\r\n this.credential = credential;\r\n }\r\n /** @internal */\r\n static _fromCredential(credential) {\r\n return new PhoneMultiFactorAssertionImpl(credential);\r\n }\r\n /** @internal */\r\n _finalizeEnroll(auth, idToken, displayName) {\r\n return finalizeEnrollPhoneMfa(auth, {\r\n idToken,\r\n displayName,\r\n phoneVerificationInfo: this.credential._makeVerificationRequest()\r\n });\r\n }\r\n /** @internal */\r\n _finalizeSignIn(auth, mfaPendingCredential) {\r\n return finalizeSignInPhoneMfa(auth, {\r\n mfaPendingCredential,\r\n phoneVerificationInfo: this.credential._makeVerificationRequest()\r\n });\r\n }\r\n}\r\n/**\r\n * Provider for generating a {@link PhoneMultiFactorAssertion}.\r\n *\r\n * @public\r\n */\r\nclass PhoneMultiFactorGenerator {\r\n constructor() { }\r\n /**\r\n * Provides a {@link PhoneMultiFactorAssertion} to confirm ownership of the phone second factor.\r\n *\r\n * @param phoneAuthCredential - A credential provided by {@link PhoneAuthProvider.credential}.\r\n * @returns A {@link PhoneMultiFactorAssertion} which can be used with\r\n * {@link MultiFactorResolver.resolveSignIn}\r\n */\r\n static assertion(credential) {\r\n return PhoneMultiFactorAssertionImpl._fromCredential(credential);\r\n }\r\n}\r\n/**\r\n * The identifier of the phone second factor: `phone`.\r\n */\r\nPhoneMultiFactorGenerator.FACTOR_ID = 'phone';\n\n/**\r\n * Provider for generating a {@link TotpMultiFactorAssertion}.\r\n *\r\n * @public\r\n */\r\nclass TotpMultiFactorGenerator {\r\n /**\r\n * Provides a {@link TotpMultiFactorAssertion} to confirm ownership of\r\n * the TOTP (time-based one-time password) second factor.\r\n * This assertion is used to complete enrollment in TOTP second factor.\r\n *\r\n * @param secret A {@link TotpSecret} containing the shared secret key and other TOTP parameters.\r\n * @param oneTimePassword One-time password from TOTP App.\r\n * @returns A {@link TotpMultiFactorAssertion} which can be used with\r\n * {@link MultiFactorUser.enroll}.\r\n */\r\n static assertionForEnrollment(secret, oneTimePassword) {\r\n return TotpMultiFactorAssertionImpl._fromSecret(secret, oneTimePassword);\r\n }\r\n /**\r\n * Provides a {@link TotpMultiFactorAssertion} to confirm ownership of the TOTP second factor.\r\n * This assertion is used to complete signIn with TOTP as the second factor.\r\n *\r\n * @param enrollmentId identifies the enrolled TOTP second factor.\r\n * @param oneTimePassword One-time password from TOTP App.\r\n * @returns A {@link TotpMultiFactorAssertion} which can be used with\r\n * {@link MultiFactorResolver.resolveSignIn}.\r\n */\r\n static assertionForSignIn(enrollmentId, oneTimePassword) {\r\n return TotpMultiFactorAssertionImpl._fromEnrollmentId(enrollmentId, oneTimePassword);\r\n }\r\n /**\r\n * Returns a promise to {@link TotpSecret} which contains the TOTP shared secret key and other parameters.\r\n * Creates a TOTP secret as part of enrolling a TOTP second factor.\r\n * Used for generating a QR code URL or inputting into a TOTP app.\r\n * This method uses the auth instance corresponding to the user in the multiFactorSession.\r\n *\r\n * @param session The {@link MultiFactorSession} that the user is part of.\r\n * @returns A promise to {@link TotpSecret}.\r\n */\r\n static async generateSecret(session) {\r\n const mfaSession = session;\r\n _assert(typeof mfaSession.auth !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const response = await startEnrollTotpMfa(mfaSession.auth, {\r\n idToken: mfaSession.credential,\r\n totpEnrollmentInfo: {}\r\n });\r\n return TotpSecret._fromStartTotpMfaEnrollmentResponse(response, mfaSession.auth);\r\n }\r\n}\r\n/**\r\n * The identifier of the TOTP second factor: `totp`.\r\n */\r\nTotpMultiFactorGenerator.FACTOR_ID = \"totp\" /* FactorId.TOTP */;\r\nclass TotpMultiFactorAssertionImpl extends MultiFactorAssertionImpl {\r\n constructor(otp, enrollmentId, secret) {\r\n super(\"totp\" /* FactorId.TOTP */);\r\n this.otp = otp;\r\n this.enrollmentId = enrollmentId;\r\n this.secret = secret;\r\n }\r\n /** @internal */\r\n static _fromSecret(secret, otp) {\r\n return new TotpMultiFactorAssertionImpl(otp, undefined, secret);\r\n }\r\n /** @internal */\r\n static _fromEnrollmentId(enrollmentId, otp) {\r\n return new TotpMultiFactorAssertionImpl(otp, enrollmentId);\r\n }\r\n /** @internal */\r\n async _finalizeEnroll(auth, idToken, displayName) {\r\n _assert(typeof this.secret !== 'undefined', auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return finalizeEnrollTotpMfa(auth, {\r\n idToken,\r\n displayName,\r\n totpVerificationInfo: this.secret._makeTotpVerificationInfo(this.otp)\r\n });\r\n }\r\n /** @internal */\r\n async _finalizeSignIn(auth, mfaPendingCredential) {\r\n _assert(this.enrollmentId !== undefined && this.otp !== undefined, auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n const totpVerificationInfo = { verificationCode: this.otp };\r\n return finalizeSignInTotpMfa(auth, {\r\n mfaPendingCredential,\r\n mfaEnrollmentId: this.enrollmentId,\r\n totpVerificationInfo\r\n });\r\n }\r\n}\r\n/**\r\n * Provider for generating a {@link TotpMultiFactorAssertion}.\r\n *\r\n * Stores the shared secret key and other parameters to generate time-based OTPs.\r\n * Implements methods to retrieve the shared secret key and generate a QR code URL.\r\n * @public\r\n */\r\nclass TotpSecret {\r\n // The public members are declared outside the constructor so the docs can be generated.\r\n constructor(secretKey, hashingAlgorithm, codeLength, codeIntervalSeconds, enrollmentCompletionDeadline, sessionInfo, auth) {\r\n this.sessionInfo = sessionInfo;\r\n this.auth = auth;\r\n this.secretKey = secretKey;\r\n this.hashingAlgorithm = hashingAlgorithm;\r\n this.codeLength = codeLength;\r\n this.codeIntervalSeconds = codeIntervalSeconds;\r\n this.enrollmentCompletionDeadline = enrollmentCompletionDeadline;\r\n }\r\n /** @internal */\r\n static _fromStartTotpMfaEnrollmentResponse(response, auth) {\r\n return new TotpSecret(response.totpSessionInfo.sharedSecretKey, response.totpSessionInfo.hashingAlgorithm, response.totpSessionInfo.verificationCodeLength, response.totpSessionInfo.periodSec, new Date(response.totpSessionInfo.finalizeEnrollmentTime).toUTCString(), response.totpSessionInfo.sessionInfo, auth);\r\n }\r\n /** @internal */\r\n _makeTotpVerificationInfo(otp) {\r\n return { sessionInfo: this.sessionInfo, verificationCode: otp };\r\n }\r\n /**\r\n * Returns a QR code URL as described in\r\n * https://github.com/google/google-authenticator/wiki/Key-Uri-Format\r\n * This can be displayed to the user as a QR code to be scanned into a TOTP app like Google Authenticator.\r\n * If the optional parameters are unspecified, an accountName of and issuer of are used.\r\n *\r\n * @param accountName the name of the account/app along with a user identifier.\r\n * @param issuer issuer of the TOTP (likely the app name).\r\n * @returns A QR code URL string.\r\n */\r\n generateQrCodeUrl(accountName, issuer) {\r\n var _a;\r\n let useDefaults = false;\r\n if (_isEmptyString(accountName) || _isEmptyString(issuer)) {\r\n useDefaults = true;\r\n }\r\n if (useDefaults) {\r\n if (_isEmptyString(accountName)) {\r\n accountName = ((_a = this.auth.currentUser) === null || _a === void 0 ? void 0 : _a.email) || 'unknownuser';\r\n }\r\n if (_isEmptyString(issuer)) {\r\n issuer = this.auth.name;\r\n }\r\n }\r\n return `otpauth://totp/${issuer}:${accountName}?secret=${this.secretKey}&issuer=${issuer}&algorithm=${this.hashingAlgorithm}&digits=${this.codeLength}`;\r\n }\r\n}\r\n/** @internal */\r\nfunction _isEmptyString(input) {\r\n return typeof input === 'undefined' || (input === null || input === void 0 ? void 0 : input.length) === 0;\r\n}\n\nvar name = \"@firebase/auth\";\nvar version = \"0.23.2\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthInterop {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.internalListeners = new Map();\r\n }\r\n getUid() {\r\n var _a;\r\n this.assertAuthConfigured();\r\n return ((_a = this.auth.currentUser) === null || _a === void 0 ? void 0 : _a.uid) || null;\r\n }\r\n async getToken(forceRefresh) {\r\n this.assertAuthConfigured();\r\n await this.auth._initializationPromise;\r\n if (!this.auth.currentUser) {\r\n return null;\r\n }\r\n const accessToken = await this.auth.currentUser.getIdToken(forceRefresh);\r\n return { accessToken };\r\n }\r\n addAuthTokenListener(listener) {\r\n this.assertAuthConfigured();\r\n if (this.internalListeners.has(listener)) {\r\n return;\r\n }\r\n const unsubscribe = this.auth.onIdTokenChanged(user => {\r\n listener((user === null || user === void 0 ? void 0 : user.stsTokenManager.accessToken) || null);\r\n });\r\n this.internalListeners.set(listener, unsubscribe);\r\n this.updateProactiveRefresh();\r\n }\r\n removeAuthTokenListener(listener) {\r\n this.assertAuthConfigured();\r\n const unsubscribe = this.internalListeners.get(listener);\r\n if (!unsubscribe) {\r\n return;\r\n }\r\n this.internalListeners.delete(listener);\r\n unsubscribe();\r\n this.updateProactiveRefresh();\r\n }\r\n assertAuthConfigured() {\r\n _assert(this.auth._initializationPromise, \"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */);\r\n }\r\n updateProactiveRefresh() {\r\n if (this.internalListeners.size > 0) {\r\n this.auth._startProactiveRefresh();\r\n }\r\n else {\r\n this.auth._stopProactiveRefresh();\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getVersionForPlatform(clientPlatform) {\r\n switch (clientPlatform) {\r\n case \"Node\" /* ClientPlatform.NODE */:\r\n return 'node';\r\n case \"ReactNative\" /* ClientPlatform.REACT_NATIVE */:\r\n return 'rn';\r\n case \"Worker\" /* ClientPlatform.WORKER */:\r\n return 'webworker';\r\n case \"Cordova\" /* ClientPlatform.CORDOVA */:\r\n return 'cordova';\r\n default:\r\n return undefined;\r\n }\r\n}\r\n/** @internal */\r\nfunction registerAuth(clientPlatform) {\r\n _registerComponent(new Component(\"auth\" /* _ComponentName.AUTH */, (container, { options: deps }) => {\r\n const app = container.getProvider('app').getImmediate();\r\n const heartbeatServiceProvider = container.getProvider('heartbeat');\r\n const appCheckServiceProvider = container.getProvider('app-check-internal');\r\n const { apiKey, authDomain } = app.options;\r\n _assert(apiKey && !apiKey.includes(':'), \"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */, { appName: app.name });\r\n const config = {\r\n apiKey,\r\n authDomain,\r\n clientPlatform,\r\n apiHost: \"identitytoolkit.googleapis.com\" /* DefaultConfig.API_HOST */,\r\n tokenApiHost: \"securetoken.googleapis.com\" /* DefaultConfig.TOKEN_API_HOST */,\r\n apiScheme: \"https\" /* DefaultConfig.API_SCHEME */,\r\n sdkClientVersion: _getClientVersion(clientPlatform)\r\n };\r\n const authInstance = new AuthImpl(app, heartbeatServiceProvider, appCheckServiceProvider, config);\r\n _initializeAuthInstance(authInstance, deps);\r\n return authInstance;\r\n }, \"PUBLIC\" /* ComponentType.PUBLIC */)\r\n /**\r\n * Auth can only be initialized by explicitly calling getAuth() or initializeAuth()\r\n * For why we do this, See go/firebase-next-auth-init\r\n */\r\n .setInstantiationMode(\"EXPLICIT\" /* InstantiationMode.EXPLICIT */)\r\n /**\r\n * Because all firebase products that depend on auth depend on auth-internal directly,\r\n * we need to initialize auth-internal after auth is initialized to make it available to other firebase products.\r\n */\r\n .setInstanceCreatedCallback((container, _instanceIdentifier, _instance) => {\r\n const authInternalProvider = container.getProvider(\"auth-internal\" /* _ComponentName.AUTH_INTERNAL */);\r\n authInternalProvider.initialize();\r\n }));\r\n _registerComponent(new Component(\"auth-internal\" /* _ComponentName.AUTH_INTERNAL */, container => {\r\n const auth = _castAuth(container.getProvider(\"auth\" /* _ComponentName.AUTH */).getImmediate());\r\n return (auth => new AuthInterop(auth))(auth);\r\n }, \"PRIVATE\" /* ComponentType.PRIVATE */).setInstantiationMode(\"EXPLICIT\" /* InstantiationMode.EXPLICIT */));\r\n registerVersion(name, version, getVersionForPlatform(clientPlatform));\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_ID_TOKEN_MAX_AGE = 5 * 60;\r\nconst authIdTokenMaxAge = getExperimentalSetting('authIdTokenMaxAge') || DEFAULT_ID_TOKEN_MAX_AGE;\r\nlet lastPostedIdToken = null;\r\nconst mintCookieFactory = (url) => async (user) => {\r\n const idTokenResult = user && (await user.getIdTokenResult());\r\n const idTokenAge = idTokenResult &&\r\n (new Date().getTime() - Date.parse(idTokenResult.issuedAtTime)) / 1000;\r\n if (idTokenAge && idTokenAge > authIdTokenMaxAge) {\r\n return;\r\n }\r\n // Specifically trip null => undefined when logged out, to delete any existing cookie\r\n const idToken = idTokenResult === null || idTokenResult === void 0 ? void 0 : idTokenResult.token;\r\n if (lastPostedIdToken === idToken) {\r\n return;\r\n }\r\n lastPostedIdToken = idToken;\r\n await fetch(url, {\r\n method: idToken ? 'POST' : 'DELETE',\r\n headers: idToken\r\n ? {\r\n 'Authorization': `Bearer ${idToken}`\r\n }\r\n : {}\r\n });\r\n};\r\n/**\r\n * Returns the Auth instance associated with the provided {@link @firebase/app#FirebaseApp}.\r\n * If no instance exists, initializes an Auth instance with platform-specific default dependencies.\r\n *\r\n * @param app - The Firebase App.\r\n *\r\n * @public\r\n */\r\nfunction getAuth(app = getApp()) {\r\n const provider = _getProvider(app, 'auth');\r\n if (provider.isInitialized()) {\r\n return provider.getImmediate();\r\n }\r\n const auth = initializeAuth(app, {\r\n popupRedirectResolver: browserPopupRedirectResolver,\r\n persistence: [\r\n indexedDBLocalPersistence,\r\n browserLocalPersistence,\r\n browserSessionPersistence\r\n ]\r\n });\r\n const authTokenSyncUrl = getExperimentalSetting('authTokenSyncURL');\r\n if (authTokenSyncUrl) {\r\n const mintCookie = mintCookieFactory(authTokenSyncUrl);\r\n beforeAuthStateChanged(auth, mintCookie, () => mintCookie(auth.currentUser));\r\n onIdTokenChanged(auth, user => mintCookie(user));\r\n }\r\n const authEmulatorHost = getDefaultEmulatorHost('auth');\r\n if (authEmulatorHost) {\r\n connectAuthEmulator(auth, `http://${authEmulatorHost}`);\r\n }\r\n return auth;\r\n}\r\nregisterAuth(\"Browser\" /* ClientPlatform.BROWSER */);\n\nexport { signInWithCredential as $, ActionCodeOperation as A, signOut as B, deleteUser as C, debugErrorMap as D, prodErrorMap as E, FactorId as F, AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY as G, initializeAuth as H, connectAuthEmulator as I, AuthCredential as J, EmailAuthCredential as K, OAuthCredential as L, PhoneAuthCredential as M, inMemoryPersistence as N, OperationType as O, PhoneAuthProvider as P, EmailAuthProvider as Q, RecaptchaVerifier as R, SignInMethod as S, TotpMultiFactorGenerator as T, FacebookAuthProvider as U, GoogleAuthProvider as V, GithubAuthProvider as W, OAuthProvider as X, SAMLAuthProvider as Y, TwitterAuthProvider as Z, signInAnonymously as _, browserSessionPersistence as a, linkWithCredential as a0, reauthenticateWithCredential as a1, signInWithCustomToken as a2, sendPasswordResetEmail as a3, confirmPasswordReset as a4, applyActionCode as a5, checkActionCode as a6, verifyPasswordResetCode as a7, createUserWithEmailAndPassword as a8, signInWithEmailAndPassword as a9, _assert as aA, AuthEventManager as aB, _getInstance as aC, _persistenceKeyName as aD, _getRedirectResult as aE, _overrideRedirectResult as aF, _clearRedirectOutcomes as aG, _castAuth as aH, UserImpl as aI, AuthImpl as aJ, _getClientVersion as aK, _generateEventId as aL, AuthPopup as aM, FetchProvider as aN, SAMLAuthCredential as aO, sendSignInLinkToEmail as aa, isSignInWithEmailLink as ab, signInWithEmailLink as ac, fetchSignInMethodsForEmail as ad, sendEmailVerification as ae, verifyBeforeUpdateEmail as af, ActionCodeURL as ag, parseActionCodeURL as ah, updateProfile as ai, updateEmail as aj, updatePassword as ak, getIdToken as al, getIdTokenResult as am, unlink as an, getAdditionalUserInfo as ao, reload as ap, getMultiFactorResolver as aq, multiFactor as ar, debugAssert as as, _isIOS as at, _isAndroid as au, _fail as av, _getRedirectUrl as aw, _getProjectConfig as ax, _isIOS7Or8 as ay, _createError as az, browserLocalPersistence as b, signInWithPopup as c, linkWithPopup as d, reauthenticateWithPopup as e, signInWithRedirect as f, linkWithRedirect as g, reauthenticateWithRedirect as h, indexedDBLocalPersistence as i, getRedirectResult as j, browserPopupRedirectResolver as k, linkWithPhoneNumber as l, PhoneMultiFactorGenerator as m, TotpSecret as n, getAuth as o, ProviderId as p, setPersistence as q, reauthenticateWithPhoneNumber as r, signInWithPhoneNumber as s, initializeRecaptchaConfig as t, updatePhoneNumber as u, onIdTokenChanged as v, beforeAuthStateChanged as w, onAuthStateChanged as x, useDeviceLanguage as y, updateCurrentUser as z };\n","import { as as debugAssert, at as _isIOS, au as _isAndroid, av as _fail, aw as _getRedirectUrl, ax as _getProjectConfig, ay as _isIOS7Or8, az as _createError, aA as _assert, aB as AuthEventManager, aC as _getInstance, b as browserLocalPersistence, aD as _persistenceKeyName, a as browserSessionPersistence, aE as _getRedirectResult, aF as _overrideRedirectResult, aG as _clearRedirectOutcomes, aH as _castAuth } from './index-e3d5d3f4.js';\nexport { A as ActionCodeOperation, ag as ActionCodeURL, J as AuthCredential, G as AuthErrorCodes, aJ as AuthImpl, aM as AuthPopup, K as EmailAuthCredential, Q as EmailAuthProvider, U as FacebookAuthProvider, F as FactorId, aN as FetchProvider, W as GithubAuthProvider, V as GoogleAuthProvider, L as OAuthCredential, X as OAuthProvider, O as OperationType, M as PhoneAuthCredential, P as PhoneAuthProvider, m as PhoneMultiFactorGenerator, p as ProviderId, R as RecaptchaVerifier, aO as SAMLAuthCredential, Y as SAMLAuthProvider, S as SignInMethod, T as TotpMultiFactorGenerator, n as TotpSecret, Z as TwitterAuthProvider, aI as UserImpl, aA as _assert, aH as _castAuth, av as _fail, aL as _generateEventId, aK as _getClientVersion, aC as _getInstance, aE as _getRedirectResult, aF as _overrideRedirectResult, aD as _persistenceKeyName, a5 as applyActionCode, w as beforeAuthStateChanged, b as browserLocalPersistence, k as browserPopupRedirectResolver, a as browserSessionPersistence, a6 as checkActionCode, a4 as confirmPasswordReset, I as connectAuthEmulator, a8 as createUserWithEmailAndPassword, D as debugErrorMap, C as deleteUser, ad as fetchSignInMethodsForEmail, ao as getAdditionalUserInfo, o as getAuth, al as getIdToken, am as getIdTokenResult, aq as getMultiFactorResolver, j as getRedirectResult, N as inMemoryPersistence, i as indexedDBLocalPersistence, H as initializeAuth, t as initializeRecaptchaConfig, ab as isSignInWithEmailLink, a0 as linkWithCredential, l as linkWithPhoneNumber, d as linkWithPopup, g as linkWithRedirect, ar as multiFactor, x as onAuthStateChanged, v as onIdTokenChanged, ah as parseActionCodeURL, E as prodErrorMap, a1 as reauthenticateWithCredential, r as reauthenticateWithPhoneNumber, e as reauthenticateWithPopup, h as reauthenticateWithRedirect, ap as reload, ae as sendEmailVerification, a3 as sendPasswordResetEmail, aa as sendSignInLinkToEmail, q as setPersistence, _ as signInAnonymously, $ as signInWithCredential, a2 as signInWithCustomToken, a9 as signInWithEmailAndPassword, ac as signInWithEmailLink, s as signInWithPhoneNumber, c as signInWithPopup, f as signInWithRedirect, B as signOut, an as unlink, z as updateCurrentUser, aj as updateEmail, ak as updatePassword, u as updatePhoneNumber, ai as updateProfile, y as useDeviceLanguage, af as verifyBeforeUpdateEmail, a7 as verifyPasswordResetCode } from './index-e3d5d3f4.js';\nimport { querystringDecode } from '@firebase/util';\nimport '@firebase/app';\nimport 'tslib';\nimport '@firebase/logger';\nimport '@firebase/component';\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _cordovaWindow() {\r\n return window;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * How long to wait after the app comes back into focus before concluding that\r\n * the user closed the sign in tab.\r\n */\r\nconst REDIRECT_TIMEOUT_MS = 2000;\r\n/**\r\n * Generates the URL for the OAuth handler.\r\n */\r\nasync function _generateHandlerUrl(auth, event, provider) {\r\n var _a;\r\n // Get the cordova plugins\r\n const { BuildInfo } = _cordovaWindow();\r\n debugAssert(event.sessionId, 'AuthEvent did not contain a session ID');\r\n const sessionDigest = await computeSha256(event.sessionId);\r\n const additionalParams = {};\r\n if (_isIOS()) {\r\n // iOS app identifier\r\n additionalParams['ibi'] = BuildInfo.packageName;\r\n }\r\n else if (_isAndroid()) {\r\n // Android app identifier\r\n additionalParams['apn'] = BuildInfo.packageName;\r\n }\r\n else {\r\n _fail(auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n }\r\n // Add the display name if available\r\n if (BuildInfo.displayName) {\r\n additionalParams['appDisplayName'] = BuildInfo.displayName;\r\n }\r\n // Attached the hashed session ID\r\n additionalParams['sessionId'] = sessionDigest;\r\n return _getRedirectUrl(auth, provider, event.type, undefined, (_a = event.eventId) !== null && _a !== void 0 ? _a : undefined, additionalParams);\r\n}\r\n/**\r\n * Validates that this app is valid for this project configuration\r\n */\r\nasync function _validateOrigin(auth) {\r\n const { BuildInfo } = _cordovaWindow();\r\n const request = {};\r\n if (_isIOS()) {\r\n request.iosBundleId = BuildInfo.packageName;\r\n }\r\n else if (_isAndroid()) {\r\n request.androidPackageName = BuildInfo.packageName;\r\n }\r\n else {\r\n _fail(auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n }\r\n // Will fail automatically if package name is not authorized\r\n await _getProjectConfig(auth, request);\r\n}\r\nfunction _performRedirect(handlerUrl) {\r\n // Get the cordova plugins\r\n const { cordova } = _cordovaWindow();\r\n return new Promise(resolve => {\r\n cordova.plugins.browsertab.isAvailable(browserTabIsAvailable => {\r\n let iabRef = null;\r\n if (browserTabIsAvailable) {\r\n cordova.plugins.browsertab.openUrl(handlerUrl);\r\n }\r\n else {\r\n // TODO: Return the inappbrowser ref that's returned from the open call\r\n iabRef = cordova.InAppBrowser.open(handlerUrl, _isIOS7Or8() ? '_blank' : '_system', 'location=yes');\r\n }\r\n resolve(iabRef);\r\n });\r\n });\r\n}\r\n/**\r\n * This function waits for app activity to be seen before resolving. It does\r\n * this by attaching listeners to various dom events. Once the app is determined\r\n * to be visible, this promise resolves. AFTER that resolution, the listeners\r\n * are detached and any browser tabs left open will be closed.\r\n */\r\nasync function _waitForAppResume(auth, eventListener, iabRef) {\r\n // Get the cordova plugins\r\n const { cordova } = _cordovaWindow();\r\n let cleanup = () => { };\r\n try {\r\n await new Promise((resolve, reject) => {\r\n let onCloseTimer = null;\r\n // DEFINE ALL THE CALLBACKS =====\r\n function authEventSeen() {\r\n var _a;\r\n // Auth event was detected. Resolve this promise and close the extra\r\n // window if it's still open.\r\n resolve();\r\n const closeBrowserTab = (_a = cordova.plugins.browsertab) === null || _a === void 0 ? void 0 : _a.close;\r\n if (typeof closeBrowserTab === 'function') {\r\n closeBrowserTab();\r\n }\r\n // Close inappbrowser emebedded webview in iOS7 and 8 case if still\r\n // open.\r\n if (typeof (iabRef === null || iabRef === void 0 ? void 0 : iabRef.close) === 'function') {\r\n iabRef.close();\r\n }\r\n }\r\n function resumed() {\r\n if (onCloseTimer) {\r\n // This code already ran; do not rerun.\r\n return;\r\n }\r\n onCloseTimer = window.setTimeout(() => {\r\n // Wait two seeconds after resume then reject.\r\n reject(_createError(auth, \"redirect-cancelled-by-user\" /* AuthErrorCode.REDIRECT_CANCELLED_BY_USER */));\r\n }, REDIRECT_TIMEOUT_MS);\r\n }\r\n function visibilityChanged() {\r\n if ((document === null || document === void 0 ? void 0 : document.visibilityState) === 'visible') {\r\n resumed();\r\n }\r\n }\r\n // ATTACH ALL THE LISTENERS =====\r\n // Listen for the auth event\r\n eventListener.addPassiveListener(authEventSeen);\r\n // Listen for resume and visibility events\r\n document.addEventListener('resume', resumed, false);\r\n if (_isAndroid()) {\r\n document.addEventListener('visibilitychange', visibilityChanged, false);\r\n }\r\n // SETUP THE CLEANUP FUNCTION =====\r\n cleanup = () => {\r\n eventListener.removePassiveListener(authEventSeen);\r\n document.removeEventListener('resume', resumed, false);\r\n document.removeEventListener('visibilitychange', visibilityChanged, false);\r\n if (onCloseTimer) {\r\n window.clearTimeout(onCloseTimer);\r\n }\r\n };\r\n });\r\n }\r\n finally {\r\n cleanup();\r\n }\r\n}\r\n/**\r\n * Checks the configuration of the Cordova environment. This has no side effect\r\n * if the configuration is correct; otherwise it throws an error with the\r\n * missing plugin.\r\n */\r\nfunction _checkCordovaConfiguration(auth) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\r\n const win = _cordovaWindow();\r\n // Check all dependencies installed.\r\n // https://github.com/nordnet/cordova-universal-links-plugin\r\n // Note that cordova-universal-links-plugin has been abandoned.\r\n // A fork with latest fixes is available at:\r\n // https://www.npmjs.com/package/cordova-universal-links-plugin-fix\r\n _assert(typeof ((_a = win === null || win === void 0 ? void 0 : win.universalLinks) === null || _a === void 0 ? void 0 : _a.subscribe) === 'function', auth, \"invalid-cordova-configuration\" /* AuthErrorCode.INVALID_CORDOVA_CONFIGURATION */, {\r\n missingPlugin: 'cordova-universal-links-plugin-fix'\r\n });\r\n // https://www.npmjs.com/package/cordova-plugin-buildinfo\r\n _assert(typeof ((_b = win === null || win === void 0 ? void 0 : win.BuildInfo) === null || _b === void 0 ? void 0 : _b.packageName) !== 'undefined', auth, \"invalid-cordova-configuration\" /* AuthErrorCode.INVALID_CORDOVA_CONFIGURATION */, {\r\n missingPlugin: 'cordova-plugin-buildInfo'\r\n });\r\n // https://github.com/google/cordova-plugin-browsertab\r\n _assert(typeof ((_e = (_d = (_c = win === null || win === void 0 ? void 0 : win.cordova) === null || _c === void 0 ? void 0 : _c.plugins) === null || _d === void 0 ? void 0 : _d.browsertab) === null || _e === void 0 ? void 0 : _e.openUrl) === 'function', auth, \"invalid-cordova-configuration\" /* AuthErrorCode.INVALID_CORDOVA_CONFIGURATION */, {\r\n missingPlugin: 'cordova-plugin-browsertab'\r\n });\r\n _assert(typeof ((_h = (_g = (_f = win === null || win === void 0 ? void 0 : win.cordova) === null || _f === void 0 ? void 0 : _f.plugins) === null || _g === void 0 ? void 0 : _g.browsertab) === null || _h === void 0 ? void 0 : _h.isAvailable) === 'function', auth, \"invalid-cordova-configuration\" /* AuthErrorCode.INVALID_CORDOVA_CONFIGURATION */, {\r\n missingPlugin: 'cordova-plugin-browsertab'\r\n });\r\n // https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-inappbrowser/\r\n _assert(typeof ((_k = (_j = win === null || win === void 0 ? void 0 : win.cordova) === null || _j === void 0 ? void 0 : _j.InAppBrowser) === null || _k === void 0 ? void 0 : _k.open) === 'function', auth, \"invalid-cordova-configuration\" /* AuthErrorCode.INVALID_CORDOVA_CONFIGURATION */, {\r\n missingPlugin: 'cordova-plugin-inappbrowser'\r\n });\r\n}\r\n/**\r\n * Computes the SHA-256 of a session ID. The SubtleCrypto interface is only\r\n * available in \"secure\" contexts, which covers Cordova (which is served on a file\r\n * protocol).\r\n */\r\nasync function computeSha256(sessionId) {\r\n const bytes = stringToArrayBuffer(sessionId);\r\n // TODO: For IE11 crypto has a different name and this operation comes back\r\n // as an object, not a promise. This is the old proposed standard that\r\n // is used by IE11:\r\n // https://www.w3.org/TR/2013/WD-WebCryptoAPI-20130108/#cryptooperation-interface\r\n const buf = await crypto.subtle.digest('SHA-256', bytes);\r\n const arr = Array.from(new Uint8Array(buf));\r\n return arr.map(num => num.toString(16).padStart(2, '0')).join('');\r\n}\r\nfunction stringToArrayBuffer(str) {\r\n // This function is only meant to deal with an ASCII charset and makes\r\n // certain simplifying assumptions.\r\n debugAssert(/[0-9a-zA-Z]+/.test(str), 'Can only convert alpha-numeric strings');\r\n if (typeof TextEncoder !== 'undefined') {\r\n return new TextEncoder().encode(str);\r\n }\r\n const buff = new ArrayBuffer(str.length);\r\n const view = new Uint8Array(buff);\r\n for (let i = 0; i < str.length; i++) {\r\n view[i] = str.charCodeAt(i);\r\n }\r\n return view;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst SESSION_ID_LENGTH = 20;\r\n/** Custom AuthEventManager that adds passive listeners to events */\r\nclass CordovaAuthEventManager extends AuthEventManager {\r\n constructor() {\r\n super(...arguments);\r\n this.passiveListeners = new Set();\r\n this.initPromise = new Promise(resolve => {\r\n this.resolveInialized = resolve;\r\n });\r\n }\r\n addPassiveListener(cb) {\r\n this.passiveListeners.add(cb);\r\n }\r\n removePassiveListener(cb) {\r\n this.passiveListeners.delete(cb);\r\n }\r\n // In a Cordova environment, this manager can live through multiple redirect\r\n // operations\r\n resetRedirect() {\r\n this.queuedRedirectEvent = null;\r\n this.hasHandledPotentialRedirect = false;\r\n }\r\n /** Override the onEvent method */\r\n onEvent(event) {\r\n this.resolveInialized();\r\n this.passiveListeners.forEach(cb => cb(event));\r\n return super.onEvent(event);\r\n }\r\n async initialized() {\r\n await this.initPromise;\r\n }\r\n}\r\n/**\r\n * Generates a (partial) {@link AuthEvent}.\r\n */\r\nfunction _generateNewEvent(auth, type, eventId = null) {\r\n return {\r\n type,\r\n eventId,\r\n urlResponse: null,\r\n sessionId: generateSessionId(),\r\n postBody: null,\r\n tenantId: auth.tenantId,\r\n error: _createError(auth, \"no-auth-event\" /* AuthErrorCode.NO_AUTH_EVENT */)\r\n };\r\n}\r\nfunction _savePartialEvent(auth, event) {\r\n return storage()._set(persistenceKey(auth), event);\r\n}\r\nasync function _getAndRemoveEvent(auth) {\r\n const event = (await storage()._get(persistenceKey(auth)));\r\n if (event) {\r\n await storage()._remove(persistenceKey(auth));\r\n }\r\n return event;\r\n}\r\nfunction _eventFromPartialAndUrl(partialEvent, url) {\r\n var _a, _b;\r\n // Parse the deep link within the dynamic link URL.\r\n const callbackUrl = _getDeepLinkFromCallback(url);\r\n // Confirm it is actually a callback URL.\r\n // Currently the universal link will be of this format:\r\n // https:///__/auth/callback\r\n // This is a fake URL but is not intended to take the user anywhere\r\n // and just redirect to the app.\r\n if (callbackUrl.includes('/__/auth/callback')) {\r\n // Check if there is an error in the URL.\r\n // This mechanism is also used to pass errors back to the app:\r\n // https:///__/auth/callback?firebaseError=\r\n const params = searchParamsOrEmpty(callbackUrl);\r\n // Get the error object corresponding to the stringified error if found.\r\n const errorObject = params['firebaseError']\r\n ? parseJsonOrNull(decodeURIComponent(params['firebaseError']))\r\n : null;\r\n const code = (_b = (_a = errorObject === null || errorObject === void 0 ? void 0 : errorObject['code']) === null || _a === void 0 ? void 0 : _a.split('auth/')) === null || _b === void 0 ? void 0 : _b[1];\r\n const error = code ? _createError(code) : null;\r\n if (error) {\r\n return {\r\n type: partialEvent.type,\r\n eventId: partialEvent.eventId,\r\n tenantId: partialEvent.tenantId,\r\n error,\r\n urlResponse: null,\r\n sessionId: null,\r\n postBody: null\r\n };\r\n }\r\n else {\r\n return {\r\n type: partialEvent.type,\r\n eventId: partialEvent.eventId,\r\n tenantId: partialEvent.tenantId,\r\n sessionId: partialEvent.sessionId,\r\n urlResponse: callbackUrl,\r\n postBody: null\r\n };\r\n }\r\n }\r\n return null;\r\n}\r\nfunction generateSessionId() {\r\n const chars = [];\r\n const allowedChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n for (let i = 0; i < SESSION_ID_LENGTH; i++) {\r\n const idx = Math.floor(Math.random() * allowedChars.length);\r\n chars.push(allowedChars.charAt(idx));\r\n }\r\n return chars.join('');\r\n}\r\nfunction storage() {\r\n return _getInstance(browserLocalPersistence);\r\n}\r\nfunction persistenceKey(auth) {\r\n return _persistenceKeyName(\"authEvent\" /* KeyName.AUTH_EVENT */, auth.config.apiKey, auth.name);\r\n}\r\nfunction parseJsonOrNull(json) {\r\n try {\r\n return JSON.parse(json);\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n}\r\n// Exported for testing\r\nfunction _getDeepLinkFromCallback(url) {\r\n const params = searchParamsOrEmpty(url);\r\n const link = params['link'] ? decodeURIComponent(params['link']) : undefined;\r\n // Double link case (automatic redirect)\r\n const doubleDeepLink = searchParamsOrEmpty(link)['link'];\r\n // iOS custom scheme links.\r\n const iOSDeepLink = params['deep_link_id']\r\n ? decodeURIComponent(params['deep_link_id'])\r\n : undefined;\r\n const iOSDoubleDeepLink = searchParamsOrEmpty(iOSDeepLink)['link'];\r\n return iOSDoubleDeepLink || iOSDeepLink || doubleDeepLink || link || url;\r\n}\r\n/**\r\n * Optimistically tries to get search params from a string, or else returns an\r\n * empty search params object.\r\n */\r\nfunction searchParamsOrEmpty(url) {\r\n if (!(url === null || url === void 0 ? void 0 : url.includes('?'))) {\r\n return {};\r\n }\r\n const [_, ...rest] = url.split('?');\r\n return querystringDecode(rest.join('?'));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * How long to wait for the initial auth event before concluding no\r\n * redirect pending\r\n */\r\nconst INITIAL_EVENT_TIMEOUT_MS = 500;\r\nclass CordovaPopupRedirectResolver {\r\n constructor() {\r\n this._redirectPersistence = browserSessionPersistence;\r\n this._shouldInitProactively = true; // This is lightweight for Cordova\r\n this.eventManagers = new Map();\r\n this.originValidationPromises = {};\r\n this._completeRedirectFn = _getRedirectResult;\r\n this._overrideRedirectResult = _overrideRedirectResult;\r\n }\r\n async _initialize(auth) {\r\n const key = auth._key();\r\n let manager = this.eventManagers.get(key);\r\n if (!manager) {\r\n manager = new CordovaAuthEventManager(auth);\r\n this.eventManagers.set(key, manager);\r\n this.attachCallbackListeners(auth, manager);\r\n }\r\n return manager;\r\n }\r\n _openPopup(auth) {\r\n _fail(auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n }\r\n async _openRedirect(auth, provider, authType, eventId) {\r\n _checkCordovaConfiguration(auth);\r\n const manager = await this._initialize(auth);\r\n await manager.initialized();\r\n // Reset the persisted redirect states. This does not matter on Web where\r\n // the redirect always blows away application state entirely. On Cordova,\r\n // the app maintains control flow through the redirect.\r\n manager.resetRedirect();\r\n _clearRedirectOutcomes();\r\n await this._originValidation(auth);\r\n const event = _generateNewEvent(auth, authType, eventId);\r\n await _savePartialEvent(auth, event);\r\n const url = await _generateHandlerUrl(auth, event, provider);\r\n const iabRef = await _performRedirect(url);\r\n return _waitForAppResume(auth, manager, iabRef);\r\n }\r\n _isIframeWebStorageSupported(_auth, _cb) {\r\n throw new Error('Method not implemented.');\r\n }\r\n _originValidation(auth) {\r\n const key = auth._key();\r\n if (!this.originValidationPromises[key]) {\r\n this.originValidationPromises[key] = _validateOrigin(auth);\r\n }\r\n return this.originValidationPromises[key];\r\n }\r\n attachCallbackListeners(auth, manager) {\r\n // Get the global plugins\r\n const { universalLinks, handleOpenURL, BuildInfo } = _cordovaWindow();\r\n const noEventTimeout = setTimeout(async () => {\r\n // We didn't see that initial event. Clear any pending object and\r\n // dispatch no event\r\n await _getAndRemoveEvent(auth);\r\n manager.onEvent(generateNoEvent());\r\n }, INITIAL_EVENT_TIMEOUT_MS);\r\n const universalLinksCb = async (eventData) => {\r\n // We have an event so we can clear the no event timeout\r\n clearTimeout(noEventTimeout);\r\n const partialEvent = await _getAndRemoveEvent(auth);\r\n let finalEvent = null;\r\n if (partialEvent && (eventData === null || eventData === void 0 ? void 0 : eventData['url'])) {\r\n finalEvent = _eventFromPartialAndUrl(partialEvent, eventData['url']);\r\n }\r\n // If finalEvent is never filled, trigger with no event\r\n manager.onEvent(finalEvent || generateNoEvent());\r\n };\r\n // Universal links subscriber doesn't exist for iOS, so we need to check\r\n if (typeof universalLinks !== 'undefined' &&\r\n typeof universalLinks.subscribe === 'function') {\r\n universalLinks.subscribe(null, universalLinksCb);\r\n }\r\n // iOS 7 or 8 custom URL schemes.\r\n // This is also the current default behavior for iOS 9+.\r\n // For this to work, cordova-plugin-customurlscheme needs to be installed.\r\n // https://github.com/EddyVerbruggen/Custom-URL-scheme\r\n // Do not overwrite the existing developer's URL handler.\r\n const existingHandleOpenURL = handleOpenURL;\r\n const packagePrefix = `${BuildInfo.packageName.toLowerCase()}://`;\r\n _cordovaWindow().handleOpenURL = async (url) => {\r\n if (url.toLowerCase().startsWith(packagePrefix)) {\r\n // We want this intentionally to float\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n universalLinksCb({ url });\r\n }\r\n // Call the developer's handler if it is present.\r\n if (typeof existingHandleOpenURL === 'function') {\r\n try {\r\n existingHandleOpenURL(url);\r\n }\r\n catch (e) {\r\n // This is a developer error. Don't stop the flow of the SDK.\r\n console.error(e);\r\n }\r\n }\r\n };\r\n }\r\n}\r\n/**\r\n * An implementation of {@link PopupRedirectResolver} suitable for Cordova\r\n * based applications.\r\n *\r\n * @public\r\n */\r\nconst cordovaPopupRedirectResolver = CordovaPopupRedirectResolver;\r\nfunction generateNoEvent() {\r\n return {\r\n type: \"unknown\" /* AuthEventType.UNKNOWN */,\r\n eventId: null,\r\n sessionId: null,\r\n urlResponse: null,\r\n postBody: null,\r\n tenantId: null,\r\n error: _createError(\"no-auth-event\" /* AuthErrorCode.NO_AUTH_EVENT */)\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// This function should only be called by frameworks (e.g. FirebaseUI-web) to log their usage.\r\n// It is not intended for direct use by developer apps. NO jsdoc here to intentionally leave it out\r\n// of autogenerated documentation pages to reduce accidental misuse.\r\nfunction addFrameworkForLogging(auth, framework) {\r\n _castAuth(auth)._logFramework(framework);\r\n}\n\nexport { addFrameworkForLogging, cordovaPopupRedirectResolver };\n","import firebase from '@firebase/app-compat';\nimport * as exp from '@firebase/auth/internal';\nimport { Component } from '@firebase/component';\nimport { isBrowserExtension, getUA, isReactNative, isNode, isIndexedDBAvailable, isIE, FirebaseError } from '@firebase/util';\n\nvar name = \"@firebase/auth-compat\";\nvar version = \"0.4.2\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst CORDOVA_ONDEVICEREADY_TIMEOUT_MS = 1000;\r\nfunction _getCurrentScheme() {\r\n var _a;\r\n return ((_a = self === null || self === void 0 ? void 0 : self.location) === null || _a === void 0 ? void 0 : _a.protocol) || null;\r\n}\r\n/**\r\n * @return {boolean} Whether the current environment is http or https.\r\n */\r\nfunction _isHttpOrHttps() {\r\n return _getCurrentScheme() === 'http:' || _getCurrentScheme() === 'https:';\r\n}\r\n/**\r\n * @param {?string=} ua The user agent.\r\n * @return {boolean} Whether the app is rendered in a mobile iOS or Android\r\n * Cordova environment.\r\n */\r\nfunction _isAndroidOrIosCordovaScheme(ua = getUA()) {\r\n return !!((_getCurrentScheme() === 'file:' ||\r\n _getCurrentScheme() === 'ionic:' ||\r\n _getCurrentScheme() === 'capacitor:') &&\r\n ua.toLowerCase().match(/iphone|ipad|ipod|android/));\r\n}\r\n/**\r\n * @return {boolean} Whether the environment is a native environment, where\r\n * CORS checks do not apply.\r\n */\r\nfunction _isNativeEnvironment() {\r\n return isReactNative() || isNode();\r\n}\r\n/**\r\n * Checks whether the user agent is IE11.\r\n * @return {boolean} True if it is IE11.\r\n */\r\nfunction _isIe11() {\r\n return isIE() && (document === null || document === void 0 ? void 0 : document.documentMode) === 11;\r\n}\r\n/**\r\n * Checks whether the user agent is Edge.\r\n * @param {string} userAgent The browser user agent string.\r\n * @return {boolean} True if it is Edge.\r\n */\r\nfunction _isEdge(ua = getUA()) {\r\n return /Edge\\/\\d+/.test(ua);\r\n}\r\n/**\r\n * @param {?string=} opt_userAgent The navigator user agent.\r\n * @return {boolean} Whether local storage is not synchronized between an iframe\r\n * and a popup of the same domain.\r\n */\r\nfunction _isLocalStorageNotSynchronized(ua = getUA()) {\r\n return _isIe11() || _isEdge(ua);\r\n}\r\n/** @return {boolean} Whether web storage is supported. */\r\nfunction _isWebStorageSupported() {\r\n try {\r\n const storage = self.localStorage;\r\n const key = exp._generateEventId();\r\n if (storage) {\r\n // setItem will throw an exception if we cannot access WebStorage (e.g.,\r\n // Safari in private mode).\r\n storage['setItem'](key, '1');\r\n storage['removeItem'](key);\r\n // For browsers where iframe web storage does not synchronize with a popup\r\n // of the same domain, indexedDB is used for persistent storage. These\r\n // browsers include IE11 and Edge.\r\n // Make sure it is supported (IE11 and Edge private mode does not support\r\n // that).\r\n if (_isLocalStorageNotSynchronized()) {\r\n // In such browsers, if indexedDB is not supported, an iframe cannot be\r\n // notified of the popup sign in result.\r\n return isIndexedDBAvailable();\r\n }\r\n return true;\r\n }\r\n }\r\n catch (e) {\r\n // localStorage is not available from a worker. Test availability of\r\n // indexedDB.\r\n return _isWorker() && isIndexedDBAvailable();\r\n }\r\n return false;\r\n}\r\n/**\r\n * @param {?Object=} global The optional global scope.\r\n * @return {boolean} Whether current environment is a worker.\r\n */\r\nfunction _isWorker() {\r\n // WorkerGlobalScope only defined in worker environment.\r\n return (typeof global !== 'undefined' &&\r\n 'WorkerGlobalScope' in global &&\r\n 'importScripts' in global);\r\n}\r\nfunction _isPopupRedirectSupported() {\r\n return ((_isHttpOrHttps() ||\r\n isBrowserExtension() ||\r\n _isAndroidOrIosCordovaScheme()) &&\r\n // React Native with remote debugging reports its location.protocol as\r\n // http.\r\n !_isNativeEnvironment() &&\r\n // Local storage has to be supported for browser popup and redirect\r\n // operations to work.\r\n _isWebStorageSupported() &&\r\n // DOM, popups and redirects are not supported within a worker.\r\n !_isWorker());\r\n}\r\n/** Quick check that indicates the platform *may* be Cordova */\r\nfunction _isLikelyCordova() {\r\n return _isAndroidOrIosCordovaScheme() && typeof document !== 'undefined';\r\n}\r\nasync function _isCordova() {\r\n if (!_isLikelyCordova()) {\r\n return false;\r\n }\r\n return new Promise(resolve => {\r\n const timeoutId = setTimeout(() => {\r\n // We've waited long enough; the telltale Cordova event didn't happen\r\n resolve(false);\r\n }, CORDOVA_ONDEVICEREADY_TIMEOUT_MS);\r\n document.addEventListener('deviceready', () => {\r\n clearTimeout(timeoutId);\r\n resolve(true);\r\n });\r\n });\r\n}\r\nfunction _getSelfWindow() {\r\n return typeof window !== 'undefined' ? window : null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst Persistence = {\r\n LOCAL: 'local',\r\n NONE: 'none',\r\n SESSION: 'session'\r\n};\r\nconst _assert$3 = exp._assert;\r\nconst PERSISTENCE_KEY = 'persistence';\r\n/**\r\n * Validates that an argument is a valid persistence value. If an invalid type\r\n * is specified, an error is thrown synchronously.\r\n */\r\nfunction _validatePersistenceArgument(auth, persistence) {\r\n _assert$3(Object.values(Persistence).includes(persistence), auth, \"invalid-persistence-type\" /* exp.AuthErrorCode.INVALID_PERSISTENCE */);\r\n // Validate if the specified type is supported in the current environment.\r\n if (isReactNative()) {\r\n // This is only supported in a browser.\r\n _assert$3(persistence !== Persistence.SESSION, auth, \"unsupported-persistence-type\" /* exp.AuthErrorCode.UNSUPPORTED_PERSISTENCE */);\r\n return;\r\n }\r\n if (isNode()) {\r\n // Only none is supported in Node.js.\r\n _assert$3(persistence === Persistence.NONE, auth, \"unsupported-persistence-type\" /* exp.AuthErrorCode.UNSUPPORTED_PERSISTENCE */);\r\n return;\r\n }\r\n if (_isWorker()) {\r\n // In a worker environment, either LOCAL or NONE are supported.\r\n // If indexedDB not supported and LOCAL provided, throw an error\r\n _assert$3(persistence === Persistence.NONE ||\r\n (persistence === Persistence.LOCAL && isIndexedDBAvailable()), auth, \"unsupported-persistence-type\" /* exp.AuthErrorCode.UNSUPPORTED_PERSISTENCE */);\r\n return;\r\n }\r\n // This is restricted by what the browser supports.\r\n _assert$3(persistence === Persistence.NONE || _isWebStorageSupported(), auth, \"unsupported-persistence-type\" /* exp.AuthErrorCode.UNSUPPORTED_PERSISTENCE */);\r\n}\r\nasync function _savePersistenceForRedirect(auth) {\r\n await auth._initializationPromise;\r\n const session = getSessionStorageIfAvailable();\r\n const key = exp._persistenceKeyName(PERSISTENCE_KEY, auth.config.apiKey, auth.name);\r\n if (session) {\r\n session.setItem(key, auth._getPersistence());\r\n }\r\n}\r\nfunction _getPersistencesFromRedirect(apiKey, appName) {\r\n const session = getSessionStorageIfAvailable();\r\n if (!session) {\r\n return [];\r\n }\r\n const key = exp._persistenceKeyName(PERSISTENCE_KEY, apiKey, appName);\r\n const persistence = session.getItem(key);\r\n switch (persistence) {\r\n case Persistence.NONE:\r\n return [exp.inMemoryPersistence];\r\n case Persistence.LOCAL:\r\n return [exp.indexedDBLocalPersistence, exp.browserSessionPersistence];\r\n case Persistence.SESSION:\r\n return [exp.browserSessionPersistence];\r\n default:\r\n return [];\r\n }\r\n}\r\n/** Returns session storage, or null if the property access errors */\r\nfunction getSessionStorageIfAvailable() {\r\n var _a;\r\n try {\r\n return ((_a = _getSelfWindow()) === null || _a === void 0 ? void 0 : _a.sessionStorage) || null;\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _assert$2 = exp._assert;\r\n/** Platform-agnostic popup-redirect resolver */\r\nclass CompatPopupRedirectResolver {\r\n constructor() {\r\n // Create both resolvers for dynamic resolution later\r\n this.browserResolver = exp._getInstance(exp.browserPopupRedirectResolver);\r\n this.cordovaResolver = exp._getInstance(exp.cordovaPopupRedirectResolver);\r\n // The actual resolver in use: either browserResolver or cordovaResolver.\r\n this.underlyingResolver = null;\r\n this._redirectPersistence = exp.browserSessionPersistence;\r\n this._completeRedirectFn = exp._getRedirectResult;\r\n this._overrideRedirectResult = exp._overrideRedirectResult;\r\n }\r\n async _initialize(auth) {\r\n await this.selectUnderlyingResolver();\r\n return this.assertedUnderlyingResolver._initialize(auth);\r\n }\r\n async _openPopup(auth, provider, authType, eventId) {\r\n await this.selectUnderlyingResolver();\r\n return this.assertedUnderlyingResolver._openPopup(auth, provider, authType, eventId);\r\n }\r\n async _openRedirect(auth, provider, authType, eventId) {\r\n await this.selectUnderlyingResolver();\r\n return this.assertedUnderlyingResolver._openRedirect(auth, provider, authType, eventId);\r\n }\r\n _isIframeWebStorageSupported(auth, cb) {\r\n this.assertedUnderlyingResolver._isIframeWebStorageSupported(auth, cb);\r\n }\r\n _originValidation(auth) {\r\n return this.assertedUnderlyingResolver._originValidation(auth);\r\n }\r\n get _shouldInitProactively() {\r\n return _isLikelyCordova() || this.browserResolver._shouldInitProactively;\r\n }\r\n get assertedUnderlyingResolver() {\r\n _assert$2(this.underlyingResolver, \"internal-error\" /* exp.AuthErrorCode.INTERNAL_ERROR */);\r\n return this.underlyingResolver;\r\n }\r\n async selectUnderlyingResolver() {\r\n if (this.underlyingResolver) {\r\n return;\r\n }\r\n // We haven't yet determined whether or not we're in Cordova; go ahead\r\n // and determine that state now.\r\n const isCordova = await _isCordova();\r\n this.underlyingResolver = isCordova\r\n ? this.cordovaResolver\r\n : this.browserResolver;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction unwrap(object) {\r\n return object.unwrap();\r\n}\r\nfunction wrapped(object) {\r\n return object.wrapped();\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction credentialFromResponse(userCredential) {\r\n return credentialFromObject(userCredential);\r\n}\r\nfunction attachExtraErrorFields(auth, e) {\r\n var _a;\r\n // The response contains all fields from the server which may or may not\r\n // actually match the underlying type\r\n const response = (_a = e.customData) === null || _a === void 0 ? void 0 : _a._tokenResponse;\r\n if ((e === null || e === void 0 ? void 0 : e.code) === 'auth/multi-factor-auth-required') {\r\n const mfaErr = e;\r\n mfaErr.resolver = new MultiFactorResolver(auth, exp.getMultiFactorResolver(auth, e));\r\n }\r\n else if (response) {\r\n const credential = credentialFromObject(e);\r\n const credErr = e;\r\n if (credential) {\r\n credErr.credential = credential;\r\n credErr.tenantId = response.tenantId || undefined;\r\n credErr.email = response.email || undefined;\r\n credErr.phoneNumber = response.phoneNumber || undefined;\r\n }\r\n }\r\n}\r\nfunction credentialFromObject(object) {\r\n const { _tokenResponse } = (object instanceof FirebaseError ? object.customData : object);\r\n if (!_tokenResponse) {\r\n return null;\r\n }\r\n // Handle phone Auth credential responses, as they have a different format\r\n // from other backend responses (i.e. no providerId). This is also only the\r\n // case for user credentials (does not work for errors).\r\n if (!(object instanceof FirebaseError)) {\r\n if ('temporaryProof' in _tokenResponse && 'phoneNumber' in _tokenResponse) {\r\n return exp.PhoneAuthProvider.credentialFromResult(object);\r\n }\r\n }\r\n const providerId = _tokenResponse.providerId;\r\n // Email and password is not supported as there is no situation where the\r\n // server would return the password to the client.\r\n if (!providerId || providerId === exp.ProviderId.PASSWORD) {\r\n return null;\r\n }\r\n let provider;\r\n switch (providerId) {\r\n case exp.ProviderId.GOOGLE:\r\n provider = exp.GoogleAuthProvider;\r\n break;\r\n case exp.ProviderId.FACEBOOK:\r\n provider = exp.FacebookAuthProvider;\r\n break;\r\n case exp.ProviderId.GITHUB:\r\n provider = exp.GithubAuthProvider;\r\n break;\r\n case exp.ProviderId.TWITTER:\r\n provider = exp.TwitterAuthProvider;\r\n break;\r\n default:\r\n const { oauthIdToken, oauthAccessToken, oauthTokenSecret, pendingToken, nonce } = _tokenResponse;\r\n if (!oauthAccessToken &&\r\n !oauthTokenSecret &&\r\n !oauthIdToken &&\r\n !pendingToken) {\r\n return null;\r\n }\r\n // TODO(avolkovi): uncomment this and get it working with SAML & OIDC\r\n if (pendingToken) {\r\n if (providerId.startsWith('saml.')) {\r\n return exp.SAMLAuthCredential._create(providerId, pendingToken);\r\n }\r\n else {\r\n // OIDC and non-default providers excluding Twitter.\r\n return exp.OAuthCredential._fromParams({\r\n providerId,\r\n signInMethod: providerId,\r\n pendingToken,\r\n idToken: oauthIdToken,\r\n accessToken: oauthAccessToken\r\n });\r\n }\r\n }\r\n return new exp.OAuthProvider(providerId).credential({\r\n idToken: oauthIdToken,\r\n accessToken: oauthAccessToken,\r\n rawNonce: nonce\r\n });\r\n }\r\n return object instanceof FirebaseError\r\n ? provider.credentialFromError(object)\r\n : provider.credentialFromResult(object);\r\n}\r\nfunction convertCredential(auth, credentialPromise) {\r\n return credentialPromise\r\n .catch(e => {\r\n if (e instanceof FirebaseError) {\r\n attachExtraErrorFields(auth, e);\r\n }\r\n throw e;\r\n })\r\n .then(credential => {\r\n const operationType = credential.operationType;\r\n const user = credential.user;\r\n return {\r\n operationType,\r\n credential: credentialFromResponse(credential),\r\n additionalUserInfo: exp.getAdditionalUserInfo(credential),\r\n user: User.getOrCreate(user)\r\n };\r\n });\r\n}\r\nasync function convertConfirmationResult(auth, confirmationResultPromise) {\r\n const confirmationResultExp = await confirmationResultPromise;\r\n return {\r\n verificationId: confirmationResultExp.verificationId,\r\n confirm: (verificationCode) => convertCredential(auth, confirmationResultExp.confirm(verificationCode))\r\n };\r\n}\r\nclass MultiFactorResolver {\r\n constructor(auth, resolver) {\r\n this.resolver = resolver;\r\n this.auth = wrapped(auth);\r\n }\r\n get session() {\r\n return this.resolver.session;\r\n }\r\n get hints() {\r\n return this.resolver.hints;\r\n }\r\n resolveSignIn(assertion) {\r\n return convertCredential(unwrap(this.auth), this.resolver.resolveSignIn(assertion));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass User {\r\n constructor(_delegate) {\r\n this._delegate = _delegate;\r\n this.multiFactor = exp.multiFactor(_delegate);\r\n }\r\n static getOrCreate(user) {\r\n if (!User.USER_MAP.has(user)) {\r\n User.USER_MAP.set(user, new User(user));\r\n }\r\n return User.USER_MAP.get(user);\r\n }\r\n delete() {\r\n return this._delegate.delete();\r\n }\r\n reload() {\r\n return this._delegate.reload();\r\n }\r\n toJSON() {\r\n return this._delegate.toJSON();\r\n }\r\n getIdTokenResult(forceRefresh) {\r\n return this._delegate.getIdTokenResult(forceRefresh);\r\n }\r\n getIdToken(forceRefresh) {\r\n return this._delegate.getIdToken(forceRefresh);\r\n }\r\n linkAndRetrieveDataWithCredential(credential) {\r\n return this.linkWithCredential(credential);\r\n }\r\n async linkWithCredential(credential) {\r\n return convertCredential(this.auth, exp.linkWithCredential(this._delegate, credential));\r\n }\r\n async linkWithPhoneNumber(phoneNumber, applicationVerifier) {\r\n return convertConfirmationResult(this.auth, exp.linkWithPhoneNumber(this._delegate, phoneNumber, applicationVerifier));\r\n }\r\n async linkWithPopup(provider) {\r\n return convertCredential(this.auth, exp.linkWithPopup(this._delegate, provider, CompatPopupRedirectResolver));\r\n }\r\n async linkWithRedirect(provider) {\r\n await _savePersistenceForRedirect(exp._castAuth(this.auth));\r\n return exp.linkWithRedirect(this._delegate, provider, CompatPopupRedirectResolver);\r\n }\r\n reauthenticateAndRetrieveDataWithCredential(credential) {\r\n return this.reauthenticateWithCredential(credential);\r\n }\r\n async reauthenticateWithCredential(credential) {\r\n return convertCredential(this.auth, exp.reauthenticateWithCredential(this._delegate, credential));\r\n }\r\n reauthenticateWithPhoneNumber(phoneNumber, applicationVerifier) {\r\n return convertConfirmationResult(this.auth, exp.reauthenticateWithPhoneNumber(this._delegate, phoneNumber, applicationVerifier));\r\n }\r\n reauthenticateWithPopup(provider) {\r\n return convertCredential(this.auth, exp.reauthenticateWithPopup(this._delegate, provider, CompatPopupRedirectResolver));\r\n }\r\n async reauthenticateWithRedirect(provider) {\r\n await _savePersistenceForRedirect(exp._castAuth(this.auth));\r\n return exp.reauthenticateWithRedirect(this._delegate, provider, CompatPopupRedirectResolver);\r\n }\r\n sendEmailVerification(actionCodeSettings) {\r\n return exp.sendEmailVerification(this._delegate, actionCodeSettings);\r\n }\r\n async unlink(providerId) {\r\n await exp.unlink(this._delegate, providerId);\r\n return this;\r\n }\r\n updateEmail(newEmail) {\r\n return exp.updateEmail(this._delegate, newEmail);\r\n }\r\n updatePassword(newPassword) {\r\n return exp.updatePassword(this._delegate, newPassword);\r\n }\r\n updatePhoneNumber(phoneCredential) {\r\n return exp.updatePhoneNumber(this._delegate, phoneCredential);\r\n }\r\n updateProfile(profile) {\r\n return exp.updateProfile(this._delegate, profile);\r\n }\r\n verifyBeforeUpdateEmail(newEmail, actionCodeSettings) {\r\n return exp.verifyBeforeUpdateEmail(this._delegate, newEmail, actionCodeSettings);\r\n }\r\n get emailVerified() {\r\n return this._delegate.emailVerified;\r\n }\r\n get isAnonymous() {\r\n return this._delegate.isAnonymous;\r\n }\r\n get metadata() {\r\n return this._delegate.metadata;\r\n }\r\n get phoneNumber() {\r\n return this._delegate.phoneNumber;\r\n }\r\n get providerData() {\r\n return this._delegate.providerData;\r\n }\r\n get refreshToken() {\r\n return this._delegate.refreshToken;\r\n }\r\n get tenantId() {\r\n return this._delegate.tenantId;\r\n }\r\n get displayName() {\r\n return this._delegate.displayName;\r\n }\r\n get email() {\r\n return this._delegate.email;\r\n }\r\n get photoURL() {\r\n return this._delegate.photoURL;\r\n }\r\n get providerId() {\r\n return this._delegate.providerId;\r\n }\r\n get uid() {\r\n return this._delegate.uid;\r\n }\r\n get auth() {\r\n return this._delegate.auth;\r\n }\r\n}\r\n// Maintain a map so that there's always a 1:1 mapping between new User and\r\n// legacy compat users\r\nUser.USER_MAP = new WeakMap();\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _assert$1 = exp._assert;\r\nclass Auth {\r\n constructor(app, provider) {\r\n this.app = app;\r\n if (provider.isInitialized()) {\r\n this._delegate = provider.getImmediate();\r\n this.linkUnderlyingAuth();\r\n return;\r\n }\r\n const { apiKey } = app.options;\r\n // TODO: platform needs to be determined using heuristics\r\n _assert$1(apiKey, \"invalid-api-key\" /* exp.AuthErrorCode.INVALID_API_KEY */, {\r\n appName: app.name\r\n });\r\n // TODO: platform needs to be determined using heuristics\r\n _assert$1(apiKey, \"invalid-api-key\" /* exp.AuthErrorCode.INVALID_API_KEY */, {\r\n appName: app.name\r\n });\r\n // Only use a popup/redirect resolver in browser environments\r\n const resolver = typeof window !== 'undefined' ? CompatPopupRedirectResolver : undefined;\r\n this._delegate = provider.initialize({\r\n options: {\r\n persistence: buildPersistenceHierarchy(apiKey, app.name),\r\n popupRedirectResolver: resolver\r\n }\r\n });\r\n this._delegate._updateErrorMap(exp.debugErrorMap);\r\n this.linkUnderlyingAuth();\r\n }\r\n get emulatorConfig() {\r\n return this._delegate.emulatorConfig;\r\n }\r\n get currentUser() {\r\n if (!this._delegate.currentUser) {\r\n return null;\r\n }\r\n return User.getOrCreate(this._delegate.currentUser);\r\n }\r\n get languageCode() {\r\n return this._delegate.languageCode;\r\n }\r\n set languageCode(languageCode) {\r\n this._delegate.languageCode = languageCode;\r\n }\r\n get settings() {\r\n return this._delegate.settings;\r\n }\r\n get tenantId() {\r\n return this._delegate.tenantId;\r\n }\r\n set tenantId(tid) {\r\n this._delegate.tenantId = tid;\r\n }\r\n useDeviceLanguage() {\r\n this._delegate.useDeviceLanguage();\r\n }\r\n signOut() {\r\n return this._delegate.signOut();\r\n }\r\n useEmulator(url, options) {\r\n exp.connectAuthEmulator(this._delegate, url, options);\r\n }\r\n applyActionCode(code) {\r\n return exp.applyActionCode(this._delegate, code);\r\n }\r\n checkActionCode(code) {\r\n return exp.checkActionCode(this._delegate, code);\r\n }\r\n confirmPasswordReset(code, newPassword) {\r\n return exp.confirmPasswordReset(this._delegate, code, newPassword);\r\n }\r\n async createUserWithEmailAndPassword(email, password) {\r\n return convertCredential(this._delegate, exp.createUserWithEmailAndPassword(this._delegate, email, password));\r\n }\r\n fetchProvidersForEmail(email) {\r\n return this.fetchSignInMethodsForEmail(email);\r\n }\r\n fetchSignInMethodsForEmail(email) {\r\n return exp.fetchSignInMethodsForEmail(this._delegate, email);\r\n }\r\n isSignInWithEmailLink(emailLink) {\r\n return exp.isSignInWithEmailLink(this._delegate, emailLink);\r\n }\r\n async getRedirectResult() {\r\n _assert$1(_isPopupRedirectSupported(), this._delegate, \"operation-not-supported-in-this-environment\" /* exp.AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n const credential = await exp.getRedirectResult(this._delegate, CompatPopupRedirectResolver);\r\n if (!credential) {\r\n return {\r\n credential: null,\r\n user: null\r\n };\r\n }\r\n return convertCredential(this._delegate, Promise.resolve(credential));\r\n }\r\n // This function should only be called by frameworks (e.g. FirebaseUI-web) to log their usage.\r\n // It is not intended for direct use by developer apps. NO jsdoc here to intentionally leave it\r\n // out of autogenerated documentation pages to reduce accidental misuse.\r\n addFrameworkForLogging(framework) {\r\n exp.addFrameworkForLogging(this._delegate, framework);\r\n }\r\n onAuthStateChanged(nextOrObserver, errorFn, completed) {\r\n const { next, error, complete } = wrapObservers(nextOrObserver, errorFn, completed);\r\n return this._delegate.onAuthStateChanged(next, error, complete);\r\n }\r\n onIdTokenChanged(nextOrObserver, errorFn, completed) {\r\n const { next, error, complete } = wrapObservers(nextOrObserver, errorFn, completed);\r\n return this._delegate.onIdTokenChanged(next, error, complete);\r\n }\r\n sendSignInLinkToEmail(email, actionCodeSettings) {\r\n return exp.sendSignInLinkToEmail(this._delegate, email, actionCodeSettings);\r\n }\r\n sendPasswordResetEmail(email, actionCodeSettings) {\r\n return exp.sendPasswordResetEmail(this._delegate, email, actionCodeSettings || undefined);\r\n }\r\n async setPersistence(persistence) {\r\n _validatePersistenceArgument(this._delegate, persistence);\r\n let converted;\r\n switch (persistence) {\r\n case Persistence.SESSION:\r\n converted = exp.browserSessionPersistence;\r\n break;\r\n case Persistence.LOCAL:\r\n // Not using isIndexedDBAvailable() since it only checks if indexedDB is defined.\r\n const isIndexedDBFullySupported = await exp\r\n ._getInstance(exp.indexedDBLocalPersistence)\r\n ._isAvailable();\r\n converted = isIndexedDBFullySupported\r\n ? exp.indexedDBLocalPersistence\r\n : exp.browserLocalPersistence;\r\n break;\r\n case Persistence.NONE:\r\n converted = exp.inMemoryPersistence;\r\n break;\r\n default:\r\n return exp._fail(\"argument-error\" /* exp.AuthErrorCode.ARGUMENT_ERROR */, {\r\n appName: this._delegate.name\r\n });\r\n }\r\n return this._delegate.setPersistence(converted);\r\n }\r\n signInAndRetrieveDataWithCredential(credential) {\r\n return this.signInWithCredential(credential);\r\n }\r\n signInAnonymously() {\r\n return convertCredential(this._delegate, exp.signInAnonymously(this._delegate));\r\n }\r\n signInWithCredential(credential) {\r\n return convertCredential(this._delegate, exp.signInWithCredential(this._delegate, credential));\r\n }\r\n signInWithCustomToken(token) {\r\n return convertCredential(this._delegate, exp.signInWithCustomToken(this._delegate, token));\r\n }\r\n signInWithEmailAndPassword(email, password) {\r\n return convertCredential(this._delegate, exp.signInWithEmailAndPassword(this._delegate, email, password));\r\n }\r\n signInWithEmailLink(email, emailLink) {\r\n return convertCredential(this._delegate, exp.signInWithEmailLink(this._delegate, email, emailLink));\r\n }\r\n signInWithPhoneNumber(phoneNumber, applicationVerifier) {\r\n return convertConfirmationResult(this._delegate, exp.signInWithPhoneNumber(this._delegate, phoneNumber, applicationVerifier));\r\n }\r\n async signInWithPopup(provider) {\r\n _assert$1(_isPopupRedirectSupported(), this._delegate, \"operation-not-supported-in-this-environment\" /* exp.AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n return convertCredential(this._delegate, exp.signInWithPopup(this._delegate, provider, CompatPopupRedirectResolver));\r\n }\r\n async signInWithRedirect(provider) {\r\n _assert$1(_isPopupRedirectSupported(), this._delegate, \"operation-not-supported-in-this-environment\" /* exp.AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n await _savePersistenceForRedirect(this._delegate);\r\n return exp.signInWithRedirect(this._delegate, provider, CompatPopupRedirectResolver);\r\n }\r\n updateCurrentUser(user) {\r\n // remove ts-ignore once overloads are defined for exp functions to accept compat objects\r\n // @ts-ignore\r\n return this._delegate.updateCurrentUser(user);\r\n }\r\n verifyPasswordResetCode(code) {\r\n return exp.verifyPasswordResetCode(this._delegate, code);\r\n }\r\n unwrap() {\r\n return this._delegate;\r\n }\r\n _delete() {\r\n return this._delegate._delete();\r\n }\r\n linkUnderlyingAuth() {\r\n this._delegate.wrapped = () => this;\r\n }\r\n}\r\nAuth.Persistence = Persistence;\r\nfunction wrapObservers(nextOrObserver, error, complete) {\r\n let next = nextOrObserver;\r\n if (typeof nextOrObserver !== 'function') {\r\n ({ next, error, complete } = nextOrObserver);\r\n }\r\n // We know 'next' is now a function\r\n const oldNext = next;\r\n const newNext = (user) => oldNext(user && User.getOrCreate(user));\r\n return {\r\n next: newNext,\r\n error: error,\r\n complete\r\n };\r\n}\r\nfunction buildPersistenceHierarchy(apiKey, appName) {\r\n // Note this is slightly different behavior: in this case, the stored\r\n // persistence is checked *first* rather than last. This is because we want\r\n // to prefer stored persistence type in the hierarchy. This is an empty\r\n // array if window is not available or there is no pending redirect\r\n const persistences = _getPersistencesFromRedirect(apiKey, appName);\r\n // If \"self\" is available, add indexedDB\r\n if (typeof self !== 'undefined' &&\r\n !persistences.includes(exp.indexedDBLocalPersistence)) {\r\n persistences.push(exp.indexedDBLocalPersistence);\r\n }\r\n // If \"window\" is available, add HTML Storage persistences\r\n if (typeof window !== 'undefined') {\r\n for (const persistence of [\r\n exp.browserLocalPersistence,\r\n exp.browserSessionPersistence\r\n ]) {\r\n if (!persistences.includes(persistence)) {\r\n persistences.push(persistence);\r\n }\r\n }\r\n }\r\n // Add in-memory as a final fallback\r\n if (!persistences.includes(exp.inMemoryPersistence)) {\r\n persistences.push(exp.inMemoryPersistence);\r\n }\r\n return persistences;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PhoneAuthProvider {\r\n constructor() {\r\n this.providerId = 'phone';\r\n // TODO: remove ts-ignore when moving types from auth-types to auth-compat\r\n // @ts-ignore\r\n this._delegate = new exp.PhoneAuthProvider(unwrap(firebase.auth()));\r\n }\r\n static credential(verificationId, verificationCode) {\r\n return exp.PhoneAuthProvider.credential(verificationId, verificationCode);\r\n }\r\n verifyPhoneNumber(phoneInfoOptions, applicationVerifier) {\r\n return this._delegate.verifyPhoneNumber(\r\n // The implementation matches but the types are subtly incompatible\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n phoneInfoOptions, applicationVerifier);\r\n }\r\n unwrap() {\r\n return this._delegate;\r\n }\r\n}\r\nPhoneAuthProvider.PHONE_SIGN_IN_METHOD = exp.PhoneAuthProvider.PHONE_SIGN_IN_METHOD;\r\nPhoneAuthProvider.PROVIDER_ID = exp.PhoneAuthProvider.PROVIDER_ID;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _assert = exp._assert;\r\nclass RecaptchaVerifier {\r\n constructor(container, parameters, app = firebase.app()) {\r\n var _a;\r\n // API key is required for web client RPC calls.\r\n _assert((_a = app.options) === null || _a === void 0 ? void 0 : _a.apiKey, \"invalid-api-key\" /* exp.AuthErrorCode.INVALID_API_KEY */, {\r\n appName: app.name\r\n });\r\n this._delegate = new exp.RecaptchaVerifier(container, \r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n parameters, \r\n // TODO: remove ts-ignore when moving types from auth-types to auth-compat\r\n // @ts-ignore\r\n app.auth());\r\n this.type = this._delegate.type;\r\n }\r\n clear() {\r\n this._delegate.clear();\r\n }\r\n render() {\r\n return this._delegate.render();\r\n }\r\n verify() {\r\n return this._delegate.verify();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst AUTH_TYPE = 'auth-compat';\r\n// Create auth components to register with firebase.\r\n// Provides Auth public APIs.\r\nfunction registerAuthCompat(instance) {\r\n instance.INTERNAL.registerComponent(new Component(AUTH_TYPE, container => {\r\n // getImmediate for FirebaseApp will always succeed\r\n const app = container.getProvider('app-compat').getImmediate();\r\n const authProvider = container.getProvider('auth');\r\n return new Auth(app, authProvider);\r\n }, \"PUBLIC\" /* ComponentType.PUBLIC */)\r\n .setServiceProps({\r\n ActionCodeInfo: {\r\n Operation: {\r\n EMAIL_SIGNIN: exp.ActionCodeOperation.EMAIL_SIGNIN,\r\n PASSWORD_RESET: exp.ActionCodeOperation.PASSWORD_RESET,\r\n RECOVER_EMAIL: exp.ActionCodeOperation.RECOVER_EMAIL,\r\n REVERT_SECOND_FACTOR_ADDITION: exp.ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION,\r\n VERIFY_AND_CHANGE_EMAIL: exp.ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL,\r\n VERIFY_EMAIL: exp.ActionCodeOperation.VERIFY_EMAIL\r\n }\r\n },\r\n EmailAuthProvider: exp.EmailAuthProvider,\r\n FacebookAuthProvider: exp.FacebookAuthProvider,\r\n GithubAuthProvider: exp.GithubAuthProvider,\r\n GoogleAuthProvider: exp.GoogleAuthProvider,\r\n OAuthProvider: exp.OAuthProvider,\r\n SAMLAuthProvider: exp.SAMLAuthProvider,\r\n PhoneAuthProvider: PhoneAuthProvider,\r\n PhoneMultiFactorGenerator: exp.PhoneMultiFactorGenerator,\r\n RecaptchaVerifier: RecaptchaVerifier,\r\n TwitterAuthProvider: exp.TwitterAuthProvider,\r\n Auth,\r\n AuthCredential: exp.AuthCredential,\r\n Error: FirebaseError\r\n })\r\n .setInstantiationMode(\"LAZY\" /* InstantiationMode.LAZY */)\r\n .setMultipleInstances(false));\r\n instance.registerVersion(name, version);\r\n}\r\nregisterAuthCompat(firebase);\n","import { _getProvider, getApp, SDK_VERSION as SDK_VERSION$1, _registerComponent, registerVersion } from '@firebase/app';\nimport { Component } from '@firebase/component';\nimport { stringify, jsonEval, contains, assert, isNodeSdk, stringToByteArray, Sha1, base64, deepCopy, base64Encode, isMobileCordova, stringLength, Deferred, safeGet, isAdmin, isValidFormat, isEmpty, isReactNative, assertionError, map, querystring, errorPrefix, getModularInstance, getDefaultEmulatorHostnameAndPort, createMockUserToken } from '@firebase/util';\nimport { Logger, LogLevel } from '@firebase/logger';\n\nconst name = \"@firebase/database\";\nconst version = \"0.14.4\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** The semver (www.semver.org) version of the SDK. */\r\nlet SDK_VERSION = '';\r\n/**\r\n * SDK_VERSION should be set before any database instance is created\r\n * @internal\r\n */\r\nfunction setSDKVersion(version) {\r\n SDK_VERSION = version;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Wraps a DOM Storage object and:\r\n * - automatically encode objects as JSON strings before storing them to allow us to store arbitrary types.\r\n * - prefixes names with \"firebase:\" to avoid collisions with app data.\r\n *\r\n * We automatically (see storage.js) create two such wrappers, one for sessionStorage,\r\n * and one for localStorage.\r\n *\r\n */\r\nclass DOMStorageWrapper {\r\n /**\r\n * @param domStorage_ - The underlying storage object (e.g. localStorage or sessionStorage)\r\n */\r\n constructor(domStorage_) {\r\n this.domStorage_ = domStorage_;\r\n // Use a prefix to avoid collisions with other stuff saved by the app.\r\n this.prefix_ = 'firebase:';\r\n }\r\n /**\r\n * @param key - The key to save the value under\r\n * @param value - The value being stored, or null to remove the key.\r\n */\r\n set(key, value) {\r\n if (value == null) {\r\n this.domStorage_.removeItem(this.prefixedName_(key));\r\n }\r\n else {\r\n this.domStorage_.setItem(this.prefixedName_(key), stringify(value));\r\n }\r\n }\r\n /**\r\n * @returns The value that was stored under this key, or null\r\n */\r\n get(key) {\r\n const storedVal = this.domStorage_.getItem(this.prefixedName_(key));\r\n if (storedVal == null) {\r\n return null;\r\n }\r\n else {\r\n return jsonEval(storedVal);\r\n }\r\n }\r\n remove(key) {\r\n this.domStorage_.removeItem(this.prefixedName_(key));\r\n }\r\n prefixedName_(name) {\r\n return this.prefix_ + name;\r\n }\r\n toString() {\r\n return this.domStorage_.toString();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An in-memory storage implementation that matches the API of DOMStorageWrapper\r\n * (TODO: create interface for both to implement).\r\n */\r\nclass MemoryStorage {\r\n constructor() {\r\n this.cache_ = {};\r\n this.isInMemoryStorage = true;\r\n }\r\n set(key, value) {\r\n if (value == null) {\r\n delete this.cache_[key];\r\n }\r\n else {\r\n this.cache_[key] = value;\r\n }\r\n }\r\n get(key) {\r\n if (contains(this.cache_, key)) {\r\n return this.cache_[key];\r\n }\r\n return null;\r\n }\r\n remove(key) {\r\n delete this.cache_[key];\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Helper to create a DOMStorageWrapper or else fall back to MemoryStorage.\r\n * TODO: Once MemoryStorage and DOMStorageWrapper have a shared interface this method annotation should change\r\n * to reflect this type\r\n *\r\n * @param domStorageName - Name of the underlying storage object\r\n * (e.g. 'localStorage' or 'sessionStorage').\r\n * @returns Turning off type information until a common interface is defined.\r\n */\r\nconst createStoragefor = function (domStorageName) {\r\n try {\r\n // NOTE: just accessing \"localStorage\" or \"window['localStorage']\" may throw a security exception,\r\n // so it must be inside the try/catch.\r\n if (typeof window !== 'undefined' &&\r\n typeof window[domStorageName] !== 'undefined') {\r\n // Need to test cache. Just because it's here doesn't mean it works\r\n const domStorage = window[domStorageName];\r\n domStorage.setItem('firebase:sentinel', 'cache');\r\n domStorage.removeItem('firebase:sentinel');\r\n return new DOMStorageWrapper(domStorage);\r\n }\r\n }\r\n catch (e) { }\r\n // Failed to create wrapper. Just return in-memory storage.\r\n // TODO: log?\r\n return new MemoryStorage();\r\n};\r\n/** A storage object that lasts across sessions */\r\nconst PersistentStorage = createStoragefor('localStorage');\r\n/** A storage object that only lasts one session */\r\nconst SessionStorage = createStoragefor('sessionStorage');\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logClient = new Logger('@firebase/database');\r\n/**\r\n * Returns a locally-unique ID (generated by just incrementing up from 0 each time its called).\r\n */\r\nconst LUIDGenerator = (function () {\r\n let id = 1;\r\n return function () {\r\n return id++;\r\n };\r\n})();\r\n/**\r\n * Sha1 hash of the input string\r\n * @param str - The string to hash\r\n * @returns {!string} The resulting hash\r\n */\r\nconst sha1 = function (str) {\r\n const utf8Bytes = stringToByteArray(str);\r\n const sha1 = new Sha1();\r\n sha1.update(utf8Bytes);\r\n const sha1Bytes = sha1.digest();\r\n return base64.encodeByteArray(sha1Bytes);\r\n};\r\nconst buildLogMessage_ = function (...varArgs) {\r\n let message = '';\r\n for (let i = 0; i < varArgs.length; i++) {\r\n const arg = varArgs[i];\r\n if (Array.isArray(arg) ||\r\n (arg &&\r\n typeof arg === 'object' &&\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n typeof arg.length === 'number')) {\r\n message += buildLogMessage_.apply(null, arg);\r\n }\r\n else if (typeof arg === 'object') {\r\n message += stringify(arg);\r\n }\r\n else {\r\n message += arg;\r\n }\r\n message += ' ';\r\n }\r\n return message;\r\n};\r\n/**\r\n * Use this for all debug messages in Firebase.\r\n */\r\nlet logger = null;\r\n/**\r\n * Flag to check for log availability on first log message\r\n */\r\nlet firstLog_ = true;\r\n/**\r\n * The implementation of Firebase.enableLogging (defined here to break dependencies)\r\n * @param logger_ - A flag to turn on logging, or a custom logger\r\n * @param persistent - Whether or not to persist logging settings across refreshes\r\n */\r\nconst enableLogging$1 = function (logger_, persistent) {\r\n assert(!persistent || logger_ === true || logger_ === false, \"Can't turn on custom loggers persistently.\");\r\n if (logger_ === true) {\r\n logClient.logLevel = LogLevel.VERBOSE;\r\n logger = logClient.log.bind(logClient);\r\n if (persistent) {\r\n SessionStorage.set('logging_enabled', true);\r\n }\r\n }\r\n else if (typeof logger_ === 'function') {\r\n logger = logger_;\r\n }\r\n else {\r\n logger = null;\r\n SessionStorage.remove('logging_enabled');\r\n }\r\n};\r\nconst log = function (...varArgs) {\r\n if (firstLog_ === true) {\r\n firstLog_ = false;\r\n if (logger === null && SessionStorage.get('logging_enabled') === true) {\r\n enableLogging$1(true);\r\n }\r\n }\r\n if (logger) {\r\n const message = buildLogMessage_.apply(null, varArgs);\r\n logger(message);\r\n }\r\n};\r\nconst logWrapper = function (prefix) {\r\n return function (...varArgs) {\r\n log(prefix, ...varArgs);\r\n };\r\n};\r\nconst error = function (...varArgs) {\r\n const message = 'FIREBASE INTERNAL ERROR: ' + buildLogMessage_(...varArgs);\r\n logClient.error(message);\r\n};\r\nconst fatal = function (...varArgs) {\r\n const message = `FIREBASE FATAL ERROR: ${buildLogMessage_(...varArgs)}`;\r\n logClient.error(message);\r\n throw new Error(message);\r\n};\r\nconst warn = function (...varArgs) {\r\n const message = 'FIREBASE WARNING: ' + buildLogMessage_(...varArgs);\r\n logClient.warn(message);\r\n};\r\n/**\r\n * Logs a warning if the containing page uses https. Called when a call to new Firebase\r\n * does not use https.\r\n */\r\nconst warnIfPageIsSecure = function () {\r\n // Be very careful accessing browser globals. Who knows what may or may not exist.\r\n if (typeof window !== 'undefined' &&\r\n window.location &&\r\n window.location.protocol &&\r\n window.location.protocol.indexOf('https:') !== -1) {\r\n warn('Insecure Firebase access from a secure page. ' +\r\n 'Please use https in calls to new Firebase().');\r\n }\r\n};\r\n/**\r\n * Returns true if data is NaN, or +/- Infinity.\r\n */\r\nconst isInvalidJSONNumber = function (data) {\r\n return (typeof data === 'number' &&\r\n (data !== data || // NaN\r\n data === Number.POSITIVE_INFINITY ||\r\n data === Number.NEGATIVE_INFINITY));\r\n};\r\nconst executeWhenDOMReady = function (fn) {\r\n if (isNodeSdk() || document.readyState === 'complete') {\r\n fn();\r\n }\r\n else {\r\n // Modeled after jQuery. Try DOMContentLoaded and onreadystatechange (which\r\n // fire before onload), but fall back to onload.\r\n let called = false;\r\n const wrappedFn = function () {\r\n if (!document.body) {\r\n setTimeout(wrappedFn, Math.floor(10));\r\n return;\r\n }\r\n if (!called) {\r\n called = true;\r\n fn();\r\n }\r\n };\r\n if (document.addEventListener) {\r\n document.addEventListener('DOMContentLoaded', wrappedFn, false);\r\n // fallback to onload.\r\n window.addEventListener('load', wrappedFn, false);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }\r\n else if (document.attachEvent) {\r\n // IE.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n document.attachEvent('onreadystatechange', () => {\r\n if (document.readyState === 'complete') {\r\n wrappedFn();\r\n }\r\n });\r\n // fallback to onload.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n window.attachEvent('onload', wrappedFn);\r\n // jQuery has an extra hack for IE that we could employ (based on\r\n // http://javascript.nwbox.com/IEContentLoaded/) But it looks really old.\r\n // I'm hoping we don't need it.\r\n }\r\n }\r\n};\r\n/**\r\n * Minimum key name. Invalid for actual data, used as a marker to sort before any valid names\r\n */\r\nconst MIN_NAME = '[MIN_NAME]';\r\n/**\r\n * Maximum key name. Invalid for actual data, used as a marker to sort above any valid names\r\n */\r\nconst MAX_NAME = '[MAX_NAME]';\r\n/**\r\n * Compares valid Firebase key names, plus min and max name\r\n */\r\nconst nameCompare = function (a, b) {\r\n if (a === b) {\r\n return 0;\r\n }\r\n else if (a === MIN_NAME || b === MAX_NAME) {\r\n return -1;\r\n }\r\n else if (b === MIN_NAME || a === MAX_NAME) {\r\n return 1;\r\n }\r\n else {\r\n const aAsInt = tryParseInt(a), bAsInt = tryParseInt(b);\r\n if (aAsInt !== null) {\r\n if (bAsInt !== null) {\r\n return aAsInt - bAsInt === 0 ? a.length - b.length : aAsInt - bAsInt;\r\n }\r\n else {\r\n return -1;\r\n }\r\n }\r\n else if (bAsInt !== null) {\r\n return 1;\r\n }\r\n else {\r\n return a < b ? -1 : 1;\r\n }\r\n }\r\n};\r\n/**\r\n * @returns {!number} comparison result.\r\n */\r\nconst stringCompare = function (a, b) {\r\n if (a === b) {\r\n return 0;\r\n }\r\n else if (a < b) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n};\r\nconst requireKey = function (key, obj) {\r\n if (obj && key in obj) {\r\n return obj[key];\r\n }\r\n else {\r\n throw new Error('Missing required key (' + key + ') in object: ' + stringify(obj));\r\n }\r\n};\r\nconst ObjectToUniqueKey = function (obj) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return stringify(obj);\r\n }\r\n const keys = [];\r\n // eslint-disable-next-line guard-for-in\r\n for (const k in obj) {\r\n keys.push(k);\r\n }\r\n // Export as json, but with the keys sorted.\r\n keys.sort();\r\n let key = '{';\r\n for (let i = 0; i < keys.length; i++) {\r\n if (i !== 0) {\r\n key += ',';\r\n }\r\n key += stringify(keys[i]);\r\n key += ':';\r\n key += ObjectToUniqueKey(obj[keys[i]]);\r\n }\r\n key += '}';\r\n return key;\r\n};\r\n/**\r\n * Splits a string into a number of smaller segments of maximum size\r\n * @param str - The string\r\n * @param segsize - The maximum number of chars in the string.\r\n * @returns The string, split into appropriately-sized chunks\r\n */\r\nconst splitStringBySize = function (str, segsize) {\r\n const len = str.length;\r\n if (len <= segsize) {\r\n return [str];\r\n }\r\n const dataSegs = [];\r\n for (let c = 0; c < len; c += segsize) {\r\n if (c + segsize > len) {\r\n dataSegs.push(str.substring(c, len));\r\n }\r\n else {\r\n dataSegs.push(str.substring(c, c + segsize));\r\n }\r\n }\r\n return dataSegs;\r\n};\r\n/**\r\n * Apply a function to each (key, value) pair in an object or\r\n * apply a function to each (index, value) pair in an array\r\n * @param obj - The object or array to iterate over\r\n * @param fn - The function to apply\r\n */\r\nfunction each(obj, fn) {\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn(key, obj[key]);\r\n }\r\n }\r\n}\r\n/**\r\n * Borrowed from http://hg.secondlife.com/llsd/src/tip/js/typedarray.js (MIT License)\r\n * I made one modification at the end and removed the NaN / Infinity\r\n * handling (since it seemed broken [caused an overflow] and we don't need it). See MJL comments.\r\n * @param v - A double\r\n *\r\n */\r\nconst doubleToIEEE754String = function (v) {\r\n assert(!isInvalidJSONNumber(v), 'Invalid JSON number'); // MJL\r\n const ebits = 11, fbits = 52;\r\n const bias = (1 << (ebits - 1)) - 1;\r\n let s, e, f, ln, i;\r\n // Compute sign, exponent, fraction\r\n // Skip NaN / Infinity handling --MJL.\r\n if (v === 0) {\r\n e = 0;\r\n f = 0;\r\n s = 1 / v === -Infinity ? 1 : 0;\r\n }\r\n else {\r\n s = v < 0;\r\n v = Math.abs(v);\r\n if (v >= Math.pow(2, 1 - bias)) {\r\n // Normalized\r\n ln = Math.min(Math.floor(Math.log(v) / Math.LN2), bias);\r\n e = ln + bias;\r\n f = Math.round(v * Math.pow(2, fbits - ln) - Math.pow(2, fbits));\r\n }\r\n else {\r\n // Denormalized\r\n e = 0;\r\n f = Math.round(v / Math.pow(2, 1 - bias - fbits));\r\n }\r\n }\r\n // Pack sign, exponent, fraction\r\n const bits = [];\r\n for (i = fbits; i; i -= 1) {\r\n bits.push(f % 2 ? 1 : 0);\r\n f = Math.floor(f / 2);\r\n }\r\n for (i = ebits; i; i -= 1) {\r\n bits.push(e % 2 ? 1 : 0);\r\n e = Math.floor(e / 2);\r\n }\r\n bits.push(s ? 1 : 0);\r\n bits.reverse();\r\n const str = bits.join('');\r\n // Return the data as a hex string. --MJL\r\n let hexByteString = '';\r\n for (i = 0; i < 64; i += 8) {\r\n let hexByte = parseInt(str.substr(i, 8), 2).toString(16);\r\n if (hexByte.length === 1) {\r\n hexByte = '0' + hexByte;\r\n }\r\n hexByteString = hexByteString + hexByte;\r\n }\r\n return hexByteString.toLowerCase();\r\n};\r\n/**\r\n * Used to detect if we're in a Chrome content script (which executes in an\r\n * isolated environment where long-polling doesn't work).\r\n */\r\nconst isChromeExtensionContentScript = function () {\r\n return !!(typeof window === 'object' &&\r\n window['chrome'] &&\r\n window['chrome']['extension'] &&\r\n !/^chrome/.test(window.location.href));\r\n};\r\n/**\r\n * Used to detect if we're in a Windows 8 Store app.\r\n */\r\nconst isWindowsStoreApp = function () {\r\n // Check for the presence of a couple WinRT globals\r\n return typeof Windows === 'object' && typeof Windows.UI === 'object';\r\n};\r\n/**\r\n * Converts a server error code to a Javascript Error\r\n */\r\nfunction errorForServerCode(code, query) {\r\n let reason = 'Unknown Error';\r\n if (code === 'too_big') {\r\n reason =\r\n 'The data requested exceeds the maximum size ' +\r\n 'that can be accessed with a single request.';\r\n }\r\n else if (code === 'permission_denied') {\r\n reason = \"Client doesn't have permission to access the desired data.\";\r\n }\r\n else if (code === 'unavailable') {\r\n reason = 'The service is unavailable';\r\n }\r\n const error = new Error(code + ' at ' + query._path.toString() + ': ' + reason);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error.code = code.toUpperCase();\r\n return error;\r\n}\r\n/**\r\n * Used to test for integer-looking strings\r\n */\r\nconst INTEGER_REGEXP_ = new RegExp('^-?(0*)\\\\d{1,10}$');\r\n/**\r\n * For use in keys, the minimum possible 32-bit integer.\r\n */\r\nconst INTEGER_32_MIN = -2147483648;\r\n/**\r\n * For use in kyes, the maximum possible 32-bit integer.\r\n */\r\nconst INTEGER_32_MAX = 2147483647;\r\n/**\r\n * If the string contains a 32-bit integer, return it. Else return null.\r\n */\r\nconst tryParseInt = function (str) {\r\n if (INTEGER_REGEXP_.test(str)) {\r\n const intVal = Number(str);\r\n if (intVal >= INTEGER_32_MIN && intVal <= INTEGER_32_MAX) {\r\n return intVal;\r\n }\r\n }\r\n return null;\r\n};\r\n/**\r\n * Helper to run some code but catch any exceptions and re-throw them later.\r\n * Useful for preventing user callbacks from breaking internal code.\r\n *\r\n * Re-throwing the exception from a setTimeout is a little evil, but it's very\r\n * convenient (we don't have to try to figure out when is a safe point to\r\n * re-throw it), and the behavior seems reasonable:\r\n *\r\n * * If you aren't pausing on exceptions, you get an error in the console with\r\n * the correct stack trace.\r\n * * If you're pausing on all exceptions, the debugger will pause on your\r\n * exception and then again when we rethrow it.\r\n * * If you're only pausing on uncaught exceptions, the debugger will only pause\r\n * on us re-throwing it.\r\n *\r\n * @param fn - The code to guard.\r\n */\r\nconst exceptionGuard = function (fn) {\r\n try {\r\n fn();\r\n }\r\n catch (e) {\r\n // Re-throw exception when it's safe.\r\n setTimeout(() => {\r\n // It used to be that \"throw e\" would result in a good console error with\r\n // relevant context, but as of Chrome 39, you just get the firebase.js\r\n // file/line number where we re-throw it, which is useless. So we log\r\n // e.stack explicitly.\r\n const stack = e.stack || '';\r\n warn('Exception was thrown by user callback.', stack);\r\n throw e;\r\n }, Math.floor(0));\r\n }\r\n};\r\n/**\r\n * @returns {boolean} true if we think we're currently being crawled.\r\n */\r\nconst beingCrawled = function () {\r\n const userAgent = (typeof window === 'object' &&\r\n window['navigator'] &&\r\n window['navigator']['userAgent']) ||\r\n '';\r\n // For now we whitelist the most popular crawlers. We should refine this to be the set of crawlers we\r\n // believe to support JavaScript/AJAX rendering.\r\n // NOTE: Google Webmaster Tools doesn't really belong, but their \"This is how a visitor to your website\r\n // would have seen the page\" is flaky if we don't treat it as a crawler.\r\n return (userAgent.search(/googlebot|google webmaster tools|bingbot|yahoo! slurp|baiduspider|yandexbot|duckduckbot/i) >= 0);\r\n};\r\n/**\r\n * Same as setTimeout() except on Node.JS it will /not/ prevent the process from exiting.\r\n *\r\n * It is removed with clearTimeout() as normal.\r\n *\r\n * @param fn - Function to run.\r\n * @param time - Milliseconds to wait before running.\r\n * @returns The setTimeout() return value.\r\n */\r\nconst setTimeoutNonBlocking = function (fn, time) {\r\n const timeout = setTimeout(fn, time);\r\n // Note: at the time of this comment, unrefTimer is under the unstable set of APIs. Run with --unstable to enable the API.\r\n if (typeof timeout === 'number' &&\r\n // @ts-ignore Is only defined in Deno environments.\r\n typeof Deno !== 'undefined' &&\r\n // @ts-ignore Deno and unrefTimer are only defined in Deno environments.\r\n Deno['unrefTimer']) {\r\n // @ts-ignore Deno and unrefTimer are only defined in Deno environments.\r\n Deno.unrefTimer(timeout);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }\r\n else if (typeof timeout === 'object' && timeout['unref']) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n timeout['unref']();\r\n }\r\n return timeout;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Abstraction around AppCheck's token fetching capabilities.\r\n */\r\nclass AppCheckTokenProvider {\r\n constructor(appName_, appCheckProvider) {\r\n this.appName_ = appName_;\r\n this.appCheckProvider = appCheckProvider;\r\n this.appCheck = appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.getImmediate({ optional: true });\r\n if (!this.appCheck) {\r\n appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.get().then(appCheck => (this.appCheck = appCheck));\r\n }\r\n }\r\n getToken(forceRefresh) {\r\n if (!this.appCheck) {\r\n return new Promise((resolve, reject) => {\r\n // Support delayed initialization of FirebaseAppCheck. This allows our\r\n // customers to initialize the RTDB SDK before initializing Firebase\r\n // AppCheck and ensures that all requests are authenticated if a token\r\n // becomes available before the timoeout below expires.\r\n setTimeout(() => {\r\n if (this.appCheck) {\r\n this.getToken(forceRefresh).then(resolve, reject);\r\n }\r\n else {\r\n resolve(null);\r\n }\r\n }, 0);\r\n });\r\n }\r\n return this.appCheck.getToken(forceRefresh);\r\n }\r\n addTokenChangeListener(listener) {\r\n var _a;\r\n (_a = this.appCheckProvider) === null || _a === void 0 ? void 0 : _a.get().then(appCheck => appCheck.addTokenListener(listener));\r\n }\r\n notifyForInvalidToken() {\r\n warn(`Provided AppCheck credentials for the app named \"${this.appName_}\" ` +\r\n 'are invalid. This usually indicates your app was not initialized correctly.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Abstraction around FirebaseApp's token fetching capabilities.\r\n */\r\nclass FirebaseAuthTokenProvider {\r\n constructor(appName_, firebaseOptions_, authProvider_) {\r\n this.appName_ = appName_;\r\n this.firebaseOptions_ = firebaseOptions_;\r\n this.authProvider_ = authProvider_;\r\n this.auth_ = null;\r\n this.auth_ = authProvider_.getImmediate({ optional: true });\r\n if (!this.auth_) {\r\n authProvider_.onInit(auth => (this.auth_ = auth));\r\n }\r\n }\r\n getToken(forceRefresh) {\r\n if (!this.auth_) {\r\n return new Promise((resolve, reject) => {\r\n // Support delayed initialization of FirebaseAuth. This allows our\r\n // customers to initialize the RTDB SDK before initializing Firebase\r\n // Auth and ensures that all requests are authenticated if a token\r\n // becomes available before the timoeout below expires.\r\n setTimeout(() => {\r\n if (this.auth_) {\r\n this.getToken(forceRefresh).then(resolve, reject);\r\n }\r\n else {\r\n resolve(null);\r\n }\r\n }, 0);\r\n });\r\n }\r\n return this.auth_.getToken(forceRefresh).catch(error => {\r\n // TODO: Need to figure out all the cases this is raised and whether\r\n // this makes sense.\r\n if (error && error.code === 'auth/token-not-initialized') {\r\n log('Got auth/token-not-initialized error. Treating as null token.');\r\n return null;\r\n }\r\n else {\r\n return Promise.reject(error);\r\n }\r\n });\r\n }\r\n addTokenChangeListener(listener) {\r\n // TODO: We might want to wrap the listener and call it with no args to\r\n // avoid a leaky abstraction, but that makes removing the listener harder.\r\n if (this.auth_) {\r\n this.auth_.addAuthTokenListener(listener);\r\n }\r\n else {\r\n this.authProvider_\r\n .get()\r\n .then(auth => auth.addAuthTokenListener(listener));\r\n }\r\n }\r\n removeTokenChangeListener(listener) {\r\n this.authProvider_\r\n .get()\r\n .then(auth => auth.removeAuthTokenListener(listener));\r\n }\r\n notifyForInvalidToken() {\r\n let errorMessage = 'Provided authentication credentials for the app named \"' +\r\n this.appName_ +\r\n '\" are invalid. This usually indicates your app was not ' +\r\n 'initialized correctly. ';\r\n if ('credential' in this.firebaseOptions_) {\r\n errorMessage +=\r\n 'Make sure the \"credential\" property provided to initializeApp() ' +\r\n 'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n 'project.';\r\n }\r\n else if ('serviceAccount' in this.firebaseOptions_) {\r\n errorMessage +=\r\n 'Make sure the \"serviceAccount\" property provided to initializeApp() ' +\r\n 'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n 'project.';\r\n }\r\n else {\r\n errorMessage +=\r\n 'Make sure the \"apiKey\" and \"databaseURL\" properties provided to ' +\r\n 'initializeApp() match the values provided for your app at ' +\r\n 'https://console.firebase.google.com/.';\r\n }\r\n warn(errorMessage);\r\n }\r\n}\r\n/* AuthTokenProvider that supplies a constant token. Used by Admin SDK or mockUserToken with emulators. */\r\nclass EmulatorTokenProvider {\r\n constructor(accessToken) {\r\n this.accessToken = accessToken;\r\n }\r\n getToken(forceRefresh) {\r\n return Promise.resolve({\r\n accessToken: this.accessToken\r\n });\r\n }\r\n addTokenChangeListener(listener) {\r\n // Invoke the listener immediately to match the behavior in Firebase Auth\r\n // (see packages/auth/src/auth.js#L1807)\r\n listener(this.accessToken);\r\n }\r\n removeTokenChangeListener(listener) { }\r\n notifyForInvalidToken() { }\r\n}\r\n/** A string that is treated as an admin access token by the RTDB emulator. Used by Admin SDK. */\r\nEmulatorTokenProvider.OWNER = 'owner';\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PROTOCOL_VERSION = '5';\r\nconst VERSION_PARAM = 'v';\r\nconst TRANSPORT_SESSION_PARAM = 's';\r\nconst REFERER_PARAM = 'r';\r\nconst FORGE_REF = 'f';\r\n// Matches console.firebase.google.com, firebase-console-*.corp.google.com and\r\n// firebase.corp.google.com\r\nconst FORGE_DOMAIN_RE = /(console\\.firebase|firebase-console-\\w+\\.corp|firebase\\.corp)\\.google\\.com/;\r\nconst LAST_SESSION_PARAM = 'ls';\r\nconst APPLICATION_ID_PARAM = 'p';\r\nconst APP_CHECK_TOKEN_PARAM = 'ac';\r\nconst WEBSOCKET = 'websocket';\r\nconst LONG_POLLING = 'long_polling';\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A class that holds metadata about a Repo object\r\n */\r\nclass RepoInfo {\r\n /**\r\n * @param host - Hostname portion of the url for the repo\r\n * @param secure - Whether or not this repo is accessed over ssl\r\n * @param namespace - The namespace represented by the repo\r\n * @param webSocketOnly - Whether to prefer websockets over all other transports (used by Nest).\r\n * @param nodeAdmin - Whether this instance uses Admin SDK credentials\r\n * @param persistenceKey - Override the default session persistence storage key\r\n */\r\n constructor(host, secure, namespace, webSocketOnly, nodeAdmin = false, persistenceKey = '', includeNamespaceInQueryParams = false, isUsingEmulator = false) {\r\n this.secure = secure;\r\n this.namespace = namespace;\r\n this.webSocketOnly = webSocketOnly;\r\n this.nodeAdmin = nodeAdmin;\r\n this.persistenceKey = persistenceKey;\r\n this.includeNamespaceInQueryParams = includeNamespaceInQueryParams;\r\n this.isUsingEmulator = isUsingEmulator;\r\n this._host = host.toLowerCase();\r\n this._domain = this._host.substr(this._host.indexOf('.') + 1);\r\n this.internalHost =\r\n PersistentStorage.get('host:' + host) || this._host;\r\n }\r\n isCacheableHost() {\r\n return this.internalHost.substr(0, 2) === 's-';\r\n }\r\n isCustomHost() {\r\n return (this._domain !== 'firebaseio.com' &&\r\n this._domain !== 'firebaseio-demo.com');\r\n }\r\n get host() {\r\n return this._host;\r\n }\r\n set host(newHost) {\r\n if (newHost !== this.internalHost) {\r\n this.internalHost = newHost;\r\n if (this.isCacheableHost()) {\r\n PersistentStorage.set('host:' + this._host, this.internalHost);\r\n }\r\n }\r\n }\r\n toString() {\r\n let str = this.toURLString();\r\n if (this.persistenceKey) {\r\n str += '<' + this.persistenceKey + '>';\r\n }\r\n return str;\r\n }\r\n toURLString() {\r\n const protocol = this.secure ? 'https://' : 'http://';\r\n const query = this.includeNamespaceInQueryParams\r\n ? `?ns=${this.namespace}`\r\n : '';\r\n return `${protocol}${this.host}/${query}`;\r\n }\r\n}\r\nfunction repoInfoNeedsQueryParam(repoInfo) {\r\n return (repoInfo.host !== repoInfo.internalHost ||\r\n repoInfo.isCustomHost() ||\r\n repoInfo.includeNamespaceInQueryParams);\r\n}\r\n/**\r\n * Returns the websocket URL for this repo\r\n * @param repoInfo - RepoInfo object\r\n * @param type - of connection\r\n * @param params - list\r\n * @returns The URL for this repo\r\n */\r\nfunction repoInfoConnectionURL(repoInfo, type, params) {\r\n assert(typeof type === 'string', 'typeof type must == string');\r\n assert(typeof params === 'object', 'typeof params must == object');\r\n let connURL;\r\n if (type === WEBSOCKET) {\r\n connURL =\r\n (repoInfo.secure ? 'wss://' : 'ws://') + repoInfo.internalHost + '/.ws?';\r\n }\r\n else if (type === LONG_POLLING) {\r\n connURL =\r\n (repoInfo.secure ? 'https://' : 'http://') +\r\n repoInfo.internalHost +\r\n '/.lp?';\r\n }\r\n else {\r\n throw new Error('Unknown connection type: ' + type);\r\n }\r\n if (repoInfoNeedsQueryParam(repoInfo)) {\r\n params['ns'] = repoInfo.namespace;\r\n }\r\n const pairs = [];\r\n each(params, (key, value) => {\r\n pairs.push(key + '=' + value);\r\n });\r\n return connURL + pairs.join('&');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Tracks a collection of stats.\r\n */\r\nclass StatsCollection {\r\n constructor() {\r\n this.counters_ = {};\r\n }\r\n incrementCounter(name, amount = 1) {\r\n if (!contains(this.counters_, name)) {\r\n this.counters_[name] = 0;\r\n }\r\n this.counters_[name] += amount;\r\n }\r\n get() {\r\n return deepCopy(this.counters_);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst collections = {};\r\nconst reporters = {};\r\nfunction statsManagerGetCollection(repoInfo) {\r\n const hashString = repoInfo.toString();\r\n if (!collections[hashString]) {\r\n collections[hashString] = new StatsCollection();\r\n }\r\n return collections[hashString];\r\n}\r\nfunction statsManagerGetOrCreateReporter(repoInfo, creatorFunction) {\r\n const hashString = repoInfo.toString();\r\n if (!reporters[hashString]) {\r\n reporters[hashString] = creatorFunction();\r\n }\r\n return reporters[hashString];\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class ensures the packets from the server arrive in order\r\n * This class takes data from the server and ensures it gets passed into the callbacks in order.\r\n */\r\nclass PacketReceiver {\r\n /**\r\n * @param onMessage_\r\n */\r\n constructor(onMessage_) {\r\n this.onMessage_ = onMessage_;\r\n this.pendingResponses = [];\r\n this.currentResponseNum = 0;\r\n this.closeAfterResponse = -1;\r\n this.onClose = null;\r\n }\r\n closeAfter(responseNum, callback) {\r\n this.closeAfterResponse = responseNum;\r\n this.onClose = callback;\r\n if (this.closeAfterResponse < this.currentResponseNum) {\r\n this.onClose();\r\n this.onClose = null;\r\n }\r\n }\r\n /**\r\n * Each message from the server comes with a response number, and an array of data. The responseNumber\r\n * allows us to ensure that we process them in the right order, since we can't be guaranteed that all\r\n * browsers will respond in the same order as the requests we sent\r\n */\r\n handleResponse(requestNum, data) {\r\n this.pendingResponses[requestNum] = data;\r\n while (this.pendingResponses[this.currentResponseNum]) {\r\n const toProcess = this.pendingResponses[this.currentResponseNum];\r\n delete this.pendingResponses[this.currentResponseNum];\r\n for (let i = 0; i < toProcess.length; ++i) {\r\n if (toProcess[i]) {\r\n exceptionGuard(() => {\r\n this.onMessage_(toProcess[i]);\r\n });\r\n }\r\n }\r\n if (this.currentResponseNum === this.closeAfterResponse) {\r\n if (this.onClose) {\r\n this.onClose();\r\n this.onClose = null;\r\n }\r\n break;\r\n }\r\n this.currentResponseNum++;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// URL query parameters associated with longpolling\r\nconst FIREBASE_LONGPOLL_START_PARAM = 'start';\r\nconst FIREBASE_LONGPOLL_CLOSE_COMMAND = 'close';\r\nconst FIREBASE_LONGPOLL_COMMAND_CB_NAME = 'pLPCommand';\r\nconst FIREBASE_LONGPOLL_DATA_CB_NAME = 'pRTLPCB';\r\nconst FIREBASE_LONGPOLL_ID_PARAM = 'id';\r\nconst FIREBASE_LONGPOLL_PW_PARAM = 'pw';\r\nconst FIREBASE_LONGPOLL_SERIAL_PARAM = 'ser';\r\nconst FIREBASE_LONGPOLL_CALLBACK_ID_PARAM = 'cb';\r\nconst FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM = 'seg';\r\nconst FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET = 'ts';\r\nconst FIREBASE_LONGPOLL_DATA_PARAM = 'd';\r\nconst FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM = 'dframe';\r\n//Data size constants.\r\n//TODO: Perf: the maximum length actually differs from browser to browser.\r\n// We should check what browser we're on and set accordingly.\r\nconst MAX_URL_DATA_SIZE = 1870;\r\nconst SEG_HEADER_SIZE = 30; //ie: &seg=8299234&ts=982389123&d=\r\nconst MAX_PAYLOAD_SIZE = MAX_URL_DATA_SIZE - SEG_HEADER_SIZE;\r\n/**\r\n * Keepalive period\r\n * send a fresh request at minimum every 25 seconds. Opera has a maximum request\r\n * length of 30 seconds that we can't exceed.\r\n */\r\nconst KEEPALIVE_REQUEST_INTERVAL = 25000;\r\n/**\r\n * How long to wait before aborting a long-polling connection attempt.\r\n */\r\nconst LP_CONNECT_TIMEOUT = 30000;\r\n/**\r\n * This class manages a single long-polling connection.\r\n */\r\nclass BrowserPollConnection {\r\n /**\r\n * @param connId An identifier for this connection, used for logging\r\n * @param repoInfo The info for the endpoint to send data to.\r\n * @param applicationId The Firebase App ID for this project.\r\n * @param appCheckToken The AppCheck token for this client.\r\n * @param authToken The AuthToken to use for this connection.\r\n * @param transportSessionId Optional transportSessionid if we are\r\n * reconnecting for an existing transport session\r\n * @param lastSessionId Optional lastSessionId if the PersistentConnection has\r\n * already created a connection previously\r\n */\r\n constructor(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {\r\n this.connId = connId;\r\n this.repoInfo = repoInfo;\r\n this.applicationId = applicationId;\r\n this.appCheckToken = appCheckToken;\r\n this.authToken = authToken;\r\n this.transportSessionId = transportSessionId;\r\n this.lastSessionId = lastSessionId;\r\n this.bytesSent = 0;\r\n this.bytesReceived = 0;\r\n this.everConnected_ = false;\r\n this.log_ = logWrapper(connId);\r\n this.stats_ = statsManagerGetCollection(repoInfo);\r\n this.urlFn = (params) => {\r\n // Always add the token if we have one.\r\n if (this.appCheckToken) {\r\n params[APP_CHECK_TOKEN_PARAM] = this.appCheckToken;\r\n }\r\n return repoInfoConnectionURL(repoInfo, LONG_POLLING, params);\r\n };\r\n }\r\n /**\r\n * @param onMessage - Callback when messages arrive\r\n * @param onDisconnect - Callback with connection lost.\r\n */\r\n open(onMessage, onDisconnect) {\r\n this.curSegmentNum = 0;\r\n this.onDisconnect_ = onDisconnect;\r\n this.myPacketOrderer = new PacketReceiver(onMessage);\r\n this.isClosed_ = false;\r\n this.connectTimeoutTimer_ = setTimeout(() => {\r\n this.log_('Timed out trying to connect.');\r\n // Make sure we clear the host cache\r\n this.onClosed_();\r\n this.connectTimeoutTimer_ = null;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(LP_CONNECT_TIMEOUT));\r\n // Ensure we delay the creation of the iframe until the DOM is loaded.\r\n executeWhenDOMReady(() => {\r\n if (this.isClosed_) {\r\n return;\r\n }\r\n //Set up a callback that gets triggered once a connection is set up.\r\n this.scriptTagHolder = new FirebaseIFrameScriptHolder((...args) => {\r\n const [command, arg1, arg2, arg3, arg4] = args;\r\n this.incrementIncomingBytes_(args);\r\n if (!this.scriptTagHolder) {\r\n return; // we closed the connection.\r\n }\r\n if (this.connectTimeoutTimer_) {\r\n clearTimeout(this.connectTimeoutTimer_);\r\n this.connectTimeoutTimer_ = null;\r\n }\r\n this.everConnected_ = true;\r\n if (command === FIREBASE_LONGPOLL_START_PARAM) {\r\n this.id = arg1;\r\n this.password = arg2;\r\n }\r\n else if (command === FIREBASE_LONGPOLL_CLOSE_COMMAND) {\r\n // Don't clear the host cache. We got a response from the server, so we know it's reachable\r\n if (arg1) {\r\n // We aren't expecting any more data (other than what the server's already in the process of sending us\r\n // through our already open polls), so don't send any more.\r\n this.scriptTagHolder.sendNewPolls = false;\r\n // arg1 in this case is the last response number sent by the server. We should try to receive\r\n // all of the responses up to this one before closing\r\n this.myPacketOrderer.closeAfter(arg1, () => {\r\n this.onClosed_();\r\n });\r\n }\r\n else {\r\n this.onClosed_();\r\n }\r\n }\r\n else {\r\n throw new Error('Unrecognized command received: ' + command);\r\n }\r\n }, (...args) => {\r\n const [pN, data] = args;\r\n this.incrementIncomingBytes_(args);\r\n this.myPacketOrderer.handleResponse(pN, data);\r\n }, () => {\r\n this.onClosed_();\r\n }, this.urlFn);\r\n //Send the initial request to connect. The serial number is simply to keep the browser from pulling previous results\r\n //from cache.\r\n const urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_START_PARAM] = 't';\r\n urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = Math.floor(Math.random() * 100000000);\r\n if (this.scriptTagHolder.uniqueCallbackIdentifier) {\r\n urlParams[FIREBASE_LONGPOLL_CALLBACK_ID_PARAM] =\r\n this.scriptTagHolder.uniqueCallbackIdentifier;\r\n }\r\n urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n if (this.transportSessionId) {\r\n urlParams[TRANSPORT_SESSION_PARAM] = this.transportSessionId;\r\n }\r\n if (this.lastSessionId) {\r\n urlParams[LAST_SESSION_PARAM] = this.lastSessionId;\r\n }\r\n if (this.applicationId) {\r\n urlParams[APPLICATION_ID_PARAM] = this.applicationId;\r\n }\r\n if (this.appCheckToken) {\r\n urlParams[APP_CHECK_TOKEN_PARAM] = this.appCheckToken;\r\n }\r\n if (typeof location !== 'undefined' &&\r\n location.hostname &&\r\n FORGE_DOMAIN_RE.test(location.hostname)) {\r\n urlParams[REFERER_PARAM] = FORGE_REF;\r\n }\r\n const connectURL = this.urlFn(urlParams);\r\n this.log_('Connecting via long-poll to ' + connectURL);\r\n this.scriptTagHolder.addTag(connectURL, () => {\r\n /* do nothing */\r\n });\r\n });\r\n }\r\n /**\r\n * Call this when a handshake has completed successfully and we want to consider the connection established\r\n */\r\n start() {\r\n this.scriptTagHolder.startLongPoll(this.id, this.password);\r\n this.addDisconnectPingFrame(this.id, this.password);\r\n }\r\n /**\r\n * Forces long polling to be considered as a potential transport\r\n */\r\n static forceAllow() {\r\n BrowserPollConnection.forceAllow_ = true;\r\n }\r\n /**\r\n * Forces longpolling to not be considered as a potential transport\r\n */\r\n static forceDisallow() {\r\n BrowserPollConnection.forceDisallow_ = true;\r\n }\r\n // Static method, use string literal so it can be accessed in a generic way\r\n static isAvailable() {\r\n if (isNodeSdk()) {\r\n return false;\r\n }\r\n else if (BrowserPollConnection.forceAllow_) {\r\n return true;\r\n }\r\n else {\r\n // NOTE: In React-Native there's normally no 'document', but if you debug a React-Native app in\r\n // the Chrome debugger, 'document' is defined, but document.createElement is null (2015/06/08).\r\n return (!BrowserPollConnection.forceDisallow_ &&\r\n typeof document !== 'undefined' &&\r\n document.createElement != null &&\r\n !isChromeExtensionContentScript() &&\r\n !isWindowsStoreApp());\r\n }\r\n }\r\n /**\r\n * No-op for polling\r\n */\r\n markConnectionHealthy() { }\r\n /**\r\n * Stops polling and cleans up the iframe\r\n */\r\n shutdown_() {\r\n this.isClosed_ = true;\r\n if (this.scriptTagHolder) {\r\n this.scriptTagHolder.close();\r\n this.scriptTagHolder = null;\r\n }\r\n //remove the disconnect frame, which will trigger an XHR call to the server to tell it we're leaving.\r\n if (this.myDisconnFrame) {\r\n document.body.removeChild(this.myDisconnFrame);\r\n this.myDisconnFrame = null;\r\n }\r\n if (this.connectTimeoutTimer_) {\r\n clearTimeout(this.connectTimeoutTimer_);\r\n this.connectTimeoutTimer_ = null;\r\n }\r\n }\r\n /**\r\n * Triggered when this transport is closed\r\n */\r\n onClosed_() {\r\n if (!this.isClosed_) {\r\n this.log_('Longpoll is closing itself');\r\n this.shutdown_();\r\n if (this.onDisconnect_) {\r\n this.onDisconnect_(this.everConnected_);\r\n this.onDisconnect_ = null;\r\n }\r\n }\r\n }\r\n /**\r\n * External-facing close handler. RealTime has requested we shut down. Kill our connection and tell the server\r\n * that we've left.\r\n */\r\n close() {\r\n if (!this.isClosed_) {\r\n this.log_('Longpoll is being closed.');\r\n this.shutdown_();\r\n }\r\n }\r\n /**\r\n * Send the JSON object down to the server. It will need to be stringified, base64 encoded, and then\r\n * broken into chunks (since URLs have a small maximum length).\r\n * @param data - The JSON data to transmit.\r\n */\r\n send(data) {\r\n const dataStr = stringify(data);\r\n this.bytesSent += dataStr.length;\r\n this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n //first, lets get the base64-encoded data\r\n const base64data = base64Encode(dataStr);\r\n //We can only fit a certain amount in each URL, so we need to split this request\r\n //up into multiple pieces if it doesn't fit in one request.\r\n const dataSegs = splitStringBySize(base64data, MAX_PAYLOAD_SIZE);\r\n //Enqueue each segment for transmission. We assign each chunk a sequential ID and a total number\r\n //of segments so that we can reassemble the packet on the server.\r\n for (let i = 0; i < dataSegs.length; i++) {\r\n this.scriptTagHolder.enqueueSegment(this.curSegmentNum, dataSegs.length, dataSegs[i]);\r\n this.curSegmentNum++;\r\n }\r\n }\r\n /**\r\n * This is how we notify the server that we're leaving.\r\n * We aren't able to send requests with DHTML on a window close event, but we can\r\n * trigger XHR requests in some browsers (everything but Opera basically).\r\n */\r\n addDisconnectPingFrame(id, pw) {\r\n if (isNodeSdk()) {\r\n return;\r\n }\r\n this.myDisconnFrame = document.createElement('iframe');\r\n const urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM] = 't';\r\n urlParams[FIREBASE_LONGPOLL_ID_PARAM] = id;\r\n urlParams[FIREBASE_LONGPOLL_PW_PARAM] = pw;\r\n this.myDisconnFrame.src = this.urlFn(urlParams);\r\n this.myDisconnFrame.style.display = 'none';\r\n document.body.appendChild(this.myDisconnFrame);\r\n }\r\n /**\r\n * Used to track the bytes received by this client\r\n */\r\n incrementIncomingBytes_(args) {\r\n // TODO: This is an annoying perf hit just to track the number of incoming bytes. Maybe it should be opt-in.\r\n const bytesReceived = stringify(args).length;\r\n this.bytesReceived += bytesReceived;\r\n this.stats_.incrementCounter('bytes_received', bytesReceived);\r\n }\r\n}\r\n/*********************************************************************************************\r\n * A wrapper around an iframe that is used as a long-polling script holder.\r\n *********************************************************************************************/\r\nclass FirebaseIFrameScriptHolder {\r\n /**\r\n * @param commandCB - The callback to be called when control commands are recevied from the server.\r\n * @param onMessageCB - The callback to be triggered when responses arrive from the server.\r\n * @param onDisconnect - The callback to be triggered when this tag holder is closed\r\n * @param urlFn - A function that provides the URL of the endpoint to send data to.\r\n */\r\n constructor(commandCB, onMessageCB, onDisconnect, urlFn) {\r\n this.onDisconnect = onDisconnect;\r\n this.urlFn = urlFn;\r\n //We maintain a count of all of the outstanding requests, because if we have too many active at once it can cause\r\n //problems in some browsers.\r\n this.outstandingRequests = new Set();\r\n //A queue of the pending segments waiting for transmission to the server.\r\n this.pendingSegs = [];\r\n //A serial number. We use this for two things:\r\n // 1) A way to ensure the browser doesn't cache responses to polls\r\n // 2) A way to make the server aware when long-polls arrive in a different order than we started them. The\r\n // server needs to release both polls in this case or it will cause problems in Opera since Opera can only execute\r\n // JSONP code in the order it was added to the iframe.\r\n this.currentSerial = Math.floor(Math.random() * 100000000);\r\n // This gets set to false when we're \"closing down\" the connection (e.g. we're switching transports but there's still\r\n // incoming data from the server that we're waiting for).\r\n this.sendNewPolls = true;\r\n if (!isNodeSdk()) {\r\n //Each script holder registers a couple of uniquely named callbacks with the window. These are called from the\r\n //iframes where we put the long-polling script tags. We have two callbacks:\r\n // 1) Command Callback - Triggered for control issues, like starting a connection.\r\n // 2) Message Callback - Triggered when new data arrives.\r\n this.uniqueCallbackIdentifier = LUIDGenerator();\r\n window[FIREBASE_LONGPOLL_COMMAND_CB_NAME + this.uniqueCallbackIdentifier] = commandCB;\r\n window[FIREBASE_LONGPOLL_DATA_CB_NAME + this.uniqueCallbackIdentifier] =\r\n onMessageCB;\r\n //Create an iframe for us to add script tags to.\r\n this.myIFrame = FirebaseIFrameScriptHolder.createIFrame_();\r\n // Set the iframe's contents.\r\n let script = '';\r\n // if we set a javascript url, it's IE and we need to set the document domain. The javascript url is sufficient\r\n // for ie9, but ie8 needs to do it again in the document itself.\r\n if (this.myIFrame.src &&\r\n this.myIFrame.src.substr(0, 'javascript:'.length) === 'javascript:') {\r\n const currentDomain = document.domain;\r\n script = '';\r\n }\r\n const iframeContents = '' + script + '';\r\n try {\r\n this.myIFrame.doc.open();\r\n this.myIFrame.doc.write(iframeContents);\r\n this.myIFrame.doc.close();\r\n }\r\n catch (e) {\r\n log('frame writing exception');\r\n if (e.stack) {\r\n log(e.stack);\r\n }\r\n log(e);\r\n }\r\n }\r\n else {\r\n this.commandCB = commandCB;\r\n this.onMessageCB = onMessageCB;\r\n }\r\n }\r\n /**\r\n * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can\r\n * actually use.\r\n */\r\n static createIFrame_() {\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n // This is necessary in order to initialize the document inside the iframe\r\n if (document.body) {\r\n document.body.appendChild(iframe);\r\n try {\r\n // If document.domain has been modified in IE, this will throw an error, and we need to set the\r\n // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute\r\n // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.\r\n const a = iframe.contentWindow.document;\r\n if (!a) {\r\n // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.\r\n log('No IE domain setting required');\r\n }\r\n }\r\n catch (e) {\r\n const domain = document.domain;\r\n iframe.src =\r\n \"javascript:void((function(){document.open();document.domain='\" +\r\n domain +\r\n \"';document.close();})())\";\r\n }\r\n }\r\n else {\r\n // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this\r\n // never gets hit.\r\n throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';\r\n }\r\n // Get the document of the iframe in a browser-specific way.\r\n if (iframe.contentDocument) {\r\n iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari\r\n }\r\n else if (iframe.contentWindow) {\r\n iframe.doc = iframe.contentWindow.document; // Internet Explorer\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }\r\n else if (iframe.document) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n iframe.doc = iframe.document; //others?\r\n }\r\n return iframe;\r\n }\r\n /**\r\n * Cancel all outstanding queries and remove the frame.\r\n */\r\n close() {\r\n //Mark this iframe as dead, so no new requests are sent.\r\n this.alive = false;\r\n if (this.myIFrame) {\r\n //We have to actually remove all of the html inside this iframe before removing it from the\r\n //window, or IE will continue loading and executing the script tags we've already added, which\r\n //can lead to some errors being thrown. Setting textContent seems to be the safest way to do this.\r\n this.myIFrame.doc.body.textContent = '';\r\n setTimeout(() => {\r\n if (this.myIFrame !== null) {\r\n document.body.removeChild(this.myIFrame);\r\n this.myIFrame = null;\r\n }\r\n }, Math.floor(0));\r\n }\r\n // Protect from being called recursively.\r\n const onDisconnect = this.onDisconnect;\r\n if (onDisconnect) {\r\n this.onDisconnect = null;\r\n onDisconnect();\r\n }\r\n }\r\n /**\r\n * Actually start the long-polling session by adding the first script tag(s) to the iframe.\r\n * @param id - The ID of this connection\r\n * @param pw - The password for this connection\r\n */\r\n startLongPoll(id, pw) {\r\n this.myID = id;\r\n this.myPW = pw;\r\n this.alive = true;\r\n //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.\r\n while (this.newRequest_()) { }\r\n }\r\n /**\r\n * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't\r\n * too many outstanding requests and we are still alive.\r\n *\r\n * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if\r\n * needed.\r\n */\r\n newRequest_() {\r\n // We keep one outstanding request open all the time to receive data, but if we need to send data\r\n // (pendingSegs.length > 0) then we create a new request to send the data. The server will automatically\r\n // close the old request.\r\n if (this.alive &&\r\n this.sendNewPolls &&\r\n this.outstandingRequests.size < (this.pendingSegs.length > 0 ? 2 : 1)) {\r\n //construct our url\r\n this.currentSerial++;\r\n const urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\r\n urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\r\n urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;\r\n let theURL = this.urlFn(urlParams);\r\n //Now add as much data as we can.\r\n let curDataString = '';\r\n let i = 0;\r\n while (this.pendingSegs.length > 0) {\r\n //first, lets see if the next segment will fit.\r\n const nextSeg = this.pendingSegs[0];\r\n if (nextSeg.d.length +\r\n SEG_HEADER_SIZE +\r\n curDataString.length <=\r\n MAX_URL_DATA_SIZE) {\r\n //great, the segment will fit. Lets append it.\r\n const theSeg = this.pendingSegs.shift();\r\n curDataString =\r\n curDataString +\r\n '&' +\r\n FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM +\r\n i +\r\n '=' +\r\n theSeg.seg +\r\n '&' +\r\n FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET +\r\n i +\r\n '=' +\r\n theSeg.ts +\r\n '&' +\r\n FIREBASE_LONGPOLL_DATA_PARAM +\r\n i +\r\n '=' +\r\n theSeg.d;\r\n i++;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n theURL = theURL + curDataString;\r\n this.addLongPollTag_(theURL, this.currentSerial);\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n /**\r\n * Queue a packet for transmission to the server.\r\n * @param segnum - A sequential id for this packet segment used for reassembly\r\n * @param totalsegs - The total number of segments in this packet\r\n * @param data - The data for this segment.\r\n */\r\n enqueueSegment(segnum, totalsegs, data) {\r\n //add this to the queue of segments to send.\r\n this.pendingSegs.push({ seg: segnum, ts: totalsegs, d: data });\r\n //send the data immediately if there isn't already data being transmitted, unless\r\n //startLongPoll hasn't been called yet.\r\n if (this.alive) {\r\n this.newRequest_();\r\n }\r\n }\r\n /**\r\n * Add a script tag for a regular long-poll request.\r\n * @param url - The URL of the script tag.\r\n * @param serial - The serial number of the request.\r\n */\r\n addLongPollTag_(url, serial) {\r\n //remember that we sent this request.\r\n this.outstandingRequests.add(serial);\r\n const doNewRequest = () => {\r\n this.outstandingRequests.delete(serial);\r\n this.newRequest_();\r\n };\r\n // If this request doesn't return on its own accord (by the server sending us some data), we'll\r\n // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.\r\n const keepaliveTimeout = setTimeout(doNewRequest, Math.floor(KEEPALIVE_REQUEST_INTERVAL));\r\n const readyStateCB = () => {\r\n // Request completed. Cancel the keepalive.\r\n clearTimeout(keepaliveTimeout);\r\n // Trigger a new request so we can continue receiving data.\r\n doNewRequest();\r\n };\r\n this.addTag(url, readyStateCB);\r\n }\r\n /**\r\n * Add an arbitrary script tag to the iframe.\r\n * @param url - The URL for the script tag source.\r\n * @param loadCB - A callback to be triggered once the script has loaded.\r\n */\r\n addTag(url, loadCB) {\r\n if (isNodeSdk()) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.doNodeLongPoll(url, loadCB);\r\n }\r\n else {\r\n setTimeout(() => {\r\n try {\r\n // if we're already closed, don't add this poll\r\n if (!this.sendNewPolls) {\r\n return;\r\n }\r\n const newScript = this.myIFrame.doc.createElement('script');\r\n newScript.type = 'text/javascript';\r\n newScript.async = true;\r\n newScript.src = url;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n newScript.onload = newScript.onreadystatechange =\r\n function () {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const rstate = newScript.readyState;\r\n if (!rstate || rstate === 'loaded' || rstate === 'complete') {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n newScript.onload = newScript.onreadystatechange = null;\r\n if (newScript.parentNode) {\r\n newScript.parentNode.removeChild(newScript);\r\n }\r\n loadCB();\r\n }\r\n };\r\n newScript.onerror = () => {\r\n log('Long-poll script failed to load: ' + url);\r\n this.sendNewPolls = false;\r\n this.close();\r\n };\r\n this.myIFrame.doc.body.appendChild(newScript);\r\n }\r\n catch (e) {\r\n // TODO: we should make this error visible somehow\r\n }\r\n }, Math.floor(1));\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst WEBSOCKET_MAX_FRAME_SIZE = 16384;\r\nconst WEBSOCKET_KEEPALIVE_INTERVAL = 45000;\r\nlet WebSocketImpl = null;\r\nif (typeof MozWebSocket !== 'undefined') {\r\n WebSocketImpl = MozWebSocket;\r\n}\r\nelse if (typeof WebSocket !== 'undefined') {\r\n WebSocketImpl = WebSocket;\r\n}\r\n/**\r\n * Create a new websocket connection with the given callbacks.\r\n */\r\nclass WebSocketConnection {\r\n /**\r\n * @param connId identifier for this transport\r\n * @param repoInfo The info for the websocket endpoint.\r\n * @param applicationId The Firebase App ID for this project.\r\n * @param appCheckToken The App Check Token for this client.\r\n * @param authToken The Auth Token for this client.\r\n * @param transportSessionId Optional transportSessionId if this is connecting\r\n * to an existing transport session\r\n * @param lastSessionId Optional lastSessionId if there was a previous\r\n * connection\r\n */\r\n constructor(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {\r\n this.connId = connId;\r\n this.applicationId = applicationId;\r\n this.appCheckToken = appCheckToken;\r\n this.authToken = authToken;\r\n this.keepaliveTimer = null;\r\n this.frames = null;\r\n this.totalFrames = 0;\r\n this.bytesSent = 0;\r\n this.bytesReceived = 0;\r\n this.log_ = logWrapper(this.connId);\r\n this.stats_ = statsManagerGetCollection(repoInfo);\r\n this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId);\r\n this.nodeAdmin = repoInfo.nodeAdmin;\r\n }\r\n /**\r\n * @param repoInfo - The info for the websocket endpoint.\r\n * @param transportSessionId - Optional transportSessionId if this is connecting to an existing transport\r\n * session\r\n * @param lastSessionId - Optional lastSessionId if there was a previous connection\r\n * @returns connection url\r\n */\r\n static connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId) {\r\n const urlParams = {};\r\n urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n if (!isNodeSdk() &&\r\n typeof location !== 'undefined' &&\r\n location.hostname &&\r\n FORGE_DOMAIN_RE.test(location.hostname)) {\r\n urlParams[REFERER_PARAM] = FORGE_REF;\r\n }\r\n if (transportSessionId) {\r\n urlParams[TRANSPORT_SESSION_PARAM] = transportSessionId;\r\n }\r\n if (lastSessionId) {\r\n urlParams[LAST_SESSION_PARAM] = lastSessionId;\r\n }\r\n if (appCheckToken) {\r\n urlParams[APP_CHECK_TOKEN_PARAM] = appCheckToken;\r\n }\r\n if (applicationId) {\r\n urlParams[APPLICATION_ID_PARAM] = applicationId;\r\n }\r\n return repoInfoConnectionURL(repoInfo, WEBSOCKET, urlParams);\r\n }\r\n /**\r\n * @param onMessage - Callback when messages arrive\r\n * @param onDisconnect - Callback with connection lost.\r\n */\r\n open(onMessage, onDisconnect) {\r\n this.onDisconnect = onDisconnect;\r\n this.onMessage = onMessage;\r\n this.log_('Websocket connecting to ' + this.connURL);\r\n this.everConnected_ = false;\r\n // Assume failure until proven otherwise.\r\n PersistentStorage.set('previous_websocket_failure', true);\r\n try {\r\n let options;\r\n if (isNodeSdk()) {\r\n const device = this.nodeAdmin ? 'AdminNode' : 'Node';\r\n // UA Format: Firebase////\r\n options = {\r\n headers: {\r\n 'User-Agent': `Firebase/${PROTOCOL_VERSION}/${SDK_VERSION}/${process.platform}/${device}`,\r\n 'X-Firebase-GMPID': this.applicationId || ''\r\n }\r\n };\r\n // If using Node with admin creds, AppCheck-related checks are unnecessary.\r\n // Note that we send the credentials here even if they aren't admin credentials, which is\r\n // not a problem.\r\n // Note that this header is just used to bypass appcheck, and the token should still be sent\r\n // through the websocket connection once it is established.\r\n if (this.authToken) {\r\n options.headers['Authorization'] = `Bearer ${this.authToken}`;\r\n }\r\n if (this.appCheckToken) {\r\n options.headers['X-Firebase-AppCheck'] = this.appCheckToken;\r\n }\r\n // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.\r\n const env = process['env'];\r\n const proxy = this.connURL.indexOf('wss://') === 0\r\n ? env['HTTPS_PROXY'] || env['https_proxy']\r\n : env['HTTP_PROXY'] || env['http_proxy'];\r\n if (proxy) {\r\n options['proxy'] = { origin: proxy };\r\n }\r\n }\r\n this.mySock = new WebSocketImpl(this.connURL, [], options);\r\n }\r\n catch (e) {\r\n this.log_('Error instantiating WebSocket.');\r\n const error = e.message || e.data;\r\n if (error) {\r\n this.log_(error);\r\n }\r\n this.onClosed_();\r\n return;\r\n }\r\n this.mySock.onopen = () => {\r\n this.log_('Websocket connected.');\r\n this.everConnected_ = true;\r\n };\r\n this.mySock.onclose = () => {\r\n this.log_('Websocket connection was disconnected.');\r\n this.mySock = null;\r\n this.onClosed_();\r\n };\r\n this.mySock.onmessage = m => {\r\n this.handleIncomingFrame(m);\r\n };\r\n this.mySock.onerror = e => {\r\n this.log_('WebSocket error. Closing connection.');\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const error = e.message || e.data;\r\n if (error) {\r\n this.log_(error);\r\n }\r\n this.onClosed_();\r\n };\r\n }\r\n /**\r\n * No-op for websockets, we don't need to do anything once the connection is confirmed as open\r\n */\r\n start() { }\r\n static forceDisallow() {\r\n WebSocketConnection.forceDisallow_ = true;\r\n }\r\n static isAvailable() {\r\n let isOldAndroid = false;\r\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\r\n const oldAndroidRegex = /Android ([0-9]{0,}\\.[0-9]{0,})/;\r\n const oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);\r\n if (oldAndroidMatch && oldAndroidMatch.length > 1) {\r\n if (parseFloat(oldAndroidMatch[1]) < 4.4) {\r\n isOldAndroid = true;\r\n }\r\n }\r\n }\r\n return (!isOldAndroid &&\r\n WebSocketImpl !== null &&\r\n !WebSocketConnection.forceDisallow_);\r\n }\r\n /**\r\n * Returns true if we previously failed to connect with this transport.\r\n */\r\n static previouslyFailed() {\r\n // If our persistent storage is actually only in-memory storage,\r\n // we default to assuming that it previously failed to be safe.\r\n return (PersistentStorage.isInMemoryStorage ||\r\n PersistentStorage.get('previous_websocket_failure') === true);\r\n }\r\n markConnectionHealthy() {\r\n PersistentStorage.remove('previous_websocket_failure');\r\n }\r\n appendFrame_(data) {\r\n this.frames.push(data);\r\n if (this.frames.length === this.totalFrames) {\r\n const fullMess = this.frames.join('');\r\n this.frames = null;\r\n const jsonMess = jsonEval(fullMess);\r\n //handle the message\r\n this.onMessage(jsonMess);\r\n }\r\n }\r\n /**\r\n * @param frameCount - The number of frames we are expecting from the server\r\n */\r\n handleNewFrameCount_(frameCount) {\r\n this.totalFrames = frameCount;\r\n this.frames = [];\r\n }\r\n /**\r\n * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1\r\n * @returns Any remaining data to be process, or null if there is none\r\n */\r\n extractFrameCount_(data) {\r\n assert(this.frames === null, 'We already have a frame buffer');\r\n // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced\r\n // currently. So allowing larger frame counts (length <= 6). See https://app.asana.com/0/search/8688598998380/8237608042508\r\n if (data.length <= 6) {\r\n const frameCount = Number(data);\r\n if (!isNaN(frameCount)) {\r\n this.handleNewFrameCount_(frameCount);\r\n return null;\r\n }\r\n }\r\n this.handleNewFrameCount_(1);\r\n return data;\r\n }\r\n /**\r\n * Process a websocket frame that has arrived from the server.\r\n * @param mess - The frame data\r\n */\r\n handleIncomingFrame(mess) {\r\n if (this.mySock === null) {\r\n return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.\r\n }\r\n const data = mess['data'];\r\n this.bytesReceived += data.length;\r\n this.stats_.incrementCounter('bytes_received', data.length);\r\n this.resetKeepAlive();\r\n if (this.frames !== null) {\r\n // we're buffering\r\n this.appendFrame_(data);\r\n }\r\n else {\r\n // try to parse out a frame count, otherwise, assume 1 and process it\r\n const remainingData = this.extractFrameCount_(data);\r\n if (remainingData !== null) {\r\n this.appendFrame_(remainingData);\r\n }\r\n }\r\n }\r\n /**\r\n * Send a message to the server\r\n * @param data - The JSON object to transmit\r\n */\r\n send(data) {\r\n this.resetKeepAlive();\r\n const dataStr = stringify(data);\r\n this.bytesSent += dataStr.length;\r\n this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n //We can only fit a certain amount in each websocket frame, so we need to split this request\r\n //up into multiple pieces if it doesn't fit in one request.\r\n const dataSegs = splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE);\r\n //Send the length header\r\n if (dataSegs.length > 1) {\r\n this.sendString_(String(dataSegs.length));\r\n }\r\n //Send the actual data in segments.\r\n for (let i = 0; i < dataSegs.length; i++) {\r\n this.sendString_(dataSegs[i]);\r\n }\r\n }\r\n shutdown_() {\r\n this.isClosed_ = true;\r\n if (this.keepaliveTimer) {\r\n clearInterval(this.keepaliveTimer);\r\n this.keepaliveTimer = null;\r\n }\r\n if (this.mySock) {\r\n this.mySock.close();\r\n this.mySock = null;\r\n }\r\n }\r\n onClosed_() {\r\n if (!this.isClosed_) {\r\n this.log_('WebSocket is closing itself');\r\n this.shutdown_();\r\n // since this is an internal close, trigger the close listener\r\n if (this.onDisconnect) {\r\n this.onDisconnect(this.everConnected_);\r\n this.onDisconnect = null;\r\n }\r\n }\r\n }\r\n /**\r\n * External-facing close handler.\r\n * Close the websocket and kill the connection.\r\n */\r\n close() {\r\n if (!this.isClosed_) {\r\n this.log_('WebSocket is being closed');\r\n this.shutdown_();\r\n }\r\n }\r\n /**\r\n * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after\r\n * the last activity.\r\n */\r\n resetKeepAlive() {\r\n clearInterval(this.keepaliveTimer);\r\n this.keepaliveTimer = setInterval(() => {\r\n //If there has been no websocket activity for a while, send a no-op\r\n if (this.mySock) {\r\n this.sendString_('0');\r\n }\r\n this.resetKeepAlive();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL));\r\n }\r\n /**\r\n * Send a string over the websocket.\r\n *\r\n * @param str - String to send.\r\n */\r\n sendString_(str) {\r\n // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()\r\n // calls for some unknown reason. We treat these as an error and disconnect.\r\n // See https://app.asana.com/0/58926111402292/68021340250410\r\n try {\r\n this.mySock.send(str);\r\n }\r\n catch (e) {\r\n this.log_('Exception thrown from WebSocket.send():', e.message || e.data, 'Closing connection.');\r\n setTimeout(this.onClosed_.bind(this), 0);\r\n }\r\n }\r\n}\r\n/**\r\n * Number of response before we consider the connection \"healthy.\"\r\n */\r\nWebSocketConnection.responsesRequiredToBeHealthy = 2;\r\n/**\r\n * Time to wait for the connection te become healthy before giving up.\r\n */\r\nWebSocketConnection.healthyTimeout = 30000;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Currently simplistic, this class manages what transport a Connection should use at various stages of its\r\n * lifecycle.\r\n *\r\n * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if\r\n * they are available.\r\n */\r\nclass TransportManager {\r\n /**\r\n * @param repoInfo - Metadata around the namespace we're connecting to\r\n */\r\n constructor(repoInfo) {\r\n this.initTransports_(repoInfo);\r\n }\r\n static get ALL_TRANSPORTS() {\r\n return [BrowserPollConnection, WebSocketConnection];\r\n }\r\n /**\r\n * Returns whether transport has been selected to ensure WebSocketConnection or BrowserPollConnection are not called after\r\n * TransportManager has already set up transports_\r\n */\r\n static get IS_TRANSPORT_INITIALIZED() {\r\n return this.globalTransportInitialized_;\r\n }\r\n initTransports_(repoInfo) {\r\n const isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();\r\n let isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();\r\n if (repoInfo.webSocketOnly) {\r\n if (!isWebSocketsAvailable) {\r\n warn(\"wss:// URL used, but browser isn't known to support websockets. Trying anyway.\");\r\n }\r\n isSkipPollConnection = true;\r\n }\r\n if (isSkipPollConnection) {\r\n this.transports_ = [WebSocketConnection];\r\n }\r\n else {\r\n const transports = (this.transports_ = []);\r\n for (const transport of TransportManager.ALL_TRANSPORTS) {\r\n if (transport && transport['isAvailable']()) {\r\n transports.push(transport);\r\n }\r\n }\r\n TransportManager.globalTransportInitialized_ = true;\r\n }\r\n }\r\n /**\r\n * @returns The constructor for the initial transport to use\r\n */\r\n initialTransport() {\r\n if (this.transports_.length > 0) {\r\n return this.transports_[0];\r\n }\r\n else {\r\n throw new Error('No transports available');\r\n }\r\n }\r\n /**\r\n * @returns The constructor for the next transport, or null\r\n */\r\n upgradeTransport() {\r\n if (this.transports_.length > 1) {\r\n return this.transports_[1];\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}\r\n// Keeps track of whether the TransportManager has already chosen a transport to use\r\nTransportManager.globalTransportInitialized_ = false;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Abort upgrade attempt if it takes longer than 60s.\r\nconst UPGRADE_TIMEOUT = 60000;\r\n// For some transports (WebSockets), we need to \"validate\" the transport by exchanging a few requests and responses.\r\n// If we haven't sent enough requests within 5s, we'll start sending noop ping requests.\r\nconst DELAY_BEFORE_SENDING_EXTRA_REQUESTS = 5000;\r\n// If the initial data sent triggers a lot of bandwidth (i.e. it's a large put or a listen for a large amount of data)\r\n// then we may not be able to exchange our ping/pong requests within the healthy timeout. So if we reach the timeout\r\n// but we've sent/received enough bytes, we don't cancel the connection.\r\nconst BYTES_SENT_HEALTHY_OVERRIDE = 10 * 1024;\r\nconst BYTES_RECEIVED_HEALTHY_OVERRIDE = 100 * 1024;\r\nconst MESSAGE_TYPE = 't';\r\nconst MESSAGE_DATA = 'd';\r\nconst CONTROL_SHUTDOWN = 's';\r\nconst CONTROL_RESET = 'r';\r\nconst CONTROL_ERROR = 'e';\r\nconst CONTROL_PONG = 'o';\r\nconst SWITCH_ACK = 'a';\r\nconst END_TRANSMISSION = 'n';\r\nconst PING = 'p';\r\nconst SERVER_HELLO = 'h';\r\n/**\r\n * Creates a new real-time connection to the server using whichever method works\r\n * best in the current browser.\r\n */\r\nclass Connection {\r\n /**\r\n * @param id - an id for this connection\r\n * @param repoInfo_ - the info for the endpoint to connect to\r\n * @param applicationId_ - the Firebase App ID for this project\r\n * @param appCheckToken_ - The App Check Token for this device.\r\n * @param authToken_ - The auth token for this session.\r\n * @param onMessage_ - the callback to be triggered when a server-push message arrives\r\n * @param onReady_ - the callback to be triggered when this connection is ready to send messages.\r\n * @param onDisconnect_ - the callback to be triggered when a connection was lost\r\n * @param onKill_ - the callback to be triggered when this connection has permanently shut down.\r\n * @param lastSessionId - last session id in persistent connection. is used to clean up old session in real-time server\r\n */\r\n constructor(id, repoInfo_, applicationId_, appCheckToken_, authToken_, onMessage_, onReady_, onDisconnect_, onKill_, lastSessionId) {\r\n this.id = id;\r\n this.repoInfo_ = repoInfo_;\r\n this.applicationId_ = applicationId_;\r\n this.appCheckToken_ = appCheckToken_;\r\n this.authToken_ = authToken_;\r\n this.onMessage_ = onMessage_;\r\n this.onReady_ = onReady_;\r\n this.onDisconnect_ = onDisconnect_;\r\n this.onKill_ = onKill_;\r\n this.lastSessionId = lastSessionId;\r\n this.connectionCount = 0;\r\n this.pendingDataMessages = [];\r\n this.state_ = 0 /* RealtimeState.CONNECTING */;\r\n this.log_ = logWrapper('c:' + this.id + ':');\r\n this.transportManager_ = new TransportManager(repoInfo_);\r\n this.log_('Connection created');\r\n this.start_();\r\n }\r\n /**\r\n * Starts a connection attempt\r\n */\r\n start_() {\r\n const conn = this.transportManager_.initialTransport();\r\n this.conn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, null, this.lastSessionId);\r\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n // can consider the transport healthy.\r\n this.primaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;\r\n const onMessageReceived = this.connReceiver_(this.conn_);\r\n const onConnectionLost = this.disconnReceiver_(this.conn_);\r\n this.tx_ = this.conn_;\r\n this.rx_ = this.conn_;\r\n this.secondaryConn_ = null;\r\n this.isHealthy_ = false;\r\n /*\r\n * Firefox doesn't like when code from one iframe tries to create another iframe by way of the parent frame.\r\n * This can occur in the case of a redirect, i.e. we guessed wrong on what server to connect to and received a reset.\r\n * Somehow, setTimeout seems to make this ok. That doesn't make sense from a security perspective, since you should\r\n * still have the context of your originating frame.\r\n */\r\n setTimeout(() => {\r\n // this.conn_ gets set to null in some of the tests. Check to make sure it still exists before using it\r\n this.conn_ && this.conn_.open(onMessageReceived, onConnectionLost);\r\n }, Math.floor(0));\r\n const healthyTimeoutMS = conn['healthyTimeout'] || 0;\r\n if (healthyTimeoutMS > 0) {\r\n this.healthyTimeout_ = setTimeoutNonBlocking(() => {\r\n this.healthyTimeout_ = null;\r\n if (!this.isHealthy_) {\r\n if (this.conn_ &&\r\n this.conn_.bytesReceived > BYTES_RECEIVED_HEALTHY_OVERRIDE) {\r\n this.log_('Connection exceeded healthy timeout but has received ' +\r\n this.conn_.bytesReceived +\r\n ' bytes. Marking connection healthy.');\r\n this.isHealthy_ = true;\r\n this.conn_.markConnectionHealthy();\r\n }\r\n else if (this.conn_ &&\r\n this.conn_.bytesSent > BYTES_SENT_HEALTHY_OVERRIDE) {\r\n this.log_('Connection exceeded healthy timeout but has sent ' +\r\n this.conn_.bytesSent +\r\n ' bytes. Leaving connection alive.');\r\n // NOTE: We don't want to mark it healthy, since we have no guarantee that the bytes have made it to\r\n // the server.\r\n }\r\n else {\r\n this.log_('Closing unhealthy connection after timeout.');\r\n this.close();\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(healthyTimeoutMS));\r\n }\r\n }\r\n nextTransportId_() {\r\n return 'c:' + this.id + ':' + this.connectionCount++;\r\n }\r\n disconnReceiver_(conn) {\r\n return everConnected => {\r\n if (conn === this.conn_) {\r\n this.onConnectionLost_(everConnected);\r\n }\r\n else if (conn === this.secondaryConn_) {\r\n this.log_('Secondary connection lost.');\r\n this.onSecondaryConnectionLost_();\r\n }\r\n else {\r\n this.log_('closing an old connection');\r\n }\r\n };\r\n }\r\n connReceiver_(conn) {\r\n return (message) => {\r\n if (this.state_ !== 2 /* RealtimeState.DISCONNECTED */) {\r\n if (conn === this.rx_) {\r\n this.onPrimaryMessageReceived_(message);\r\n }\r\n else if (conn === this.secondaryConn_) {\r\n this.onSecondaryMessageReceived_(message);\r\n }\r\n else {\r\n this.log_('message on old connection');\r\n }\r\n }\r\n };\r\n }\r\n /**\r\n * @param dataMsg - An arbitrary data message to be sent to the server\r\n */\r\n sendRequest(dataMsg) {\r\n // wrap in a data message envelope and send it on\r\n const msg = { t: 'd', d: dataMsg };\r\n this.sendData_(msg);\r\n }\r\n tryCleanupConnection() {\r\n if (this.tx_ === this.secondaryConn_ && this.rx_ === this.secondaryConn_) {\r\n this.log_('cleaning up and promoting a connection: ' + this.secondaryConn_.connId);\r\n this.conn_ = this.secondaryConn_;\r\n this.secondaryConn_ = null;\r\n // the server will shutdown the old connection\r\n }\r\n }\r\n onSecondaryControl_(controlData) {\r\n if (MESSAGE_TYPE in controlData) {\r\n const cmd = controlData[MESSAGE_TYPE];\r\n if (cmd === SWITCH_ACK) {\r\n this.upgradeIfSecondaryHealthy_();\r\n }\r\n else if (cmd === CONTROL_RESET) {\r\n // Most likely the session wasn't valid. Abandon the switch attempt\r\n this.log_('Got a reset on secondary, closing it');\r\n this.secondaryConn_.close();\r\n // If we were already using this connection for something, than we need to fully close\r\n if (this.tx_ === this.secondaryConn_ ||\r\n this.rx_ === this.secondaryConn_) {\r\n this.close();\r\n }\r\n }\r\n else if (cmd === CONTROL_PONG) {\r\n this.log_('got pong on secondary.');\r\n this.secondaryResponsesRequired_--;\r\n this.upgradeIfSecondaryHealthy_();\r\n }\r\n }\r\n }\r\n onSecondaryMessageReceived_(parsedData) {\r\n const layer = requireKey('t', parsedData);\r\n const data = requireKey('d', parsedData);\r\n if (layer === 'c') {\r\n this.onSecondaryControl_(data);\r\n }\r\n else if (layer === 'd') {\r\n // got a data message, but we're still second connection. Need to buffer it up\r\n this.pendingDataMessages.push(data);\r\n }\r\n else {\r\n throw new Error('Unknown protocol layer: ' + layer);\r\n }\r\n }\r\n upgradeIfSecondaryHealthy_() {\r\n if (this.secondaryResponsesRequired_ <= 0) {\r\n this.log_('Secondary connection is healthy.');\r\n this.isHealthy_ = true;\r\n this.secondaryConn_.markConnectionHealthy();\r\n this.proceedWithUpgrade_();\r\n }\r\n else {\r\n // Send a ping to make sure the connection is healthy.\r\n this.log_('sending ping on secondary.');\r\n this.secondaryConn_.send({ t: 'c', d: { t: PING, d: {} } });\r\n }\r\n }\r\n proceedWithUpgrade_() {\r\n // tell this connection to consider itself open\r\n this.secondaryConn_.start();\r\n // send ack\r\n this.log_('sending client ack on secondary');\r\n this.secondaryConn_.send({ t: 'c', d: { t: SWITCH_ACK, d: {} } });\r\n // send end packet on primary transport, switch to sending on this one\r\n // can receive on this one, buffer responses until end received on primary transport\r\n this.log_('Ending transmission on primary');\r\n this.conn_.send({ t: 'c', d: { t: END_TRANSMISSION, d: {} } });\r\n this.tx_ = this.secondaryConn_;\r\n this.tryCleanupConnection();\r\n }\r\n onPrimaryMessageReceived_(parsedData) {\r\n // Must refer to parsedData properties in quotes, so closure doesn't touch them.\r\n const layer = requireKey('t', parsedData);\r\n const data = requireKey('d', parsedData);\r\n if (layer === 'c') {\r\n this.onControl_(data);\r\n }\r\n else if (layer === 'd') {\r\n this.onDataMessage_(data);\r\n }\r\n }\r\n onDataMessage_(message) {\r\n this.onPrimaryResponse_();\r\n // We don't do anything with data messages, just kick them up a level\r\n this.onMessage_(message);\r\n }\r\n onPrimaryResponse_() {\r\n if (!this.isHealthy_) {\r\n this.primaryResponsesRequired_--;\r\n if (this.primaryResponsesRequired_ <= 0) {\r\n this.log_('Primary connection is healthy.');\r\n this.isHealthy_ = true;\r\n this.conn_.markConnectionHealthy();\r\n }\r\n }\r\n }\r\n onControl_(controlData) {\r\n const cmd = requireKey(MESSAGE_TYPE, controlData);\r\n if (MESSAGE_DATA in controlData) {\r\n const payload = controlData[MESSAGE_DATA];\r\n if (cmd === SERVER_HELLO) {\r\n const handshakePayload = Object.assign({}, payload);\r\n if (this.repoInfo_.isUsingEmulator) {\r\n // Upon connecting, the emulator will pass the hostname that it's aware of, but we prefer the user's set hostname via `connectDatabaseEmulator` over what the emulator passes.\r\n handshakePayload.h = this.repoInfo_.host;\r\n }\r\n this.onHandshake_(handshakePayload);\r\n }\r\n else if (cmd === END_TRANSMISSION) {\r\n this.log_('recvd end transmission on primary');\r\n this.rx_ = this.secondaryConn_;\r\n for (let i = 0; i < this.pendingDataMessages.length; ++i) {\r\n this.onDataMessage_(this.pendingDataMessages[i]);\r\n }\r\n this.pendingDataMessages = [];\r\n this.tryCleanupConnection();\r\n }\r\n else if (cmd === CONTROL_SHUTDOWN) {\r\n // This was previously the 'onKill' callback passed to the lower-level connection\r\n // payload in this case is the reason for the shutdown. Generally a human-readable error\r\n this.onConnectionShutdown_(payload);\r\n }\r\n else if (cmd === CONTROL_RESET) {\r\n // payload in this case is the host we should contact\r\n this.onReset_(payload);\r\n }\r\n else if (cmd === CONTROL_ERROR) {\r\n error('Server Error: ' + payload);\r\n }\r\n else if (cmd === CONTROL_PONG) {\r\n this.log_('got pong on primary.');\r\n this.onPrimaryResponse_();\r\n this.sendPingOnPrimaryIfNecessary_();\r\n }\r\n else {\r\n error('Unknown control packet command: ' + cmd);\r\n }\r\n }\r\n }\r\n /**\r\n * @param handshake - The handshake data returned from the server\r\n */\r\n onHandshake_(handshake) {\r\n const timestamp = handshake.ts;\r\n const version = handshake.v;\r\n const host = handshake.h;\r\n this.sessionId = handshake.s;\r\n this.repoInfo_.host = host;\r\n // if we've already closed the connection, then don't bother trying to progress further\r\n if (this.state_ === 0 /* RealtimeState.CONNECTING */) {\r\n this.conn_.start();\r\n this.onConnectionEstablished_(this.conn_, timestamp);\r\n if (PROTOCOL_VERSION !== version) {\r\n warn('Protocol version mismatch detected');\r\n }\r\n // TODO: do we want to upgrade? when? maybe a delay?\r\n this.tryStartUpgrade_();\r\n }\r\n }\r\n tryStartUpgrade_() {\r\n const conn = this.transportManager_.upgradeTransport();\r\n if (conn) {\r\n this.startUpgrade_(conn);\r\n }\r\n }\r\n startUpgrade_(conn) {\r\n this.secondaryConn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, this.sessionId);\r\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n // can consider the transport healthy.\r\n this.secondaryResponsesRequired_ =\r\n conn['responsesRequiredToBeHealthy'] || 0;\r\n const onMessage = this.connReceiver_(this.secondaryConn_);\r\n const onDisconnect = this.disconnReceiver_(this.secondaryConn_);\r\n this.secondaryConn_.open(onMessage, onDisconnect);\r\n // If we haven't successfully upgraded after UPGRADE_TIMEOUT, give up and kill the secondary.\r\n setTimeoutNonBlocking(() => {\r\n if (this.secondaryConn_) {\r\n this.log_('Timed out trying to upgrade.');\r\n this.secondaryConn_.close();\r\n }\r\n }, Math.floor(UPGRADE_TIMEOUT));\r\n }\r\n onReset_(host) {\r\n this.log_('Reset packet received. New host: ' + host);\r\n this.repoInfo_.host = host;\r\n // TODO: if we're already \"connected\", we need to trigger a disconnect at the next layer up.\r\n // We don't currently support resets after the connection has already been established\r\n if (this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.close();\r\n }\r\n else {\r\n // Close whatever connections we have open and start again.\r\n this.closeConnections_();\r\n this.start_();\r\n }\r\n }\r\n onConnectionEstablished_(conn, timestamp) {\r\n this.log_('Realtime connection established.');\r\n this.conn_ = conn;\r\n this.state_ = 1 /* RealtimeState.CONNECTED */;\r\n if (this.onReady_) {\r\n this.onReady_(timestamp, this.sessionId);\r\n this.onReady_ = null;\r\n }\r\n // If after 5 seconds we haven't sent enough requests to the server to get the connection healthy,\r\n // send some pings.\r\n if (this.primaryResponsesRequired_ === 0) {\r\n this.log_('Primary connection is healthy.');\r\n this.isHealthy_ = true;\r\n }\r\n else {\r\n setTimeoutNonBlocking(() => {\r\n this.sendPingOnPrimaryIfNecessary_();\r\n }, Math.floor(DELAY_BEFORE_SENDING_EXTRA_REQUESTS));\r\n }\r\n }\r\n sendPingOnPrimaryIfNecessary_() {\r\n // If the connection isn't considered healthy yet, we'll send a noop ping packet request.\r\n if (!this.isHealthy_ && this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.log_('sending ping on primary.');\r\n this.sendData_({ t: 'c', d: { t: PING, d: {} } });\r\n }\r\n }\r\n onSecondaryConnectionLost_() {\r\n const conn = this.secondaryConn_;\r\n this.secondaryConn_ = null;\r\n if (this.tx_ === conn || this.rx_ === conn) {\r\n // we are relying on this connection already in some capacity. Therefore, a failure is real\r\n this.close();\r\n }\r\n }\r\n /**\r\n * @param everConnected - Whether or not the connection ever reached a server. Used to determine if\r\n * we should flush the host cache\r\n */\r\n onConnectionLost_(everConnected) {\r\n this.conn_ = null;\r\n // NOTE: IF you're seeing a Firefox error for this line, I think it might be because it's getting\r\n // called on window close and RealtimeState.CONNECTING is no longer defined. Just a guess.\r\n if (!everConnected && this.state_ === 0 /* RealtimeState.CONNECTING */) {\r\n this.log_('Realtime connection failed.');\r\n // Since we failed to connect at all, clear any cached entry for this namespace in case the machine went away\r\n if (this.repoInfo_.isCacheableHost()) {\r\n PersistentStorage.remove('host:' + this.repoInfo_.host);\r\n // reset the internal host to what we would show the user, i.e. .firebaseio.com\r\n this.repoInfo_.internalHost = this.repoInfo_.host;\r\n }\r\n }\r\n else if (this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.log_('Realtime connection lost.');\r\n }\r\n this.close();\r\n }\r\n onConnectionShutdown_(reason) {\r\n this.log_('Connection shutdown command received. Shutting down...');\r\n if (this.onKill_) {\r\n this.onKill_(reason);\r\n this.onKill_ = null;\r\n }\r\n // We intentionally don't want to fire onDisconnect (kill is a different case),\r\n // so clear the callback.\r\n this.onDisconnect_ = null;\r\n this.close();\r\n }\r\n sendData_(data) {\r\n if (this.state_ !== 1 /* RealtimeState.CONNECTED */) {\r\n throw 'Connection is not connected';\r\n }\r\n else {\r\n this.tx_.send(data);\r\n }\r\n }\r\n /**\r\n * Cleans up this connection, calling the appropriate callbacks\r\n */\r\n close() {\r\n if (this.state_ !== 2 /* RealtimeState.DISCONNECTED */) {\r\n this.log_('Closing realtime connection.');\r\n this.state_ = 2 /* RealtimeState.DISCONNECTED */;\r\n this.closeConnections_();\r\n if (this.onDisconnect_) {\r\n this.onDisconnect_();\r\n this.onDisconnect_ = null;\r\n }\r\n }\r\n }\r\n closeConnections_() {\r\n this.log_('Shutting down all connections');\r\n if (this.conn_) {\r\n this.conn_.close();\r\n this.conn_ = null;\r\n }\r\n if (this.secondaryConn_) {\r\n this.secondaryConn_.close();\r\n this.secondaryConn_ = null;\r\n }\r\n if (this.healthyTimeout_) {\r\n clearTimeout(this.healthyTimeout_);\r\n this.healthyTimeout_ = null;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface defining the set of actions that can be performed against the Firebase server\r\n * (basically corresponds to our wire protocol).\r\n *\r\n * @interface\r\n */\r\nclass ServerActions {\r\n put(pathString, data, onComplete, hash) { }\r\n merge(pathString, data, onComplete, hash) { }\r\n /**\r\n * Refreshes the auth token for the current connection.\r\n * @param token - The authentication token\r\n */\r\n refreshAuthToken(token) { }\r\n /**\r\n * Refreshes the app check token for the current connection.\r\n * @param token The app check token\r\n */\r\n refreshAppCheckToken(token) { }\r\n onDisconnectPut(pathString, data, onComplete) { }\r\n onDisconnectMerge(pathString, data, onComplete) { }\r\n onDisconnectCancel(pathString, onComplete) { }\r\n reportStats(stats) { }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Base class to be used if you want to emit events. Call the constructor with\r\n * the set of allowed event names.\r\n */\r\nclass EventEmitter {\r\n constructor(allowedEvents_) {\r\n this.allowedEvents_ = allowedEvents_;\r\n this.listeners_ = {};\r\n assert(Array.isArray(allowedEvents_) && allowedEvents_.length > 0, 'Requires a non-empty array');\r\n }\r\n /**\r\n * To be called by derived classes to trigger events.\r\n */\r\n trigger(eventType, ...varArgs) {\r\n if (Array.isArray(this.listeners_[eventType])) {\r\n // Clone the list, since callbacks could add/remove listeners.\r\n const listeners = [...this.listeners_[eventType]];\r\n for (let i = 0; i < listeners.length; i++) {\r\n listeners[i].callback.apply(listeners[i].context, varArgs);\r\n }\r\n }\r\n }\r\n on(eventType, callback, context) {\r\n this.validateEventType_(eventType);\r\n this.listeners_[eventType] = this.listeners_[eventType] || [];\r\n this.listeners_[eventType].push({ callback, context });\r\n const eventData = this.getInitialEvent(eventType);\r\n if (eventData) {\r\n callback.apply(context, eventData);\r\n }\r\n }\r\n off(eventType, callback, context) {\r\n this.validateEventType_(eventType);\r\n const listeners = this.listeners_[eventType] || [];\r\n for (let i = 0; i < listeners.length; i++) {\r\n if (listeners[i].callback === callback &&\r\n (!context || context === listeners[i].context)) {\r\n listeners.splice(i, 1);\r\n return;\r\n }\r\n }\r\n }\r\n validateEventType_(eventType) {\r\n assert(this.allowedEvents_.find(et => {\r\n return et === eventType;\r\n }), 'Unknown event: ' + eventType);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Monitors online state (as reported by window.online/offline events).\r\n *\r\n * The expectation is that this could have many false positives (thinks we are online\r\n * when we're not), but no false negatives. So we can safely use it to determine when\r\n * we definitely cannot reach the internet.\r\n */\r\nclass OnlineMonitor extends EventEmitter {\r\n constructor() {\r\n super(['online']);\r\n this.online_ = true;\r\n // We've had repeated complaints that Cordova apps can get stuck \"offline\", e.g.\r\n // https://forum.ionicframework.com/t/firebase-connection-is-lost-and-never-come-back/43810\r\n // It would seem that the 'online' event does not always fire consistently. So we disable it\r\n // for Cordova.\r\n if (typeof window !== 'undefined' &&\r\n typeof window.addEventListener !== 'undefined' &&\r\n !isMobileCordova()) {\r\n window.addEventListener('online', () => {\r\n if (!this.online_) {\r\n this.online_ = true;\r\n this.trigger('online', true);\r\n }\r\n }, false);\r\n window.addEventListener('offline', () => {\r\n if (this.online_) {\r\n this.online_ = false;\r\n this.trigger('online', false);\r\n }\r\n }, false);\r\n }\r\n }\r\n static getInstance() {\r\n return new OnlineMonitor();\r\n }\r\n getInitialEvent(eventType) {\r\n assert(eventType === 'online', 'Unknown event type: ' + eventType);\r\n return [this.online_];\r\n }\r\n currentlyOnline() {\r\n return this.online_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Maximum key depth. */\r\nconst MAX_PATH_DEPTH = 32;\r\n/** Maximum number of (UTF8) bytes in a Firebase path. */\r\nconst MAX_PATH_LENGTH_BYTES = 768;\r\n/**\r\n * An immutable object representing a parsed path. It's immutable so that you\r\n * can pass them around to other functions without worrying about them changing\r\n * it.\r\n */\r\nclass Path {\r\n /**\r\n * @param pathOrString - Path string to parse, or another path, or the raw\r\n * tokens array\r\n */\r\n constructor(pathOrString, pieceNum) {\r\n if (pieceNum === void 0) {\r\n this.pieces_ = pathOrString.split('/');\r\n // Remove empty pieces.\r\n let copyTo = 0;\r\n for (let i = 0; i < this.pieces_.length; i++) {\r\n if (this.pieces_[i].length > 0) {\r\n this.pieces_[copyTo] = this.pieces_[i];\r\n copyTo++;\r\n }\r\n }\r\n this.pieces_.length = copyTo;\r\n this.pieceNum_ = 0;\r\n }\r\n else {\r\n this.pieces_ = pathOrString;\r\n this.pieceNum_ = pieceNum;\r\n }\r\n }\r\n toString() {\r\n let pathString = '';\r\n for (let i = this.pieceNum_; i < this.pieces_.length; i++) {\r\n if (this.pieces_[i] !== '') {\r\n pathString += '/' + this.pieces_[i];\r\n }\r\n }\r\n return pathString || '/';\r\n }\r\n}\r\nfunction newEmptyPath() {\r\n return new Path('');\r\n}\r\nfunction pathGetFront(path) {\r\n if (path.pieceNum_ >= path.pieces_.length) {\r\n return null;\r\n }\r\n return path.pieces_[path.pieceNum_];\r\n}\r\n/**\r\n * @returns The number of segments in this path\r\n */\r\nfunction pathGetLength(path) {\r\n return path.pieces_.length - path.pieceNum_;\r\n}\r\nfunction pathPopFront(path) {\r\n let pieceNum = path.pieceNum_;\r\n if (pieceNum < path.pieces_.length) {\r\n pieceNum++;\r\n }\r\n return new Path(path.pieces_, pieceNum);\r\n}\r\nfunction pathGetBack(path) {\r\n if (path.pieceNum_ < path.pieces_.length) {\r\n return path.pieces_[path.pieces_.length - 1];\r\n }\r\n return null;\r\n}\r\nfunction pathToUrlEncodedString(path) {\r\n let pathString = '';\r\n for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\r\n if (path.pieces_[i] !== '') {\r\n pathString += '/' + encodeURIComponent(String(path.pieces_[i]));\r\n }\r\n }\r\n return pathString || '/';\r\n}\r\n/**\r\n * Shallow copy of the parts of the path.\r\n *\r\n */\r\nfunction pathSlice(path, begin = 0) {\r\n return path.pieces_.slice(path.pieceNum_ + begin);\r\n}\r\nfunction pathParent(path) {\r\n if (path.pieceNum_ >= path.pieces_.length) {\r\n return null;\r\n }\r\n const pieces = [];\r\n for (let i = path.pieceNum_; i < path.pieces_.length - 1; i++) {\r\n pieces.push(path.pieces_[i]);\r\n }\r\n return new Path(pieces, 0);\r\n}\r\nfunction pathChild(path, childPathObj) {\r\n const pieces = [];\r\n for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\r\n pieces.push(path.pieces_[i]);\r\n }\r\n if (childPathObj instanceof Path) {\r\n for (let i = childPathObj.pieceNum_; i < childPathObj.pieces_.length; i++) {\r\n pieces.push(childPathObj.pieces_[i]);\r\n }\r\n }\r\n else {\r\n const childPieces = childPathObj.split('/');\r\n for (let i = 0; i < childPieces.length; i++) {\r\n if (childPieces[i].length > 0) {\r\n pieces.push(childPieces[i]);\r\n }\r\n }\r\n }\r\n return new Path(pieces, 0);\r\n}\r\n/**\r\n * @returns True if there are no segments in this path\r\n */\r\nfunction pathIsEmpty(path) {\r\n return path.pieceNum_ >= path.pieces_.length;\r\n}\r\n/**\r\n * @returns The path from outerPath to innerPath\r\n */\r\nfunction newRelativePath(outerPath, innerPath) {\r\n const outer = pathGetFront(outerPath), inner = pathGetFront(innerPath);\r\n if (outer === null) {\r\n return innerPath;\r\n }\r\n else if (outer === inner) {\r\n return newRelativePath(pathPopFront(outerPath), pathPopFront(innerPath));\r\n }\r\n else {\r\n throw new Error('INTERNAL ERROR: innerPath (' +\r\n innerPath +\r\n ') is not within ' +\r\n 'outerPath (' +\r\n outerPath +\r\n ')');\r\n }\r\n}\r\n/**\r\n * @returns -1, 0, 1 if left is less, equal, or greater than the right.\r\n */\r\nfunction pathCompare(left, right) {\r\n const leftKeys = pathSlice(left, 0);\r\n const rightKeys = pathSlice(right, 0);\r\n for (let i = 0; i < leftKeys.length && i < rightKeys.length; i++) {\r\n const cmp = nameCompare(leftKeys[i], rightKeys[i]);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n }\r\n if (leftKeys.length === rightKeys.length) {\r\n return 0;\r\n }\r\n return leftKeys.length < rightKeys.length ? -1 : 1;\r\n}\r\n/**\r\n * @returns true if paths are the same.\r\n */\r\nfunction pathEquals(path, other) {\r\n if (pathGetLength(path) !== pathGetLength(other)) {\r\n return false;\r\n }\r\n for (let i = path.pieceNum_, j = other.pieceNum_; i <= path.pieces_.length; i++, j++) {\r\n if (path.pieces_[i] !== other.pieces_[j]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * @returns True if this path is a parent of (or the same as) other\r\n */\r\nfunction pathContains(path, other) {\r\n let i = path.pieceNum_;\r\n let j = other.pieceNum_;\r\n if (pathGetLength(path) > pathGetLength(other)) {\r\n return false;\r\n }\r\n while (i < path.pieces_.length) {\r\n if (path.pieces_[i] !== other.pieces_[j]) {\r\n return false;\r\n }\r\n ++i;\r\n ++j;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Dynamic (mutable) path used to count path lengths.\r\n *\r\n * This class is used to efficiently check paths for valid\r\n * length (in UTF8 bytes) and depth (used in path validation).\r\n *\r\n * Throws Error exception if path is ever invalid.\r\n *\r\n * The definition of a path always begins with '/'.\r\n */\r\nclass ValidationPath {\r\n /**\r\n * @param path - Initial Path.\r\n * @param errorPrefix_ - Prefix for any error messages.\r\n */\r\n constructor(path, errorPrefix_) {\r\n this.errorPrefix_ = errorPrefix_;\r\n this.parts_ = pathSlice(path, 0);\r\n /** Initialize to number of '/' chars needed in path. */\r\n this.byteLength_ = Math.max(1, this.parts_.length);\r\n for (let i = 0; i < this.parts_.length; i++) {\r\n this.byteLength_ += stringLength(this.parts_[i]);\r\n }\r\n validationPathCheckValid(this);\r\n }\r\n}\r\nfunction validationPathPush(validationPath, child) {\r\n // Count the needed '/'\r\n if (validationPath.parts_.length > 0) {\r\n validationPath.byteLength_ += 1;\r\n }\r\n validationPath.parts_.push(child);\r\n validationPath.byteLength_ += stringLength(child);\r\n validationPathCheckValid(validationPath);\r\n}\r\nfunction validationPathPop(validationPath) {\r\n const last = validationPath.parts_.pop();\r\n validationPath.byteLength_ -= stringLength(last);\r\n // Un-count the previous '/'\r\n if (validationPath.parts_.length > 0) {\r\n validationPath.byteLength_ -= 1;\r\n }\r\n}\r\nfunction validationPathCheckValid(validationPath) {\r\n if (validationPath.byteLength_ > MAX_PATH_LENGTH_BYTES) {\r\n throw new Error(validationPath.errorPrefix_ +\r\n 'has a key path longer than ' +\r\n MAX_PATH_LENGTH_BYTES +\r\n ' bytes (' +\r\n validationPath.byteLength_ +\r\n ').');\r\n }\r\n if (validationPath.parts_.length > MAX_PATH_DEPTH) {\r\n throw new Error(validationPath.errorPrefix_ +\r\n 'path specified exceeds the maximum depth that can be written (' +\r\n MAX_PATH_DEPTH +\r\n ') or object contains a cycle ' +\r\n validationPathToErrorString(validationPath));\r\n }\r\n}\r\n/**\r\n * String for use in error messages - uses '.' notation for path.\r\n */\r\nfunction validationPathToErrorString(validationPath) {\r\n if (validationPath.parts_.length === 0) {\r\n return '';\r\n }\r\n return \"in property '\" + validationPath.parts_.join('.') + \"'\";\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass VisibilityMonitor extends EventEmitter {\r\n constructor() {\r\n super(['visible']);\r\n let hidden;\r\n let visibilityChange;\r\n if (typeof document !== 'undefined' &&\r\n typeof document.addEventListener !== 'undefined') {\r\n if (typeof document['hidden'] !== 'undefined') {\r\n // Opera 12.10 and Firefox 18 and later support\r\n visibilityChange = 'visibilitychange';\r\n hidden = 'hidden';\r\n }\r\n else if (typeof document['mozHidden'] !== 'undefined') {\r\n visibilityChange = 'mozvisibilitychange';\r\n hidden = 'mozHidden';\r\n }\r\n else if (typeof document['msHidden'] !== 'undefined') {\r\n visibilityChange = 'msvisibilitychange';\r\n hidden = 'msHidden';\r\n }\r\n else if (typeof document['webkitHidden'] !== 'undefined') {\r\n visibilityChange = 'webkitvisibilitychange';\r\n hidden = 'webkitHidden';\r\n }\r\n }\r\n // Initially, we always assume we are visible. This ensures that in browsers\r\n // without page visibility support or in cases where we are never visible\r\n // (e.g. chrome extension), we act as if we are visible, i.e. don't delay\r\n // reconnects\r\n this.visible_ = true;\r\n if (visibilityChange) {\r\n document.addEventListener(visibilityChange, () => {\r\n const visible = !document[hidden];\r\n if (visible !== this.visible_) {\r\n this.visible_ = visible;\r\n this.trigger('visible', visible);\r\n }\r\n }, false);\r\n }\r\n }\r\n static getInstance() {\r\n return new VisibilityMonitor();\r\n }\r\n getInitialEvent(eventType) {\r\n assert(eventType === 'visible', 'Unknown event type: ' + eventType);\r\n return [this.visible_];\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst RECONNECT_MIN_DELAY = 1000;\r\nconst RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858)\r\nconst RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server)\r\nconst RECONNECT_DELAY_MULTIPLIER = 1.3;\r\nconst RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec.\r\nconst SERVER_KILL_INTERRUPT_REASON = 'server_kill';\r\n// If auth fails repeatedly, we'll assume something is wrong and log a warning / back off.\r\nconst INVALID_TOKEN_THRESHOLD = 3;\r\n/**\r\n * Firebase connection. Abstracts wire protocol and handles reconnecting.\r\n *\r\n * NOTE: All JSON objects sent to the realtime connection must have property names enclosed\r\n * in quotes to make sure the closure compiler does not minify them.\r\n */\r\nclass PersistentConnection extends ServerActions {\r\n /**\r\n * @param repoInfo_ - Data about the namespace we are connecting to\r\n * @param applicationId_ - The Firebase App ID for this project\r\n * @param onDataUpdate_ - A callback for new data from the server\r\n */\r\n constructor(repoInfo_, applicationId_, onDataUpdate_, onConnectStatus_, onServerInfoUpdate_, authTokenProvider_, appCheckTokenProvider_, authOverride_) {\r\n super();\r\n this.repoInfo_ = repoInfo_;\r\n this.applicationId_ = applicationId_;\r\n this.onDataUpdate_ = onDataUpdate_;\r\n this.onConnectStatus_ = onConnectStatus_;\r\n this.onServerInfoUpdate_ = onServerInfoUpdate_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckTokenProvider_ = appCheckTokenProvider_;\r\n this.authOverride_ = authOverride_;\r\n // Used for diagnostic logging.\r\n this.id = PersistentConnection.nextPersistentConnectionId_++;\r\n this.log_ = logWrapper('p:' + this.id + ':');\r\n this.interruptReasons_ = {};\r\n this.listens = new Map();\r\n this.outstandingPuts_ = [];\r\n this.outstandingGets_ = [];\r\n this.outstandingPutCount_ = 0;\r\n this.outstandingGetCount_ = 0;\r\n this.onDisconnectRequestQueue_ = [];\r\n this.connected_ = false;\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_DEFAULT;\r\n this.securityDebugCallback_ = null;\r\n this.lastSessionId = null;\r\n this.establishConnectionTimer_ = null;\r\n this.visible_ = false;\r\n // Before we get connected, we keep a queue of pending messages to send.\r\n this.requestCBHash_ = {};\r\n this.requestNumber_ = 0;\r\n this.realtime_ = null;\r\n this.authToken_ = null;\r\n this.appCheckToken_ = null;\r\n this.forceTokenRefresh_ = false;\r\n this.invalidAuthTokenCount_ = 0;\r\n this.invalidAppCheckTokenCount_ = 0;\r\n this.firstConnection_ = true;\r\n this.lastConnectionAttemptTime_ = null;\r\n this.lastConnectionEstablishedTime_ = null;\r\n if (authOverride_ && !isNodeSdk()) {\r\n throw new Error('Auth override specified in options, but not supported on non Node.js platforms');\r\n }\r\n VisibilityMonitor.getInstance().on('visible', this.onVisible_, this);\r\n if (repoInfo_.host.indexOf('fblocal') === -1) {\r\n OnlineMonitor.getInstance().on('online', this.onOnline_, this);\r\n }\r\n }\r\n sendRequest(action, body, onResponse) {\r\n const curReqNum = ++this.requestNumber_;\r\n const msg = { r: curReqNum, a: action, b: body };\r\n this.log_(stringify(msg));\r\n assert(this.connected_, \"sendRequest call when we're not connected not allowed.\");\r\n this.realtime_.sendRequest(msg);\r\n if (onResponse) {\r\n this.requestCBHash_[curReqNum] = onResponse;\r\n }\r\n }\r\n get(query) {\r\n this.initConnection_();\r\n const deferred = new Deferred();\r\n const request = {\r\n p: query._path.toString(),\r\n q: query._queryObject\r\n };\r\n const outstandingGet = {\r\n action: 'g',\r\n request,\r\n onComplete: (message) => {\r\n const payload = message['d'];\r\n if (message['s'] === 'ok') {\r\n deferred.resolve(payload);\r\n }\r\n else {\r\n deferred.reject(payload);\r\n }\r\n }\r\n };\r\n this.outstandingGets_.push(outstandingGet);\r\n this.outstandingGetCount_++;\r\n const index = this.outstandingGets_.length - 1;\r\n if (this.connected_) {\r\n this.sendGet_(index);\r\n }\r\n return deferred.promise;\r\n }\r\n listen(query, currentHashFn, tag, onComplete) {\r\n this.initConnection_();\r\n const queryId = query._queryIdentifier;\r\n const pathString = query._path.toString();\r\n this.log_('Listen called for ' + pathString + ' ' + queryId);\r\n if (!this.listens.has(pathString)) {\r\n this.listens.set(pathString, new Map());\r\n }\r\n assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'listen() called for non-default but complete query');\r\n assert(!this.listens.get(pathString).has(queryId), `listen() called twice for same path/queryId.`);\r\n const listenSpec = {\r\n onComplete,\r\n hashFn: currentHashFn,\r\n query,\r\n tag\r\n };\r\n this.listens.get(pathString).set(queryId, listenSpec);\r\n if (this.connected_) {\r\n this.sendListen_(listenSpec);\r\n }\r\n }\r\n sendGet_(index) {\r\n const get = this.outstandingGets_[index];\r\n this.sendRequest('g', get.request, (message) => {\r\n delete this.outstandingGets_[index];\r\n this.outstandingGetCount_--;\r\n if (this.outstandingGetCount_ === 0) {\r\n this.outstandingGets_ = [];\r\n }\r\n if (get.onComplete) {\r\n get.onComplete(message);\r\n }\r\n });\r\n }\r\n sendListen_(listenSpec) {\r\n const query = listenSpec.query;\r\n const pathString = query._path.toString();\r\n const queryId = query._queryIdentifier;\r\n this.log_('Listen on ' + pathString + ' for ' + queryId);\r\n const req = { /*path*/ p: pathString };\r\n const action = 'q';\r\n // Only bother to send query if it's non-default.\r\n if (listenSpec.tag) {\r\n req['q'] = query._queryObject;\r\n req['t'] = listenSpec.tag;\r\n }\r\n req[ /*hash*/'h'] = listenSpec.hashFn();\r\n this.sendRequest(action, req, (message) => {\r\n const payload = message[ /*data*/'d'];\r\n const status = message[ /*status*/'s'];\r\n // print warnings in any case...\r\n PersistentConnection.warnOnListenWarnings_(payload, query);\r\n const currentListenSpec = this.listens.get(pathString) &&\r\n this.listens.get(pathString).get(queryId);\r\n // only trigger actions if the listen hasn't been removed and readded\r\n if (currentListenSpec === listenSpec) {\r\n this.log_('listen response', message);\r\n if (status !== 'ok') {\r\n this.removeListen_(pathString, queryId);\r\n }\r\n if (listenSpec.onComplete) {\r\n listenSpec.onComplete(status, payload);\r\n }\r\n }\r\n });\r\n }\r\n static warnOnListenWarnings_(payload, query) {\r\n if (payload && typeof payload === 'object' && contains(payload, 'w')) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const warnings = safeGet(payload, 'w');\r\n if (Array.isArray(warnings) && ~warnings.indexOf('no_index')) {\r\n const indexSpec = '\".indexOn\": \"' + query._queryParams.getIndex().toString() + '\"';\r\n const indexPath = query._path.toString();\r\n warn(`Using an unspecified index. Your data will be downloaded and ` +\r\n `filtered on the client. Consider adding ${indexSpec} at ` +\r\n `${indexPath} to your security rules for better performance.`);\r\n }\r\n }\r\n }\r\n refreshAuthToken(token) {\r\n this.authToken_ = token;\r\n this.log_('Auth token refreshed');\r\n if (this.authToken_) {\r\n this.tryAuth();\r\n }\r\n else {\r\n //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete\r\n //the credential so we dont become authenticated next time we connect.\r\n if (this.connected_) {\r\n this.sendRequest('unauth', {}, () => { });\r\n }\r\n }\r\n this.reduceReconnectDelayIfAdminCredential_(token);\r\n }\r\n reduceReconnectDelayIfAdminCredential_(credential) {\r\n // NOTE: This isn't intended to be bulletproof (a malicious developer can always just modify the client).\r\n // Additionally, we don't bother resetting the max delay back to the default if auth fails / expires.\r\n const isFirebaseSecret = credential && credential.length === 40;\r\n if (isFirebaseSecret || isAdmin(credential)) {\r\n this.log_('Admin auth credential detected. Reducing max reconnect time.');\r\n this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n }\r\n }\r\n refreshAppCheckToken(token) {\r\n this.appCheckToken_ = token;\r\n this.log_('App check token refreshed');\r\n if (this.appCheckToken_) {\r\n this.tryAppCheck();\r\n }\r\n else {\r\n //If we're connected we want to let the server know to unauthenticate us.\r\n //If we're not connected, simply delete the credential so we dont become\r\n // authenticated next time we connect.\r\n if (this.connected_) {\r\n this.sendRequest('unappeck', {}, () => { });\r\n }\r\n }\r\n }\r\n /**\r\n * Attempts to authenticate with the given credentials. If the authentication attempt fails, it's triggered like\r\n * a auth revoked (the connection is closed).\r\n */\r\n tryAuth() {\r\n if (this.connected_ && this.authToken_) {\r\n const token = this.authToken_;\r\n const authMethod = isValidFormat(token) ? 'auth' : 'gauth';\r\n const requestData = { cred: token };\r\n if (this.authOverride_ === null) {\r\n requestData['noauth'] = true;\r\n }\r\n else if (typeof this.authOverride_ === 'object') {\r\n requestData['authvar'] = this.authOverride_;\r\n }\r\n this.sendRequest(authMethod, requestData, (res) => {\r\n const status = res[ /*status*/'s'];\r\n const data = res[ /*data*/'d'] || 'error';\r\n if (this.authToken_ === token) {\r\n if (status === 'ok') {\r\n this.invalidAuthTokenCount_ = 0;\r\n }\r\n else {\r\n // Triggers reconnect and force refresh for auth token\r\n this.onAuthRevoked_(status, data);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Attempts to authenticate with the given token. If the authentication\r\n * attempt fails, it's triggered like the token was revoked (the connection is\r\n * closed).\r\n */\r\n tryAppCheck() {\r\n if (this.connected_ && this.appCheckToken_) {\r\n this.sendRequest('appcheck', { 'token': this.appCheckToken_ }, (res) => {\r\n const status = res[ /*status*/'s'];\r\n const data = res[ /*data*/'d'] || 'error';\r\n if (status === 'ok') {\r\n this.invalidAppCheckTokenCount_ = 0;\r\n }\r\n else {\r\n this.onAppCheckRevoked_(status, data);\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * @inheritDoc\r\n */\r\n unlisten(query, tag) {\r\n const pathString = query._path.toString();\r\n const queryId = query._queryIdentifier;\r\n this.log_('Unlisten called for ' + pathString + ' ' + queryId);\r\n assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'unlisten() called for non-default but complete query');\r\n const listen = this.removeListen_(pathString, queryId);\r\n if (listen && this.connected_) {\r\n this.sendUnlisten_(pathString, queryId, query._queryObject, tag);\r\n }\r\n }\r\n sendUnlisten_(pathString, queryId, queryObj, tag) {\r\n this.log_('Unlisten on ' + pathString + ' for ' + queryId);\r\n const req = { /*path*/ p: pathString };\r\n const action = 'n';\r\n // Only bother sending queryId if it's non-default.\r\n if (tag) {\r\n req['q'] = queryObj;\r\n req['t'] = tag;\r\n }\r\n this.sendRequest(action, req);\r\n }\r\n onDisconnectPut(pathString, data, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('o', pathString, data, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'o',\r\n data,\r\n onComplete\r\n });\r\n }\r\n }\r\n onDisconnectMerge(pathString, data, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('om', pathString, data, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'om',\r\n data,\r\n onComplete\r\n });\r\n }\r\n }\r\n onDisconnectCancel(pathString, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('oc', pathString, null, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'oc',\r\n data: null,\r\n onComplete\r\n });\r\n }\r\n }\r\n sendOnDisconnect_(action, pathString, data, onComplete) {\r\n const request = { /*path*/ p: pathString, /*data*/ d: data };\r\n this.log_('onDisconnect ' + action, request);\r\n this.sendRequest(action, request, (response) => {\r\n if (onComplete) {\r\n setTimeout(() => {\r\n onComplete(response[ /*status*/'s'], response[ /* data */'d']);\r\n }, Math.floor(0));\r\n }\r\n });\r\n }\r\n put(pathString, data, onComplete, hash) {\r\n this.putInternal('p', pathString, data, onComplete, hash);\r\n }\r\n merge(pathString, data, onComplete, hash) {\r\n this.putInternal('m', pathString, data, onComplete, hash);\r\n }\r\n putInternal(action, pathString, data, onComplete, hash) {\r\n this.initConnection_();\r\n const request = {\r\n /*path*/ p: pathString,\r\n /*data*/ d: data\r\n };\r\n if (hash !== undefined) {\r\n request[ /*hash*/'h'] = hash;\r\n }\r\n // TODO: Only keep track of the most recent put for a given path?\r\n this.outstandingPuts_.push({\r\n action,\r\n request,\r\n onComplete\r\n });\r\n this.outstandingPutCount_++;\r\n const index = this.outstandingPuts_.length - 1;\r\n if (this.connected_) {\r\n this.sendPut_(index);\r\n }\r\n else {\r\n this.log_('Buffering put: ' + pathString);\r\n }\r\n }\r\n sendPut_(index) {\r\n const action = this.outstandingPuts_[index].action;\r\n const request = this.outstandingPuts_[index].request;\r\n const onComplete = this.outstandingPuts_[index].onComplete;\r\n this.outstandingPuts_[index].queued = this.connected_;\r\n this.sendRequest(action, request, (message) => {\r\n this.log_(action + ' response', message);\r\n delete this.outstandingPuts_[index];\r\n this.outstandingPutCount_--;\r\n // Clean up array occasionally.\r\n if (this.outstandingPutCount_ === 0) {\r\n this.outstandingPuts_ = [];\r\n }\r\n if (onComplete) {\r\n onComplete(message[ /*status*/'s'], message[ /* data */'d']);\r\n }\r\n });\r\n }\r\n reportStats(stats) {\r\n // If we're not connected, we just drop the stats.\r\n if (this.connected_) {\r\n const request = { /*counters*/ c: stats };\r\n this.log_('reportStats', request);\r\n this.sendRequest(/*stats*/ 's', request, result => {\r\n const status = result[ /*status*/'s'];\r\n if (status !== 'ok') {\r\n const errorReason = result[ /* data */'d'];\r\n this.log_('reportStats', 'Error sending stats: ' + errorReason);\r\n }\r\n });\r\n }\r\n }\r\n onDataMessage_(message) {\r\n if ('r' in message) {\r\n // this is a response\r\n this.log_('from server: ' + stringify(message));\r\n const reqNum = message['r'];\r\n const onResponse = this.requestCBHash_[reqNum];\r\n if (onResponse) {\r\n delete this.requestCBHash_[reqNum];\r\n onResponse(message[ /*body*/'b']);\r\n }\r\n }\r\n else if ('error' in message) {\r\n throw 'A server-side error has occurred: ' + message['error'];\r\n }\r\n else if ('a' in message) {\r\n // a and b are action and body, respectively\r\n this.onDataPush_(message['a'], message['b']);\r\n }\r\n }\r\n onDataPush_(action, body) {\r\n this.log_('handleServerMessage', action, body);\r\n if (action === 'd') {\r\n this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n /*isMerge*/ false, body['t']);\r\n }\r\n else if (action === 'm') {\r\n this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n /*isMerge=*/ true, body['t']);\r\n }\r\n else if (action === 'c') {\r\n this.onListenRevoked_(body[ /*path*/'p'], body[ /*query*/'q']);\r\n }\r\n else if (action === 'ac') {\r\n this.onAuthRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n }\r\n else if (action === 'apc') {\r\n this.onAppCheckRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n }\r\n else if (action === 'sd') {\r\n this.onSecurityDebugPacket_(body);\r\n }\r\n else {\r\n error('Unrecognized action received from server: ' +\r\n stringify(action) +\r\n '\\nAre you using the latest client?');\r\n }\r\n }\r\n onReady_(timestamp, sessionId) {\r\n this.log_('connection ready');\r\n this.connected_ = true;\r\n this.lastConnectionEstablishedTime_ = new Date().getTime();\r\n this.handleTimestamp_(timestamp);\r\n this.lastSessionId = sessionId;\r\n if (this.firstConnection_) {\r\n this.sendConnectStats_();\r\n }\r\n this.restoreState_();\r\n this.firstConnection_ = false;\r\n this.onConnectStatus_(true);\r\n }\r\n scheduleConnect_(timeout) {\r\n assert(!this.realtime_, \"Scheduling a connect when we're already connected/ing?\");\r\n if (this.establishConnectionTimer_) {\r\n clearTimeout(this.establishConnectionTimer_);\r\n }\r\n // NOTE: Even when timeout is 0, it's important to do a setTimeout to work around an infuriating \"Security Error\" in\r\n // Firefox when trying to write to our long-polling iframe in some scenarios (e.g. Forge or our unit tests).\r\n this.establishConnectionTimer_ = setTimeout(() => {\r\n this.establishConnectionTimer_ = null;\r\n this.establishConnection_();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(timeout));\r\n }\r\n initConnection_() {\r\n if (!this.realtime_ && this.firstConnection_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n onVisible_(visible) {\r\n // NOTE: Tabbing away and back to a window will defeat our reconnect backoff, but I think that's fine.\r\n if (visible &&\r\n !this.visible_ &&\r\n this.reconnectDelay_ === this.maxReconnectDelay_) {\r\n this.log_('Window became visible. Reducing delay.');\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n this.visible_ = visible;\r\n }\r\n onOnline_(online) {\r\n if (online) {\r\n this.log_('Browser went online.');\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n else {\r\n this.log_('Browser went offline. Killing connection.');\r\n if (this.realtime_) {\r\n this.realtime_.close();\r\n }\r\n }\r\n }\r\n onRealtimeDisconnect_() {\r\n this.log_('data client disconnected');\r\n this.connected_ = false;\r\n this.realtime_ = null;\r\n // Since we don't know if our sent transactions succeeded or not, we need to cancel them.\r\n this.cancelSentTransactions_();\r\n // Clear out the pending requests.\r\n this.requestCBHash_ = {};\r\n if (this.shouldReconnect_()) {\r\n if (!this.visible_) {\r\n this.log_(\"Window isn't visible. Delaying reconnect.\");\r\n this.reconnectDelay_ = this.maxReconnectDelay_;\r\n this.lastConnectionAttemptTime_ = new Date().getTime();\r\n }\r\n else if (this.lastConnectionEstablishedTime_) {\r\n // If we've been connected long enough, reset reconnect delay to minimum.\r\n const timeSinceLastConnectSucceeded = new Date().getTime() - this.lastConnectionEstablishedTime_;\r\n if (timeSinceLastConnectSucceeded > RECONNECT_DELAY_RESET_TIMEOUT) {\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n }\r\n this.lastConnectionEstablishedTime_ = null;\r\n }\r\n const timeSinceLastConnectAttempt = new Date().getTime() - this.lastConnectionAttemptTime_;\r\n let reconnectDelay = Math.max(0, this.reconnectDelay_ - timeSinceLastConnectAttempt);\r\n reconnectDelay = Math.random() * reconnectDelay;\r\n this.log_('Trying to reconnect in ' + reconnectDelay + 'ms');\r\n this.scheduleConnect_(reconnectDelay);\r\n // Adjust reconnect delay for next time.\r\n this.reconnectDelay_ = Math.min(this.maxReconnectDelay_, this.reconnectDelay_ * RECONNECT_DELAY_MULTIPLIER);\r\n }\r\n this.onConnectStatus_(false);\r\n }\r\n async establishConnection_() {\r\n if (this.shouldReconnect_()) {\r\n this.log_('Making a connection attempt');\r\n this.lastConnectionAttemptTime_ = new Date().getTime();\r\n this.lastConnectionEstablishedTime_ = null;\r\n const onDataMessage = this.onDataMessage_.bind(this);\r\n const onReady = this.onReady_.bind(this);\r\n const onDisconnect = this.onRealtimeDisconnect_.bind(this);\r\n const connId = this.id + ':' + PersistentConnection.nextConnectionId_++;\r\n const lastSessionId = this.lastSessionId;\r\n let canceled = false;\r\n let connection = null;\r\n const closeFn = function () {\r\n if (connection) {\r\n connection.close();\r\n }\r\n else {\r\n canceled = true;\r\n onDisconnect();\r\n }\r\n };\r\n const sendRequestFn = function (msg) {\r\n assert(connection, \"sendRequest call when we're not connected not allowed.\");\r\n connection.sendRequest(msg);\r\n };\r\n this.realtime_ = {\r\n close: closeFn,\r\n sendRequest: sendRequestFn\r\n };\r\n const forceRefresh = this.forceTokenRefresh_;\r\n this.forceTokenRefresh_ = false;\r\n try {\r\n // First fetch auth and app check token, and establish connection after\r\n // fetching the token was successful\r\n const [authToken, appCheckToken] = await Promise.all([\r\n this.authTokenProvider_.getToken(forceRefresh),\r\n this.appCheckTokenProvider_.getToken(forceRefresh)\r\n ]);\r\n if (!canceled) {\r\n log('getToken() completed. Creating connection.');\r\n this.authToken_ = authToken && authToken.accessToken;\r\n this.appCheckToken_ = appCheckToken && appCheckToken.token;\r\n connection = new Connection(connId, this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, onDataMessage, onReady, onDisconnect, \r\n /* onKill= */ reason => {\r\n warn(reason + ' (' + this.repoInfo_.toString() + ')');\r\n this.interrupt(SERVER_KILL_INTERRUPT_REASON);\r\n }, lastSessionId);\r\n }\r\n else {\r\n log('getToken() completed but was canceled');\r\n }\r\n }\r\n catch (error) {\r\n this.log_('Failed to get token: ' + error);\r\n if (!canceled) {\r\n if (this.repoInfo_.nodeAdmin) {\r\n // This may be a critical error for the Admin Node.js SDK, so log a warning.\r\n // But getToken() may also just have temporarily failed, so we still want to\r\n // continue retrying.\r\n warn(error);\r\n }\r\n closeFn();\r\n }\r\n }\r\n }\r\n }\r\n interrupt(reason) {\r\n log('Interrupting connection for reason: ' + reason);\r\n this.interruptReasons_[reason] = true;\r\n if (this.realtime_) {\r\n this.realtime_.close();\r\n }\r\n else {\r\n if (this.establishConnectionTimer_) {\r\n clearTimeout(this.establishConnectionTimer_);\r\n this.establishConnectionTimer_ = null;\r\n }\r\n if (this.connected_) {\r\n this.onRealtimeDisconnect_();\r\n }\r\n }\r\n }\r\n resume(reason) {\r\n log('Resuming connection for reason: ' + reason);\r\n delete this.interruptReasons_[reason];\r\n if (isEmpty(this.interruptReasons_)) {\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n }\r\n handleTimestamp_(timestamp) {\r\n const delta = timestamp - new Date().getTime();\r\n this.onServerInfoUpdate_({ serverTimeOffset: delta });\r\n }\r\n cancelSentTransactions_() {\r\n for (let i = 0; i < this.outstandingPuts_.length; i++) {\r\n const put = this.outstandingPuts_[i];\r\n if (put && /*hash*/ 'h' in put.request && put.queued) {\r\n if (put.onComplete) {\r\n put.onComplete('disconnect');\r\n }\r\n delete this.outstandingPuts_[i];\r\n this.outstandingPutCount_--;\r\n }\r\n }\r\n // Clean up array occasionally.\r\n if (this.outstandingPutCount_ === 0) {\r\n this.outstandingPuts_ = [];\r\n }\r\n }\r\n onListenRevoked_(pathString, query) {\r\n // Remove the listen and manufacture a \"permission_denied\" error for the failed listen.\r\n let queryId;\r\n if (!query) {\r\n queryId = 'default';\r\n }\r\n else {\r\n queryId = query.map(q => ObjectToUniqueKey(q)).join('$');\r\n }\r\n const listen = this.removeListen_(pathString, queryId);\r\n if (listen && listen.onComplete) {\r\n listen.onComplete('permission_denied');\r\n }\r\n }\r\n removeListen_(pathString, queryId) {\r\n const normalizedPathString = new Path(pathString).toString(); // normalize path.\r\n let listen;\r\n if (this.listens.has(normalizedPathString)) {\r\n const map = this.listens.get(normalizedPathString);\r\n listen = map.get(queryId);\r\n map.delete(queryId);\r\n if (map.size === 0) {\r\n this.listens.delete(normalizedPathString);\r\n }\r\n }\r\n else {\r\n // all listens for this path has already been removed\r\n listen = undefined;\r\n }\r\n return listen;\r\n }\r\n onAuthRevoked_(statusCode, explanation) {\r\n log('Auth token revoked: ' + statusCode + '/' + explanation);\r\n this.authToken_ = null;\r\n this.forceTokenRefresh_ = true;\r\n this.realtime_.close();\r\n if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n // We'll wait a couple times before logging the warning / increasing the\r\n // retry period since oauth tokens will report as \"invalid\" if they're\r\n // just expired. Plus there may be transient issues that resolve themselves.\r\n this.invalidAuthTokenCount_++;\r\n if (this.invalidAuthTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\r\n // Set a long reconnect delay because recovery is unlikely\r\n this.reconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n // Notify the auth token provider that the token is invalid, which will log\r\n // a warning\r\n this.authTokenProvider_.notifyForInvalidToken();\r\n }\r\n }\r\n }\r\n onAppCheckRevoked_(statusCode, explanation) {\r\n log('App check token revoked: ' + statusCode + '/' + explanation);\r\n this.appCheckToken_ = null;\r\n this.forceTokenRefresh_ = true;\r\n // Note: We don't close the connection as the developer may not have\r\n // enforcement enabled. The backend closes connections with enforcements.\r\n if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n // We'll wait a couple times before logging the warning / increasing the\r\n // retry period since oauth tokens will report as \"invalid\" if they're\r\n // just expired. Plus there may be transient issues that resolve themselves.\r\n this.invalidAppCheckTokenCount_++;\r\n if (this.invalidAppCheckTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\r\n this.appCheckTokenProvider_.notifyForInvalidToken();\r\n }\r\n }\r\n }\r\n onSecurityDebugPacket_(body) {\r\n if (this.securityDebugCallback_) {\r\n this.securityDebugCallback_(body);\r\n }\r\n else {\r\n if ('msg' in body) {\r\n console.log('FIREBASE: ' + body['msg'].replace('\\n', '\\nFIREBASE: '));\r\n }\r\n }\r\n }\r\n restoreState_() {\r\n //Re-authenticate ourselves if we have a credential stored.\r\n this.tryAuth();\r\n this.tryAppCheck();\r\n // Puts depend on having received the corresponding data update from the server before they complete, so we must\r\n // make sure to send listens before puts.\r\n for (const queries of this.listens.values()) {\r\n for (const listenSpec of queries.values()) {\r\n this.sendListen_(listenSpec);\r\n }\r\n }\r\n for (let i = 0; i < this.outstandingPuts_.length; i++) {\r\n if (this.outstandingPuts_[i]) {\r\n this.sendPut_(i);\r\n }\r\n }\r\n while (this.onDisconnectRequestQueue_.length) {\r\n const request = this.onDisconnectRequestQueue_.shift();\r\n this.sendOnDisconnect_(request.action, request.pathString, request.data, request.onComplete);\r\n }\r\n for (let i = 0; i < this.outstandingGets_.length; i++) {\r\n if (this.outstandingGets_[i]) {\r\n this.sendGet_(i);\r\n }\r\n }\r\n }\r\n /**\r\n * Sends client stats for first connection\r\n */\r\n sendConnectStats_() {\r\n const stats = {};\r\n let clientName = 'js';\r\n if (isNodeSdk()) {\r\n if (this.repoInfo_.nodeAdmin) {\r\n clientName = 'admin_node';\r\n }\r\n else {\r\n clientName = 'node';\r\n }\r\n }\r\n stats['sdk.' + clientName + '.' + SDK_VERSION.replace(/\\./g, '-')] = 1;\r\n if (isMobileCordova()) {\r\n stats['framework.cordova'] = 1;\r\n }\r\n else if (isReactNative()) {\r\n stats['framework.reactnative'] = 1;\r\n }\r\n this.reportStats(stats);\r\n }\r\n shouldReconnect_() {\r\n const online = OnlineMonitor.getInstance().currentlyOnline();\r\n return isEmpty(this.interruptReasons_) && online;\r\n }\r\n}\r\nPersistentConnection.nextPersistentConnectionId_ = 0;\r\n/**\r\n * Counter for number of connections created. Mainly used for tagging in the logs\r\n */\r\nPersistentConnection.nextConnectionId_ = 0;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass NamedNode {\r\n constructor(name, node) {\r\n this.name = name;\r\n this.node = node;\r\n }\r\n static Wrap(name, node) {\r\n return new NamedNode(name, node);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Index {\r\n /**\r\n * @returns A standalone comparison function for\r\n * this index\r\n */\r\n getCompare() {\r\n return this.compare.bind(this);\r\n }\r\n /**\r\n * Given a before and after value for a node, determine if the indexed value has changed. Even if they are different,\r\n * it's possible that the changes are isolated to parts of the snapshot that are not indexed.\r\n *\r\n *\r\n * @returns True if the portion of the snapshot being indexed changed between oldNode and newNode\r\n */\r\n indexedValueChanged(oldNode, newNode) {\r\n const oldWrapped = new NamedNode(MIN_NAME, oldNode);\r\n const newWrapped = new NamedNode(MIN_NAME, newNode);\r\n return this.compare(oldWrapped, newWrapped) !== 0;\r\n }\r\n /**\r\n * @returns a node wrapper that will sort equal to or less than\r\n * any other node wrapper, using this index\r\n */\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet __EMPTY_NODE;\r\nclass KeyIndex extends Index {\r\n static get __EMPTY_NODE() {\r\n return __EMPTY_NODE;\r\n }\r\n static set __EMPTY_NODE(val) {\r\n __EMPTY_NODE = val;\r\n }\r\n compare(a, b) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n isDefinedOn(node) {\r\n // We could probably return true here (since every node has a key), but it's never called\r\n // so just leaving unimplemented for now.\r\n throw assertionError('KeyIndex.isDefinedOn not expected to be called.');\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return false; // The key for a node never changes.\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n // TODO: This should really be created once and cached in a static property, but\r\n // NamedNode isn't defined yet, so I can't use it in a static. Bleh.\r\n return new NamedNode(MAX_NAME, __EMPTY_NODE);\r\n }\r\n makePost(indexValue, name) {\r\n assert(typeof indexValue === 'string', 'KeyIndex indexValue must always be a string.');\r\n // We just use empty node, but it'll never be compared, since our comparator only looks at name.\r\n return new NamedNode(indexValue, __EMPTY_NODE);\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.key';\r\n }\r\n}\r\nconst KEY_INDEX = new KeyIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An iterator over an LLRBNode.\r\n */\r\nclass SortedMapIterator {\r\n /**\r\n * @param node - Node to iterate.\r\n * @param isReverse_ - Whether or not to iterate in reverse\r\n */\r\n constructor(node, startKey, comparator, isReverse_, resultGenerator_ = null) {\r\n this.isReverse_ = isReverse_;\r\n this.resultGenerator_ = resultGenerator_;\r\n this.nodeStack_ = [];\r\n let cmp = 1;\r\n while (!node.isEmpty()) {\r\n node = node;\r\n cmp = startKey ? comparator(node.key, startKey) : 1;\r\n // flip the comparison if we're going in reverse\r\n if (isReverse_) {\r\n cmp *= -1;\r\n }\r\n if (cmp < 0) {\r\n // This node is less than our start key. ignore it\r\n if (this.isReverse_) {\r\n node = node.left;\r\n }\r\n else {\r\n node = node.right;\r\n }\r\n }\r\n else if (cmp === 0) {\r\n // This node is exactly equal to our start key. Push it on the stack, but stop iterating;\r\n this.nodeStack_.push(node);\r\n break;\r\n }\r\n else {\r\n // This node is greater than our start key, add it to the stack and move to the next one\r\n this.nodeStack_.push(node);\r\n if (this.isReverse_) {\r\n node = node.right;\r\n }\r\n else {\r\n node = node.left;\r\n }\r\n }\r\n }\r\n }\r\n getNext() {\r\n if (this.nodeStack_.length === 0) {\r\n return null;\r\n }\r\n let node = this.nodeStack_.pop();\r\n let result;\r\n if (this.resultGenerator_) {\r\n result = this.resultGenerator_(node.key, node.value);\r\n }\r\n else {\r\n result = { key: node.key, value: node.value };\r\n }\r\n if (this.isReverse_) {\r\n node = node.left;\r\n while (!node.isEmpty()) {\r\n this.nodeStack_.push(node);\r\n node = node.right;\r\n }\r\n }\r\n else {\r\n node = node.right;\r\n while (!node.isEmpty()) {\r\n this.nodeStack_.push(node);\r\n node = node.left;\r\n }\r\n }\r\n return result;\r\n }\r\n hasNext() {\r\n return this.nodeStack_.length > 0;\r\n }\r\n peek() {\r\n if (this.nodeStack_.length === 0) {\r\n return null;\r\n }\r\n const node = this.nodeStack_[this.nodeStack_.length - 1];\r\n if (this.resultGenerator_) {\r\n return this.resultGenerator_(node.key, node.value);\r\n }\r\n else {\r\n return { key: node.key, value: node.value };\r\n }\r\n }\r\n}\r\n/**\r\n * Represents a node in a Left-leaning Red-Black tree.\r\n */\r\nclass LLRBNode {\r\n /**\r\n * @param key - Key associated with this node.\r\n * @param value - Value associated with this node.\r\n * @param color - Whether this node is red.\r\n * @param left - Left child.\r\n * @param right - Right child.\r\n */\r\n constructor(key, value, color, left, right) {\r\n this.key = key;\r\n this.value = value;\r\n this.color = color != null ? color : LLRBNode.RED;\r\n this.left =\r\n left != null ? left : SortedMap.EMPTY_NODE;\r\n this.right =\r\n right != null ? right : SortedMap.EMPTY_NODE;\r\n }\r\n /**\r\n * Returns a copy of the current node, optionally replacing pieces of it.\r\n *\r\n * @param key - New key for the node, or null.\r\n * @param value - New value for the node, or null.\r\n * @param color - New color for the node, or null.\r\n * @param left - New left child for the node, or null.\r\n * @param right - New right child for the node, or null.\r\n * @returns The node copy.\r\n */\r\n copy(key, value, color, left, right) {\r\n return new LLRBNode(key != null ? key : this.key, value != null ? value : this.value, color != null ? color : this.color, left != null ? left : this.left, right != null ? right : this.right);\r\n }\r\n /**\r\n * @returns The total number of nodes in the tree.\r\n */\r\n count() {\r\n return this.left.count() + 1 + this.right.count();\r\n }\r\n /**\r\n * @returns True if the tree is empty.\r\n */\r\n isEmpty() {\r\n return false;\r\n }\r\n /**\r\n * Traverses the tree in key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns The first truthy value returned by action, or the last falsey\r\n * value returned by action\r\n */\r\n inorderTraversal(action) {\r\n return (this.left.inorderTraversal(action) ||\r\n !!action(this.key, this.value) ||\r\n this.right.inorderTraversal(action));\r\n }\r\n /**\r\n * Traverses the tree in reverse key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return (this.right.reverseTraversal(action) ||\r\n action(this.key, this.value) ||\r\n this.left.reverseTraversal(action));\r\n }\r\n /**\r\n * @returns The minimum node in the tree.\r\n */\r\n min_() {\r\n if (this.left.isEmpty()) {\r\n return this;\r\n }\r\n else {\r\n return this.left.min_();\r\n }\r\n }\r\n /**\r\n * @returns The maximum key in the tree.\r\n */\r\n minKey() {\r\n return this.min_().key;\r\n }\r\n /**\r\n * @returns The maximum key in the tree.\r\n */\r\n maxKey() {\r\n if (this.right.isEmpty()) {\r\n return this.key;\r\n }\r\n else {\r\n return this.right.maxKey();\r\n }\r\n }\r\n /**\r\n * @param key - Key to insert.\r\n * @param value - Value to insert.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with the key/value added.\r\n */\r\n insert(key, value, comparator) {\r\n let n = this;\r\n const cmp = comparator(key, n.key);\r\n if (cmp < 0) {\r\n n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);\r\n }\r\n else if (cmp === 0) {\r\n n = n.copy(null, value, null, null, null);\r\n }\r\n else {\r\n n = n.copy(null, null, null, null, n.right.insert(key, value, comparator));\r\n }\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @returns New tree, with the minimum key removed.\r\n */\r\n removeMin_() {\r\n if (this.left.isEmpty()) {\r\n return SortedMap.EMPTY_NODE;\r\n }\r\n let n = this;\r\n if (!n.left.isRed_() && !n.left.left.isRed_()) {\r\n n = n.moveRedLeft_();\r\n }\r\n n = n.copy(null, null, null, n.left.removeMin_(), null);\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @param key - The key of the item to remove.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with the specified item removed.\r\n */\r\n remove(key, comparator) {\r\n let n, smallest;\r\n n = this;\r\n if (comparator(key, n.key) < 0) {\r\n if (!n.left.isEmpty() && !n.left.isRed_() && !n.left.left.isRed_()) {\r\n n = n.moveRedLeft_();\r\n }\r\n n = n.copy(null, null, null, n.left.remove(key, comparator), null);\r\n }\r\n else {\r\n if (n.left.isRed_()) {\r\n n = n.rotateRight_();\r\n }\r\n if (!n.right.isEmpty() && !n.right.isRed_() && !n.right.left.isRed_()) {\r\n n = n.moveRedRight_();\r\n }\r\n if (comparator(key, n.key) === 0) {\r\n if (n.right.isEmpty()) {\r\n return SortedMap.EMPTY_NODE;\r\n }\r\n else {\r\n smallest = n.right.min_();\r\n n = n.copy(smallest.key, smallest.value, null, null, n.right.removeMin_());\r\n }\r\n }\r\n n = n.copy(null, null, null, null, n.right.remove(key, comparator));\r\n }\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @returns Whether this is a RED node.\r\n */\r\n isRed_() {\r\n return this.color;\r\n }\r\n /**\r\n * @returns New tree after performing any needed rotations.\r\n */\r\n fixUp_() {\r\n let n = this;\r\n if (n.right.isRed_() && !n.left.isRed_()) {\r\n n = n.rotateLeft_();\r\n }\r\n if (n.left.isRed_() && n.left.left.isRed_()) {\r\n n = n.rotateRight_();\r\n }\r\n if (n.left.isRed_() && n.right.isRed_()) {\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after moveRedLeft.\r\n */\r\n moveRedLeft_() {\r\n let n = this.colorFlip_();\r\n if (n.right.left.isRed_()) {\r\n n = n.copy(null, null, null, null, n.right.rotateRight_());\r\n n = n.rotateLeft_();\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after moveRedRight.\r\n */\r\n moveRedRight_() {\r\n let n = this.colorFlip_();\r\n if (n.left.left.isRed_()) {\r\n n = n.rotateRight_();\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after rotateLeft.\r\n */\r\n rotateLeft_() {\r\n const nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);\r\n return this.right.copy(null, null, this.color, nl, null);\r\n }\r\n /**\r\n * @returns New tree, after rotateRight.\r\n */\r\n rotateRight_() {\r\n const nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);\r\n return this.left.copy(null, null, this.color, null, nr);\r\n }\r\n /**\r\n * @returns Newt ree, after colorFlip.\r\n */\r\n colorFlip_() {\r\n const left = this.left.copy(null, null, !this.left.color, null, null);\r\n const right = this.right.copy(null, null, !this.right.color, null, null);\r\n return this.copy(null, null, !this.color, left, right);\r\n }\r\n /**\r\n * For testing.\r\n *\r\n * @returns True if all is well.\r\n */\r\n checkMaxDepth_() {\r\n const blackDepth = this.check_();\r\n return Math.pow(2.0, blackDepth) <= this.count() + 1;\r\n }\r\n check_() {\r\n if (this.isRed_() && this.left.isRed_()) {\r\n throw new Error('Red node has red child(' + this.key + ',' + this.value + ')');\r\n }\r\n if (this.right.isRed_()) {\r\n throw new Error('Right child of (' + this.key + ',' + this.value + ') is red');\r\n }\r\n const blackDepth = this.left.check_();\r\n if (blackDepth !== this.right.check_()) {\r\n throw new Error('Black depths differ');\r\n }\r\n else {\r\n return blackDepth + (this.isRed_() ? 0 : 1);\r\n }\r\n }\r\n}\r\nLLRBNode.RED = true;\r\nLLRBNode.BLACK = false;\r\n/**\r\n * Represents an empty node (a leaf node in the Red-Black Tree).\r\n */\r\nclass LLRBEmptyNode {\r\n /**\r\n * Returns a copy of the current node.\r\n *\r\n * @returns The node copy.\r\n */\r\n copy(key, value, color, left, right) {\r\n return this;\r\n }\r\n /**\r\n * Returns a copy of the tree, with the specified key/value added.\r\n *\r\n * @param key - Key to be added.\r\n * @param value - Value to be added.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with item added.\r\n */\r\n insert(key, value, comparator) {\r\n return new LLRBNode(key, value, null);\r\n }\r\n /**\r\n * Returns a copy of the tree, with the specified key removed.\r\n *\r\n * @param key - The key to remove.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with item removed.\r\n */\r\n remove(key, comparator) {\r\n return this;\r\n }\r\n /**\r\n * @returns The total number of nodes in the tree.\r\n */\r\n count() {\r\n return 0;\r\n }\r\n /**\r\n * @returns True if the tree is empty.\r\n */\r\n isEmpty() {\r\n return true;\r\n }\r\n /**\r\n * Traverses the tree in key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n inorderTraversal(action) {\r\n return false;\r\n }\r\n /**\r\n * Traverses the tree in reverse key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return false;\r\n }\r\n minKey() {\r\n return null;\r\n }\r\n maxKey() {\r\n return null;\r\n }\r\n check_() {\r\n return 0;\r\n }\r\n /**\r\n * @returns Whether this node is red.\r\n */\r\n isRed_() {\r\n return false;\r\n }\r\n}\r\n/**\r\n * An immutable sorted map implementation, based on a Left-leaning Red-Black\r\n * tree.\r\n */\r\nclass SortedMap {\r\n /**\r\n * @param comparator_ - Key comparator.\r\n * @param root_ - Optional root node for the map.\r\n */\r\n constructor(comparator_, root_ = SortedMap.EMPTY_NODE) {\r\n this.comparator_ = comparator_;\r\n this.root_ = root_;\r\n }\r\n /**\r\n * Returns a copy of the map, with the specified key/value added or replaced.\r\n * (TODO: We should perhaps rename this method to 'put')\r\n *\r\n * @param key - Key to be added.\r\n * @param value - Value to be added.\r\n * @returns New map, with item added.\r\n */\r\n insert(key, value) {\r\n return new SortedMap(this.comparator_, this.root_\r\n .insert(key, value, this.comparator_)\r\n .copy(null, null, LLRBNode.BLACK, null, null));\r\n }\r\n /**\r\n * Returns a copy of the map, with the specified key removed.\r\n *\r\n * @param key - The key to remove.\r\n * @returns New map, with item removed.\r\n */\r\n remove(key) {\r\n return new SortedMap(this.comparator_, this.root_\r\n .remove(key, this.comparator_)\r\n .copy(null, null, LLRBNode.BLACK, null, null));\r\n }\r\n /**\r\n * Returns the value of the node with the given key, or null.\r\n *\r\n * @param key - The key to look up.\r\n * @returns The value of the node with the given key, or null if the\r\n * key doesn't exist.\r\n */\r\n get(key) {\r\n let cmp;\r\n let node = this.root_;\r\n while (!node.isEmpty()) {\r\n cmp = this.comparator_(key, node.key);\r\n if (cmp === 0) {\r\n return node.value;\r\n }\r\n else if (cmp < 0) {\r\n node = node.left;\r\n }\r\n else if (cmp > 0) {\r\n node = node.right;\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Returns the key of the item *before* the specified key, or null if key is the first item.\r\n * @param key - The key to find the predecessor of\r\n * @returns The predecessor key.\r\n */\r\n getPredecessorKey(key) {\r\n let cmp, node = this.root_, rightParent = null;\r\n while (!node.isEmpty()) {\r\n cmp = this.comparator_(key, node.key);\r\n if (cmp === 0) {\r\n if (!node.left.isEmpty()) {\r\n node = node.left;\r\n while (!node.right.isEmpty()) {\r\n node = node.right;\r\n }\r\n return node.key;\r\n }\r\n else if (rightParent) {\r\n return rightParent.key;\r\n }\r\n else {\r\n return null; // first item.\r\n }\r\n }\r\n else if (cmp < 0) {\r\n node = node.left;\r\n }\r\n else if (cmp > 0) {\r\n rightParent = node;\r\n node = node.right;\r\n }\r\n }\r\n throw new Error('Attempted to find predecessor key for a nonexistent key. What gives?');\r\n }\r\n /**\r\n * @returns True if the map is empty.\r\n */\r\n isEmpty() {\r\n return this.root_.isEmpty();\r\n }\r\n /**\r\n * @returns The total number of nodes in the map.\r\n */\r\n count() {\r\n return this.root_.count();\r\n }\r\n /**\r\n * @returns The minimum key in the map.\r\n */\r\n minKey() {\r\n return this.root_.minKey();\r\n }\r\n /**\r\n * @returns The maximum key in the map.\r\n */\r\n maxKey() {\r\n return this.root_.maxKey();\r\n }\r\n /**\r\n * Traverses the map in key order and calls the specified action function\r\n * for each key/value pair.\r\n *\r\n * @param action - Callback function to be called\r\n * for each key/value pair. If action returns true, traversal is aborted.\r\n * @returns The first truthy value returned by action, or the last falsey\r\n * value returned by action\r\n */\r\n inorderTraversal(action) {\r\n return this.root_.inorderTraversal(action);\r\n }\r\n /**\r\n * Traverses the map in reverse key order and calls the specified action function\r\n * for each key/value pair.\r\n *\r\n * @param action - Callback function to be called\r\n * for each key/value pair. If action returns true, traversal is aborted.\r\n * @returns True if the traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return this.root_.reverseTraversal(action);\r\n }\r\n /**\r\n * Returns an iterator over the SortedMap.\r\n * @returns The iterator.\r\n */\r\n getIterator(resultGenerator) {\r\n return new SortedMapIterator(this.root_, null, this.comparator_, false, resultGenerator);\r\n }\r\n getIteratorFrom(key, resultGenerator) {\r\n return new SortedMapIterator(this.root_, key, this.comparator_, false, resultGenerator);\r\n }\r\n getReverseIteratorFrom(key, resultGenerator) {\r\n return new SortedMapIterator(this.root_, key, this.comparator_, true, resultGenerator);\r\n }\r\n getReverseIterator(resultGenerator) {\r\n return new SortedMapIterator(this.root_, null, this.comparator_, true, resultGenerator);\r\n }\r\n}\r\n/**\r\n * Always use the same empty node, to reduce memory.\r\n */\r\nSortedMap.EMPTY_NODE = new LLRBEmptyNode();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction NAME_ONLY_COMPARATOR(left, right) {\r\n return nameCompare(left.name, right.name);\r\n}\r\nfunction NAME_COMPARATOR(left, right) {\r\n return nameCompare(left, right);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet MAX_NODE$2;\r\nfunction setMaxNode$1(val) {\r\n MAX_NODE$2 = val;\r\n}\r\nconst priorityHashText = function (priority) {\r\n if (typeof priority === 'number') {\r\n return 'number:' + doubleToIEEE754String(priority);\r\n }\r\n else {\r\n return 'string:' + priority;\r\n }\r\n};\r\n/**\r\n * Validates that a priority snapshot Node is valid.\r\n */\r\nconst validatePriorityNode = function (priorityNode) {\r\n if (priorityNode.isLeafNode()) {\r\n const val = priorityNode.val();\r\n assert(typeof val === 'string' ||\r\n typeof val === 'number' ||\r\n (typeof val === 'object' && contains(val, '.sv')), 'Priority must be a string or number.');\r\n }\r\n else {\r\n assert(priorityNode === MAX_NODE$2 || priorityNode.isEmpty(), 'priority of unexpected type.');\r\n }\r\n // Don't call getPriority() on MAX_NODE to avoid hitting assertion.\r\n assert(priorityNode === MAX_NODE$2 || priorityNode.getPriority().isEmpty(), \"Priority nodes can't have a priority of their own.\");\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet __childrenNodeConstructor;\r\n/**\r\n * LeafNode is a class for storing leaf nodes in a DataSnapshot. It\r\n * implements Node and stores the value of the node (a string,\r\n * number, or boolean) accessible via getValue().\r\n */\r\nclass LeafNode {\r\n /**\r\n * @param value_ - The value to store in this leaf node. The object type is\r\n * possible in the event of a deferred value\r\n * @param priorityNode_ - The priority of this node.\r\n */\r\n constructor(value_, priorityNode_ = LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n this.value_ = value_;\r\n this.priorityNode_ = priorityNode_;\r\n this.lazyHash_ = null;\r\n assert(this.value_ !== undefined && this.value_ !== null, \"LeafNode shouldn't be created with null/undefined value.\");\r\n validatePriorityNode(this.priorityNode_);\r\n }\r\n static set __childrenNodeConstructor(val) {\r\n __childrenNodeConstructor = val;\r\n }\r\n static get __childrenNodeConstructor() {\r\n return __childrenNodeConstructor;\r\n }\r\n /** @inheritDoc */\r\n isLeafNode() {\r\n return true;\r\n }\r\n /** @inheritDoc */\r\n getPriority() {\r\n return this.priorityNode_;\r\n }\r\n /** @inheritDoc */\r\n updatePriority(newPriorityNode) {\r\n return new LeafNode(this.value_, newPriorityNode);\r\n }\r\n /** @inheritDoc */\r\n getImmediateChild(childName) {\r\n // Hack to treat priority as a regular child\r\n if (childName === '.priority') {\r\n return this.priorityNode_;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n }\r\n }\r\n /** @inheritDoc */\r\n getChild(path) {\r\n if (pathIsEmpty(path)) {\r\n return this;\r\n }\r\n else if (pathGetFront(path) === '.priority') {\r\n return this.priorityNode_;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n }\r\n }\r\n hasChild() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n getPredecessorChildName(childName, childNode) {\r\n return null;\r\n }\r\n /** @inheritDoc */\r\n updateImmediateChild(childName, newChildNode) {\r\n if (childName === '.priority') {\r\n return this.updatePriority(newChildNode);\r\n }\r\n else if (newChildNode.isEmpty() && childName !== '.priority') {\r\n return this;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateImmediateChild(childName, newChildNode).updatePriority(this.priorityNode_);\r\n }\r\n }\r\n /** @inheritDoc */\r\n updateChild(path, newChildNode) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return newChildNode;\r\n }\r\n else if (newChildNode.isEmpty() && front !== '.priority') {\r\n return this;\r\n }\r\n else {\r\n assert(front !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\r\n return this.updateImmediateChild(front, LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateChild(pathPopFront(path), newChildNode));\r\n }\r\n }\r\n /** @inheritDoc */\r\n isEmpty() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n numChildren() {\r\n return 0;\r\n }\r\n /** @inheritDoc */\r\n forEachChild(index, action) {\r\n return false;\r\n }\r\n val(exportFormat) {\r\n if (exportFormat && !this.getPriority().isEmpty()) {\r\n return {\r\n '.value': this.getValue(),\r\n '.priority': this.getPriority().val()\r\n };\r\n }\r\n else {\r\n return this.getValue();\r\n }\r\n }\r\n /** @inheritDoc */\r\n hash() {\r\n if (this.lazyHash_ === null) {\r\n let toHash = '';\r\n if (!this.priorityNode_.isEmpty()) {\r\n toHash +=\r\n 'priority:' +\r\n priorityHashText(this.priorityNode_.val()) +\r\n ':';\r\n }\r\n const type = typeof this.value_;\r\n toHash += type + ':';\r\n if (type === 'number') {\r\n toHash += doubleToIEEE754String(this.value_);\r\n }\r\n else {\r\n toHash += this.value_;\r\n }\r\n this.lazyHash_ = sha1(toHash);\r\n }\r\n return this.lazyHash_;\r\n }\r\n /**\r\n * Returns the value of the leaf node.\r\n * @returns The value of the node.\r\n */\r\n getValue() {\r\n return this.value_;\r\n }\r\n compareTo(other) {\r\n if (other === LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n return 1;\r\n }\r\n else if (other instanceof LeafNode.__childrenNodeConstructor) {\r\n return -1;\r\n }\r\n else {\r\n assert(other.isLeafNode(), 'Unknown node type');\r\n return this.compareToLeafNode_(other);\r\n }\r\n }\r\n /**\r\n * Comparison specifically for two leaf nodes\r\n */\r\n compareToLeafNode_(otherLeaf) {\r\n const otherLeafType = typeof otherLeaf.value_;\r\n const thisLeafType = typeof this.value_;\r\n const otherIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(otherLeafType);\r\n const thisIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(thisLeafType);\r\n assert(otherIndex >= 0, 'Unknown leaf type: ' + otherLeafType);\r\n assert(thisIndex >= 0, 'Unknown leaf type: ' + thisLeafType);\r\n if (otherIndex === thisIndex) {\r\n // Same type, compare values\r\n if (thisLeafType === 'object') {\r\n // Deferred value nodes are all equal, but we should also never get to this point...\r\n return 0;\r\n }\r\n else {\r\n // Note that this works because true > false, all others are number or string comparisons\r\n if (this.value_ < otherLeaf.value_) {\r\n return -1;\r\n }\r\n else if (this.value_ === otherLeaf.value_) {\r\n return 0;\r\n }\r\n else {\r\n return 1;\r\n }\r\n }\r\n }\r\n else {\r\n return thisIndex - otherIndex;\r\n }\r\n }\r\n withIndex() {\r\n return this;\r\n }\r\n isIndexed() {\r\n return true;\r\n }\r\n equals(other) {\r\n if (other === this) {\r\n return true;\r\n }\r\n else if (other.isLeafNode()) {\r\n const otherLeaf = other;\r\n return (this.value_ === otherLeaf.value_ &&\r\n this.priorityNode_.equals(otherLeaf.priorityNode_));\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n}\r\n/**\r\n * The sort order for comparing leaf nodes of different types. If two leaf nodes have\r\n * the same type, the comparison falls back to their value\r\n */\r\nLeafNode.VALUE_TYPE_ORDER = ['object', 'boolean', 'number', 'string'];\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet nodeFromJSON$1;\r\nlet MAX_NODE$1;\r\nfunction setNodeFromJSON(val) {\r\n nodeFromJSON$1 = val;\r\n}\r\nfunction setMaxNode(val) {\r\n MAX_NODE$1 = val;\r\n}\r\nclass PriorityIndex extends Index {\r\n compare(a, b) {\r\n const aPriority = a.node.getPriority();\r\n const bPriority = b.node.getPriority();\r\n const indexCmp = aPriority.compareTo(bPriority);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n isDefinedOn(node) {\r\n return !node.getPriority().isEmpty();\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return !oldNode.getPriority().equals(newNode.getPriority());\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n return new NamedNode(MAX_NAME, new LeafNode('[PRIORITY-POST]', MAX_NODE$1));\r\n }\r\n makePost(indexValue, name) {\r\n const priorityNode = nodeFromJSON$1(indexValue);\r\n return new NamedNode(name, new LeafNode('[PRIORITY-POST]', priorityNode));\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.priority';\r\n }\r\n}\r\nconst PRIORITY_INDEX = new PriorityIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_2 = Math.log(2);\r\nclass Base12Num {\r\n constructor(length) {\r\n const logBase2 = (num) => \r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n parseInt((Math.log(num) / LOG_2), 10);\r\n const bitMask = (bits) => parseInt(Array(bits + 1).join('1'), 2);\r\n this.count = logBase2(length + 1);\r\n this.current_ = this.count - 1;\r\n const mask = bitMask(this.count);\r\n this.bits_ = (length + 1) & mask;\r\n }\r\n nextBitIsOne() {\r\n //noinspection JSBitwiseOperatorUsage\r\n const result = !(this.bits_ & (0x1 << this.current_));\r\n this.current_--;\r\n return result;\r\n }\r\n}\r\n/**\r\n * Takes a list of child nodes and constructs a SortedSet using the given comparison\r\n * function\r\n *\r\n * Uses the algorithm described in the paper linked here:\r\n * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458\r\n *\r\n * @param childList - Unsorted list of children\r\n * @param cmp - The comparison method to be used\r\n * @param keyFn - An optional function to extract K from a node wrapper, if K's\r\n * type is not NamedNode\r\n * @param mapSortFn - An optional override for comparator used by the generated sorted map\r\n */\r\nconst buildChildSet = function (childList, cmp, keyFn, mapSortFn) {\r\n childList.sort(cmp);\r\n const buildBalancedTree = function (low, high) {\r\n const length = high - low;\r\n let namedNode;\r\n let key;\r\n if (length === 0) {\r\n return null;\r\n }\r\n else if (length === 1) {\r\n namedNode = childList[low];\r\n key = keyFn ? keyFn(namedNode) : namedNode;\r\n return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, null, null);\r\n }\r\n else {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const middle = parseInt((length / 2), 10) + low;\r\n const left = buildBalancedTree(low, middle);\r\n const right = buildBalancedTree(middle + 1, high);\r\n namedNode = childList[middle];\r\n key = keyFn ? keyFn(namedNode) : namedNode;\r\n return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, left, right);\r\n }\r\n };\r\n const buildFrom12Array = function (base12) {\r\n let node = null;\r\n let root = null;\r\n let index = childList.length;\r\n const buildPennant = function (chunkSize, color) {\r\n const low = index - chunkSize;\r\n const high = index;\r\n index -= chunkSize;\r\n const childTree = buildBalancedTree(low + 1, high);\r\n const namedNode = childList[low];\r\n const key = keyFn ? keyFn(namedNode) : namedNode;\r\n attachPennant(new LLRBNode(key, namedNode.node, color, null, childTree));\r\n };\r\n const attachPennant = function (pennant) {\r\n if (node) {\r\n node.left = pennant;\r\n node = pennant;\r\n }\r\n else {\r\n root = pennant;\r\n node = pennant;\r\n }\r\n };\r\n for (let i = 0; i < base12.count; ++i) {\r\n const isOne = base12.nextBitIsOne();\r\n // The number of nodes taken in each slice is 2^(arr.length - (i + 1))\r\n const chunkSize = Math.pow(2, base12.count - (i + 1));\r\n if (isOne) {\r\n buildPennant(chunkSize, LLRBNode.BLACK);\r\n }\r\n else {\r\n // current == 2\r\n buildPennant(chunkSize, LLRBNode.BLACK);\r\n buildPennant(chunkSize, LLRBNode.RED);\r\n }\r\n }\r\n return root;\r\n };\r\n const base12 = new Base12Num(childList.length);\r\n const root = buildFrom12Array(base12);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return new SortedMap(mapSortFn || cmp, root);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet _defaultIndexMap;\r\nconst fallbackObject = {};\r\nclass IndexMap {\r\n constructor(indexes_, indexSet_) {\r\n this.indexes_ = indexes_;\r\n this.indexSet_ = indexSet_;\r\n }\r\n /**\r\n * The default IndexMap for nodes without a priority\r\n */\r\n static get Default() {\r\n assert(fallbackObject && PRIORITY_INDEX, 'ChildrenNode.ts has not been loaded');\r\n _defaultIndexMap =\r\n _defaultIndexMap ||\r\n new IndexMap({ '.priority': fallbackObject }, { '.priority': PRIORITY_INDEX });\r\n return _defaultIndexMap;\r\n }\r\n get(indexKey) {\r\n const sortedMap = safeGet(this.indexes_, indexKey);\r\n if (!sortedMap) {\r\n throw new Error('No index defined for ' + indexKey);\r\n }\r\n if (sortedMap instanceof SortedMap) {\r\n return sortedMap;\r\n }\r\n else {\r\n // The index exists, but it falls back to just name comparison. Return null so that the calling code uses the\r\n // regular child map\r\n return null;\r\n }\r\n }\r\n hasIndex(indexDefinition) {\r\n return contains(this.indexSet_, indexDefinition.toString());\r\n }\r\n addIndex(indexDefinition, existingChildren) {\r\n assert(indexDefinition !== KEY_INDEX, \"KeyIndex always exists and isn't meant to be added to the IndexMap.\");\r\n const childList = [];\r\n let sawIndexedValue = false;\r\n const iter = existingChildren.getIterator(NamedNode.Wrap);\r\n let next = iter.getNext();\r\n while (next) {\r\n sawIndexedValue =\r\n sawIndexedValue || indexDefinition.isDefinedOn(next.node);\r\n childList.push(next);\r\n next = iter.getNext();\r\n }\r\n let newIndex;\r\n if (sawIndexedValue) {\r\n newIndex = buildChildSet(childList, indexDefinition.getCompare());\r\n }\r\n else {\r\n newIndex = fallbackObject;\r\n }\r\n const indexName = indexDefinition.toString();\r\n const newIndexSet = Object.assign({}, this.indexSet_);\r\n newIndexSet[indexName] = indexDefinition;\r\n const newIndexes = Object.assign({}, this.indexes_);\r\n newIndexes[indexName] = newIndex;\r\n return new IndexMap(newIndexes, newIndexSet);\r\n }\r\n /**\r\n * Ensure that this node is properly tracked in any indexes that we're maintaining\r\n */\r\n addToIndexes(namedNode, existingChildren) {\r\n const newIndexes = map(this.indexes_, (indexedChildren, indexName) => {\r\n const index = safeGet(this.indexSet_, indexName);\r\n assert(index, 'Missing index implementation for ' + indexName);\r\n if (indexedChildren === fallbackObject) {\r\n // Check to see if we need to index everything\r\n if (index.isDefinedOn(namedNode.node)) {\r\n // We need to build this index\r\n const childList = [];\r\n const iter = existingChildren.getIterator(NamedNode.Wrap);\r\n let next = iter.getNext();\r\n while (next) {\r\n if (next.name !== namedNode.name) {\r\n childList.push(next);\r\n }\r\n next = iter.getNext();\r\n }\r\n childList.push(namedNode);\r\n return buildChildSet(childList, index.getCompare());\r\n }\r\n else {\r\n // No change, this remains a fallback\r\n return fallbackObject;\r\n }\r\n }\r\n else {\r\n const existingSnap = existingChildren.get(namedNode.name);\r\n let newChildren = indexedChildren;\r\n if (existingSnap) {\r\n newChildren = newChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n }\r\n return newChildren.insert(namedNode, namedNode.node);\r\n }\r\n });\r\n return new IndexMap(newIndexes, this.indexSet_);\r\n }\r\n /**\r\n * Create a new IndexMap instance with the given value removed\r\n */\r\n removeFromIndexes(namedNode, existingChildren) {\r\n const newIndexes = map(this.indexes_, (indexedChildren) => {\r\n if (indexedChildren === fallbackObject) {\r\n // This is the fallback. Just return it, nothing to do in this case\r\n return indexedChildren;\r\n }\r\n else {\r\n const existingSnap = existingChildren.get(namedNode.name);\r\n if (existingSnap) {\r\n return indexedChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n }\r\n else {\r\n // No record of this child\r\n return indexedChildren;\r\n }\r\n }\r\n });\r\n return new IndexMap(newIndexes, this.indexSet_);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// TODO: For memory savings, don't store priorityNode_ if it's empty.\r\nlet EMPTY_NODE;\r\n/**\r\n * ChildrenNode is a class for storing internal nodes in a DataSnapshot\r\n * (i.e. nodes with children). It implements Node and stores the\r\n * list of children in the children property, sorted by child name.\r\n */\r\nclass ChildrenNode {\r\n /**\r\n * @param children_ - List of children of this node..\r\n * @param priorityNode_ - The priority of this node (as a snapshot node).\r\n */\r\n constructor(children_, priorityNode_, indexMap_) {\r\n this.children_ = children_;\r\n this.priorityNode_ = priorityNode_;\r\n this.indexMap_ = indexMap_;\r\n this.lazyHash_ = null;\r\n /**\r\n * Note: The only reason we allow null priority is for EMPTY_NODE, since we can't use\r\n * EMPTY_NODE as the priority of EMPTY_NODE. We might want to consider making EMPTY_NODE its own\r\n * class instead of an empty ChildrenNode.\r\n */\r\n if (this.priorityNode_) {\r\n validatePriorityNode(this.priorityNode_);\r\n }\r\n if (this.children_.isEmpty()) {\r\n assert(!this.priorityNode_ || this.priorityNode_.isEmpty(), 'An empty node cannot have a priority');\r\n }\r\n }\r\n static get EMPTY_NODE() {\r\n return (EMPTY_NODE ||\r\n (EMPTY_NODE = new ChildrenNode(new SortedMap(NAME_COMPARATOR), null, IndexMap.Default)));\r\n }\r\n /** @inheritDoc */\r\n isLeafNode() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n getPriority() {\r\n return this.priorityNode_ || EMPTY_NODE;\r\n }\r\n /** @inheritDoc */\r\n updatePriority(newPriorityNode) {\r\n if (this.children_.isEmpty()) {\r\n // Don't allow priorities on empty nodes\r\n return this;\r\n }\r\n else {\r\n return new ChildrenNode(this.children_, newPriorityNode, this.indexMap_);\r\n }\r\n }\r\n /** @inheritDoc */\r\n getImmediateChild(childName) {\r\n // Hack to treat priority as a regular child\r\n if (childName === '.priority') {\r\n return this.getPriority();\r\n }\r\n else {\r\n const child = this.children_.get(childName);\r\n return child === null ? EMPTY_NODE : child;\r\n }\r\n }\r\n /** @inheritDoc */\r\n getChild(path) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return this;\r\n }\r\n return this.getImmediateChild(front).getChild(pathPopFront(path));\r\n }\r\n /** @inheritDoc */\r\n hasChild(childName) {\r\n return this.children_.get(childName) !== null;\r\n }\r\n /** @inheritDoc */\r\n updateImmediateChild(childName, newChildNode) {\r\n assert(newChildNode, 'We should always be passing snapshot nodes');\r\n if (childName === '.priority') {\r\n return this.updatePriority(newChildNode);\r\n }\r\n else {\r\n const namedNode = new NamedNode(childName, newChildNode);\r\n let newChildren, newIndexMap;\r\n if (newChildNode.isEmpty()) {\r\n newChildren = this.children_.remove(childName);\r\n newIndexMap = this.indexMap_.removeFromIndexes(namedNode, this.children_);\r\n }\r\n else {\r\n newChildren = this.children_.insert(childName, newChildNode);\r\n newIndexMap = this.indexMap_.addToIndexes(namedNode, this.children_);\r\n }\r\n const newPriority = newChildren.isEmpty()\r\n ? EMPTY_NODE\r\n : this.priorityNode_;\r\n return new ChildrenNode(newChildren, newPriority, newIndexMap);\r\n }\r\n }\r\n /** @inheritDoc */\r\n updateChild(path, newChildNode) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return newChildNode;\r\n }\r\n else {\r\n assert(pathGetFront(path) !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\r\n const newImmediateChild = this.getImmediateChild(front).updateChild(pathPopFront(path), newChildNode);\r\n return this.updateImmediateChild(front, newImmediateChild);\r\n }\r\n }\r\n /** @inheritDoc */\r\n isEmpty() {\r\n return this.children_.isEmpty();\r\n }\r\n /** @inheritDoc */\r\n numChildren() {\r\n return this.children_.count();\r\n }\r\n /** @inheritDoc */\r\n val(exportFormat) {\r\n if (this.isEmpty()) {\r\n return null;\r\n }\r\n const obj = {};\r\n let numKeys = 0, maxKey = 0, allIntegerKeys = true;\r\n this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n obj[key] = childNode.val(exportFormat);\r\n numKeys++;\r\n if (allIntegerKeys && ChildrenNode.INTEGER_REGEXP_.test(key)) {\r\n maxKey = Math.max(maxKey, Number(key));\r\n }\r\n else {\r\n allIntegerKeys = false;\r\n }\r\n });\r\n if (!exportFormat && allIntegerKeys && maxKey < 2 * numKeys) {\r\n // convert to array.\r\n const array = [];\r\n // eslint-disable-next-line guard-for-in\r\n for (const key in obj) {\r\n array[key] = obj[key];\r\n }\r\n return array;\r\n }\r\n else {\r\n if (exportFormat && !this.getPriority().isEmpty()) {\r\n obj['.priority'] = this.getPriority().val();\r\n }\r\n return obj;\r\n }\r\n }\r\n /** @inheritDoc */\r\n hash() {\r\n if (this.lazyHash_ === null) {\r\n let toHash = '';\r\n if (!this.getPriority().isEmpty()) {\r\n toHash +=\r\n 'priority:' +\r\n priorityHashText(this.getPriority().val()) +\r\n ':';\r\n }\r\n this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n const childHash = childNode.hash();\r\n if (childHash !== '') {\r\n toHash += ':' + key + ':' + childHash;\r\n }\r\n });\r\n this.lazyHash_ = toHash === '' ? '' : sha1(toHash);\r\n }\r\n return this.lazyHash_;\r\n }\r\n /** @inheritDoc */\r\n getPredecessorChildName(childName, childNode, index) {\r\n const idx = this.resolveIndex_(index);\r\n if (idx) {\r\n const predecessor = idx.getPredecessorKey(new NamedNode(childName, childNode));\r\n return predecessor ? predecessor.name : null;\r\n }\r\n else {\r\n return this.children_.getPredecessorKey(childName);\r\n }\r\n }\r\n getFirstChildName(indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n const minKey = idx.minKey();\r\n return minKey && minKey.name;\r\n }\r\n else {\r\n return this.children_.minKey();\r\n }\r\n }\r\n getFirstChild(indexDefinition) {\r\n const minKey = this.getFirstChildName(indexDefinition);\r\n if (minKey) {\r\n return new NamedNode(minKey, this.children_.get(minKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Given an index, return the key name of the largest value we have, according to that index\r\n */\r\n getLastChildName(indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n const maxKey = idx.maxKey();\r\n return maxKey && maxKey.name;\r\n }\r\n else {\r\n return this.children_.maxKey();\r\n }\r\n }\r\n getLastChild(indexDefinition) {\r\n const maxKey = this.getLastChildName(indexDefinition);\r\n if (maxKey) {\r\n return new NamedNode(maxKey, this.children_.get(maxKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n forEachChild(index, action) {\r\n const idx = this.resolveIndex_(index);\r\n if (idx) {\r\n return idx.inorderTraversal(wrappedNode => {\r\n return action(wrappedNode.name, wrappedNode.node);\r\n });\r\n }\r\n else {\r\n return this.children_.inorderTraversal(action);\r\n }\r\n }\r\n getIterator(indexDefinition) {\r\n return this.getIteratorFrom(indexDefinition.minPost(), indexDefinition);\r\n }\r\n getIteratorFrom(startPost, indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n return idx.getIteratorFrom(startPost, key => key);\r\n }\r\n else {\r\n const iterator = this.children_.getIteratorFrom(startPost.name, NamedNode.Wrap);\r\n let next = iterator.peek();\r\n while (next != null && indexDefinition.compare(next, startPost) < 0) {\r\n iterator.getNext();\r\n next = iterator.peek();\r\n }\r\n return iterator;\r\n }\r\n }\r\n getReverseIterator(indexDefinition) {\r\n return this.getReverseIteratorFrom(indexDefinition.maxPost(), indexDefinition);\r\n }\r\n getReverseIteratorFrom(endPost, indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n return idx.getReverseIteratorFrom(endPost, key => {\r\n return key;\r\n });\r\n }\r\n else {\r\n const iterator = this.children_.getReverseIteratorFrom(endPost.name, NamedNode.Wrap);\r\n let next = iterator.peek();\r\n while (next != null && indexDefinition.compare(next, endPost) > 0) {\r\n iterator.getNext();\r\n next = iterator.peek();\r\n }\r\n return iterator;\r\n }\r\n }\r\n compareTo(other) {\r\n if (this.isEmpty()) {\r\n if (other.isEmpty()) {\r\n return 0;\r\n }\r\n else {\r\n return -1;\r\n }\r\n }\r\n else if (other.isLeafNode() || other.isEmpty()) {\r\n return 1;\r\n }\r\n else if (other === MAX_NODE) {\r\n return -1;\r\n }\r\n else {\r\n // Must be another node with children.\r\n return 0;\r\n }\r\n }\r\n withIndex(indexDefinition) {\r\n if (indexDefinition === KEY_INDEX ||\r\n this.indexMap_.hasIndex(indexDefinition)) {\r\n return this;\r\n }\r\n else {\r\n const newIndexMap = this.indexMap_.addIndex(indexDefinition, this.children_);\r\n return new ChildrenNode(this.children_, this.priorityNode_, newIndexMap);\r\n }\r\n }\r\n isIndexed(index) {\r\n return index === KEY_INDEX || this.indexMap_.hasIndex(index);\r\n }\r\n equals(other) {\r\n if (other === this) {\r\n return true;\r\n }\r\n else if (other.isLeafNode()) {\r\n return false;\r\n }\r\n else {\r\n const otherChildrenNode = other;\r\n if (!this.getPriority().equals(otherChildrenNode.getPriority())) {\r\n return false;\r\n }\r\n else if (this.children_.count() === otherChildrenNode.children_.count()) {\r\n const thisIter = this.getIterator(PRIORITY_INDEX);\r\n const otherIter = otherChildrenNode.getIterator(PRIORITY_INDEX);\r\n let thisCurrent = thisIter.getNext();\r\n let otherCurrent = otherIter.getNext();\r\n while (thisCurrent && otherCurrent) {\r\n if (thisCurrent.name !== otherCurrent.name ||\r\n !thisCurrent.node.equals(otherCurrent.node)) {\r\n return false;\r\n }\r\n thisCurrent = thisIter.getNext();\r\n otherCurrent = otherIter.getNext();\r\n }\r\n return thisCurrent === null && otherCurrent === null;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n }\r\n /**\r\n * Returns a SortedMap ordered by index, or null if the default (by-key) ordering can be used\r\n * instead.\r\n *\r\n */\r\n resolveIndex_(indexDefinition) {\r\n if (indexDefinition === KEY_INDEX) {\r\n return null;\r\n }\r\n else {\r\n return this.indexMap_.get(indexDefinition.toString());\r\n }\r\n }\r\n}\r\nChildrenNode.INTEGER_REGEXP_ = /^(0|[1-9]\\d*)$/;\r\nclass MaxNode extends ChildrenNode {\r\n constructor() {\r\n super(new SortedMap(NAME_COMPARATOR), ChildrenNode.EMPTY_NODE, IndexMap.Default);\r\n }\r\n compareTo(other) {\r\n if (other === this) {\r\n return 0;\r\n }\r\n else {\r\n return 1;\r\n }\r\n }\r\n equals(other) {\r\n // Not that we every compare it, but MAX_NODE is only ever equal to itself\r\n return other === this;\r\n }\r\n getPriority() {\r\n return this;\r\n }\r\n getImmediateChild(childName) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n isEmpty() {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Marker that will sort higher than any other snapshot.\r\n */\r\nconst MAX_NODE = new MaxNode();\r\nObject.defineProperties(NamedNode, {\r\n MIN: {\r\n value: new NamedNode(MIN_NAME, ChildrenNode.EMPTY_NODE)\r\n },\r\n MAX: {\r\n value: new NamedNode(MAX_NAME, MAX_NODE)\r\n }\r\n});\r\n/**\r\n * Reference Extensions\r\n */\r\nKeyIndex.__EMPTY_NODE = ChildrenNode.EMPTY_NODE;\r\nLeafNode.__childrenNodeConstructor = ChildrenNode;\r\nsetMaxNode$1(MAX_NODE);\r\nsetMaxNode(MAX_NODE);\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst USE_HINZE = true;\r\n/**\r\n * Constructs a snapshot node representing the passed JSON and returns it.\r\n * @param json - JSON to create a node for.\r\n * @param priority - Optional priority to use. This will be ignored if the\r\n * passed JSON contains a .priority property.\r\n */\r\nfunction nodeFromJSON(json, priority = null) {\r\n if (json === null) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n if (typeof json === 'object' && '.priority' in json) {\r\n priority = json['.priority'];\r\n }\r\n assert(priority === null ||\r\n typeof priority === 'string' ||\r\n typeof priority === 'number' ||\r\n (typeof priority === 'object' && '.sv' in priority), 'Invalid priority type found: ' + typeof priority);\r\n if (typeof json === 'object' && '.value' in json && json['.value'] !== null) {\r\n json = json['.value'];\r\n }\r\n // Valid leaf nodes include non-objects or server-value wrapper objects\r\n if (typeof json !== 'object' || '.sv' in json) {\r\n const jsonLeaf = json;\r\n return new LeafNode(jsonLeaf, nodeFromJSON(priority));\r\n }\r\n if (!(json instanceof Array) && USE_HINZE) {\r\n const children = [];\r\n let childrenHavePriority = false;\r\n const hinzeJsonObj = json;\r\n each(hinzeJsonObj, (key, child) => {\r\n if (key.substring(0, 1) !== '.') {\r\n // Ignore metadata nodes\r\n const childNode = nodeFromJSON(child);\r\n if (!childNode.isEmpty()) {\r\n childrenHavePriority =\r\n childrenHavePriority || !childNode.getPriority().isEmpty();\r\n children.push(new NamedNode(key, childNode));\r\n }\r\n }\r\n });\r\n if (children.length === 0) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n const childSet = buildChildSet(children, NAME_ONLY_COMPARATOR, namedNode => namedNode.name, NAME_COMPARATOR);\r\n if (childrenHavePriority) {\r\n const sortedChildSet = buildChildSet(children, PRIORITY_INDEX.getCompare());\r\n return new ChildrenNode(childSet, nodeFromJSON(priority), new IndexMap({ '.priority': sortedChildSet }, { '.priority': PRIORITY_INDEX }));\r\n }\r\n else {\r\n return new ChildrenNode(childSet, nodeFromJSON(priority), IndexMap.Default);\r\n }\r\n }\r\n else {\r\n let node = ChildrenNode.EMPTY_NODE;\r\n each(json, (key, childData) => {\r\n if (contains(json, key)) {\r\n if (key.substring(0, 1) !== '.') {\r\n // ignore metadata nodes.\r\n const childNode = nodeFromJSON(childData);\r\n if (childNode.isLeafNode() || !childNode.isEmpty()) {\r\n node = node.updateImmediateChild(key, childNode);\r\n }\r\n }\r\n }\r\n });\r\n return node.updatePriority(nodeFromJSON(priority));\r\n }\r\n}\r\nsetNodeFromJSON(nodeFromJSON);\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PathIndex extends Index {\r\n constructor(indexPath_) {\r\n super();\r\n this.indexPath_ = indexPath_;\r\n assert(!pathIsEmpty(indexPath_) && pathGetFront(indexPath_) !== '.priority', \"Can't create PathIndex with empty path or .priority key\");\r\n }\r\n extractChild(snap) {\r\n return snap.getChild(this.indexPath_);\r\n }\r\n isDefinedOn(node) {\r\n return !node.getChild(this.indexPath_).isEmpty();\r\n }\r\n compare(a, b) {\r\n const aChild = this.extractChild(a.node);\r\n const bChild = this.extractChild(b.node);\r\n const indexCmp = aChild.compareTo(bChild);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n makePost(indexValue, name) {\r\n const valueNode = nodeFromJSON(indexValue);\r\n const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, valueNode);\r\n return new NamedNode(name, node);\r\n }\r\n maxPost() {\r\n const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, MAX_NODE);\r\n return new NamedNode(MAX_NAME, node);\r\n }\r\n toString() {\r\n return pathSlice(this.indexPath_, 0).join('/');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ValueIndex extends Index {\r\n compare(a, b) {\r\n const indexCmp = a.node.compareTo(b.node);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n isDefinedOn(node) {\r\n return true;\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return !oldNode.equals(newNode);\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MAX;\r\n }\r\n makePost(indexValue, name) {\r\n const valueNode = nodeFromJSON(indexValue);\r\n return new NamedNode(name, valueNode);\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.value';\r\n }\r\n}\r\nconst VALUE_INDEX = new ValueIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction changeValue(snapshotNode) {\r\n return { type: \"value\" /* ChangeType.VALUE */, snapshotNode };\r\n}\r\nfunction changeChildAdded(childName, snapshotNode) {\r\n return { type: \"child_added\" /* ChangeType.CHILD_ADDED */, snapshotNode, childName };\r\n}\r\nfunction changeChildRemoved(childName, snapshotNode) {\r\n return { type: \"child_removed\" /* ChangeType.CHILD_REMOVED */, snapshotNode, childName };\r\n}\r\nfunction changeChildChanged(childName, snapshotNode, oldSnap) {\r\n return {\r\n type: \"child_changed\" /* ChangeType.CHILD_CHANGED */,\r\n snapshotNode,\r\n childName,\r\n oldSnap\r\n };\r\n}\r\nfunction changeChildMoved(childName, snapshotNode) {\r\n return { type: \"child_moved\" /* ChangeType.CHILD_MOVED */, snapshotNode, childName };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Doesn't really filter nodes but applies an index to the node and keeps track of any changes\r\n */\r\nclass IndexedFilter {\r\n constructor(index_) {\r\n this.index_ = index_;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n assert(snap.isIndexed(this.index_), 'A node must be indexed if only a child is updated');\r\n const oldChild = snap.getImmediateChild(key);\r\n // Check if anything actually changed.\r\n if (oldChild.getChild(affectedPath).equals(newChild.getChild(affectedPath))) {\r\n // There's an edge case where a child can enter or leave the view because affectedPath was set to null.\r\n // In this case, affectedPath will appear null in both the old and new snapshots. So we need\r\n // to avoid treating these cases as \"nothing changed.\"\r\n if (oldChild.isEmpty() === newChild.isEmpty()) {\r\n // Nothing changed.\r\n // This assert should be valid, but it's expensive (can dominate perf testing) so don't actually do it.\r\n //assert(oldChild.equals(newChild), 'Old and new snapshots should be equal.');\r\n return snap;\r\n }\r\n }\r\n if (optChangeAccumulator != null) {\r\n if (newChild.isEmpty()) {\r\n if (snap.hasChild(key)) {\r\n optChangeAccumulator.trackChildChange(changeChildRemoved(key, oldChild));\r\n }\r\n else {\r\n assert(snap.isLeafNode(), 'A child remove without an old child only makes sense on a leaf node');\r\n }\r\n }\r\n else if (oldChild.isEmpty()) {\r\n optChangeAccumulator.trackChildChange(changeChildAdded(key, newChild));\r\n }\r\n else {\r\n optChangeAccumulator.trackChildChange(changeChildChanged(key, newChild, oldChild));\r\n }\r\n }\r\n if (snap.isLeafNode() && newChild.isEmpty()) {\r\n return snap;\r\n }\r\n else {\r\n // Make sure the node is indexed\r\n return snap.updateImmediateChild(key, newChild).withIndex(this.index_);\r\n }\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n if (optChangeAccumulator != null) {\r\n if (!oldSnap.isLeafNode()) {\r\n oldSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (!newSnap.hasChild(key)) {\r\n optChangeAccumulator.trackChildChange(changeChildRemoved(key, childNode));\r\n }\r\n });\r\n }\r\n if (!newSnap.isLeafNode()) {\r\n newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (oldSnap.hasChild(key)) {\r\n const oldChild = oldSnap.getImmediateChild(key);\r\n if (!oldChild.equals(childNode)) {\r\n optChangeAccumulator.trackChildChange(changeChildChanged(key, childNode, oldChild));\r\n }\r\n }\r\n else {\r\n optChangeAccumulator.trackChildChange(changeChildAdded(key, childNode));\r\n }\r\n });\r\n }\r\n }\r\n return newSnap.withIndex(this.index_);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n if (oldSnap.isEmpty()) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n else {\r\n return oldSnap.updatePriority(newPriority);\r\n }\r\n }\r\n filtersNodes() {\r\n return false;\r\n }\r\n getIndexedFilter() {\r\n return this;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Filters nodes by range and uses an IndexFilter to track any changes after filtering the node\r\n */\r\nclass RangedFilter {\r\n constructor(params) {\r\n this.indexedFilter_ = new IndexedFilter(params.getIndex());\r\n this.index_ = params.getIndex();\r\n this.startPost_ = RangedFilter.getStartPost_(params);\r\n this.endPost_ = RangedFilter.getEndPost_(params);\r\n this.startIsInclusive_ = !params.startAfterSet_;\r\n this.endIsInclusive_ = !params.endBeforeSet_;\r\n }\r\n getStartPost() {\r\n return this.startPost_;\r\n }\r\n getEndPost() {\r\n return this.endPost_;\r\n }\r\n matches(node) {\r\n const isWithinStart = this.startIsInclusive_\r\n ? this.index_.compare(this.getStartPost(), node) <= 0\r\n : this.index_.compare(this.getStartPost(), node) < 0;\r\n const isWithinEnd = this.endIsInclusive_\r\n ? this.index_.compare(node, this.getEndPost()) <= 0\r\n : this.index_.compare(node, this.getEndPost()) < 0;\r\n return isWithinStart && isWithinEnd;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n if (!this.matches(new NamedNode(key, newChild))) {\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n return this.indexedFilter_.updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n if (newSnap.isLeafNode()) {\r\n // Make sure we have a children node with the correct index, not a leaf node;\r\n newSnap = ChildrenNode.EMPTY_NODE;\r\n }\r\n let filtered = newSnap.withIndex(this.index_);\r\n // Don't support priorities on queries\r\n filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n const self = this;\r\n newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (!self.matches(new NamedNode(key, childNode))) {\r\n filtered = filtered.updateImmediateChild(key, ChildrenNode.EMPTY_NODE);\r\n }\r\n });\r\n return this.indexedFilter_.updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n // Don't support priorities on queries\r\n return oldSnap;\r\n }\r\n filtersNodes() {\r\n return true;\r\n }\r\n getIndexedFilter() {\r\n return this.indexedFilter_;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n static getStartPost_(params) {\r\n if (params.hasStart()) {\r\n const startName = params.getIndexStartName();\r\n return params.getIndex().makePost(params.getIndexStartValue(), startName);\r\n }\r\n else {\r\n return params.getIndex().minPost();\r\n }\r\n }\r\n static getEndPost_(params) {\r\n if (params.hasEnd()) {\r\n const endName = params.getIndexEndName();\r\n return params.getIndex().makePost(params.getIndexEndValue(), endName);\r\n }\r\n else {\r\n return params.getIndex().maxPost();\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Applies a limit and a range to a node and uses RangedFilter to do the heavy lifting where possible\r\n */\r\nclass LimitedFilter {\r\n constructor(params) {\r\n this.withinDirectionalStart = (node) => this.reverse_ ? this.withinEndPost(node) : this.withinStartPost(node);\r\n this.withinDirectionalEnd = (node) => this.reverse_ ? this.withinStartPost(node) : this.withinEndPost(node);\r\n this.withinStartPost = (node) => {\r\n const compareRes = this.index_.compare(this.rangedFilter_.getStartPost(), node);\r\n return this.startIsInclusive_ ? compareRes <= 0 : compareRes < 0;\r\n };\r\n this.withinEndPost = (node) => {\r\n const compareRes = this.index_.compare(node, this.rangedFilter_.getEndPost());\r\n return this.endIsInclusive_ ? compareRes <= 0 : compareRes < 0;\r\n };\r\n this.rangedFilter_ = new RangedFilter(params);\r\n this.index_ = params.getIndex();\r\n this.limit_ = params.getLimit();\r\n this.reverse_ = !params.isViewFromLeft();\r\n this.startIsInclusive_ = !params.startAfterSet_;\r\n this.endIsInclusive_ = !params.endBeforeSet_;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n if (!this.rangedFilter_.matches(new NamedNode(key, newChild))) {\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n if (snap.getImmediateChild(key).equals(newChild)) {\r\n // No change\r\n return snap;\r\n }\r\n else if (snap.numChildren() < this.limit_) {\r\n return this.rangedFilter_\r\n .getIndexedFilter()\r\n .updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n }\r\n else {\r\n return this.fullLimitUpdateChild_(snap, key, newChild, source, optChangeAccumulator);\r\n }\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n let filtered;\r\n if (newSnap.isLeafNode() || newSnap.isEmpty()) {\r\n // Make sure we have a children node with the correct index, not a leaf node;\r\n filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n }\r\n else {\r\n if (this.limit_ * 2 < newSnap.numChildren() &&\r\n newSnap.isIndexed(this.index_)) {\r\n // Easier to build up a snapshot, since what we're given has more than twice the elements we want\r\n filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n // anchor to the startPost, endPost, or last element as appropriate\r\n let iterator;\r\n if (this.reverse_) {\r\n iterator = newSnap.getReverseIteratorFrom(this.rangedFilter_.getEndPost(), this.index_);\r\n }\r\n else {\r\n iterator = newSnap.getIteratorFrom(this.rangedFilter_.getStartPost(), this.index_);\r\n }\r\n let count = 0;\r\n while (iterator.hasNext() && count < this.limit_) {\r\n const next = iterator.getNext();\r\n if (!this.withinDirectionalStart(next)) {\r\n // if we have not reached the start, skip to the next element\r\n continue;\r\n }\r\n else if (!this.withinDirectionalEnd(next)) {\r\n // if we have reached the end, stop adding elements\r\n break;\r\n }\r\n else {\r\n filtered = filtered.updateImmediateChild(next.name, next.node);\r\n count++;\r\n }\r\n }\r\n }\r\n else {\r\n // The snap contains less than twice the limit. Faster to delete from the snap than build up a new one\r\n filtered = newSnap.withIndex(this.index_);\r\n // Don't support priorities on queries\r\n filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n let iterator;\r\n if (this.reverse_) {\r\n iterator = filtered.getReverseIterator(this.index_);\r\n }\r\n else {\r\n iterator = filtered.getIterator(this.index_);\r\n }\r\n let count = 0;\r\n while (iterator.hasNext()) {\r\n const next = iterator.getNext();\r\n const inRange = count < this.limit_ &&\r\n this.withinDirectionalStart(next) &&\r\n this.withinDirectionalEnd(next);\r\n if (inRange) {\r\n count++;\r\n }\r\n else {\r\n filtered = filtered.updateImmediateChild(next.name, ChildrenNode.EMPTY_NODE);\r\n }\r\n }\r\n }\r\n }\r\n return this.rangedFilter_\r\n .getIndexedFilter()\r\n .updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n // Don't support priorities on queries\r\n return oldSnap;\r\n }\r\n filtersNodes() {\r\n return true;\r\n }\r\n getIndexedFilter() {\r\n return this.rangedFilter_.getIndexedFilter();\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n fullLimitUpdateChild_(snap, childKey, childSnap, source, changeAccumulator) {\r\n // TODO: rename all cache stuff etc to general snap terminology\r\n let cmp;\r\n if (this.reverse_) {\r\n const indexCmp = this.index_.getCompare();\r\n cmp = (a, b) => indexCmp(b, a);\r\n }\r\n else {\r\n cmp = this.index_.getCompare();\r\n }\r\n const oldEventCache = snap;\r\n assert(oldEventCache.numChildren() === this.limit_, '');\r\n const newChildNamedNode = new NamedNode(childKey, childSnap);\r\n const windowBoundary = this.reverse_\r\n ? oldEventCache.getFirstChild(this.index_)\r\n : oldEventCache.getLastChild(this.index_);\r\n const inRange = this.rangedFilter_.matches(newChildNamedNode);\r\n if (oldEventCache.hasChild(childKey)) {\r\n const oldChildSnap = oldEventCache.getImmediateChild(childKey);\r\n let nextChild = source.getChildAfterChild(this.index_, windowBoundary, this.reverse_);\r\n while (nextChild != null &&\r\n (nextChild.name === childKey || oldEventCache.hasChild(nextChild.name))) {\r\n // There is a weird edge case where a node is updated as part of a merge in the write tree, but hasn't\r\n // been applied to the limited filter yet. Ignore this next child which will be updated later in\r\n // the limited filter...\r\n nextChild = source.getChildAfterChild(this.index_, nextChild, this.reverse_);\r\n }\r\n const compareNext = nextChild == null ? 1 : cmp(nextChild, newChildNamedNode);\r\n const remainsInWindow = inRange && !childSnap.isEmpty() && compareNext >= 0;\r\n if (remainsInWindow) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildChanged(childKey, childSnap, oldChildSnap));\r\n }\r\n return oldEventCache.updateImmediateChild(childKey, childSnap);\r\n }\r\n else {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildRemoved(childKey, oldChildSnap));\r\n }\r\n const newEventCache = oldEventCache.updateImmediateChild(childKey, ChildrenNode.EMPTY_NODE);\r\n const nextChildInRange = nextChild != null && this.rangedFilter_.matches(nextChild);\r\n if (nextChildInRange) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildAdded(nextChild.name, nextChild.node));\r\n }\r\n return newEventCache.updateImmediateChild(nextChild.name, nextChild.node);\r\n }\r\n else {\r\n return newEventCache;\r\n }\r\n }\r\n }\r\n else if (childSnap.isEmpty()) {\r\n // we're deleting a node, but it was not in the window, so ignore it\r\n return snap;\r\n }\r\n else if (inRange) {\r\n if (cmp(windowBoundary, newChildNamedNode) >= 0) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildRemoved(windowBoundary.name, windowBoundary.node));\r\n changeAccumulator.trackChildChange(changeChildAdded(childKey, childSnap));\r\n }\r\n return oldEventCache\r\n .updateImmediateChild(childKey, childSnap)\r\n .updateImmediateChild(windowBoundary.name, ChildrenNode.EMPTY_NODE);\r\n }\r\n else {\r\n return snap;\r\n }\r\n }\r\n else {\r\n return snap;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a\r\n * range to be returned for a particular location. It is assumed that validation of parameters is done at the\r\n * user-facing API level, so it is not done here.\r\n *\r\n * @internal\r\n */\r\nclass QueryParams {\r\n constructor() {\r\n this.limitSet_ = false;\r\n this.startSet_ = false;\r\n this.startNameSet_ = false;\r\n this.startAfterSet_ = false; // can only be true if startSet_ is true\r\n this.endSet_ = false;\r\n this.endNameSet_ = false;\r\n this.endBeforeSet_ = false; // can only be true if endSet_ is true\r\n this.limit_ = 0;\r\n this.viewFrom_ = '';\r\n this.indexStartValue_ = null;\r\n this.indexStartName_ = '';\r\n this.indexEndValue_ = null;\r\n this.indexEndName_ = '';\r\n this.index_ = PRIORITY_INDEX;\r\n }\r\n hasStart() {\r\n return this.startSet_;\r\n }\r\n /**\r\n * @returns True if it would return from left.\r\n */\r\n isViewFromLeft() {\r\n if (this.viewFrom_ === '') {\r\n // limit(), rather than limitToFirst or limitToLast was called.\r\n // This means that only one of startSet_ and endSet_ is true. Use them\r\n // to calculate which side of the view to anchor to. If neither is set,\r\n // anchor to the end.\r\n return this.startSet_;\r\n }\r\n else {\r\n return this.viewFrom_ === \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n }\r\n }\r\n /**\r\n * Only valid to call if hasStart() returns true\r\n */\r\n getIndexStartValue() {\r\n assert(this.startSet_, 'Only valid if start has been set');\r\n return this.indexStartValue_;\r\n }\r\n /**\r\n * Only valid to call if hasStart() returns true.\r\n * Returns the starting key name for the range defined by these query parameters\r\n */\r\n getIndexStartName() {\r\n assert(this.startSet_, 'Only valid if start has been set');\r\n if (this.startNameSet_) {\r\n return this.indexStartName_;\r\n }\r\n else {\r\n return MIN_NAME;\r\n }\r\n }\r\n hasEnd() {\r\n return this.endSet_;\r\n }\r\n /**\r\n * Only valid to call if hasEnd() returns true.\r\n */\r\n getIndexEndValue() {\r\n assert(this.endSet_, 'Only valid if end has been set');\r\n return this.indexEndValue_;\r\n }\r\n /**\r\n * Only valid to call if hasEnd() returns true.\r\n * Returns the end key name for the range defined by these query parameters\r\n */\r\n getIndexEndName() {\r\n assert(this.endSet_, 'Only valid if end has been set');\r\n if (this.endNameSet_) {\r\n return this.indexEndName_;\r\n }\r\n else {\r\n return MAX_NAME;\r\n }\r\n }\r\n hasLimit() {\r\n return this.limitSet_;\r\n }\r\n /**\r\n * @returns True if a limit has been set and it has been explicitly anchored\r\n */\r\n hasAnchoredLimit() {\r\n return this.limitSet_ && this.viewFrom_ !== '';\r\n }\r\n /**\r\n * Only valid to call if hasLimit() returns true\r\n */\r\n getLimit() {\r\n assert(this.limitSet_, 'Only valid if limit has been set');\r\n return this.limit_;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n loadsAllData() {\r\n return !(this.startSet_ || this.endSet_ || this.limitSet_);\r\n }\r\n isDefault() {\r\n return this.loadsAllData() && this.index_ === PRIORITY_INDEX;\r\n }\r\n copy() {\r\n const copy = new QueryParams();\r\n copy.limitSet_ = this.limitSet_;\r\n copy.limit_ = this.limit_;\r\n copy.startSet_ = this.startSet_;\r\n copy.startAfterSet_ = this.startAfterSet_;\r\n copy.indexStartValue_ = this.indexStartValue_;\r\n copy.startNameSet_ = this.startNameSet_;\r\n copy.indexStartName_ = this.indexStartName_;\r\n copy.endSet_ = this.endSet_;\r\n copy.endBeforeSet_ = this.endBeforeSet_;\r\n copy.indexEndValue_ = this.indexEndValue_;\r\n copy.endNameSet_ = this.endNameSet_;\r\n copy.indexEndName_ = this.indexEndName_;\r\n copy.index_ = this.index_;\r\n copy.viewFrom_ = this.viewFrom_;\r\n return copy;\r\n }\r\n}\r\nfunction queryParamsGetNodeFilter(queryParams) {\r\n if (queryParams.loadsAllData()) {\r\n return new IndexedFilter(queryParams.getIndex());\r\n }\r\n else if (queryParams.hasLimit()) {\r\n return new LimitedFilter(queryParams);\r\n }\r\n else {\r\n return new RangedFilter(queryParams);\r\n }\r\n}\r\nfunction queryParamsLimitToFirst(queryParams, newLimit) {\r\n const newParams = queryParams.copy();\r\n newParams.limitSet_ = true;\r\n newParams.limit_ = newLimit;\r\n newParams.viewFrom_ = \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n return newParams;\r\n}\r\nfunction queryParamsLimitToLast(queryParams, newLimit) {\r\n const newParams = queryParams.copy();\r\n newParams.limitSet_ = true;\r\n newParams.limit_ = newLimit;\r\n newParams.viewFrom_ = \"r\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT */;\r\n return newParams;\r\n}\r\nfunction queryParamsStartAt(queryParams, indexValue, key) {\r\n const newParams = queryParams.copy();\r\n newParams.startSet_ = true;\r\n if (indexValue === undefined) {\r\n indexValue = null;\r\n }\r\n newParams.indexStartValue_ = indexValue;\r\n if (key != null) {\r\n newParams.startNameSet_ = true;\r\n newParams.indexStartName_ = key;\r\n }\r\n else {\r\n newParams.startNameSet_ = false;\r\n newParams.indexStartName_ = '';\r\n }\r\n return newParams;\r\n}\r\nfunction queryParamsStartAfter(queryParams, indexValue, key) {\r\n let params;\r\n if (queryParams.index_ === KEY_INDEX || !!key) {\r\n params = queryParamsStartAt(queryParams, indexValue, key);\r\n }\r\n else {\r\n params = queryParamsStartAt(queryParams, indexValue, MAX_NAME);\r\n }\r\n params.startAfterSet_ = true;\r\n return params;\r\n}\r\nfunction queryParamsEndAt(queryParams, indexValue, key) {\r\n const newParams = queryParams.copy();\r\n newParams.endSet_ = true;\r\n if (indexValue === undefined) {\r\n indexValue = null;\r\n }\r\n newParams.indexEndValue_ = indexValue;\r\n if (key !== undefined) {\r\n newParams.endNameSet_ = true;\r\n newParams.indexEndName_ = key;\r\n }\r\n else {\r\n newParams.endNameSet_ = false;\r\n newParams.indexEndName_ = '';\r\n }\r\n return newParams;\r\n}\r\nfunction queryParamsEndBefore(queryParams, indexValue, key) {\r\n let params;\r\n if (queryParams.index_ === KEY_INDEX || !!key) {\r\n params = queryParamsEndAt(queryParams, indexValue, key);\r\n }\r\n else {\r\n params = queryParamsEndAt(queryParams, indexValue, MIN_NAME);\r\n }\r\n params.endBeforeSet_ = true;\r\n return params;\r\n}\r\nfunction queryParamsOrderBy(queryParams, index) {\r\n const newParams = queryParams.copy();\r\n newParams.index_ = index;\r\n return newParams;\r\n}\r\n/**\r\n * Returns a set of REST query string parameters representing this query.\r\n *\r\n * @returns query string parameters\r\n */\r\nfunction queryParamsToRestQueryStringParameters(queryParams) {\r\n const qs = {};\r\n if (queryParams.isDefault()) {\r\n return qs;\r\n }\r\n let orderBy;\r\n if (queryParams.index_ === PRIORITY_INDEX) {\r\n orderBy = \"$priority\" /* REST_QUERY_CONSTANTS.PRIORITY_INDEX */;\r\n }\r\n else if (queryParams.index_ === VALUE_INDEX) {\r\n orderBy = \"$value\" /* REST_QUERY_CONSTANTS.VALUE_INDEX */;\r\n }\r\n else if (queryParams.index_ === KEY_INDEX) {\r\n orderBy = \"$key\" /* REST_QUERY_CONSTANTS.KEY_INDEX */;\r\n }\r\n else {\r\n assert(queryParams.index_ instanceof PathIndex, 'Unrecognized index type!');\r\n orderBy = queryParams.index_.toString();\r\n }\r\n qs[\"orderBy\" /* REST_QUERY_CONSTANTS.ORDER_BY */] = stringify(orderBy);\r\n if (queryParams.startSet_) {\r\n const startParam = queryParams.startAfterSet_\r\n ? \"startAfter\" /* REST_QUERY_CONSTANTS.START_AFTER */\r\n : \"startAt\" /* REST_QUERY_CONSTANTS.START_AT */;\r\n qs[startParam] = stringify(queryParams.indexStartValue_);\r\n if (queryParams.startNameSet_) {\r\n qs[startParam] += ',' + stringify(queryParams.indexStartName_);\r\n }\r\n }\r\n if (queryParams.endSet_) {\r\n const endParam = queryParams.endBeforeSet_\r\n ? \"endBefore\" /* REST_QUERY_CONSTANTS.END_BEFORE */\r\n : \"endAt\" /* REST_QUERY_CONSTANTS.END_AT */;\r\n qs[endParam] = stringify(queryParams.indexEndValue_);\r\n if (queryParams.endNameSet_) {\r\n qs[endParam] += ',' + stringify(queryParams.indexEndName_);\r\n }\r\n }\r\n if (queryParams.limitSet_) {\r\n if (queryParams.isViewFromLeft()) {\r\n qs[\"limitToFirst\" /* REST_QUERY_CONSTANTS.LIMIT_TO_FIRST */] = queryParams.limit_;\r\n }\r\n else {\r\n qs[\"limitToLast\" /* REST_QUERY_CONSTANTS.LIMIT_TO_LAST */] = queryParams.limit_;\r\n }\r\n }\r\n return qs;\r\n}\r\nfunction queryParamsGetQueryObject(queryParams) {\r\n const obj = {};\r\n if (queryParams.startSet_) {\r\n obj[\"sp\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_VALUE */] =\r\n queryParams.indexStartValue_;\r\n if (queryParams.startNameSet_) {\r\n obj[\"sn\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_NAME */] =\r\n queryParams.indexStartName_;\r\n }\r\n obj[\"sin\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_IS_INCLUSIVE */] =\r\n !queryParams.startAfterSet_;\r\n }\r\n if (queryParams.endSet_) {\r\n obj[\"ep\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_VALUE */] = queryParams.indexEndValue_;\r\n if (queryParams.endNameSet_) {\r\n obj[\"en\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_NAME */] = queryParams.indexEndName_;\r\n }\r\n obj[\"ein\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_IS_INCLUSIVE */] =\r\n !queryParams.endBeforeSet_;\r\n }\r\n if (queryParams.limitSet_) {\r\n obj[\"l\" /* WIRE_PROTOCOL_CONSTANTS.LIMIT */] = queryParams.limit_;\r\n let viewFrom = queryParams.viewFrom_;\r\n if (viewFrom === '') {\r\n if (queryParams.isViewFromLeft()) {\r\n viewFrom = \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n }\r\n else {\r\n viewFrom = \"r\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT */;\r\n }\r\n }\r\n obj[\"vf\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM */] = viewFrom;\r\n }\r\n // For now, priority index is the default, so we only specify if it's some other index\r\n if (queryParams.index_ !== PRIORITY_INDEX) {\r\n obj[\"i\" /* WIRE_PROTOCOL_CONSTANTS.INDEX */] = queryParams.index_.toString();\r\n }\r\n return obj;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of ServerActions that communicates with the server via REST requests.\r\n * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full\r\n * persistent connection (using WebSockets or long-polling)\r\n */\r\nclass ReadonlyRestClient extends ServerActions {\r\n /**\r\n * @param repoInfo_ - Data about the namespace we are connecting to\r\n * @param onDataUpdate_ - A callback for new data from the server\r\n */\r\n constructor(repoInfo_, onDataUpdate_, authTokenProvider_, appCheckTokenProvider_) {\r\n super();\r\n this.repoInfo_ = repoInfo_;\r\n this.onDataUpdate_ = onDataUpdate_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckTokenProvider_ = appCheckTokenProvider_;\r\n /** @private {function(...[*])} */\r\n this.log_ = logWrapper('p:rest:');\r\n /**\r\n * We don't actually need to track listens, except to prevent us calling an onComplete for a listen\r\n * that's been removed. :-/\r\n */\r\n this.listens_ = {};\r\n }\r\n reportStats(stats) {\r\n throw new Error('Method not implemented.');\r\n }\r\n static getListenId_(query, tag) {\r\n if (tag !== undefined) {\r\n return 'tag$' + tag;\r\n }\r\n else {\r\n assert(query._queryParams.isDefault(), \"should have a tag if it's not a default query.\");\r\n return query._path.toString();\r\n }\r\n }\r\n /** @inheritDoc */\r\n listen(query, currentHashFn, tag, onComplete) {\r\n const pathString = query._path.toString();\r\n this.log_('Listen called for ' + pathString + ' ' + query._queryIdentifier);\r\n // Mark this listener so we can tell if it's removed.\r\n const listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n const thisListen = {};\r\n this.listens_[listenId] = thisListen;\r\n const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\r\n this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\r\n let data = result;\r\n if (error === 404) {\r\n data = null;\r\n error = null;\r\n }\r\n if (error === null) {\r\n this.onDataUpdate_(pathString, data, /*isMerge=*/ false, tag);\r\n }\r\n if (safeGet(this.listens_, listenId) === thisListen) {\r\n let status;\r\n if (!error) {\r\n status = 'ok';\r\n }\r\n else if (error === 401) {\r\n status = 'permission_denied';\r\n }\r\n else {\r\n status = 'rest_error:' + error;\r\n }\r\n onComplete(status, null);\r\n }\r\n });\r\n }\r\n /** @inheritDoc */\r\n unlisten(query, tag) {\r\n const listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n delete this.listens_[listenId];\r\n }\r\n get(query) {\r\n const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\r\n const pathString = query._path.toString();\r\n const deferred = new Deferred();\r\n this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\r\n let data = result;\r\n if (error === 404) {\r\n data = null;\r\n error = null;\r\n }\r\n if (error === null) {\r\n this.onDataUpdate_(pathString, data, \r\n /*isMerge=*/ false, \r\n /*tag=*/ null);\r\n deferred.resolve(data);\r\n }\r\n else {\r\n deferred.reject(new Error(data));\r\n }\r\n });\r\n return deferred.promise;\r\n }\r\n /** @inheritDoc */\r\n refreshAuthToken(token) {\r\n // no-op since we just always call getToken.\r\n }\r\n /**\r\n * Performs a REST request to the given path, with the provided query string parameters,\r\n * and any auth credentials we have.\r\n */\r\n restRequest_(pathString, queryStringParameters = {}, callback) {\r\n queryStringParameters['format'] = 'export';\r\n return Promise.all([\r\n this.authTokenProvider_.getToken(/*forceRefresh=*/ false),\r\n this.appCheckTokenProvider_.getToken(/*forceRefresh=*/ false)\r\n ]).then(([authToken, appCheckToken]) => {\r\n if (authToken && authToken.accessToken) {\r\n queryStringParameters['auth'] = authToken.accessToken;\r\n }\r\n if (appCheckToken && appCheckToken.token) {\r\n queryStringParameters['ac'] = appCheckToken.token;\r\n }\r\n const url = (this.repoInfo_.secure ? 'https://' : 'http://') +\r\n this.repoInfo_.host +\r\n pathString +\r\n '?' +\r\n 'ns=' +\r\n this.repoInfo_.namespace +\r\n querystring(queryStringParameters);\r\n this.log_('Sending REST request for ' + url);\r\n const xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange = () => {\r\n if (callback && xhr.readyState === 4) {\r\n this.log_('REST Response for ' + url + ' received. status:', xhr.status, 'response:', xhr.responseText);\r\n let res = null;\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n try {\r\n res = jsonEval(xhr.responseText);\r\n }\r\n catch (e) {\r\n warn('Failed to parse JSON response for ' +\r\n url +\r\n ': ' +\r\n xhr.responseText);\r\n }\r\n callback(null, res);\r\n }\r\n else {\r\n // 401 and 404 are expected.\r\n if (xhr.status !== 401 && xhr.status !== 404) {\r\n warn('Got unsuccessful REST response for ' +\r\n url +\r\n ' Status: ' +\r\n xhr.status);\r\n }\r\n callback(xhr.status);\r\n }\r\n callback = null;\r\n }\r\n };\r\n xhr.open('GET', url, /*asynchronous=*/ true);\r\n xhr.send();\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Mutable object which basically just stores a reference to the \"latest\" immutable snapshot.\r\n */\r\nclass SnapshotHolder {\r\n constructor() {\r\n this.rootNode_ = ChildrenNode.EMPTY_NODE;\r\n }\r\n getNode(path) {\r\n return this.rootNode_.getChild(path);\r\n }\r\n updateSnapshot(path, newSnapshotNode) {\r\n this.rootNode_ = this.rootNode_.updateChild(path, newSnapshotNode);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newSparseSnapshotTree() {\r\n return {\r\n value: null,\r\n children: new Map()\r\n };\r\n}\r\n/**\r\n * Stores the given node at the specified path. If there is already a node\r\n * at a shallower path, it merges the new data into that snapshot node.\r\n *\r\n * @param path - Path to look up snapshot for.\r\n * @param data - The new data, or null.\r\n */\r\nfunction sparseSnapshotTreeRemember(sparseSnapshotTree, path, data) {\r\n if (pathIsEmpty(path)) {\r\n sparseSnapshotTree.value = data;\r\n sparseSnapshotTree.children.clear();\r\n }\r\n else if (sparseSnapshotTree.value !== null) {\r\n sparseSnapshotTree.value = sparseSnapshotTree.value.updateChild(path, data);\r\n }\r\n else {\r\n const childKey = pathGetFront(path);\r\n if (!sparseSnapshotTree.children.has(childKey)) {\r\n sparseSnapshotTree.children.set(childKey, newSparseSnapshotTree());\r\n }\r\n const child = sparseSnapshotTree.children.get(childKey);\r\n path = pathPopFront(path);\r\n sparseSnapshotTreeRemember(child, path, data);\r\n }\r\n}\r\n/**\r\n * Purge the data at path from the cache.\r\n *\r\n * @param path - Path to look up snapshot for.\r\n * @returns True if this node should now be removed.\r\n */\r\nfunction sparseSnapshotTreeForget(sparseSnapshotTree, path) {\r\n if (pathIsEmpty(path)) {\r\n sparseSnapshotTree.value = null;\r\n sparseSnapshotTree.children.clear();\r\n return true;\r\n }\r\n else {\r\n if (sparseSnapshotTree.value !== null) {\r\n if (sparseSnapshotTree.value.isLeafNode()) {\r\n // We're trying to forget a node that doesn't exist\r\n return false;\r\n }\r\n else {\r\n const value = sparseSnapshotTree.value;\r\n sparseSnapshotTree.value = null;\r\n value.forEachChild(PRIORITY_INDEX, (key, tree) => {\r\n sparseSnapshotTreeRemember(sparseSnapshotTree, new Path(key), tree);\r\n });\r\n return sparseSnapshotTreeForget(sparseSnapshotTree, path);\r\n }\r\n }\r\n else if (sparseSnapshotTree.children.size > 0) {\r\n const childKey = pathGetFront(path);\r\n path = pathPopFront(path);\r\n if (sparseSnapshotTree.children.has(childKey)) {\r\n const safeToRemove = sparseSnapshotTreeForget(sparseSnapshotTree.children.get(childKey), path);\r\n if (safeToRemove) {\r\n sparseSnapshotTree.children.delete(childKey);\r\n }\r\n }\r\n return sparseSnapshotTree.children.size === 0;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n}\r\n/**\r\n * Recursively iterates through all of the stored tree and calls the\r\n * callback on each one.\r\n *\r\n * @param prefixPath - Path to look up node for.\r\n * @param func - The function to invoke for each tree.\r\n */\r\nfunction sparseSnapshotTreeForEachTree(sparseSnapshotTree, prefixPath, func) {\r\n if (sparseSnapshotTree.value !== null) {\r\n func(prefixPath, sparseSnapshotTree.value);\r\n }\r\n else {\r\n sparseSnapshotTreeForEachChild(sparseSnapshotTree, (key, tree) => {\r\n const path = new Path(prefixPath.toString() + '/' + key);\r\n sparseSnapshotTreeForEachTree(tree, path, func);\r\n });\r\n }\r\n}\r\n/**\r\n * Iterates through each immediate child and triggers the callback.\r\n * Only seems to be used in tests.\r\n *\r\n * @param func - The function to invoke for each child.\r\n */\r\nfunction sparseSnapshotTreeForEachChild(sparseSnapshotTree, func) {\r\n sparseSnapshotTree.children.forEach((tree, key) => {\r\n func(key, tree);\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns the delta from the previous call to get stats.\r\n *\r\n * @param collection_ - The collection to \"listen\" to.\r\n */\r\nclass StatsListener {\r\n constructor(collection_) {\r\n this.collection_ = collection_;\r\n this.last_ = null;\r\n }\r\n get() {\r\n const newStats = this.collection_.get();\r\n const delta = Object.assign({}, newStats);\r\n if (this.last_) {\r\n each(this.last_, (stat, value) => {\r\n delta[stat] = delta[stat] - value;\r\n });\r\n }\r\n this.last_ = newStats;\r\n return delta;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Assuming some apps may have a short amount of time on page, and a bulk of firebase operations probably\r\n// happen on page load, we try to report our first set of stats pretty quickly, but we wait at least 10\r\n// seconds to try to ensure the Firebase connection is established / settled.\r\nconst FIRST_STATS_MIN_TIME = 10 * 1000;\r\nconst FIRST_STATS_MAX_TIME = 30 * 1000;\r\n// We'll continue to report stats on average every 5 minutes.\r\nconst REPORT_STATS_INTERVAL = 5 * 60 * 1000;\r\nclass StatsReporter {\r\n constructor(collection, server_) {\r\n this.server_ = server_;\r\n this.statsToReport_ = {};\r\n this.statsListener_ = new StatsListener(collection);\r\n const timeout = FIRST_STATS_MIN_TIME +\r\n (FIRST_STATS_MAX_TIME - FIRST_STATS_MIN_TIME) * Math.random();\r\n setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(timeout));\r\n }\r\n reportStats_() {\r\n const stats = this.statsListener_.get();\r\n const reportedStats = {};\r\n let haveStatsToReport = false;\r\n each(stats, (stat, value) => {\r\n if (value > 0 && contains(this.statsToReport_, stat)) {\r\n reportedStats[stat] = value;\r\n haveStatsToReport = true;\r\n }\r\n });\r\n if (haveStatsToReport) {\r\n this.server_.reportStats(reportedStats);\r\n }\r\n // queue our next run.\r\n setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(Math.random() * 2 * REPORT_STATS_INTERVAL));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n *\r\n * @enum\r\n */\r\nvar OperationType;\r\n(function (OperationType) {\r\n OperationType[OperationType[\"OVERWRITE\"] = 0] = \"OVERWRITE\";\r\n OperationType[OperationType[\"MERGE\"] = 1] = \"MERGE\";\r\n OperationType[OperationType[\"ACK_USER_WRITE\"] = 2] = \"ACK_USER_WRITE\";\r\n OperationType[OperationType[\"LISTEN_COMPLETE\"] = 3] = \"LISTEN_COMPLETE\";\r\n})(OperationType || (OperationType = {}));\r\nfunction newOperationSourceUser() {\r\n return {\r\n fromUser: true,\r\n fromServer: false,\r\n queryId: null,\r\n tagged: false\r\n };\r\n}\r\nfunction newOperationSourceServer() {\r\n return {\r\n fromUser: false,\r\n fromServer: true,\r\n queryId: null,\r\n tagged: false\r\n };\r\n}\r\nfunction newOperationSourceServerTaggedQuery(queryId) {\r\n return {\r\n fromUser: false,\r\n fromServer: true,\r\n queryId,\r\n tagged: true\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AckUserWrite {\r\n /**\r\n * @param affectedTree - A tree containing true for each affected path. Affected paths can't overlap.\r\n */\r\n constructor(\r\n /** @inheritDoc */ path, \r\n /** @inheritDoc */ affectedTree, \r\n /** @inheritDoc */ revert) {\r\n this.path = path;\r\n this.affectedTree = affectedTree;\r\n this.revert = revert;\r\n /** @inheritDoc */\r\n this.type = OperationType.ACK_USER_WRITE;\r\n /** @inheritDoc */\r\n this.source = newOperationSourceUser();\r\n }\r\n operationForChild(childName) {\r\n if (!pathIsEmpty(this.path)) {\r\n assert(pathGetFront(this.path) === childName, 'operationForChild called for unrelated child.');\r\n return new AckUserWrite(pathPopFront(this.path), this.affectedTree, this.revert);\r\n }\r\n else if (this.affectedTree.value != null) {\r\n assert(this.affectedTree.children.isEmpty(), 'affectedTree should not have overlapping affected paths.');\r\n // All child locations are affected as well; just return same operation.\r\n return this;\r\n }\r\n else {\r\n const childTree = this.affectedTree.subtree(new Path(childName));\r\n return new AckUserWrite(newEmptyPath(), childTree, this.revert);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ListenComplete {\r\n constructor(source, path) {\r\n this.source = source;\r\n this.path = path;\r\n /** @inheritDoc */\r\n this.type = OperationType.LISTEN_COMPLETE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n return new ListenComplete(this.source, newEmptyPath());\r\n }\r\n else {\r\n return new ListenComplete(this.source, pathPopFront(this.path));\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Overwrite {\r\n constructor(source, path, snap) {\r\n this.source = source;\r\n this.path = path;\r\n this.snap = snap;\r\n /** @inheritDoc */\r\n this.type = OperationType.OVERWRITE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n return new Overwrite(this.source, newEmptyPath(), this.snap.getImmediateChild(childName));\r\n }\r\n else {\r\n return new Overwrite(this.source, pathPopFront(this.path), this.snap);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Merge {\r\n constructor(\r\n /** @inheritDoc */ source, \r\n /** @inheritDoc */ path, \r\n /** @inheritDoc */ children) {\r\n this.source = source;\r\n this.path = path;\r\n this.children = children;\r\n /** @inheritDoc */\r\n this.type = OperationType.MERGE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n const childTree = this.children.subtree(new Path(childName));\r\n if (childTree.isEmpty()) {\r\n // This child is unaffected\r\n return null;\r\n }\r\n else if (childTree.value) {\r\n // We have a snapshot for the child in question. This becomes an overwrite of the child.\r\n return new Overwrite(this.source, newEmptyPath(), childTree.value);\r\n }\r\n else {\r\n // This is a merge at a deeper level\r\n return new Merge(this.source, newEmptyPath(), childTree);\r\n }\r\n }\r\n else {\r\n assert(pathGetFront(this.path) === childName, \"Can't get a merge for a child not on the path of the operation\");\r\n return new Merge(this.source, pathPopFront(this.path), this.children);\r\n }\r\n }\r\n toString() {\r\n return ('Operation(' +\r\n this.path +\r\n ': ' +\r\n this.source.toString() +\r\n ' merge: ' +\r\n this.children.toString() +\r\n ')');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A cache node only stores complete children. Additionally it holds a flag whether the node can be considered fully\r\n * initialized in the sense that we know at one point in time this represented a valid state of the world, e.g.\r\n * initialized with data from the server, or a complete overwrite by the client. The filtered flag also tracks\r\n * whether a node potentially had children removed due to a filter.\r\n */\r\nclass CacheNode {\r\n constructor(node_, fullyInitialized_, filtered_) {\r\n this.node_ = node_;\r\n this.fullyInitialized_ = fullyInitialized_;\r\n this.filtered_ = filtered_;\r\n }\r\n /**\r\n * Returns whether this node was fully initialized with either server data or a complete overwrite by the client\r\n */\r\n isFullyInitialized() {\r\n return this.fullyInitialized_;\r\n }\r\n /**\r\n * Returns whether this node is potentially missing children due to a filter applied to the node\r\n */\r\n isFiltered() {\r\n return this.filtered_;\r\n }\r\n isCompleteForPath(path) {\r\n if (pathIsEmpty(path)) {\r\n return this.isFullyInitialized() && !this.filtered_;\r\n }\r\n const childKey = pathGetFront(path);\r\n return this.isCompleteForChild(childKey);\r\n }\r\n isCompleteForChild(key) {\r\n return ((this.isFullyInitialized() && !this.filtered_) || this.node_.hasChild(key));\r\n }\r\n getNode() {\r\n return this.node_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An EventGenerator is used to convert \"raw\" changes (Change) as computed by the\r\n * CacheDiffer into actual events (Event) that can be raised. See generateEventsForChanges()\r\n * for details.\r\n *\r\n */\r\nclass EventGenerator {\r\n constructor(query_) {\r\n this.query_ = query_;\r\n this.index_ = this.query_._queryParams.getIndex();\r\n }\r\n}\r\n/**\r\n * Given a set of raw changes (no moved events and prevName not specified yet), and a set of\r\n * EventRegistrations that should be notified of these changes, generate the actual events to be raised.\r\n *\r\n * Notes:\r\n * - child_moved events will be synthesized at this time for any child_changed events that affect\r\n * our index.\r\n * - prevName will be calculated based on the index ordering.\r\n */\r\nfunction eventGeneratorGenerateEventsForChanges(eventGenerator, changes, eventCache, eventRegistrations) {\r\n const events = [];\r\n const moves = [];\r\n changes.forEach(change => {\r\n if (change.type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n eventGenerator.index_.indexedValueChanged(change.oldSnap, change.snapshotNode)) {\r\n moves.push(changeChildMoved(change.childName, change.snapshotNode));\r\n }\r\n });\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_removed\" /* ChangeType.CHILD_REMOVED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_added\" /* ChangeType.CHILD_ADDED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_moved\" /* ChangeType.CHILD_MOVED */, moves, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_changed\" /* ChangeType.CHILD_CHANGED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"value\" /* ChangeType.VALUE */, changes, eventRegistrations, eventCache);\r\n return events;\r\n}\r\n/**\r\n * Given changes of a single change type, generate the corresponding events.\r\n */\r\nfunction eventGeneratorGenerateEventsForType(eventGenerator, events, eventType, changes, registrations, eventCache) {\r\n const filteredChanges = changes.filter(change => change.type === eventType);\r\n filteredChanges.sort((a, b) => eventGeneratorCompareChanges(eventGenerator, a, b));\r\n filteredChanges.forEach(change => {\r\n const materializedChange = eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache);\r\n registrations.forEach(registration => {\r\n if (registration.respondsTo(change.type)) {\r\n events.push(registration.createEvent(materializedChange, eventGenerator.query_));\r\n }\r\n });\r\n });\r\n}\r\nfunction eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache) {\r\n if (change.type === 'value' || change.type === 'child_removed') {\r\n return change;\r\n }\r\n else {\r\n change.prevName = eventCache.getPredecessorChildName(change.childName, change.snapshotNode, eventGenerator.index_);\r\n return change;\r\n }\r\n}\r\nfunction eventGeneratorCompareChanges(eventGenerator, a, b) {\r\n if (a.childName == null || b.childName == null) {\r\n throw assertionError('Should only compare child_ events.');\r\n }\r\n const aWrapped = new NamedNode(a.childName, a.snapshotNode);\r\n const bWrapped = new NamedNode(b.childName, b.snapshotNode);\r\n return eventGenerator.index_.compare(aWrapped, bWrapped);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newViewCache(eventCache, serverCache) {\r\n return { eventCache, serverCache };\r\n}\r\nfunction viewCacheUpdateEventSnap(viewCache, eventSnap, complete, filtered) {\r\n return newViewCache(new CacheNode(eventSnap, complete, filtered), viewCache.serverCache);\r\n}\r\nfunction viewCacheUpdateServerSnap(viewCache, serverSnap, complete, filtered) {\r\n return newViewCache(viewCache.eventCache, new CacheNode(serverSnap, complete, filtered));\r\n}\r\nfunction viewCacheGetCompleteEventSnap(viewCache) {\r\n return viewCache.eventCache.isFullyInitialized()\r\n ? viewCache.eventCache.getNode()\r\n : null;\r\n}\r\nfunction viewCacheGetCompleteServerSnap(viewCache) {\r\n return viewCache.serverCache.isFullyInitialized()\r\n ? viewCache.serverCache.getNode()\r\n : null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet emptyChildrenSingleton;\r\n/**\r\n * Singleton empty children collection.\r\n *\r\n */\r\nconst EmptyChildren = () => {\r\n if (!emptyChildrenSingleton) {\r\n emptyChildrenSingleton = new SortedMap(stringCompare);\r\n }\r\n return emptyChildrenSingleton;\r\n};\r\n/**\r\n * A tree with immutable elements.\r\n */\r\nclass ImmutableTree {\r\n constructor(value, children = EmptyChildren()) {\r\n this.value = value;\r\n this.children = children;\r\n }\r\n static fromObject(obj) {\r\n let tree = new ImmutableTree(null);\r\n each(obj, (childPath, childSnap) => {\r\n tree = tree.set(new Path(childPath), childSnap);\r\n });\r\n return tree;\r\n }\r\n /**\r\n * True if the value is empty and there are no children\r\n */\r\n isEmpty() {\r\n return this.value === null && this.children.isEmpty();\r\n }\r\n /**\r\n * Given a path and predicate, return the first node and the path to that node\r\n * where the predicate returns true.\r\n *\r\n * TODO Do a perf test -- If we're creating a bunch of `{path: value:}`\r\n * objects on the way back out, it may be better to pass down a pathSoFar obj.\r\n *\r\n * @param relativePath - The remainder of the path\r\n * @param predicate - The predicate to satisfy to return a node\r\n */\r\n findRootMostMatchingPathAndValue(relativePath, predicate) {\r\n if (this.value != null && predicate(this.value)) {\r\n return { path: newEmptyPath(), value: this.value };\r\n }\r\n else {\r\n if (pathIsEmpty(relativePath)) {\r\n return null;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child !== null) {\r\n const childExistingPathAndValue = child.findRootMostMatchingPathAndValue(pathPopFront(relativePath), predicate);\r\n if (childExistingPathAndValue != null) {\r\n const fullPath = pathChild(new Path(front), childExistingPathAndValue.path);\r\n return { path: fullPath, value: childExistingPathAndValue.value };\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Find, if it exists, the shortest subpath of the given path that points a defined\r\n * value in the tree\r\n */\r\n findRootMostValueAndPath(relativePath) {\r\n return this.findRootMostMatchingPathAndValue(relativePath, () => true);\r\n }\r\n /**\r\n * @returns The subtree at the given path\r\n */\r\n subtree(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n return this;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const childTree = this.children.get(front);\r\n if (childTree !== null) {\r\n return childTree.subtree(pathPopFront(relativePath));\r\n }\r\n else {\r\n return new ImmutableTree(null);\r\n }\r\n }\r\n }\r\n /**\r\n * Sets a value at the specified path.\r\n *\r\n * @param relativePath - Path to set value at.\r\n * @param toSet - Value to set.\r\n * @returns Resulting tree.\r\n */\r\n set(relativePath, toSet) {\r\n if (pathIsEmpty(relativePath)) {\r\n return new ImmutableTree(toSet, this.children);\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front) || new ImmutableTree(null);\r\n const newChild = child.set(pathPopFront(relativePath), toSet);\r\n const newChildren = this.children.insert(front, newChild);\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n /**\r\n * Removes the value at the specified path.\r\n *\r\n * @param relativePath - Path to value to remove.\r\n * @returns Resulting tree.\r\n */\r\n remove(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n if (this.children.isEmpty()) {\r\n return new ImmutableTree(null);\r\n }\r\n else {\r\n return new ImmutableTree(null, this.children);\r\n }\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child) {\r\n const newChild = child.remove(pathPopFront(relativePath));\r\n let newChildren;\r\n if (newChild.isEmpty()) {\r\n newChildren = this.children.remove(front);\r\n }\r\n else {\r\n newChildren = this.children.insert(front, newChild);\r\n }\r\n if (this.value === null && newChildren.isEmpty()) {\r\n return new ImmutableTree(null);\r\n }\r\n else {\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n else {\r\n return this;\r\n }\r\n }\r\n }\r\n /**\r\n * Gets a value from the tree.\r\n *\r\n * @param relativePath - Path to get value for.\r\n * @returns Value at path, or null.\r\n */\r\n get(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n return this.value;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child) {\r\n return child.get(pathPopFront(relativePath));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n /**\r\n * Replace the subtree at the specified path with the given new tree.\r\n *\r\n * @param relativePath - Path to replace subtree for.\r\n * @param newTree - New tree.\r\n * @returns Resulting tree.\r\n */\r\n setTree(relativePath, newTree) {\r\n if (pathIsEmpty(relativePath)) {\r\n return newTree;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front) || new ImmutableTree(null);\r\n const newChild = child.setTree(pathPopFront(relativePath), newTree);\r\n let newChildren;\r\n if (newChild.isEmpty()) {\r\n newChildren = this.children.remove(front);\r\n }\r\n else {\r\n newChildren = this.children.insert(front, newChild);\r\n }\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n /**\r\n * Performs a depth first fold on this tree. Transforms a tree into a single\r\n * value, given a function that operates on the path to a node, an optional\r\n * current value, and a map of child names to folded subtrees\r\n */\r\n fold(fn) {\r\n return this.fold_(newEmptyPath(), fn);\r\n }\r\n /**\r\n * Recursive helper for public-facing fold() method\r\n */\r\n fold_(pathSoFar, fn) {\r\n const accum = {};\r\n this.children.inorderTraversal((childKey, childTree) => {\r\n accum[childKey] = childTree.fold_(pathChild(pathSoFar, childKey), fn);\r\n });\r\n return fn(pathSoFar, this.value, accum);\r\n }\r\n /**\r\n * Find the first matching value on the given path. Return the result of applying f to it.\r\n */\r\n findOnPath(path, f) {\r\n return this.findOnPath_(path, newEmptyPath(), f);\r\n }\r\n findOnPath_(pathToFollow, pathSoFar, f) {\r\n const result = this.value ? f(pathSoFar, this.value) : false;\r\n if (result) {\r\n return result;\r\n }\r\n else {\r\n if (pathIsEmpty(pathToFollow)) {\r\n return null;\r\n }\r\n else {\r\n const front = pathGetFront(pathToFollow);\r\n const nextChild = this.children.get(front);\r\n if (nextChild) {\r\n return nextChild.findOnPath_(pathPopFront(pathToFollow), pathChild(pathSoFar, front), f);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n foreachOnPath(path, f) {\r\n return this.foreachOnPath_(path, newEmptyPath(), f);\r\n }\r\n foreachOnPath_(pathToFollow, currentRelativePath, f) {\r\n if (pathIsEmpty(pathToFollow)) {\r\n return this;\r\n }\r\n else {\r\n if (this.value) {\r\n f(currentRelativePath, this.value);\r\n }\r\n const front = pathGetFront(pathToFollow);\r\n const nextChild = this.children.get(front);\r\n if (nextChild) {\r\n return nextChild.foreachOnPath_(pathPopFront(pathToFollow), pathChild(currentRelativePath, front), f);\r\n }\r\n else {\r\n return new ImmutableTree(null);\r\n }\r\n }\r\n }\r\n /**\r\n * Calls the given function for each node in the tree that has a value.\r\n *\r\n * @param f - A function to be called with the path from the root of the tree to\r\n * a node, and the value at that node. Called in depth-first order.\r\n */\r\n foreach(f) {\r\n this.foreach_(newEmptyPath(), f);\r\n }\r\n foreach_(currentRelativePath, f) {\r\n this.children.inorderTraversal((childName, childTree) => {\r\n childTree.foreach_(pathChild(currentRelativePath, childName), f);\r\n });\r\n if (this.value) {\r\n f(currentRelativePath, this.value);\r\n }\r\n }\r\n foreachChild(f) {\r\n this.children.inorderTraversal((childName, childTree) => {\r\n if (childTree.value) {\r\n f(childName, childTree.value);\r\n }\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class holds a collection of writes that can be applied to nodes in unison. It abstracts away the logic with\r\n * dealing with priority writes and multiple nested writes. At any given path there is only allowed to be one write\r\n * modifying that path. Any write to an existing path or shadowing an existing path will modify that existing write\r\n * to reflect the write added.\r\n */\r\nclass CompoundWrite {\r\n constructor(writeTree_) {\r\n this.writeTree_ = writeTree_;\r\n }\r\n static empty() {\r\n return new CompoundWrite(new ImmutableTree(null));\r\n }\r\n}\r\nfunction compoundWriteAddWrite(compoundWrite, path, node) {\r\n if (pathIsEmpty(path)) {\r\n return new CompoundWrite(new ImmutableTree(node));\r\n }\r\n else {\r\n const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\r\n if (rootmost != null) {\r\n const rootMostPath = rootmost.path;\r\n let value = rootmost.value;\r\n const relativePath = newRelativePath(rootMostPath, path);\r\n value = value.updateChild(relativePath, node);\r\n return new CompoundWrite(compoundWrite.writeTree_.set(rootMostPath, value));\r\n }\r\n else {\r\n const subtree = new ImmutableTree(node);\r\n const newWriteTree = compoundWrite.writeTree_.setTree(path, subtree);\r\n return new CompoundWrite(newWriteTree);\r\n }\r\n }\r\n}\r\nfunction compoundWriteAddWrites(compoundWrite, path, updates) {\r\n let newWrite = compoundWrite;\r\n each(updates, (childKey, node) => {\r\n newWrite = compoundWriteAddWrite(newWrite, pathChild(path, childKey), node);\r\n });\r\n return newWrite;\r\n}\r\n/**\r\n * Will remove a write at the given path and deeper paths. This will not modify a write at a higher\r\n * location, which must be removed by calling this method with that path.\r\n *\r\n * @param compoundWrite - The CompoundWrite to remove.\r\n * @param path - The path at which a write and all deeper writes should be removed\r\n * @returns The new CompoundWrite with the removed path\r\n */\r\nfunction compoundWriteRemoveWrite(compoundWrite, path) {\r\n if (pathIsEmpty(path)) {\r\n return CompoundWrite.empty();\r\n }\r\n else {\r\n const newWriteTree = compoundWrite.writeTree_.setTree(path, new ImmutableTree(null));\r\n return new CompoundWrite(newWriteTree);\r\n }\r\n}\r\n/**\r\n * Returns whether this CompoundWrite will fully overwrite a node at a given location and can therefore be\r\n * considered \"complete\".\r\n *\r\n * @param compoundWrite - The CompoundWrite to check.\r\n * @param path - The path to check for\r\n * @returns Whether there is a complete write at that path\r\n */\r\nfunction compoundWriteHasCompleteWrite(compoundWrite, path) {\r\n return compoundWriteGetCompleteNode(compoundWrite, path) != null;\r\n}\r\n/**\r\n * Returns a node for a path if and only if the node is a \"complete\" overwrite at that path. This will not aggregate\r\n * writes from deeper paths, but will return child nodes from a more shallow path.\r\n *\r\n * @param compoundWrite - The CompoundWrite to get the node from.\r\n * @param path - The path to get a complete write\r\n * @returns The node if complete at that path, or null otherwise.\r\n */\r\nfunction compoundWriteGetCompleteNode(compoundWrite, path) {\r\n const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\r\n if (rootmost != null) {\r\n return compoundWrite.writeTree_\r\n .get(rootmost.path)\r\n .getChild(newRelativePath(rootmost.path, path));\r\n }\r\n else {\r\n return null;\r\n }\r\n}\r\n/**\r\n * Returns all children that are guaranteed to be a complete overwrite.\r\n *\r\n * @param compoundWrite - The CompoundWrite to get children from.\r\n * @returns A list of all complete children.\r\n */\r\nfunction compoundWriteGetCompleteChildren(compoundWrite) {\r\n const children = [];\r\n const node = compoundWrite.writeTree_.value;\r\n if (node != null) {\r\n // If it's a leaf node, it has no children; so nothing to do.\r\n if (!node.isLeafNode()) {\r\n node.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n children.push(new NamedNode(childName, childNode));\r\n });\r\n }\r\n }\r\n else {\r\n compoundWrite.writeTree_.children.inorderTraversal((childName, childTree) => {\r\n if (childTree.value != null) {\r\n children.push(new NamedNode(childName, childTree.value));\r\n }\r\n });\r\n }\r\n return children;\r\n}\r\nfunction compoundWriteChildCompoundWrite(compoundWrite, path) {\r\n if (pathIsEmpty(path)) {\r\n return compoundWrite;\r\n }\r\n else {\r\n const shadowingNode = compoundWriteGetCompleteNode(compoundWrite, path);\r\n if (shadowingNode != null) {\r\n return new CompoundWrite(new ImmutableTree(shadowingNode));\r\n }\r\n else {\r\n return new CompoundWrite(compoundWrite.writeTree_.subtree(path));\r\n }\r\n }\r\n}\r\n/**\r\n * Returns true if this CompoundWrite is empty and therefore does not modify any nodes.\r\n * @returns Whether this CompoundWrite is empty\r\n */\r\nfunction compoundWriteIsEmpty(compoundWrite) {\r\n return compoundWrite.writeTree_.isEmpty();\r\n}\r\n/**\r\n * Applies this CompoundWrite to a node. The node is returned with all writes from this CompoundWrite applied to the\r\n * node\r\n * @param node - The node to apply this CompoundWrite to\r\n * @returns The node with all writes applied\r\n */\r\nfunction compoundWriteApply(compoundWrite, node) {\r\n return applySubtreeWrite(newEmptyPath(), compoundWrite.writeTree_, node);\r\n}\r\nfunction applySubtreeWrite(relativePath, writeTree, node) {\r\n if (writeTree.value != null) {\r\n // Since there a write is always a leaf, we're done here\r\n return node.updateChild(relativePath, writeTree.value);\r\n }\r\n else {\r\n let priorityWrite = null;\r\n writeTree.children.inorderTraversal((childKey, childTree) => {\r\n if (childKey === '.priority') {\r\n // Apply priorities at the end so we don't update priorities for either empty nodes or forget\r\n // to apply priorities to empty nodes that are later filled\r\n assert(childTree.value !== null, 'Priority writes must always be leaf nodes');\r\n priorityWrite = childTree.value;\r\n }\r\n else {\r\n node = applySubtreeWrite(pathChild(relativePath, childKey), childTree, node);\r\n }\r\n });\r\n // If there was a priority write, we only apply it if the node is not empty\r\n if (!node.getChild(relativePath).isEmpty() && priorityWrite !== null) {\r\n node = node.updateChild(pathChild(relativePath, '.priority'), priorityWrite);\r\n }\r\n return node;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Create a new WriteTreeRef for the given path. For use with a new sync point at the given path.\r\n *\r\n */\r\nfunction writeTreeChildWrites(writeTree, path) {\r\n return newWriteTreeRef(path, writeTree);\r\n}\r\n/**\r\n * Record a new overwrite from user code.\r\n *\r\n * @param visible - This is set to false by some transactions. It should be excluded from event caches\r\n */\r\nfunction writeTreeAddOverwrite(writeTree, path, snap, writeId, visible) {\r\n assert(writeId > writeTree.lastWriteId, 'Stacking an older write on top of newer ones');\r\n if (visible === undefined) {\r\n visible = true;\r\n }\r\n writeTree.allWrites.push({\r\n path,\r\n snap,\r\n writeId,\r\n visible\r\n });\r\n if (visible) {\r\n writeTree.visibleWrites = compoundWriteAddWrite(writeTree.visibleWrites, path, snap);\r\n }\r\n writeTree.lastWriteId = writeId;\r\n}\r\n/**\r\n * Record a new merge from user code.\r\n */\r\nfunction writeTreeAddMerge(writeTree, path, changedChildren, writeId) {\r\n assert(writeId > writeTree.lastWriteId, 'Stacking an older merge on top of newer ones');\r\n writeTree.allWrites.push({\r\n path,\r\n children: changedChildren,\r\n writeId,\r\n visible: true\r\n });\r\n writeTree.visibleWrites = compoundWriteAddWrites(writeTree.visibleWrites, path, changedChildren);\r\n writeTree.lastWriteId = writeId;\r\n}\r\nfunction writeTreeGetWrite(writeTree, writeId) {\r\n for (let i = 0; i < writeTree.allWrites.length; i++) {\r\n const record = writeTree.allWrites[i];\r\n if (record.writeId === writeId) {\r\n return record;\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Remove a write (either an overwrite or merge) that has been successfully acknowledge by the server. Recalculates\r\n * the tree if necessary. We return true if it may have been visible, meaning views need to reevaluate.\r\n *\r\n * @returns true if the write may have been visible (meaning we'll need to reevaluate / raise\r\n * events as a result).\r\n */\r\nfunction writeTreeRemoveWrite(writeTree, writeId) {\r\n // Note: disabling this check. It could be a transaction that preempted another transaction, and thus was applied\r\n // out of order.\r\n //const validClear = revert || this.allWrites_.length === 0 || writeId <= this.allWrites_[0].writeId;\r\n //assert(validClear, \"Either we don't have this write, or it's the first one in the queue\");\r\n const idx = writeTree.allWrites.findIndex(s => {\r\n return s.writeId === writeId;\r\n });\r\n assert(idx >= 0, 'removeWrite called with nonexistent writeId.');\r\n const writeToRemove = writeTree.allWrites[idx];\r\n writeTree.allWrites.splice(idx, 1);\r\n let removedWriteWasVisible = writeToRemove.visible;\r\n let removedWriteOverlapsWithOtherWrites = false;\r\n let i = writeTree.allWrites.length - 1;\r\n while (removedWriteWasVisible && i >= 0) {\r\n const currentWrite = writeTree.allWrites[i];\r\n if (currentWrite.visible) {\r\n if (i >= idx &&\r\n writeTreeRecordContainsPath_(currentWrite, writeToRemove.path)) {\r\n // The removed write was completely shadowed by a subsequent write.\r\n removedWriteWasVisible = false;\r\n }\r\n else if (pathContains(writeToRemove.path, currentWrite.path)) {\r\n // Either we're covering some writes or they're covering part of us (depending on which came first).\r\n removedWriteOverlapsWithOtherWrites = true;\r\n }\r\n }\r\n i--;\r\n }\r\n if (!removedWriteWasVisible) {\r\n return false;\r\n }\r\n else if (removedWriteOverlapsWithOtherWrites) {\r\n // There's some shadowing going on. Just rebuild the visible writes from scratch.\r\n writeTreeResetTree_(writeTree);\r\n return true;\r\n }\r\n else {\r\n // There's no shadowing. We can safely just remove the write(s) from visibleWrites.\r\n if (writeToRemove.snap) {\r\n writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, writeToRemove.path);\r\n }\r\n else {\r\n const children = writeToRemove.children;\r\n each(children, (childName) => {\r\n writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, pathChild(writeToRemove.path, childName));\r\n });\r\n }\r\n return true;\r\n }\r\n}\r\nfunction writeTreeRecordContainsPath_(writeRecord, path) {\r\n if (writeRecord.snap) {\r\n return pathContains(writeRecord.path, path);\r\n }\r\n else {\r\n for (const childName in writeRecord.children) {\r\n if (writeRecord.children.hasOwnProperty(childName) &&\r\n pathContains(pathChild(writeRecord.path, childName), path)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n/**\r\n * Re-layer the writes and merges into a tree so we can efficiently calculate event snapshots\r\n */\r\nfunction writeTreeResetTree_(writeTree) {\r\n writeTree.visibleWrites = writeTreeLayerTree_(writeTree.allWrites, writeTreeDefaultFilter_, newEmptyPath());\r\n if (writeTree.allWrites.length > 0) {\r\n writeTree.lastWriteId =\r\n writeTree.allWrites[writeTree.allWrites.length - 1].writeId;\r\n }\r\n else {\r\n writeTree.lastWriteId = -1;\r\n }\r\n}\r\n/**\r\n * The default filter used when constructing the tree. Keep everything that's visible.\r\n */\r\nfunction writeTreeDefaultFilter_(write) {\r\n return write.visible;\r\n}\r\n/**\r\n * Static method. Given an array of WriteRecords, a filter for which ones to include, and a path, construct the tree of\r\n * event data at that path.\r\n */\r\nfunction writeTreeLayerTree_(writes, filter, treeRoot) {\r\n let compoundWrite = CompoundWrite.empty();\r\n for (let i = 0; i < writes.length; ++i) {\r\n const write = writes[i];\r\n // Theory, a later set will either:\r\n // a) abort a relevant transaction, so no need to worry about excluding it from calculating that transaction\r\n // b) not be relevant to a transaction (separate branch), so again will not affect the data for that transaction\r\n if (filter(write)) {\r\n const writePath = write.path;\r\n let relativePath;\r\n if (write.snap) {\r\n if (pathContains(treeRoot, writePath)) {\r\n relativePath = newRelativePath(treeRoot, writePath);\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, relativePath, write.snap);\r\n }\r\n else if (pathContains(writePath, treeRoot)) {\r\n relativePath = newRelativePath(writePath, treeRoot);\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), write.snap.getChild(relativePath));\r\n }\r\n else ;\r\n }\r\n else if (write.children) {\r\n if (pathContains(treeRoot, writePath)) {\r\n relativePath = newRelativePath(treeRoot, writePath);\r\n compoundWrite = compoundWriteAddWrites(compoundWrite, relativePath, write.children);\r\n }\r\n else if (pathContains(writePath, treeRoot)) {\r\n relativePath = newRelativePath(writePath, treeRoot);\r\n if (pathIsEmpty(relativePath)) {\r\n compoundWrite = compoundWriteAddWrites(compoundWrite, newEmptyPath(), write.children);\r\n }\r\n else {\r\n const child = safeGet(write.children, pathGetFront(relativePath));\r\n if (child) {\r\n // There exists a child in this node that matches the root path\r\n const deepNode = child.getChild(pathPopFront(relativePath));\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), deepNode);\r\n }\r\n }\r\n }\r\n else ;\r\n }\r\n else {\r\n throw assertionError('WriteRecord should have .snap or .children');\r\n }\r\n }\r\n }\r\n return compoundWrite;\r\n}\r\n/**\r\n * Given optional, underlying server data, and an optional set of constraints (exclude some sets, include hidden\r\n * writes), attempt to calculate a complete snapshot for the given path\r\n *\r\n * @param writeIdsToExclude - An optional set to be excluded\r\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\r\n */\r\nfunction writeTreeCalcCompleteEventCache(writeTree, treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n if (!writeIdsToExclude && !includeHiddenWrites) {\r\n const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\r\n if (shadowingNode != null) {\r\n return shadowingNode;\r\n }\r\n else {\r\n const subMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n if (compoundWriteIsEmpty(subMerge)) {\r\n return completeServerCache;\r\n }\r\n else if (completeServerCache == null &&\r\n !compoundWriteHasCompleteWrite(subMerge, newEmptyPath())) {\r\n // We wouldn't have a complete snapshot, since there's no underlying data and no complete shadow\r\n return null;\r\n }\r\n else {\r\n const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n return compoundWriteApply(subMerge, layeredCache);\r\n }\r\n }\r\n }\r\n else {\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n if (!includeHiddenWrites && compoundWriteIsEmpty(merge)) {\r\n return completeServerCache;\r\n }\r\n else {\r\n // If the server cache is null, and we don't have a complete cache, we need to return null\r\n if (!includeHiddenWrites &&\r\n completeServerCache == null &&\r\n !compoundWriteHasCompleteWrite(merge, newEmptyPath())) {\r\n return null;\r\n }\r\n else {\r\n const filter = function (write) {\r\n return ((write.visible || includeHiddenWrites) &&\r\n (!writeIdsToExclude ||\r\n !~writeIdsToExclude.indexOf(write.writeId)) &&\r\n (pathContains(write.path, treePath) ||\r\n pathContains(treePath, write.path)));\r\n };\r\n const mergeAtPath = writeTreeLayerTree_(writeTree.allWrites, filter, treePath);\r\n const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n return compoundWriteApply(mergeAtPath, layeredCache);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * With optional, underlying server data, attempt to return a children node of children that we have complete data for.\r\n * Used when creating new views, to pre-fill their complete event children snapshot.\r\n */\r\nfunction writeTreeCalcCompleteEventChildren(writeTree, treePath, completeServerChildren) {\r\n let completeChildren = ChildrenNode.EMPTY_NODE;\r\n const topLevelSet = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\r\n if (topLevelSet) {\r\n if (!topLevelSet.isLeafNode()) {\r\n // we're shadowing everything. Return the children.\r\n topLevelSet.forEachChild(PRIORITY_INDEX, (childName, childSnap) => {\r\n completeChildren = completeChildren.updateImmediateChild(childName, childSnap);\r\n });\r\n }\r\n return completeChildren;\r\n }\r\n else if (completeServerChildren) {\r\n // Layer any children we have on top of this\r\n // We know we don't have a top-level set, so just enumerate existing children\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n completeServerChildren.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n const node = compoundWriteApply(compoundWriteChildCompoundWrite(merge, new Path(childName)), childNode);\r\n completeChildren = completeChildren.updateImmediateChild(childName, node);\r\n });\r\n // Add any complete children we have from the set\r\n compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\r\n completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n });\r\n return completeChildren;\r\n }\r\n else {\r\n // We don't have anything to layer on top of. Layer on any children we have\r\n // Note that we can return an empty snap if we have a defined delete\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\r\n completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n });\r\n return completeChildren;\r\n }\r\n}\r\n/**\r\n * Given that the underlying server data has updated, determine what, if anything, needs to be\r\n * applied to the event cache.\r\n *\r\n * Possibilities:\r\n *\r\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n *\r\n * 2. Some write is completely shadowing. No events to be raised\r\n *\r\n * 3. Is partially shadowed. Events\r\n *\r\n * Either existingEventSnap or existingServerSnap must exist\r\n */\r\nfunction writeTreeCalcEventCacheAfterServerOverwrite(writeTree, treePath, childPath, existingEventSnap, existingServerSnap) {\r\n assert(existingEventSnap || existingServerSnap, 'Either existingEventSnap or existingServerSnap must exist');\r\n const path = pathChild(treePath, childPath);\r\n if (compoundWriteHasCompleteWrite(writeTree.visibleWrites, path)) {\r\n // At this point we can probably guarantee that we're in case 2, meaning no events\r\n // May need to check visibility while doing the findRootMostValueAndPath call\r\n return null;\r\n }\r\n else {\r\n // No complete shadowing. We're either partially shadowing or not shadowing at all.\r\n const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\r\n if (compoundWriteIsEmpty(childMerge)) {\r\n // We're not shadowing at all. Case 1\r\n return existingServerSnap.getChild(childPath);\r\n }\r\n else {\r\n // This could be more efficient if the serverNode + updates doesn't change the eventSnap\r\n // However this is tricky to find out, since user updates don't necessary change the server\r\n // snap, e.g. priority updates on empty nodes, or deep deletes. Another special case is if the server\r\n // adds nodes, but doesn't change any existing writes. It is therefore not enough to\r\n // only check if the updates change the serverNode.\r\n // Maybe check if the merge tree contains these special cases and only do a full overwrite in that case?\r\n return compoundWriteApply(childMerge, existingServerSnap.getChild(childPath));\r\n }\r\n }\r\n}\r\n/**\r\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n * complete child for this ChildKey.\r\n */\r\nfunction writeTreeCalcCompleteChild(writeTree, treePath, childKey, existingServerSnap) {\r\n const path = pathChild(treePath, childKey);\r\n const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\r\n if (shadowingNode != null) {\r\n return shadowingNode;\r\n }\r\n else {\r\n if (existingServerSnap.isCompleteForChild(childKey)) {\r\n const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\r\n return compoundWriteApply(childMerge, existingServerSnap.getNode().getImmediateChild(childKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}\r\n/**\r\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n * a higher path, this will return the child of that write relative to the write and this path.\r\n * Returns null if there is no write at this path.\r\n */\r\nfunction writeTreeShadowingWrite(writeTree, path) {\r\n return compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\r\n}\r\n/**\r\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n * the window, but may now be in the window.\r\n */\r\nfunction writeTreeCalcIndexedSlice(writeTree, treePath, completeServerData, startPost, count, reverse, index) {\r\n let toIterate;\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n const shadowingNode = compoundWriteGetCompleteNode(merge, newEmptyPath());\r\n if (shadowingNode != null) {\r\n toIterate = shadowingNode;\r\n }\r\n else if (completeServerData != null) {\r\n toIterate = compoundWriteApply(merge, completeServerData);\r\n }\r\n else {\r\n // no children to iterate on\r\n return [];\r\n }\r\n toIterate = toIterate.withIndex(index);\r\n if (!toIterate.isEmpty() && !toIterate.isLeafNode()) {\r\n const nodes = [];\r\n const cmp = index.getCompare();\r\n const iter = reverse\r\n ? toIterate.getReverseIteratorFrom(startPost, index)\r\n : toIterate.getIteratorFrom(startPost, index);\r\n let next = iter.getNext();\r\n while (next && nodes.length < count) {\r\n if (cmp(next, startPost) !== 0) {\r\n nodes.push(next);\r\n }\r\n next = iter.getNext();\r\n }\r\n return nodes;\r\n }\r\n else {\r\n return [];\r\n }\r\n}\r\nfunction newWriteTree() {\r\n return {\r\n visibleWrites: CompoundWrite.empty(),\r\n allWrites: [],\r\n lastWriteId: -1\r\n };\r\n}\r\n/**\r\n * If possible, returns a complete event cache, using the underlying server data if possible. In addition, can be used\r\n * to get a cache that includes hidden writes, and excludes arbitrary writes. Note that customizing the returned node\r\n * can lead to a more expensive calculation.\r\n *\r\n * @param writeIdsToExclude - Optional writes to exclude.\r\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\r\n */\r\nfunction writeTreeRefCalcCompleteEventCache(writeTreeRef, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n return writeTreeCalcCompleteEventCache(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites);\r\n}\r\n/**\r\n * If possible, returns a children node containing all of the complete children we have data for. The returned data is a\r\n * mix of the given server data and write data.\r\n *\r\n */\r\nfunction writeTreeRefCalcCompleteEventChildren(writeTreeRef, completeServerChildren) {\r\n return writeTreeCalcCompleteEventChildren(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerChildren);\r\n}\r\n/**\r\n * Given that either the underlying server data has updated or the outstanding writes have updated, determine what,\r\n * if anything, needs to be applied to the event cache.\r\n *\r\n * Possibilities:\r\n *\r\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n *\r\n * 2. Some write is completely shadowing. No events to be raised\r\n *\r\n * 3. Is partially shadowed. Events should be raised\r\n *\r\n * Either existingEventSnap or existingServerSnap must exist, this is validated via an assert\r\n *\r\n *\r\n */\r\nfunction writeTreeRefCalcEventCacheAfterServerOverwrite(writeTreeRef, path, existingEventSnap, existingServerSnap) {\r\n return writeTreeCalcEventCacheAfterServerOverwrite(writeTreeRef.writeTree, writeTreeRef.treePath, path, existingEventSnap, existingServerSnap);\r\n}\r\n/**\r\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n * a higher path, this will return the child of that write relative to the write and this path.\r\n * Returns null if there is no write at this path.\r\n *\r\n */\r\nfunction writeTreeRefShadowingWrite(writeTreeRef, path) {\r\n return writeTreeShadowingWrite(writeTreeRef.writeTree, pathChild(writeTreeRef.treePath, path));\r\n}\r\n/**\r\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n * the window, but may now be in the window\r\n */\r\nfunction writeTreeRefCalcIndexedSlice(writeTreeRef, completeServerData, startPost, count, reverse, index) {\r\n return writeTreeCalcIndexedSlice(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerData, startPost, count, reverse, index);\r\n}\r\n/**\r\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n * complete child for this ChildKey.\r\n */\r\nfunction writeTreeRefCalcCompleteChild(writeTreeRef, childKey, existingServerCache) {\r\n return writeTreeCalcCompleteChild(writeTreeRef.writeTree, writeTreeRef.treePath, childKey, existingServerCache);\r\n}\r\n/**\r\n * Return a WriteTreeRef for a child.\r\n */\r\nfunction writeTreeRefChild(writeTreeRef, childName) {\r\n return newWriteTreeRef(pathChild(writeTreeRef.treePath, childName), writeTreeRef.writeTree);\r\n}\r\nfunction newWriteTreeRef(path, writeTree) {\r\n return {\r\n treePath: path,\r\n writeTree\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ChildChangeAccumulator {\r\n constructor() {\r\n this.changeMap = new Map();\r\n }\r\n trackChildChange(change) {\r\n const type = change.type;\r\n const childKey = change.childName;\r\n assert(type === \"child_added\" /* ChangeType.CHILD_ADDED */ ||\r\n type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ ||\r\n type === \"child_removed\" /* ChangeType.CHILD_REMOVED */, 'Only child changes supported for tracking');\r\n assert(childKey !== '.priority', 'Only non-priority child changes can be tracked.');\r\n const oldChange = this.changeMap.get(childKey);\r\n if (oldChange) {\r\n const oldType = oldChange.type;\r\n if (type === \"child_added\" /* ChangeType.CHILD_ADDED */ &&\r\n oldType === \"child_removed\" /* ChangeType.CHILD_REMOVED */) {\r\n this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.snapshotNode));\r\n }\r\n else if (type === \"child_removed\" /* ChangeType.CHILD_REMOVED */ &&\r\n oldType === \"child_added\" /* ChangeType.CHILD_ADDED */) {\r\n this.changeMap.delete(childKey);\r\n }\r\n else if (type === \"child_removed\" /* ChangeType.CHILD_REMOVED */ &&\r\n oldType === \"child_changed\" /* ChangeType.CHILD_CHANGED */) {\r\n this.changeMap.set(childKey, changeChildRemoved(childKey, oldChange.oldSnap));\r\n }\r\n else if (type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n oldType === \"child_added\" /* ChangeType.CHILD_ADDED */) {\r\n this.changeMap.set(childKey, changeChildAdded(childKey, change.snapshotNode));\r\n }\r\n else if (type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n oldType === \"child_changed\" /* ChangeType.CHILD_CHANGED */) {\r\n this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.oldSnap));\r\n }\r\n else {\r\n throw assertionError('Illegal combination of changes: ' +\r\n change +\r\n ' occurred after ' +\r\n oldChange);\r\n }\r\n }\r\n else {\r\n this.changeMap.set(childKey, change);\r\n }\r\n }\r\n getChanges() {\r\n return Array.from(this.changeMap.values());\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of CompleteChildSource that never returns any additional children\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nclass NoCompleteChildSource_ {\r\n getCompleteChild(childKey) {\r\n return null;\r\n }\r\n getChildAfterChild(index, child, reverse) {\r\n return null;\r\n }\r\n}\r\n/**\r\n * Singleton instance.\r\n */\r\nconst NO_COMPLETE_CHILD_SOURCE = new NoCompleteChildSource_();\r\n/**\r\n * An implementation of CompleteChildSource that uses a WriteTree in addition to any other server data or\r\n * old event caches available to calculate complete children.\r\n */\r\nclass WriteTreeCompleteChildSource {\r\n constructor(writes_, viewCache_, optCompleteServerCache_ = null) {\r\n this.writes_ = writes_;\r\n this.viewCache_ = viewCache_;\r\n this.optCompleteServerCache_ = optCompleteServerCache_;\r\n }\r\n getCompleteChild(childKey) {\r\n const node = this.viewCache_.eventCache;\r\n if (node.isCompleteForChild(childKey)) {\r\n return node.getNode().getImmediateChild(childKey);\r\n }\r\n else {\r\n const serverNode = this.optCompleteServerCache_ != null\r\n ? new CacheNode(this.optCompleteServerCache_, true, false)\r\n : this.viewCache_.serverCache;\r\n return writeTreeRefCalcCompleteChild(this.writes_, childKey, serverNode);\r\n }\r\n }\r\n getChildAfterChild(index, child, reverse) {\r\n const completeServerData = this.optCompleteServerCache_ != null\r\n ? this.optCompleteServerCache_\r\n : viewCacheGetCompleteServerSnap(this.viewCache_);\r\n const nodes = writeTreeRefCalcIndexedSlice(this.writes_, completeServerData, child, 1, reverse, index);\r\n if (nodes.length === 0) {\r\n return null;\r\n }\r\n else {\r\n return nodes[0];\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newViewProcessor(filter) {\r\n return { filter };\r\n}\r\nfunction viewProcessorAssertIndexed(viewProcessor, viewCache) {\r\n assert(viewCache.eventCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Event snap not indexed');\r\n assert(viewCache.serverCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Server snap not indexed');\r\n}\r\nfunction viewProcessorApplyOperation(viewProcessor, oldViewCache, operation, writesCache, completeCache) {\r\n const accumulator = new ChildChangeAccumulator();\r\n let newViewCache, filterServerNode;\r\n if (operation.type === OperationType.OVERWRITE) {\r\n const overwrite = operation;\r\n if (overwrite.source.fromUser) {\r\n newViewCache = viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n assert(overwrite.source.fromServer, 'Unknown source.');\r\n // We filter the node if it's a tagged update or the node has been previously filtered and the\r\n // update is not at the root in which case it is ok (and necessary) to mark the node unfiltered\r\n // again\r\n filterServerNode =\r\n overwrite.source.tagged ||\r\n (oldViewCache.serverCache.isFiltered() && !pathIsEmpty(overwrite.path));\r\n newViewCache = viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.MERGE) {\r\n const merge = operation;\r\n if (merge.source.fromUser) {\r\n newViewCache = viewProcessorApplyUserMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n assert(merge.source.fromServer, 'Unknown source.');\r\n // We filter the node if it's a tagged update or the node has been previously filtered\r\n filterServerNode =\r\n merge.source.tagged || oldViewCache.serverCache.isFiltered();\r\n newViewCache = viewProcessorApplyServerMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.ACK_USER_WRITE) {\r\n const ackUserWrite = operation;\r\n if (!ackUserWrite.revert) {\r\n newViewCache = viewProcessorAckUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, ackUserWrite.affectedTree, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n newViewCache = viewProcessorRevertUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, writesCache, completeCache, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.LISTEN_COMPLETE) {\r\n newViewCache = viewProcessorListenComplete(viewProcessor, oldViewCache, operation.path, writesCache, accumulator);\r\n }\r\n else {\r\n throw assertionError('Unknown operation type: ' + operation.type);\r\n }\r\n const changes = accumulator.getChanges();\r\n viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, changes);\r\n return { viewCache: newViewCache, changes };\r\n}\r\nfunction viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, accumulator) {\r\n const eventSnap = newViewCache.eventCache;\r\n if (eventSnap.isFullyInitialized()) {\r\n const isLeafOrEmpty = eventSnap.getNode().isLeafNode() || eventSnap.getNode().isEmpty();\r\n const oldCompleteSnap = viewCacheGetCompleteEventSnap(oldViewCache);\r\n if (accumulator.length > 0 ||\r\n !oldViewCache.eventCache.isFullyInitialized() ||\r\n (isLeafOrEmpty && !eventSnap.getNode().equals(oldCompleteSnap)) ||\r\n !eventSnap.getNode().getPriority().equals(oldCompleteSnap.getPriority())) {\r\n accumulator.push(changeValue(viewCacheGetCompleteEventSnap(newViewCache)));\r\n }\r\n }\r\n}\r\nfunction viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, viewCache, changePath, writesCache, source, accumulator) {\r\n const oldEventSnap = viewCache.eventCache;\r\n if (writeTreeRefShadowingWrite(writesCache, changePath) != null) {\r\n // we have a shadowing write, ignore changes\r\n return viewCache;\r\n }\r\n else {\r\n let newEventCache, serverNode;\r\n if (pathIsEmpty(changePath)) {\r\n // TODO: figure out how this plays with \"sliding ack windows\"\r\n assert(viewCache.serverCache.isFullyInitialized(), 'If change path is empty, we must have complete server data');\r\n if (viewCache.serverCache.isFiltered()) {\r\n // We need to special case this, because we need to only apply writes to complete children, or\r\n // we might end up raising events for incomplete children. If the server data is filtered deep\r\n // writes cannot be guaranteed to be complete\r\n const serverCache = viewCacheGetCompleteServerSnap(viewCache);\r\n const completeChildren = serverCache instanceof ChildrenNode\r\n ? serverCache\r\n : ChildrenNode.EMPTY_NODE;\r\n const completeEventChildren = writeTreeRefCalcCompleteEventChildren(writesCache, completeChildren);\r\n newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeEventChildren, accumulator);\r\n }\r\n else {\r\n const completeNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeNode, accumulator);\r\n }\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (childKey === '.priority') {\r\n assert(pathGetLength(changePath) === 1, \"Can't have a priority with additional path components\");\r\n const oldEventNode = oldEventSnap.getNode();\r\n serverNode = viewCache.serverCache.getNode();\r\n // we might have overwrites for this priority\r\n const updatedPriority = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventNode, serverNode);\r\n if (updatedPriority != null) {\r\n newEventCache = viewProcessor.filter.updatePriority(oldEventNode, updatedPriority);\r\n }\r\n else {\r\n // priority didn't change, keep old node\r\n newEventCache = oldEventSnap.getNode();\r\n }\r\n }\r\n else {\r\n const childChangePath = pathPopFront(changePath);\r\n // update child\r\n let newEventChild;\r\n if (oldEventSnap.isCompleteForChild(childKey)) {\r\n serverNode = viewCache.serverCache.getNode();\r\n const eventChildUpdate = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventSnap.getNode(), serverNode);\r\n if (eventChildUpdate != null) {\r\n newEventChild = oldEventSnap\r\n .getNode()\r\n .getImmediateChild(childKey)\r\n .updateChild(childChangePath, eventChildUpdate);\r\n }\r\n else {\r\n // Nothing changed, just keep the old child\r\n newEventChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n }\r\n }\r\n else {\r\n newEventChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\r\n }\r\n if (newEventChild != null) {\r\n newEventCache = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newEventChild, childChangePath, source, accumulator);\r\n }\r\n else {\r\n // no complete child available or no change\r\n newEventCache = oldEventSnap.getNode();\r\n }\r\n }\r\n }\r\n return viewCacheUpdateEventSnap(viewCache, newEventCache, oldEventSnap.isFullyInitialized() || pathIsEmpty(changePath), viewProcessor.filter.filtersNodes());\r\n }\r\n}\r\nfunction viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, filterServerNode, accumulator) {\r\n const oldServerSnap = oldViewCache.serverCache;\r\n let newServerCache;\r\n const serverFilter = filterServerNode\r\n ? viewProcessor.filter\r\n : viewProcessor.filter.getIndexedFilter();\r\n if (pathIsEmpty(changePath)) {\r\n newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), changedSnap, null);\r\n }\r\n else if (serverFilter.filtersNodes() && !oldServerSnap.isFiltered()) {\r\n // we want to filter the server node, but we didn't filter the server node yet, so simulate a full update\r\n const newServerNode = oldServerSnap\r\n .getNode()\r\n .updateChild(changePath, changedSnap);\r\n newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), newServerNode, null);\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (!oldServerSnap.isCompleteForPath(changePath) &&\r\n pathGetLength(changePath) > 1) {\r\n // We don't update incomplete nodes with updates intended for other listeners\r\n return oldViewCache;\r\n }\r\n const childChangePath = pathPopFront(changePath);\r\n const childNode = oldServerSnap.getNode().getImmediateChild(childKey);\r\n const newChildNode = childNode.updateChild(childChangePath, changedSnap);\r\n if (childKey === '.priority') {\r\n newServerCache = serverFilter.updatePriority(oldServerSnap.getNode(), newChildNode);\r\n }\r\n else {\r\n newServerCache = serverFilter.updateChild(oldServerSnap.getNode(), childKey, newChildNode, childChangePath, NO_COMPLETE_CHILD_SOURCE, null);\r\n }\r\n }\r\n const newViewCache = viewCacheUpdateServerSnap(oldViewCache, newServerCache, oldServerSnap.isFullyInitialized() || pathIsEmpty(changePath), serverFilter.filtersNodes());\r\n const source = new WriteTreeCompleteChildSource(writesCache, newViewCache, completeCache);\r\n return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, changePath, writesCache, source, accumulator);\r\n}\r\nfunction viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, accumulator) {\r\n const oldEventSnap = oldViewCache.eventCache;\r\n let newViewCache, newEventCache;\r\n const source = new WriteTreeCompleteChildSource(writesCache, oldViewCache, completeCache);\r\n if (pathIsEmpty(changePath)) {\r\n newEventCache = viewProcessor.filter.updateFullNode(oldViewCache.eventCache.getNode(), changedSnap, accumulator);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, true, viewProcessor.filter.filtersNodes());\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (childKey === '.priority') {\r\n newEventCache = viewProcessor.filter.updatePriority(oldViewCache.eventCache.getNode(), changedSnap);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, oldEventSnap.isFullyInitialized(), oldEventSnap.isFiltered());\r\n }\r\n else {\r\n const childChangePath = pathPopFront(changePath);\r\n const oldChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n let newChild;\r\n if (pathIsEmpty(childChangePath)) {\r\n // Child overwrite, we can replace the child\r\n newChild = changedSnap;\r\n }\r\n else {\r\n const childNode = source.getCompleteChild(childKey);\r\n if (childNode != null) {\r\n if (pathGetBack(childChangePath) === '.priority' &&\r\n childNode.getChild(pathParent(childChangePath)).isEmpty()) {\r\n // This is a priority update on an empty node. If this node exists on the server, the\r\n // server will send down the priority in the update, so ignore for now\r\n newChild = childNode;\r\n }\r\n else {\r\n newChild = childNode.updateChild(childChangePath, changedSnap);\r\n }\r\n }\r\n else {\r\n // There is no complete child node available\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n }\r\n if (!oldChild.equals(newChild)) {\r\n const newEventSnap = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newChild, childChangePath, source, accumulator);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventSnap, oldEventSnap.isFullyInitialized(), viewProcessor.filter.filtersNodes());\r\n }\r\n else {\r\n newViewCache = oldViewCache;\r\n }\r\n }\r\n }\r\n return newViewCache;\r\n}\r\nfunction viewProcessorCacheHasChild(viewCache, childKey) {\r\n return viewCache.eventCache.isCompleteForChild(childKey);\r\n}\r\nfunction viewProcessorApplyUserMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, accumulator) {\r\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n // window leaving room for new items. It's important we process these changes first, so we\r\n // iterate the changes twice, first processing any that affect items currently in view.\r\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\r\n // not the other.\r\n let curViewCache = viewCache;\r\n changedChildren.foreach((relativePath, childNode) => {\r\n const writePath = pathChild(path, relativePath);\r\n if (viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\r\n curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n }\r\n });\r\n changedChildren.foreach((relativePath, childNode) => {\r\n const writePath = pathChild(path, relativePath);\r\n if (!viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\r\n curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n }\r\n });\r\n return curViewCache;\r\n}\r\nfunction viewProcessorApplyMerge(viewProcessor, node, merge) {\r\n merge.foreach((relativePath, childNode) => {\r\n node = node.updateChild(relativePath, childNode);\r\n });\r\n return node;\r\n}\r\nfunction viewProcessorApplyServerMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, filterServerNode, accumulator) {\r\n // If we don't have a cache yet, this merge was intended for a previously listen in the same location. Ignore it and\r\n // wait for the complete data update coming soon.\r\n if (viewCache.serverCache.getNode().isEmpty() &&\r\n !viewCache.serverCache.isFullyInitialized()) {\r\n return viewCache;\r\n }\r\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n // window leaving room for new items. It's important we process these changes first, so we\r\n // iterate the changes twice, first processing any that affect items currently in view.\r\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\r\n // not the other.\r\n let curViewCache = viewCache;\r\n let viewMergeTree;\r\n if (pathIsEmpty(path)) {\r\n viewMergeTree = changedChildren;\r\n }\r\n else {\r\n viewMergeTree = new ImmutableTree(null).setTree(path, changedChildren);\r\n }\r\n const serverNode = viewCache.serverCache.getNode();\r\n viewMergeTree.children.inorderTraversal((childKey, childTree) => {\r\n if (serverNode.hasChild(childKey)) {\r\n const serverChild = viewCache.serverCache\r\n .getNode()\r\n .getImmediateChild(childKey);\r\n const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childTree);\r\n curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n }\r\n });\r\n viewMergeTree.children.inorderTraversal((childKey, childMergeTree) => {\r\n const isUnknownDeepMerge = !viewCache.serverCache.isCompleteForChild(childKey) &&\r\n childMergeTree.value === null;\r\n if (!serverNode.hasChild(childKey) && !isUnknownDeepMerge) {\r\n const serverChild = viewCache.serverCache\r\n .getNode()\r\n .getImmediateChild(childKey);\r\n const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childMergeTree);\r\n curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n }\r\n });\r\n return curViewCache;\r\n}\r\nfunction viewProcessorAckUserWrite(viewProcessor, viewCache, ackPath, affectedTree, writesCache, completeCache, accumulator) {\r\n if (writeTreeRefShadowingWrite(writesCache, ackPath) != null) {\r\n return viewCache;\r\n }\r\n // Only filter server node if it is currently filtered\r\n const filterServerNode = viewCache.serverCache.isFiltered();\r\n // Essentially we'll just get our existing server cache for the affected paths and re-apply it as a server update\r\n // now that it won't be shadowed.\r\n const serverCache = viewCache.serverCache;\r\n if (affectedTree.value != null) {\r\n // This is an overwrite.\r\n if ((pathIsEmpty(ackPath) && serverCache.isFullyInitialized()) ||\r\n serverCache.isCompleteForPath(ackPath)) {\r\n return viewProcessorApplyServerOverwrite(viewProcessor, viewCache, ackPath, serverCache.getNode().getChild(ackPath), writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n else if (pathIsEmpty(ackPath)) {\r\n // This is a goofy edge case where we are acking data at this location but don't have full data. We\r\n // should just re-apply whatever we have in our cache as a merge.\r\n let changedChildren = new ImmutableTree(null);\r\n serverCache.getNode().forEachChild(KEY_INDEX, (name, node) => {\r\n changedChildren = changedChildren.set(new Path(name), node);\r\n });\r\n return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n else {\r\n return viewCache;\r\n }\r\n }\r\n else {\r\n // This is a merge.\r\n let changedChildren = new ImmutableTree(null);\r\n affectedTree.foreach((mergePath, value) => {\r\n const serverCachePath = pathChild(ackPath, mergePath);\r\n if (serverCache.isCompleteForPath(serverCachePath)) {\r\n changedChildren = changedChildren.set(mergePath, serverCache.getNode().getChild(serverCachePath));\r\n }\r\n });\r\n return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n}\r\nfunction viewProcessorListenComplete(viewProcessor, viewCache, path, writesCache, accumulator) {\r\n const oldServerNode = viewCache.serverCache;\r\n const newViewCache = viewCacheUpdateServerSnap(viewCache, oldServerNode.getNode(), oldServerNode.isFullyInitialized() || pathIsEmpty(path), oldServerNode.isFiltered());\r\n return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, path, writesCache, NO_COMPLETE_CHILD_SOURCE, accumulator);\r\n}\r\nfunction viewProcessorRevertUserWrite(viewProcessor, viewCache, path, writesCache, completeServerCache, accumulator) {\r\n let complete;\r\n if (writeTreeRefShadowingWrite(writesCache, path) != null) {\r\n return viewCache;\r\n }\r\n else {\r\n const source = new WriteTreeCompleteChildSource(writesCache, viewCache, completeServerCache);\r\n const oldEventCache = viewCache.eventCache.getNode();\r\n let newEventCache;\r\n if (pathIsEmpty(path) || pathGetFront(path) === '.priority') {\r\n let newNode;\r\n if (viewCache.serverCache.isFullyInitialized()) {\r\n newNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n }\r\n else {\r\n const serverChildren = viewCache.serverCache.getNode();\r\n assert(serverChildren instanceof ChildrenNode, 'serverChildren would be complete if leaf node');\r\n newNode = writeTreeRefCalcCompleteEventChildren(writesCache, serverChildren);\r\n }\r\n newNode = newNode;\r\n newEventCache = viewProcessor.filter.updateFullNode(oldEventCache, newNode, accumulator);\r\n }\r\n else {\r\n const childKey = pathGetFront(path);\r\n let newChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\r\n if (newChild == null &&\r\n viewCache.serverCache.isCompleteForChild(childKey)) {\r\n newChild = oldEventCache.getImmediateChild(childKey);\r\n }\r\n if (newChild != null) {\r\n newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, newChild, pathPopFront(path), source, accumulator);\r\n }\r\n else if (viewCache.eventCache.getNode().hasChild(childKey)) {\r\n // No complete child available, delete the existing one, if any\r\n newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, ChildrenNode.EMPTY_NODE, pathPopFront(path), source, accumulator);\r\n }\r\n else {\r\n newEventCache = oldEventCache;\r\n }\r\n if (newEventCache.isEmpty() &&\r\n viewCache.serverCache.isFullyInitialized()) {\r\n // We might have reverted all child writes. Maybe the old event was a leaf node\r\n complete = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n if (complete.isLeafNode()) {\r\n newEventCache = viewProcessor.filter.updateFullNode(newEventCache, complete, accumulator);\r\n }\r\n }\r\n }\r\n complete =\r\n viewCache.serverCache.isFullyInitialized() ||\r\n writeTreeRefShadowingWrite(writesCache, newEmptyPath()) != null;\r\n return viewCacheUpdateEventSnap(viewCache, newEventCache, complete, viewProcessor.filter.filtersNodes());\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A view represents a specific location and query that has 1 or more event registrations.\r\n *\r\n * It does several things:\r\n * - Maintains the list of event registrations for this location/query.\r\n * - Maintains a cache of the data visible for this location/query.\r\n * - Applies new operations (via applyOperation), updates the cache, and based on the event\r\n * registrations returns the set of events to be raised.\r\n */\r\nclass View {\r\n constructor(query_, initialViewCache) {\r\n this.query_ = query_;\r\n this.eventRegistrations_ = [];\r\n const params = this.query_._queryParams;\r\n const indexFilter = new IndexedFilter(params.getIndex());\r\n const filter = queryParamsGetNodeFilter(params);\r\n this.processor_ = newViewProcessor(filter);\r\n const initialServerCache = initialViewCache.serverCache;\r\n const initialEventCache = initialViewCache.eventCache;\r\n // Don't filter server node with other filter than index, wait for tagged listen\r\n const serverSnap = indexFilter.updateFullNode(ChildrenNode.EMPTY_NODE, initialServerCache.getNode(), null);\r\n const eventSnap = filter.updateFullNode(ChildrenNode.EMPTY_NODE, initialEventCache.getNode(), null);\r\n const newServerCache = new CacheNode(serverSnap, initialServerCache.isFullyInitialized(), indexFilter.filtersNodes());\r\n const newEventCache = new CacheNode(eventSnap, initialEventCache.isFullyInitialized(), filter.filtersNodes());\r\n this.viewCache_ = newViewCache(newEventCache, newServerCache);\r\n this.eventGenerator_ = new EventGenerator(this.query_);\r\n }\r\n get query() {\r\n return this.query_;\r\n }\r\n}\r\nfunction viewGetServerCache(view) {\r\n return view.viewCache_.serverCache.getNode();\r\n}\r\nfunction viewGetCompleteNode(view) {\r\n return viewCacheGetCompleteEventSnap(view.viewCache_);\r\n}\r\nfunction viewGetCompleteServerCache(view, path) {\r\n const cache = viewCacheGetCompleteServerSnap(view.viewCache_);\r\n if (cache) {\r\n // If this isn't a \"loadsAllData\" view, then cache isn't actually a complete cache and\r\n // we need to see if it contains the child we're interested in.\r\n if (view.query._queryParams.loadsAllData() ||\r\n (!pathIsEmpty(path) &&\r\n !cache.getImmediateChild(pathGetFront(path)).isEmpty())) {\r\n return cache.getChild(path);\r\n }\r\n }\r\n return null;\r\n}\r\nfunction viewIsEmpty(view) {\r\n return view.eventRegistrations_.length === 0;\r\n}\r\nfunction viewAddEventRegistration(view, eventRegistration) {\r\n view.eventRegistrations_.push(eventRegistration);\r\n}\r\n/**\r\n * @param eventRegistration - If null, remove all callbacks.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @returns Cancel events, if cancelError was provided.\r\n */\r\nfunction viewRemoveEventRegistration(view, eventRegistration, cancelError) {\r\n const cancelEvents = [];\r\n if (cancelError) {\r\n assert(eventRegistration == null, 'A cancel should cancel all event registrations.');\r\n const path = view.query._path;\r\n view.eventRegistrations_.forEach(registration => {\r\n const maybeEvent = registration.createCancelEvent(cancelError, path);\r\n if (maybeEvent) {\r\n cancelEvents.push(maybeEvent);\r\n }\r\n });\r\n }\r\n if (eventRegistration) {\r\n let remaining = [];\r\n for (let i = 0; i < view.eventRegistrations_.length; ++i) {\r\n const existing = view.eventRegistrations_[i];\r\n if (!existing.matches(eventRegistration)) {\r\n remaining.push(existing);\r\n }\r\n else if (eventRegistration.hasAnyCallback()) {\r\n // We're removing just this one\r\n remaining = remaining.concat(view.eventRegistrations_.slice(i + 1));\r\n break;\r\n }\r\n }\r\n view.eventRegistrations_ = remaining;\r\n }\r\n else {\r\n view.eventRegistrations_ = [];\r\n }\r\n return cancelEvents;\r\n}\r\n/**\r\n * Applies the given Operation, updates our cache, and returns the appropriate events.\r\n */\r\nfunction viewApplyOperation(view, operation, writesCache, completeServerCache) {\r\n if (operation.type === OperationType.MERGE &&\r\n operation.source.queryId !== null) {\r\n assert(viewCacheGetCompleteServerSnap(view.viewCache_), 'We should always have a full cache before handling merges');\r\n assert(viewCacheGetCompleteEventSnap(view.viewCache_), 'Missing event cache, even though we have a server cache');\r\n }\r\n const oldViewCache = view.viewCache_;\r\n const result = viewProcessorApplyOperation(view.processor_, oldViewCache, operation, writesCache, completeServerCache);\r\n viewProcessorAssertIndexed(view.processor_, result.viewCache);\r\n assert(result.viewCache.serverCache.isFullyInitialized() ||\r\n !oldViewCache.serverCache.isFullyInitialized(), 'Once a server snap is complete, it should never go back');\r\n view.viewCache_ = result.viewCache;\r\n return viewGenerateEventsForChanges_(view, result.changes, result.viewCache.eventCache.getNode(), null);\r\n}\r\nfunction viewGetInitialEvents(view, registration) {\r\n const eventSnap = view.viewCache_.eventCache;\r\n const initialChanges = [];\r\n if (!eventSnap.getNode().isLeafNode()) {\r\n const eventNode = eventSnap.getNode();\r\n eventNode.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n initialChanges.push(changeChildAdded(key, childNode));\r\n });\r\n }\r\n if (eventSnap.isFullyInitialized()) {\r\n initialChanges.push(changeValue(eventSnap.getNode()));\r\n }\r\n return viewGenerateEventsForChanges_(view, initialChanges, eventSnap.getNode(), registration);\r\n}\r\nfunction viewGenerateEventsForChanges_(view, changes, eventCache, eventRegistration) {\r\n const registrations = eventRegistration\r\n ? [eventRegistration]\r\n : view.eventRegistrations_;\r\n return eventGeneratorGenerateEventsForChanges(view.eventGenerator_, changes, eventCache, registrations);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet referenceConstructor$1;\r\n/**\r\n * SyncPoint represents a single location in a SyncTree with 1 or more event registrations, meaning we need to\r\n * maintain 1 or more Views at this location to cache server data and raise appropriate events for server changes\r\n * and user writes (set, transaction, update).\r\n *\r\n * It's responsible for:\r\n * - Maintaining the set of 1 or more views necessary at this location (a SyncPoint with 0 views should be removed).\r\n * - Proxying user / server operations to the views as appropriate (i.e. applyServerOverwrite,\r\n * applyUserOverwrite, etc.)\r\n */\r\nclass SyncPoint {\r\n constructor() {\r\n /**\r\n * The Views being tracked at this location in the tree, stored as a map where the key is a\r\n * queryId and the value is the View for that query.\r\n *\r\n * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more is an odd use case).\r\n */\r\n this.views = new Map();\r\n }\r\n}\r\nfunction syncPointSetReferenceConstructor(val) {\r\n assert(!referenceConstructor$1, '__referenceConstructor has already been defined');\r\n referenceConstructor$1 = val;\r\n}\r\nfunction syncPointGetReferenceConstructor() {\r\n assert(referenceConstructor$1, 'Reference.ts has not been loaded');\r\n return referenceConstructor$1;\r\n}\r\nfunction syncPointIsEmpty(syncPoint) {\r\n return syncPoint.views.size === 0;\r\n}\r\nfunction syncPointApplyOperation(syncPoint, operation, writesCache, optCompleteServerCache) {\r\n const queryId = operation.source.queryId;\r\n if (queryId !== null) {\r\n const view = syncPoint.views.get(queryId);\r\n assert(view != null, 'SyncTree gave us an op for an invalid query.');\r\n return viewApplyOperation(view, operation, writesCache, optCompleteServerCache);\r\n }\r\n else {\r\n let events = [];\r\n for (const view of syncPoint.views.values()) {\r\n events = events.concat(viewApplyOperation(view, operation, writesCache, optCompleteServerCache));\r\n }\r\n return events;\r\n }\r\n}\r\n/**\r\n * Get a view for the specified query.\r\n *\r\n * @param query - The query to return a view for\r\n * @param writesCache\r\n * @param serverCache\r\n * @param serverCacheComplete\r\n * @returns Events to raise.\r\n */\r\nfunction syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete) {\r\n const queryId = query._queryIdentifier;\r\n const view = syncPoint.views.get(queryId);\r\n if (!view) {\r\n // TODO: make writesCache take flag for complete server node\r\n let eventCache = writeTreeRefCalcCompleteEventCache(writesCache, serverCacheComplete ? serverCache : null);\r\n let eventCacheComplete = false;\r\n if (eventCache) {\r\n eventCacheComplete = true;\r\n }\r\n else if (serverCache instanceof ChildrenNode) {\r\n eventCache = writeTreeRefCalcCompleteEventChildren(writesCache, serverCache);\r\n eventCacheComplete = false;\r\n }\r\n else {\r\n eventCache = ChildrenNode.EMPTY_NODE;\r\n eventCacheComplete = false;\r\n }\r\n const viewCache = newViewCache(new CacheNode(eventCache, eventCacheComplete, false), new CacheNode(serverCache, serverCacheComplete, false));\r\n return new View(query, viewCache);\r\n }\r\n return view;\r\n}\r\n/**\r\n * Add an event callback for the specified query.\r\n *\r\n * @param query\r\n * @param eventRegistration\r\n * @param writesCache\r\n * @param serverCache - Complete server cache, if we have it.\r\n * @param serverCacheComplete\r\n * @returns Events to raise.\r\n */\r\nfunction syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete) {\r\n const view = syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete);\r\n if (!syncPoint.views.has(query._queryIdentifier)) {\r\n syncPoint.views.set(query._queryIdentifier, view);\r\n }\r\n // This is guaranteed to exist now, we just created anything that was missing\r\n viewAddEventRegistration(view, eventRegistration);\r\n return viewGetInitialEvents(view, eventRegistration);\r\n}\r\n/**\r\n * Remove event callback(s). Return cancelEvents if a cancelError is specified.\r\n *\r\n * If query is the default query, we'll check all views for the specified eventRegistration.\r\n * If eventRegistration is null, we'll remove all callbacks for the specified view(s).\r\n *\r\n * @param eventRegistration - If null, remove all callbacks.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @returns removed queries and any cancel events\r\n */\r\nfunction syncPointRemoveEventRegistration(syncPoint, query, eventRegistration, cancelError) {\r\n const queryId = query._queryIdentifier;\r\n const removed = [];\r\n let cancelEvents = [];\r\n const hadCompleteView = syncPointHasCompleteView(syncPoint);\r\n if (queryId === 'default') {\r\n // When you do ref.off(...), we search all views for the registration to remove.\r\n for (const [viewQueryId, view] of syncPoint.views.entries()) {\r\n cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\r\n if (viewIsEmpty(view)) {\r\n syncPoint.views.delete(viewQueryId);\r\n // We'll deal with complete views later.\r\n if (!view.query._queryParams.loadsAllData()) {\r\n removed.push(view.query);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // remove the callback from the specific view.\r\n const view = syncPoint.views.get(queryId);\r\n if (view) {\r\n cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\r\n if (viewIsEmpty(view)) {\r\n syncPoint.views.delete(queryId);\r\n // We'll deal with complete views later.\r\n if (!view.query._queryParams.loadsAllData()) {\r\n removed.push(view.query);\r\n }\r\n }\r\n }\r\n }\r\n if (hadCompleteView && !syncPointHasCompleteView(syncPoint)) {\r\n // We removed our last complete view.\r\n removed.push(new (syncPointGetReferenceConstructor())(query._repo, query._path));\r\n }\r\n return { removed, events: cancelEvents };\r\n}\r\nfunction syncPointGetQueryViews(syncPoint) {\r\n const result = [];\r\n for (const view of syncPoint.views.values()) {\r\n if (!view.query._queryParams.loadsAllData()) {\r\n result.push(view);\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * @param path - The path to the desired complete snapshot\r\n * @returns A complete cache, if it exists\r\n */\r\nfunction syncPointGetCompleteServerCache(syncPoint, path) {\r\n let serverCache = null;\r\n for (const view of syncPoint.views.values()) {\r\n serverCache = serverCache || viewGetCompleteServerCache(view, path);\r\n }\r\n return serverCache;\r\n}\r\nfunction syncPointViewForQuery(syncPoint, query) {\r\n const params = query._queryParams;\r\n if (params.loadsAllData()) {\r\n return syncPointGetCompleteView(syncPoint);\r\n }\r\n else {\r\n const queryId = query._queryIdentifier;\r\n return syncPoint.views.get(queryId);\r\n }\r\n}\r\nfunction syncPointViewExistsForQuery(syncPoint, query) {\r\n return syncPointViewForQuery(syncPoint, query) != null;\r\n}\r\nfunction syncPointHasCompleteView(syncPoint) {\r\n return syncPointGetCompleteView(syncPoint) != null;\r\n}\r\nfunction syncPointGetCompleteView(syncPoint) {\r\n for (const view of syncPoint.views.values()) {\r\n if (view.query._queryParams.loadsAllData()) {\r\n return view;\r\n }\r\n }\r\n return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet referenceConstructor;\r\nfunction syncTreeSetReferenceConstructor(val) {\r\n assert(!referenceConstructor, '__referenceConstructor has already been defined');\r\n referenceConstructor = val;\r\n}\r\nfunction syncTreeGetReferenceConstructor() {\r\n assert(referenceConstructor, 'Reference.ts has not been loaded');\r\n return referenceConstructor;\r\n}\r\n/**\r\n * Static tracker for next query tag.\r\n */\r\nlet syncTreeNextQueryTag_ = 1;\r\n/**\r\n * SyncTree is the central class for managing event callback registration, data caching, views\r\n * (query processing), and event generation. There are typically two SyncTree instances for\r\n * each Repo, one for the normal Firebase data, and one for the .info data.\r\n *\r\n * It has a number of responsibilities, including:\r\n * - Tracking all user event callbacks (registered via addEventRegistration() and removeEventRegistration()).\r\n * - Applying and caching data changes for user set(), transaction(), and update() calls\r\n * (applyUserOverwrite(), applyUserMerge()).\r\n * - Applying and caching data changes for server data changes (applyServerOverwrite(),\r\n * applyServerMerge()).\r\n * - Generating user-facing events for server and user changes (all of the apply* methods\r\n * return the set of events that need to be raised as a result).\r\n * - Maintaining the appropriate set of server listens to ensure we are always subscribed\r\n * to the correct set of paths and queries to satisfy the current set of user event\r\n * callbacks (listens are started/stopped using the provided listenProvider).\r\n *\r\n * NOTE: Although SyncTree tracks event callbacks and calculates events to raise, the actual\r\n * events are returned to the caller rather than raised synchronously.\r\n *\r\n */\r\nclass SyncTree {\r\n /**\r\n * @param listenProvider_ - Used by SyncTree to start / stop listening\r\n * to server data.\r\n */\r\n constructor(listenProvider_) {\r\n this.listenProvider_ = listenProvider_;\r\n /**\r\n * Tree of SyncPoints. There's a SyncPoint at any location that has 1 or more views.\r\n */\r\n this.syncPointTree_ = new ImmutableTree(null);\r\n /**\r\n * A tree of all pending user writes (user-initiated set()'s, transaction()'s, update()'s, etc.).\r\n */\r\n this.pendingWriteTree_ = newWriteTree();\r\n this.tagToQueryMap = new Map();\r\n this.queryToTagMap = new Map();\r\n }\r\n}\r\n/**\r\n * Apply the data changes for a user-generated set() or transaction() call.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyUserOverwrite(syncTree, path, newData, writeId, visible) {\r\n // Record pending write.\r\n writeTreeAddOverwrite(syncTree.pendingWriteTree_, path, newData, writeId, visible);\r\n if (!visible) {\r\n return [];\r\n }\r\n else {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceUser(), path, newData));\r\n }\r\n}\r\n/**\r\n * Apply the data from a user-generated update() call\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyUserMerge(syncTree, path, changedChildren, writeId) {\r\n // Record pending merge.\r\n writeTreeAddMerge(syncTree.pendingWriteTree_, path, changedChildren, writeId);\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceUser(), path, changeTree));\r\n}\r\n/**\r\n * Acknowledge a pending user write that was previously registered with applyUserOverwrite() or applyUserMerge().\r\n *\r\n * @param revert - True if the given write failed and needs to be reverted\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeAckUserWrite(syncTree, writeId, revert = false) {\r\n const write = writeTreeGetWrite(syncTree.pendingWriteTree_, writeId);\r\n const needToReevaluate = writeTreeRemoveWrite(syncTree.pendingWriteTree_, writeId);\r\n if (!needToReevaluate) {\r\n return [];\r\n }\r\n else {\r\n let affectedTree = new ImmutableTree(null);\r\n if (write.snap != null) {\r\n // overwrite\r\n affectedTree = affectedTree.set(newEmptyPath(), true);\r\n }\r\n else {\r\n each(write.children, (pathString) => {\r\n affectedTree = affectedTree.set(new Path(pathString), true);\r\n });\r\n }\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new AckUserWrite(write.path, affectedTree, revert));\r\n }\r\n}\r\n/**\r\n * Apply new server data for the specified path..\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyServerOverwrite(syncTree, path, newData) {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceServer(), path, newData));\r\n}\r\n/**\r\n * Apply new server data to be merged in at the specified path.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyServerMerge(syncTree, path, changedChildren) {\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceServer(), path, changeTree));\r\n}\r\n/**\r\n * Apply a listen complete for a query\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyListenComplete(syncTree, path) {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new ListenComplete(newOperationSourceServer(), path));\r\n}\r\n/**\r\n * Apply a listen complete for a tagged query\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedListenComplete(syncTree, path, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const op = new ListenComplete(newOperationSourceServerTaggedQuery(queryId), relativePath);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // We've already removed the query. No big deal, ignore the update\r\n return [];\r\n }\r\n}\r\n/**\r\n * Remove event callback(s).\r\n *\r\n * If query is the default query, we'll check all queries for the specified eventRegistration.\r\n * If eventRegistration is null, we'll remove all callbacks for the specified query/queries.\r\n *\r\n * @param eventRegistration - If null, all callbacks are removed.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @param skipListenerDedup - When performing a `get()`, we don't add any new listeners, so no\r\n * deduping needs to take place. This flag allows toggling of that behavior\r\n * @returns Cancel events, if cancelError was provided.\r\n */\r\nfunction syncTreeRemoveEventRegistration(syncTree, query, eventRegistration, cancelError, skipListenerDedup = false) {\r\n // Find the syncPoint first. Then deal with whether or not it has matching listeners\r\n const path = query._path;\r\n const maybeSyncPoint = syncTree.syncPointTree_.get(path);\r\n let cancelEvents = [];\r\n // A removal on a default query affects all queries at that location. A removal on an indexed query, even one without\r\n // other query constraints, does *not* affect all queries at that location. So this check must be for 'default', and\r\n // not loadsAllData().\r\n if (maybeSyncPoint &&\r\n (query._queryIdentifier === 'default' ||\r\n syncPointViewExistsForQuery(maybeSyncPoint, query))) {\r\n const removedAndEvents = syncPointRemoveEventRegistration(maybeSyncPoint, query, eventRegistration, cancelError);\r\n if (syncPointIsEmpty(maybeSyncPoint)) {\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.remove(path);\r\n }\r\n const removed = removedAndEvents.removed;\r\n cancelEvents = removedAndEvents.events;\r\n if (!skipListenerDedup) {\r\n /**\r\n * We may have just removed one of many listeners and can short-circuit this whole process\r\n * We may also not have removed a default listener, in which case all of the descendant listeners should already be\r\n * properly set up.\r\n */\r\n // Since indexed queries can shadow if they don't have other query constraints, check for loadsAllData(), instead of\r\n // queryId === 'default'\r\n const removingDefault = -1 !==\r\n removed.findIndex(query => {\r\n return query._queryParams.loadsAllData();\r\n });\r\n const covered = syncTree.syncPointTree_.findOnPath(path, (relativePath, parentSyncPoint) => syncPointHasCompleteView(parentSyncPoint));\r\n if (removingDefault && !covered) {\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n // There are potentially child listeners. Determine what if any listens we need to send before executing the\r\n // removal\r\n if (!subtree.isEmpty()) {\r\n // We need to fold over our subtree and collect the listeners to send\r\n const newViews = syncTreeCollectDistinctViewsForSubTree_(subtree);\r\n // Ok, we've collected all the listens we need. Set them up.\r\n for (let i = 0; i < newViews.length; ++i) {\r\n const view = newViews[i], newQuery = view.query;\r\n const listener = syncTreeCreateListenerForView_(syncTree, view);\r\n syncTree.listenProvider_.startListening(syncTreeQueryForListening_(newQuery), syncTreeTagForQuery(syncTree, newQuery), listener.hashFn, listener.onComplete);\r\n }\r\n }\r\n // Otherwise there's nothing below us, so nothing we need to start listening on\r\n }\r\n // If we removed anything and we're not covered by a higher up listen, we need to stop listening on this query\r\n // The above block has us covered in terms of making sure we're set up on listens lower in the tree.\r\n // Also, note that if we have a cancelError, it's already been removed at the provider level.\r\n if (!covered && removed.length > 0 && !cancelError) {\r\n // If we removed a default, then we weren't listening on any of the other queries here. Just cancel the one\r\n // default. Otherwise, we need to iterate through and cancel each individual query\r\n if (removingDefault) {\r\n // We don't tag default listeners\r\n const defaultTag = null;\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(query), defaultTag);\r\n }\r\n else {\r\n removed.forEach((queryToRemove) => {\r\n const tagToRemove = syncTree.queryToTagMap.get(syncTreeMakeQueryKey_(queryToRemove));\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToRemove), tagToRemove);\r\n });\r\n }\r\n }\r\n }\r\n // Now, clear all of the tags we're tracking for the removed listens\r\n syncTreeRemoveTags_(syncTree, removed);\r\n }\r\n return cancelEvents;\r\n}\r\n/**\r\n * Apply new server data for the specified tagged query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedQueryOverwrite(syncTree, path, snap, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey != null) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const op = new Overwrite(newOperationSourceServerTaggedQuery(queryId), relativePath, snap);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // Query must have been removed already\r\n return [];\r\n }\r\n}\r\n/**\r\n * Apply server data to be merged in for the specified tagged query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedQueryMerge(syncTree, path, changedChildren, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n const op = new Merge(newOperationSourceServerTaggedQuery(queryId), relativePath, changeTree);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // We've already removed the query. No big deal, ignore the update\r\n return [];\r\n }\r\n}\r\n/**\r\n * Add an event callback for the specified query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeAddEventRegistration(syncTree, query, eventRegistration, skipSetupListener = false) {\r\n const path = query._path;\r\n let serverCache = null;\r\n let foundAncestorDefaultView = false;\r\n // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\r\n const relativePath = newRelativePath(pathToSyncPoint, path);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(sp, relativePath);\r\n foundAncestorDefaultView =\r\n foundAncestorDefaultView || syncPointHasCompleteView(sp);\r\n });\r\n let syncPoint = syncTree.syncPointTree_.get(path);\r\n if (!syncPoint) {\r\n syncPoint = new SyncPoint();\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\r\n }\r\n else {\r\n foundAncestorDefaultView =\r\n foundAncestorDefaultView || syncPointHasCompleteView(syncPoint);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let serverCacheComplete;\r\n if (serverCache != null) {\r\n serverCacheComplete = true;\r\n }\r\n else {\r\n serverCacheComplete = false;\r\n serverCache = ChildrenNode.EMPTY_NODE;\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n subtree.foreachChild((childName, childSyncPoint) => {\r\n const completeCache = syncPointGetCompleteServerCache(childSyncPoint, newEmptyPath());\r\n if (completeCache) {\r\n serverCache = serverCache.updateImmediateChild(childName, completeCache);\r\n }\r\n });\r\n }\r\n const viewAlreadyExists = syncPointViewExistsForQuery(syncPoint, query);\r\n if (!viewAlreadyExists && !query._queryParams.loadsAllData()) {\r\n // We need to track a tag for this query\r\n const queryKey = syncTreeMakeQueryKey_(query);\r\n assert(!syncTree.queryToTagMap.has(queryKey), 'View does not exist, but we have a tag');\r\n const tag = syncTreeGetNextQueryTag_();\r\n syncTree.queryToTagMap.set(queryKey, tag);\r\n syncTree.tagToQueryMap.set(tag, queryKey);\r\n }\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, path);\r\n let events = syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete);\r\n if (!viewAlreadyExists && !foundAncestorDefaultView && !skipSetupListener) {\r\n const view = syncPointViewForQuery(syncPoint, query);\r\n events = events.concat(syncTreeSetupListener_(syncTree, query, view));\r\n }\r\n return events;\r\n}\r\n/**\r\n * Returns a complete cache, if we have one, of the data at a particular path. If the location does not have a\r\n * listener above it, we will get a false \"null\". This shouldn't be a problem because transactions will always\r\n * have a listener above, and atomic operations would correctly show a jitter of ->\r\n * as the write is applied locally and then acknowledged at the server.\r\n *\r\n * Note: this method will *include* hidden writes from transaction with applyLocally set to false.\r\n *\r\n * @param path - The path to the data we want\r\n * @param writeIdsToExclude - A specific set to be excluded\r\n */\r\nfunction syncTreeCalcCompleteEventCache(syncTree, path, writeIdsToExclude) {\r\n const includeHiddenSets = true;\r\n const writeTree = syncTree.pendingWriteTree_;\r\n const serverCache = syncTree.syncPointTree_.findOnPath(path, (pathSoFar, syncPoint) => {\r\n const relativePath = newRelativePath(pathSoFar, path);\r\n const serverCache = syncPointGetCompleteServerCache(syncPoint, relativePath);\r\n if (serverCache) {\r\n return serverCache;\r\n }\r\n });\r\n return writeTreeCalcCompleteEventCache(writeTree, path, serverCache, writeIdsToExclude, includeHiddenSets);\r\n}\r\nfunction syncTreeGetServerValue(syncTree, query) {\r\n const path = query._path;\r\n let serverCache = null;\r\n // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\r\n const relativePath = newRelativePath(pathToSyncPoint, path);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(sp, relativePath);\r\n });\r\n let syncPoint = syncTree.syncPointTree_.get(path);\r\n if (!syncPoint) {\r\n syncPoint = new SyncPoint();\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\r\n }\r\n else {\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n const serverCacheComplete = serverCache != null;\r\n const serverCacheNode = serverCacheComplete\r\n ? new CacheNode(serverCache, true, false)\r\n : null;\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, query._path);\r\n const view = syncPointGetView(syncPoint, query, writesCache, serverCacheComplete ? serverCacheNode.getNode() : ChildrenNode.EMPTY_NODE, serverCacheComplete);\r\n return viewGetCompleteNode(view);\r\n}\r\n/**\r\n * A helper method that visits all descendant and ancestor SyncPoints, applying the operation.\r\n *\r\n * NOTES:\r\n * - Descendant SyncPoints will be visited first (since we raise events depth-first).\r\n *\r\n * - We call applyOperation() on each SyncPoint passing three things:\r\n * 1. A version of the Operation that has been made relative to the SyncPoint location.\r\n * 2. A WriteTreeRef of any writes we have cached at the SyncPoint location.\r\n * 3. A snapshot Node with cached server data, if we have it.\r\n *\r\n * - We concatenate all of the events returned by each SyncPoint and return the result.\r\n */\r\nfunction syncTreeApplyOperationToSyncPoints_(syncTree, operation) {\r\n return syncTreeApplyOperationHelper_(operation, syncTree.syncPointTree_, \r\n /*serverCache=*/ null, writeTreeChildWrites(syncTree.pendingWriteTree_, newEmptyPath()));\r\n}\r\n/**\r\n * Recursive helper for applyOperationToSyncPoints_\r\n */\r\nfunction syncTreeApplyOperationHelper_(operation, syncPointTree, serverCache, writesCache) {\r\n if (pathIsEmpty(operation.path)) {\r\n return syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache);\r\n }\r\n else {\r\n const syncPoint = syncPointTree.get(newEmptyPath());\r\n // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n if (serverCache == null && syncPoint != null) {\r\n serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let events = [];\r\n const childName = pathGetFront(operation.path);\r\n const childOperation = operation.operationForChild(childName);\r\n const childTree = syncPointTree.children.get(childName);\r\n if (childTree && childOperation) {\r\n const childServerCache = serverCache\r\n ? serverCache.getImmediateChild(childName)\r\n : null;\r\n const childWritesCache = writeTreeRefChild(writesCache, childName);\r\n events = events.concat(syncTreeApplyOperationHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n }\r\n if (syncPoint) {\r\n events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\r\n }\r\n return events;\r\n }\r\n}\r\n/**\r\n * Recursive helper for applyOperationToSyncPoints_\r\n */\r\nfunction syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache) {\r\n const syncPoint = syncPointTree.get(newEmptyPath());\r\n // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n if (serverCache == null && syncPoint != null) {\r\n serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let events = [];\r\n syncPointTree.children.inorderTraversal((childName, childTree) => {\r\n const childServerCache = serverCache\r\n ? serverCache.getImmediateChild(childName)\r\n : null;\r\n const childWritesCache = writeTreeRefChild(writesCache, childName);\r\n const childOperation = operation.operationForChild(childName);\r\n if (childOperation) {\r\n events = events.concat(syncTreeApplyOperationDescendantsHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n }\r\n });\r\n if (syncPoint) {\r\n events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\r\n }\r\n return events;\r\n}\r\nfunction syncTreeCreateListenerForView_(syncTree, view) {\r\n const query = view.query;\r\n const tag = syncTreeTagForQuery(syncTree, query);\r\n return {\r\n hashFn: () => {\r\n const cache = viewGetServerCache(view) || ChildrenNode.EMPTY_NODE;\r\n return cache.hash();\r\n },\r\n onComplete: (status) => {\r\n if (status === 'ok') {\r\n if (tag) {\r\n return syncTreeApplyTaggedListenComplete(syncTree, query._path, tag);\r\n }\r\n else {\r\n return syncTreeApplyListenComplete(syncTree, query._path);\r\n }\r\n }\r\n else {\r\n // If a listen failed, kill all of the listeners here, not just the one that triggered the error.\r\n // Note that this may need to be scoped to just this listener if we change permissions on filtered children\r\n const error = errorForServerCode(status, query);\r\n return syncTreeRemoveEventRegistration(syncTree, query, \r\n /*eventRegistration*/ null, error);\r\n }\r\n }\r\n };\r\n}\r\n/**\r\n * Return the tag associated with the given query.\r\n */\r\nfunction syncTreeTagForQuery(syncTree, query) {\r\n const queryKey = syncTreeMakeQueryKey_(query);\r\n return syncTree.queryToTagMap.get(queryKey);\r\n}\r\n/**\r\n * Given a query, computes a \"queryKey\" suitable for use in our queryToTagMap_.\r\n */\r\nfunction syncTreeMakeQueryKey_(query) {\r\n return query._path.toString() + '$' + query._queryIdentifier;\r\n}\r\n/**\r\n * Return the query associated with the given tag, if we have one\r\n */\r\nfunction syncTreeQueryKeyForTag_(syncTree, tag) {\r\n return syncTree.tagToQueryMap.get(tag);\r\n}\r\n/**\r\n * Given a queryKey (created by makeQueryKey), parse it back into a path and queryId.\r\n */\r\nfunction syncTreeParseQueryKey_(queryKey) {\r\n const splitIndex = queryKey.indexOf('$');\r\n assert(splitIndex !== -1 && splitIndex < queryKey.length - 1, 'Bad queryKey.');\r\n return {\r\n queryId: queryKey.substr(splitIndex + 1),\r\n path: new Path(queryKey.substr(0, splitIndex))\r\n };\r\n}\r\n/**\r\n * A helper method to apply tagged operations\r\n */\r\nfunction syncTreeApplyTaggedOperation_(syncTree, queryPath, operation) {\r\n const syncPoint = syncTree.syncPointTree_.get(queryPath);\r\n assert(syncPoint, \"Missing sync point for query tag that we're tracking\");\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, queryPath);\r\n return syncPointApplyOperation(syncPoint, operation, writesCache, null);\r\n}\r\n/**\r\n * This collapses multiple unfiltered views into a single view, since we only need a single\r\n * listener for them.\r\n */\r\nfunction syncTreeCollectDistinctViewsForSubTree_(subtree) {\r\n return subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\r\n if (maybeChildSyncPoint && syncPointHasCompleteView(maybeChildSyncPoint)) {\r\n const completeView = syncPointGetCompleteView(maybeChildSyncPoint);\r\n return [completeView];\r\n }\r\n else {\r\n // No complete view here, flatten any deeper listens into an array\r\n let views = [];\r\n if (maybeChildSyncPoint) {\r\n views = syncPointGetQueryViews(maybeChildSyncPoint);\r\n }\r\n each(childMap, (_key, childViews) => {\r\n views = views.concat(childViews);\r\n });\r\n return views;\r\n }\r\n });\r\n}\r\n/**\r\n * Normalizes a query to a query we send the server for listening\r\n *\r\n * @returns The normalized query\r\n */\r\nfunction syncTreeQueryForListening_(query) {\r\n if (query._queryParams.loadsAllData() && !query._queryParams.isDefault()) {\r\n // We treat queries that load all data as default queries\r\n // Cast is necessary because ref() technically returns Firebase which is actually fb.api.Firebase which inherits\r\n // from Query\r\n return new (syncTreeGetReferenceConstructor())(query._repo, query._path);\r\n }\r\n else {\r\n return query;\r\n }\r\n}\r\nfunction syncTreeRemoveTags_(syncTree, queries) {\r\n for (let j = 0; j < queries.length; ++j) {\r\n const removedQuery = queries[j];\r\n if (!removedQuery._queryParams.loadsAllData()) {\r\n // We should have a tag for this\r\n const removedQueryKey = syncTreeMakeQueryKey_(removedQuery);\r\n const removedQueryTag = syncTree.queryToTagMap.get(removedQueryKey);\r\n syncTree.queryToTagMap.delete(removedQueryKey);\r\n syncTree.tagToQueryMap.delete(removedQueryTag);\r\n }\r\n }\r\n}\r\n/**\r\n * Static accessor for query tags.\r\n */\r\nfunction syncTreeGetNextQueryTag_() {\r\n return syncTreeNextQueryTag_++;\r\n}\r\n/**\r\n * For a given new listen, manage the de-duplication of outstanding subscriptions.\r\n *\r\n * @returns This method can return events to support synchronous data sources\r\n */\r\nfunction syncTreeSetupListener_(syncTree, query, view) {\r\n const path = query._path;\r\n const tag = syncTreeTagForQuery(syncTree, query);\r\n const listener = syncTreeCreateListenerForView_(syncTree, view);\r\n const events = syncTree.listenProvider_.startListening(syncTreeQueryForListening_(query), tag, listener.hashFn, listener.onComplete);\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n // The root of this subtree has our query. We're here because we definitely need to send a listen for that, but we\r\n // may need to shadow other listens as well.\r\n if (tag) {\r\n assert(!syncPointHasCompleteView(subtree.value), \"If we're adding a query, it shouldn't be shadowed\");\r\n }\r\n else {\r\n // Shadow everything at or below this location, this is a default listener.\r\n const queriesToStop = subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\r\n if (!pathIsEmpty(relativePath) &&\r\n maybeChildSyncPoint &&\r\n syncPointHasCompleteView(maybeChildSyncPoint)) {\r\n return [syncPointGetCompleteView(maybeChildSyncPoint).query];\r\n }\r\n else {\r\n // No default listener here, flatten any deeper queries into an array\r\n let queries = [];\r\n if (maybeChildSyncPoint) {\r\n queries = queries.concat(syncPointGetQueryViews(maybeChildSyncPoint).map(view => view.query));\r\n }\r\n each(childMap, (_key, childQueries) => {\r\n queries = queries.concat(childQueries);\r\n });\r\n return queries;\r\n }\r\n });\r\n for (let i = 0; i < queriesToStop.length; ++i) {\r\n const queryToStop = queriesToStop[i];\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToStop), syncTreeTagForQuery(syncTree, queryToStop));\r\n }\r\n }\r\n return events;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ExistingValueProvider {\r\n constructor(node_) {\r\n this.node_ = node_;\r\n }\r\n getImmediateChild(childName) {\r\n const child = this.node_.getImmediateChild(childName);\r\n return new ExistingValueProvider(child);\r\n }\r\n node() {\r\n return this.node_;\r\n }\r\n}\r\nclass DeferredValueProvider {\r\n constructor(syncTree, path) {\r\n this.syncTree_ = syncTree;\r\n this.path_ = path;\r\n }\r\n getImmediateChild(childName) {\r\n const childPath = pathChild(this.path_, childName);\r\n return new DeferredValueProvider(this.syncTree_, childPath);\r\n }\r\n node() {\r\n return syncTreeCalcCompleteEventCache(this.syncTree_, this.path_);\r\n }\r\n}\r\n/**\r\n * Generate placeholders for deferred values.\r\n */\r\nconst generateWithValues = function (values) {\r\n values = values || {};\r\n values['timestamp'] = values['timestamp'] || new Date().getTime();\r\n return values;\r\n};\r\n/**\r\n * Value to use when firing local events. When writing server values, fire\r\n * local events with an approximate value, otherwise return value as-is.\r\n */\r\nconst resolveDeferredLeafValue = function (value, existingVal, serverValues) {\r\n if (!value || typeof value !== 'object') {\r\n return value;\r\n }\r\n assert('.sv' in value, 'Unexpected leaf node or priority contents');\r\n if (typeof value['.sv'] === 'string') {\r\n return resolveScalarDeferredValue(value['.sv'], existingVal, serverValues);\r\n }\r\n else if (typeof value['.sv'] === 'object') {\r\n return resolveComplexDeferredValue(value['.sv'], existingVal);\r\n }\r\n else {\r\n assert(false, 'Unexpected server value: ' + JSON.stringify(value, null, 2));\r\n }\r\n};\r\nconst resolveScalarDeferredValue = function (op, existing, serverValues) {\r\n switch (op) {\r\n case 'timestamp':\r\n return serverValues['timestamp'];\r\n default:\r\n assert(false, 'Unexpected server value: ' + op);\r\n }\r\n};\r\nconst resolveComplexDeferredValue = function (op, existing, unused) {\r\n if (!op.hasOwnProperty('increment')) {\r\n assert(false, 'Unexpected server value: ' + JSON.stringify(op, null, 2));\r\n }\r\n const delta = op['increment'];\r\n if (typeof delta !== 'number') {\r\n assert(false, 'Unexpected increment value: ' + delta);\r\n }\r\n const existingNode = existing.node();\r\n assert(existingNode !== null && typeof existingNode !== 'undefined', 'Expected ChildrenNode.EMPTY_NODE for nulls');\r\n // Incrementing a non-number sets the value to the incremented amount\r\n if (!existingNode.isLeafNode()) {\r\n return delta;\r\n }\r\n const leaf = existingNode;\r\n const existingVal = leaf.getValue();\r\n if (typeof existingVal !== 'number') {\r\n return delta;\r\n }\r\n // No need to do over/underflow arithmetic here because JS only handles floats under the covers\r\n return existingVal + delta;\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the tree with the\r\n * specified generated replacement values.\r\n * @param path - path to which write is relative\r\n * @param node - new data written at path\r\n * @param syncTree - current data\r\n */\r\nconst resolveDeferredValueTree = function (path, node, syncTree, serverValues) {\r\n return resolveDeferredValue(node, new DeferredValueProvider(syncTree, path), serverValues);\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the node with the\r\n * specified generated replacement values. If there are no server values in the node,\r\n * it'll be returned as-is.\r\n */\r\nconst resolveDeferredValueSnapshot = function (node, existing, serverValues) {\r\n return resolveDeferredValue(node, new ExistingValueProvider(existing), serverValues);\r\n};\r\nfunction resolveDeferredValue(node, existingVal, serverValues) {\r\n const rawPri = node.getPriority().val();\r\n const priority = resolveDeferredLeafValue(rawPri, existingVal.getImmediateChild('.priority'), serverValues);\r\n let newNode;\r\n if (node.isLeafNode()) {\r\n const leafNode = node;\r\n const value = resolveDeferredLeafValue(leafNode.getValue(), existingVal, serverValues);\r\n if (value !== leafNode.getValue() ||\r\n priority !== leafNode.getPriority().val()) {\r\n return new LeafNode(value, nodeFromJSON(priority));\r\n }\r\n else {\r\n return node;\r\n }\r\n }\r\n else {\r\n const childrenNode = node;\r\n newNode = childrenNode;\r\n if (priority !== childrenNode.getPriority().val()) {\r\n newNode = newNode.updatePriority(new LeafNode(priority));\r\n }\r\n childrenNode.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n const newChildNode = resolveDeferredValue(childNode, existingVal.getImmediateChild(childName), serverValues);\r\n if (newChildNode !== childNode) {\r\n newNode = newNode.updateImmediateChild(childName, newChildNode);\r\n }\r\n });\r\n return newNode;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A light-weight tree, traversable by path. Nodes can have both values and children.\r\n * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty\r\n * children.\r\n */\r\nclass Tree {\r\n /**\r\n * @param name - Optional name of the node.\r\n * @param parent - Optional parent node.\r\n * @param node - Optional node to wrap.\r\n */\r\n constructor(name = '', parent = null, node = { children: {}, childCount: 0 }) {\r\n this.name = name;\r\n this.parent = parent;\r\n this.node = node;\r\n }\r\n}\r\n/**\r\n * Returns a sub-Tree for the given path.\r\n *\r\n * @param pathObj - Path to look up.\r\n * @returns Tree for path.\r\n */\r\nfunction treeSubTree(tree, pathObj) {\r\n // TODO: Require pathObj to be Path?\r\n let path = pathObj instanceof Path ? pathObj : new Path(pathObj);\r\n let child = tree, next = pathGetFront(path);\r\n while (next !== null) {\r\n const childNode = safeGet(child.node.children, next) || {\r\n children: {},\r\n childCount: 0\r\n };\r\n child = new Tree(next, child, childNode);\r\n path = pathPopFront(path);\r\n next = pathGetFront(path);\r\n }\r\n return child;\r\n}\r\n/**\r\n * Returns the data associated with this tree node.\r\n *\r\n * @returns The data or null if no data exists.\r\n */\r\nfunction treeGetValue(tree) {\r\n return tree.node.value;\r\n}\r\n/**\r\n * Sets data to this tree node.\r\n *\r\n * @param value - Value to set.\r\n */\r\nfunction treeSetValue(tree, value) {\r\n tree.node.value = value;\r\n treeUpdateParents(tree);\r\n}\r\n/**\r\n * @returns Whether the tree has any children.\r\n */\r\nfunction treeHasChildren(tree) {\r\n return tree.node.childCount > 0;\r\n}\r\n/**\r\n * @returns Whethe rthe tree is empty (no value or children).\r\n */\r\nfunction treeIsEmpty(tree) {\r\n return treeGetValue(tree) === undefined && !treeHasChildren(tree);\r\n}\r\n/**\r\n * Calls action for each child of this tree node.\r\n *\r\n * @param action - Action to be called for each child.\r\n */\r\nfunction treeForEachChild(tree, action) {\r\n each(tree.node.children, (child, childTree) => {\r\n action(new Tree(child, tree, childTree));\r\n });\r\n}\r\n/**\r\n * Does a depth-first traversal of this node's descendants, calling action for each one.\r\n *\r\n * @param action - Action to be called for each child.\r\n * @param includeSelf - Whether to call action on this node as well. Defaults to\r\n * false.\r\n * @param childrenFirst - Whether to call action on children before calling it on\r\n * parent.\r\n */\r\nfunction treeForEachDescendant(tree, action, includeSelf, childrenFirst) {\r\n if (includeSelf && !childrenFirst) {\r\n action(tree);\r\n }\r\n treeForEachChild(tree, child => {\r\n treeForEachDescendant(child, action, true, childrenFirst);\r\n });\r\n if (includeSelf && childrenFirst) {\r\n action(tree);\r\n }\r\n}\r\n/**\r\n * Calls action on each ancestor node.\r\n *\r\n * @param action - Action to be called on each parent; return\r\n * true to abort.\r\n * @param includeSelf - Whether to call action on this node as well.\r\n * @returns true if the action callback returned true.\r\n */\r\nfunction treeForEachAncestor(tree, action, includeSelf) {\r\n let node = includeSelf ? tree : tree.parent;\r\n while (node !== null) {\r\n if (action(node)) {\r\n return true;\r\n }\r\n node = node.parent;\r\n }\r\n return false;\r\n}\r\n/**\r\n * @returns The path of this tree node, as a Path.\r\n */\r\nfunction treeGetPath(tree) {\r\n return new Path(tree.parent === null\r\n ? tree.name\r\n : treeGetPath(tree.parent) + '/' + tree.name);\r\n}\r\n/**\r\n * Adds or removes this child from its parent based on whether it's empty or not.\r\n */\r\nfunction treeUpdateParents(tree) {\r\n if (tree.parent !== null) {\r\n treeUpdateChild(tree.parent, tree.name, tree);\r\n }\r\n}\r\n/**\r\n * Adds or removes the passed child to this tree node, depending on whether it's empty.\r\n *\r\n * @param childName - The name of the child to update.\r\n * @param child - The child to update.\r\n */\r\nfunction treeUpdateChild(tree, childName, child) {\r\n const childEmpty = treeIsEmpty(child);\r\n const childExists = contains(tree.node.children, childName);\r\n if (childEmpty && childExists) {\r\n delete tree.node.children[childName];\r\n tree.node.childCount--;\r\n treeUpdateParents(tree);\r\n }\r\n else if (!childEmpty && !childExists) {\r\n tree.node.children[childName] = child.node;\r\n tree.node.childCount++;\r\n treeUpdateParents(tree);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * True for invalid Firebase keys\r\n */\r\nconst INVALID_KEY_REGEX_ = /[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * True for invalid Firebase paths.\r\n * Allows '/' in paths.\r\n */\r\nconst INVALID_PATH_REGEX_ = /[\\[\\].#$\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * Maximum number of characters to allow in leaf value\r\n */\r\nconst MAX_LEAF_SIZE_ = 10 * 1024 * 1024;\r\nconst isValidKey = function (key) {\r\n return (typeof key === 'string' && key.length !== 0 && !INVALID_KEY_REGEX_.test(key));\r\n};\r\nconst isValidPathString = function (pathString) {\r\n return (typeof pathString === 'string' &&\r\n pathString.length !== 0 &&\r\n !INVALID_PATH_REGEX_.test(pathString));\r\n};\r\nconst isValidRootPathString = function (pathString) {\r\n if (pathString) {\r\n // Allow '/.info/' at the beginning.\r\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n }\r\n return isValidPathString(pathString);\r\n};\r\nconst isValidPriority = function (priority) {\r\n return (priority === null ||\r\n typeof priority === 'string' ||\r\n (typeof priority === 'number' && !isInvalidJSONNumber(priority)) ||\r\n (priority &&\r\n typeof priority === 'object' &&\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n contains(priority, '.sv')));\r\n};\r\n/**\r\n * Pre-validate a datum passed as an argument to Firebase function.\r\n */\r\nconst validateFirebaseDataArg = function (fnName, value, path, optional) {\r\n if (optional && value === undefined) {\r\n return;\r\n }\r\n validateFirebaseData(errorPrefix(fnName, 'value'), value, path);\r\n};\r\n/**\r\n * Validate a data object client-side before sending to server.\r\n */\r\nconst validateFirebaseData = function (errorPrefix, data, path_) {\r\n const path = path_ instanceof Path ? new ValidationPath(path_, errorPrefix) : path_;\r\n if (data === undefined) {\r\n throw new Error(errorPrefix + 'contains undefined ' + validationPathToErrorString(path));\r\n }\r\n if (typeof data === 'function') {\r\n throw new Error(errorPrefix +\r\n 'contains a function ' +\r\n validationPathToErrorString(path) +\r\n ' with contents = ' +\r\n data.toString());\r\n }\r\n if (isInvalidJSONNumber(data)) {\r\n throw new Error(errorPrefix +\r\n 'contains ' +\r\n data.toString() +\r\n ' ' +\r\n validationPathToErrorString(path));\r\n }\r\n // Check max leaf size, but try to avoid the utf8 conversion if we can.\r\n if (typeof data === 'string' &&\r\n data.length > MAX_LEAF_SIZE_ / 3 &&\r\n stringLength(data) > MAX_LEAF_SIZE_) {\r\n throw new Error(errorPrefix +\r\n 'contains a string greater than ' +\r\n MAX_LEAF_SIZE_ +\r\n ' utf8 bytes ' +\r\n validationPathToErrorString(path) +\r\n \" ('\" +\r\n data.substring(0, 50) +\r\n \"...')\");\r\n }\r\n // TODO = Perf = Consider combining the recursive validation of keys into NodeFromJSON\r\n // to save extra walking of large objects.\r\n if (data && typeof data === 'object') {\r\n let hasDotValue = false;\r\n let hasActualChild = false;\r\n each(data, (key, value) => {\r\n if (key === '.value') {\r\n hasDotValue = true;\r\n }\r\n else if (key !== '.priority' && key !== '.sv') {\r\n hasActualChild = true;\r\n if (!isValidKey(key)) {\r\n throw new Error(errorPrefix +\r\n ' contains an invalid key (' +\r\n key +\r\n ') ' +\r\n validationPathToErrorString(path) +\r\n '. Keys must be non-empty strings ' +\r\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n }\r\n }\r\n validationPathPush(path, key);\r\n validateFirebaseData(errorPrefix, value, path);\r\n validationPathPop(path);\r\n });\r\n if (hasDotValue && hasActualChild) {\r\n throw new Error(errorPrefix +\r\n ' contains \".value\" child ' +\r\n validationPathToErrorString(path) +\r\n ' in addition to actual children.');\r\n }\r\n }\r\n};\r\n/**\r\n * Pre-validate paths passed in the firebase function.\r\n */\r\nconst validateFirebaseMergePaths = function (errorPrefix, mergePaths) {\r\n let i, curPath;\r\n for (i = 0; i < mergePaths.length; i++) {\r\n curPath = mergePaths[i];\r\n const keys = pathSlice(curPath);\r\n for (let j = 0; j < keys.length; j++) {\r\n if (keys[j] === '.priority' && j === keys.length - 1) ;\r\n else if (!isValidKey(keys[j])) {\r\n throw new Error(errorPrefix +\r\n 'contains an invalid key (' +\r\n keys[j] +\r\n ') in path ' +\r\n curPath.toString() +\r\n '. Keys must be non-empty strings ' +\r\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n }\r\n }\r\n }\r\n // Check that update keys are not descendants of each other.\r\n // We rely on the property that sorting guarantees that ancestors come\r\n // right before descendants.\r\n mergePaths.sort(pathCompare);\r\n let prevPath = null;\r\n for (i = 0; i < mergePaths.length; i++) {\r\n curPath = mergePaths[i];\r\n if (prevPath !== null && pathContains(prevPath, curPath)) {\r\n throw new Error(errorPrefix +\r\n 'contains a path ' +\r\n prevPath.toString() +\r\n ' that is ancestor of another path ' +\r\n curPath.toString());\r\n }\r\n prevPath = curPath;\r\n }\r\n};\r\n/**\r\n * pre-validate an object passed as an argument to firebase function (\r\n * must be an object - e.g. for firebase.update()).\r\n */\r\nconst validateFirebaseMergeDataArg = function (fnName, data, path, optional) {\r\n if (optional && data === undefined) {\r\n return;\r\n }\r\n const errorPrefix$1 = errorPrefix(fnName, 'values');\r\n if (!(data && typeof data === 'object') || Array.isArray(data)) {\r\n throw new Error(errorPrefix$1 + ' must be an object containing the children to replace.');\r\n }\r\n const mergePaths = [];\r\n each(data, (key, value) => {\r\n const curPath = new Path(key);\r\n validateFirebaseData(errorPrefix$1, value, pathChild(path, curPath));\r\n if (pathGetBack(curPath) === '.priority') {\r\n if (!isValidPriority(value)) {\r\n throw new Error(errorPrefix$1 +\r\n \"contains an invalid value for '\" +\r\n curPath.toString() +\r\n \"', which must be a valid \" +\r\n 'Firebase priority (a string, finite number, server value, or null).');\r\n }\r\n }\r\n mergePaths.push(curPath);\r\n });\r\n validateFirebaseMergePaths(errorPrefix$1, mergePaths);\r\n};\r\nconst validatePriority = function (fnName, priority, optional) {\r\n if (optional && priority === undefined) {\r\n return;\r\n }\r\n if (isInvalidJSONNumber(priority)) {\r\n throw new Error(errorPrefix(fnName, 'priority') +\r\n 'is ' +\r\n priority.toString() +\r\n ', but must be a valid Firebase priority (a string, finite number, ' +\r\n 'server value, or null).');\r\n }\r\n // Special case to allow importing data with a .sv.\r\n if (!isValidPriority(priority)) {\r\n throw new Error(errorPrefix(fnName, 'priority') +\r\n 'must be a valid Firebase priority ' +\r\n '(a string, finite number, server value, or null).');\r\n }\r\n};\r\nconst validateKey = function (fnName, argumentName, key, optional) {\r\n if (optional && key === undefined) {\r\n return;\r\n }\r\n if (!isValidKey(key)) {\r\n throw new Error(errorPrefix(fnName, argumentName) +\r\n 'was an invalid key = \"' +\r\n key +\r\n '\". Firebase keys must be non-empty strings and ' +\r\n 'can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\").');\r\n }\r\n};\r\n/**\r\n * @internal\r\n */\r\nconst validatePathString = function (fnName, argumentName, pathString, optional) {\r\n if (optional && pathString === undefined) {\r\n return;\r\n }\r\n if (!isValidPathString(pathString)) {\r\n throw new Error(errorPrefix(fnName, argumentName) +\r\n 'was an invalid path = \"' +\r\n pathString +\r\n '\". Paths must be non-empty strings and ' +\r\n 'can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\"');\r\n }\r\n};\r\nconst validateRootPathString = function (fnName, argumentName, pathString, optional) {\r\n if (pathString) {\r\n // Allow '/.info/' at the beginning.\r\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n }\r\n validatePathString(fnName, argumentName, pathString, optional);\r\n};\r\n/**\r\n * @internal\r\n */\r\nconst validateWritablePath = function (fnName, path) {\r\n if (pathGetFront(path) === '.info') {\r\n throw new Error(fnName + \" failed = Can't modify data under /.info/\");\r\n }\r\n};\r\nconst validateUrl = function (fnName, parsedUrl) {\r\n // TODO = Validate server better.\r\n const pathString = parsedUrl.path.toString();\r\n if (!(typeof parsedUrl.repoInfo.host === 'string') ||\r\n parsedUrl.repoInfo.host.length === 0 ||\r\n (!isValidKey(parsedUrl.repoInfo.namespace) &&\r\n parsedUrl.repoInfo.host.split(':')[0] !== 'localhost') ||\r\n (pathString.length !== 0 && !isValidRootPathString(pathString))) {\r\n throw new Error(errorPrefix(fnName, 'url') +\r\n 'must be a valid firebase URL and ' +\r\n 'the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".');\r\n }\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The event queue serves a few purposes:\r\n * 1. It ensures we maintain event order in the face of event callbacks doing operations that result in more\r\n * events being queued.\r\n * 2. raiseQueuedEvents() handles being called reentrantly nicely. That is, if in the course of raising events,\r\n * raiseQueuedEvents() is called again, the \"inner\" call will pick up raising events where the \"outer\" call\r\n * left off, ensuring that the events are still raised synchronously and in order.\r\n * 3. You can use raiseEventsAtPath and raiseEventsForChangedPath to ensure only relevant previously-queued\r\n * events are raised synchronously.\r\n *\r\n * NOTE: This can all go away if/when we move to async events.\r\n *\r\n */\r\nclass EventQueue {\r\n constructor() {\r\n this.eventLists_ = [];\r\n /**\r\n * Tracks recursion depth of raiseQueuedEvents_, for debugging purposes.\r\n */\r\n this.recursionDepth_ = 0;\r\n }\r\n}\r\n/**\r\n * @param eventDataList - The new events to queue.\r\n */\r\nfunction eventQueueQueueEvents(eventQueue, eventDataList) {\r\n // We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.\r\n let currList = null;\r\n for (let i = 0; i < eventDataList.length; i++) {\r\n const data = eventDataList[i];\r\n const path = data.getPath();\r\n if (currList !== null && !pathEquals(path, currList.path)) {\r\n eventQueue.eventLists_.push(currList);\r\n currList = null;\r\n }\r\n if (currList === null) {\r\n currList = { events: [], path };\r\n }\r\n currList.events.push(data);\r\n }\r\n if (currList) {\r\n eventQueue.eventLists_.push(currList);\r\n }\r\n}\r\n/**\r\n * Queues the specified events and synchronously raises all events (including previously queued ones)\r\n * for the specified path.\r\n *\r\n * It is assumed that the new events are all for the specified path.\r\n *\r\n * @param path - The path to raise events for.\r\n * @param eventDataList - The new events to raise.\r\n */\r\nfunction eventQueueRaiseEventsAtPath(eventQueue, path, eventDataList) {\r\n eventQueueQueueEvents(eventQueue, eventDataList);\r\n eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathEquals(eventPath, path));\r\n}\r\n/**\r\n * Queues the specified events and synchronously raises all events (including previously queued ones) for\r\n * locations related to the specified change path (i.e. all ancestors and descendants).\r\n *\r\n * It is assumed that the new events are all related (ancestor or descendant) to the specified path.\r\n *\r\n * @param changedPath - The path to raise events for.\r\n * @param eventDataList - The events to raise\r\n */\r\nfunction eventQueueRaiseEventsForChangedPath(eventQueue, changedPath, eventDataList) {\r\n eventQueueQueueEvents(eventQueue, eventDataList);\r\n eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathContains(eventPath, changedPath) ||\r\n pathContains(changedPath, eventPath));\r\n}\r\nfunction eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, predicate) {\r\n eventQueue.recursionDepth_++;\r\n let sentAll = true;\r\n for (let i = 0; i < eventQueue.eventLists_.length; i++) {\r\n const eventList = eventQueue.eventLists_[i];\r\n if (eventList) {\r\n const eventPath = eventList.path;\r\n if (predicate(eventPath)) {\r\n eventListRaise(eventQueue.eventLists_[i]);\r\n eventQueue.eventLists_[i] = null;\r\n }\r\n else {\r\n sentAll = false;\r\n }\r\n }\r\n }\r\n if (sentAll) {\r\n eventQueue.eventLists_ = [];\r\n }\r\n eventQueue.recursionDepth_--;\r\n}\r\n/**\r\n * Iterates through the list and raises each event\r\n */\r\nfunction eventListRaise(eventList) {\r\n for (let i = 0; i < eventList.events.length; i++) {\r\n const eventData = eventList.events[i];\r\n if (eventData !== null) {\r\n eventList.events[i] = null;\r\n const eventFn = eventData.getEventRunner();\r\n if (logger) {\r\n log('event: ' + eventData.toString());\r\n }\r\n exceptionGuard(eventFn);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst INTERRUPT_REASON = 'repo_interrupt';\r\n/**\r\n * If a transaction does not succeed after 25 retries, we abort it. Among other\r\n * things this ensure that if there's ever a bug causing a mismatch between\r\n * client / server hashes for some data, we won't retry indefinitely.\r\n */\r\nconst MAX_TRANSACTION_RETRIES = 25;\r\n/**\r\n * A connection to a single data repository.\r\n */\r\nclass Repo {\r\n constructor(repoInfo_, forceRestClient_, authTokenProvider_, appCheckProvider_) {\r\n this.repoInfo_ = repoInfo_;\r\n this.forceRestClient_ = forceRestClient_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckProvider_ = appCheckProvider_;\r\n this.dataUpdateCount = 0;\r\n this.statsListener_ = null;\r\n this.eventQueue_ = new EventQueue();\r\n this.nextWriteId_ = 1;\r\n this.interceptServerDataCallback_ = null;\r\n /** A list of data pieces and paths to be set when this client disconnects. */\r\n this.onDisconnect_ = newSparseSnapshotTree();\r\n /** Stores queues of outstanding transactions for Firebase locations. */\r\n this.transactionQueueTree_ = new Tree();\r\n // TODO: This should be @private but it's used by test_access.js and internal.js\r\n this.persistentConnection_ = null;\r\n // This key is intentionally not updated if RepoInfo is later changed or replaced\r\n this.key = this.repoInfo_.toURLString();\r\n }\r\n /**\r\n * @returns The URL corresponding to the root of this Firebase.\r\n */\r\n toString() {\r\n return ((this.repoInfo_.secure ? 'https://' : 'http://') + this.repoInfo_.host);\r\n }\r\n}\r\nfunction repoStart(repo, appId, authOverride) {\r\n repo.stats_ = statsManagerGetCollection(repo.repoInfo_);\r\n if (repo.forceRestClient_ || beingCrawled()) {\r\n repo.server_ = new ReadonlyRestClient(repo.repoInfo_, (pathString, data, isMerge, tag) => {\r\n repoOnDataUpdate(repo, pathString, data, isMerge, tag);\r\n }, repo.authTokenProvider_, repo.appCheckProvider_);\r\n // Minor hack: Fire onConnect immediately, since there's no actual connection.\r\n setTimeout(() => repoOnConnectStatus(repo, /* connectStatus= */ true), 0);\r\n }\r\n else {\r\n // Validate authOverride\r\n if (typeof authOverride !== 'undefined' && authOverride !== null) {\r\n if (typeof authOverride !== 'object') {\r\n throw new Error('Only objects are supported for option databaseAuthVariableOverride');\r\n }\r\n try {\r\n stringify(authOverride);\r\n }\r\n catch (e) {\r\n throw new Error('Invalid authOverride provided: ' + e);\r\n }\r\n }\r\n repo.persistentConnection_ = new PersistentConnection(repo.repoInfo_, appId, (pathString, data, isMerge, tag) => {\r\n repoOnDataUpdate(repo, pathString, data, isMerge, tag);\r\n }, (connectStatus) => {\r\n repoOnConnectStatus(repo, connectStatus);\r\n }, (updates) => {\r\n repoOnServerInfoUpdate(repo, updates);\r\n }, repo.authTokenProvider_, repo.appCheckProvider_, authOverride);\r\n repo.server_ = repo.persistentConnection_;\r\n }\r\n repo.authTokenProvider_.addTokenChangeListener(token => {\r\n repo.server_.refreshAuthToken(token);\r\n });\r\n repo.appCheckProvider_.addTokenChangeListener(result => {\r\n repo.server_.refreshAppCheckToken(result.token);\r\n });\r\n // In the case of multiple Repos for the same repoInfo (i.e. there are multiple Firebase.Contexts being used),\r\n // we only want to create one StatsReporter. As such, we'll report stats over the first Repo created.\r\n repo.statsReporter_ = statsManagerGetOrCreateReporter(repo.repoInfo_, () => new StatsReporter(repo.stats_, repo.server_));\r\n // Used for .info.\r\n repo.infoData_ = new SnapshotHolder();\r\n repo.infoSyncTree_ = new SyncTree({\r\n startListening: (query, tag, currentHashFn, onComplete) => {\r\n let infoEvents = [];\r\n const node = repo.infoData_.getNode(query._path);\r\n // This is possibly a hack, but we have different semantics for .info endpoints. We don't raise null events\r\n // on initial data...\r\n if (!node.isEmpty()) {\r\n infoEvents = syncTreeApplyServerOverwrite(repo.infoSyncTree_, query._path, node);\r\n setTimeout(() => {\r\n onComplete('ok');\r\n }, 0);\r\n }\r\n return infoEvents;\r\n },\r\n stopListening: () => { }\r\n });\r\n repoUpdateInfo(repo, 'connected', false);\r\n repo.serverSyncTree_ = new SyncTree({\r\n startListening: (query, tag, currentHashFn, onComplete) => {\r\n repo.server_.listen(query, currentHashFn, tag, (status, data) => {\r\n const events = onComplete(status, data);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);\r\n });\r\n // No synchronous events for network-backed sync trees\r\n return [];\r\n },\r\n stopListening: (query, tag) => {\r\n repo.server_.unlisten(query, tag);\r\n }\r\n });\r\n}\r\n/**\r\n * @returns The time in milliseconds, taking the server offset into account if we have one.\r\n */\r\nfunction repoServerTime(repo) {\r\n const offsetNode = repo.infoData_.getNode(new Path('.info/serverTimeOffset'));\r\n const offset = offsetNode.val() || 0;\r\n return new Date().getTime() + offset;\r\n}\r\n/**\r\n * Generate ServerValues using some variables from the repo object.\r\n */\r\nfunction repoGenerateServerValues(repo) {\r\n return generateWithValues({\r\n timestamp: repoServerTime(repo)\r\n });\r\n}\r\n/**\r\n * Called by realtime when we get new messages from the server.\r\n */\r\nfunction repoOnDataUpdate(repo, pathString, data, isMerge, tag) {\r\n // For testing.\r\n repo.dataUpdateCount++;\r\n const path = new Path(pathString);\r\n data = repo.interceptServerDataCallback_\r\n ? repo.interceptServerDataCallback_(pathString, data)\r\n : data;\r\n let events = [];\r\n if (tag) {\r\n if (isMerge) {\r\n const taggedChildren = map(data, (raw) => nodeFromJSON(raw));\r\n events = syncTreeApplyTaggedQueryMerge(repo.serverSyncTree_, path, taggedChildren, tag);\r\n }\r\n else {\r\n const taggedSnap = nodeFromJSON(data);\r\n events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, path, taggedSnap, tag);\r\n }\r\n }\r\n else if (isMerge) {\r\n const changedChildren = map(data, (raw) => nodeFromJSON(raw));\r\n events = syncTreeApplyServerMerge(repo.serverSyncTree_, path, changedChildren);\r\n }\r\n else {\r\n const snap = nodeFromJSON(data);\r\n events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap);\r\n }\r\n let affectedPath = path;\r\n if (events.length > 0) {\r\n // Since we have a listener outstanding for each transaction, receiving any events\r\n // is a proxy for some change having occurred.\r\n affectedPath = repoRerunTransactions(repo, path);\r\n }\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, events);\r\n}\r\nfunction repoOnConnectStatus(repo, connectStatus) {\r\n repoUpdateInfo(repo, 'connected', connectStatus);\r\n if (connectStatus === false) {\r\n repoRunOnDisconnectEvents(repo);\r\n }\r\n}\r\nfunction repoOnServerInfoUpdate(repo, updates) {\r\n each(updates, (key, value) => {\r\n repoUpdateInfo(repo, key, value);\r\n });\r\n}\r\nfunction repoUpdateInfo(repo, pathString, value) {\r\n const path = new Path('/.info/' + pathString);\r\n const newNode = nodeFromJSON(value);\r\n repo.infoData_.updateSnapshot(path, newNode);\r\n const events = syncTreeApplyServerOverwrite(repo.infoSyncTree_, path, newNode);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n}\r\nfunction repoGetNextWriteId(repo) {\r\n return repo.nextWriteId_++;\r\n}\r\n/**\r\n * The purpose of `getValue` is to return the latest known value\r\n * satisfying `query`.\r\n *\r\n * This method will first check for in-memory cached values\r\n * belonging to active listeners. If they are found, such values\r\n * are considered to be the most up-to-date.\r\n *\r\n * If the client is not connected, this method will wait until the\r\n * repo has established a connection and then request the value for `query`.\r\n * If the client is not able to retrieve the query result for another reason,\r\n * it reports an error.\r\n *\r\n * @param query - The query to surface a value for.\r\n */\r\nfunction repoGetValue(repo, query, eventRegistration) {\r\n // Only active queries are cached. There is no persisted cache.\r\n const cached = syncTreeGetServerValue(repo.serverSyncTree_, query);\r\n if (cached != null) {\r\n return Promise.resolve(cached);\r\n }\r\n return repo.server_.get(query).then(payload => {\r\n const node = nodeFromJSON(payload).withIndex(query._queryParams.getIndex());\r\n /**\r\n * Below we simulate the actions of an `onlyOnce` `onValue()` event where:\r\n * Add an event registration,\r\n * Update data at the path,\r\n * Raise any events,\r\n * Cleanup the SyncTree\r\n */\r\n syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration, true);\r\n let events;\r\n if (query._queryParams.loadsAllData()) {\r\n events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, query._path, node);\r\n }\r\n else {\r\n const tag = syncTreeTagForQuery(repo.serverSyncTree_, query);\r\n events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, query._path, node, tag);\r\n }\r\n /*\r\n * We need to raise events in the scenario where `get()` is called at a parent path, and\r\n * while the `get()` is pending, `onValue` is called at a child location. While get() is waiting\r\n * for the data, `onValue` will register a new event. Then, get() will come back, and update the syncTree\r\n * and its corresponding serverCache, including the child location where `onValue` is called. Then,\r\n * `onValue` will receive the event from the server, but look at the syncTree and see that the data received\r\n * from the server is already at the SyncPoint, and so the `onValue` callback will never get fired.\r\n * Calling `eventQueueRaiseEventsForChangedPath()` is the correct way to propagate the events and\r\n * ensure the corresponding child events will get fired.\r\n */\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);\r\n syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration, null, true);\r\n return node;\r\n }, err => {\r\n repoLog(repo, 'get for query ' + stringify(query) + ' failed: ' + err);\r\n return Promise.reject(new Error(err));\r\n });\r\n}\r\nfunction repoSetWithPriority(repo, path, newVal, newPriority, onComplete) {\r\n repoLog(repo, 'set', {\r\n path: path.toString(),\r\n value: newVal,\r\n priority: newPriority\r\n });\r\n // TODO: Optimize this behavior to either (a) store flag to skip resolving where possible and / or\r\n // (b) store unresolved paths on JSON parse\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeUnresolved = nodeFromJSON(newVal, newPriority);\r\n const existing = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path);\r\n const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, existing, serverValues);\r\n const writeId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, writeId, true);\r\n eventQueueQueueEvents(repo.eventQueue_, events);\r\n repo.server_.put(path.toString(), newNodeUnresolved.val(/*export=*/ true), (status, errorReason) => {\r\n const success = status === 'ok';\r\n if (!success) {\r\n warn('set at ' + path + ' failed: ' + status);\r\n }\r\n const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, clearEvents);\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n const affectedPath = repoAbortTransactions(repo, path);\r\n repoRerunTransactions(repo, affectedPath);\r\n // We queued the events above, so just flush the queue here\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, []);\r\n}\r\nfunction repoUpdate(repo, path, childrenToMerge, onComplete) {\r\n repoLog(repo, 'update', { path: path.toString(), value: childrenToMerge });\r\n // Start with our existing data and merge each child into it.\r\n let empty = true;\r\n const serverValues = repoGenerateServerValues(repo);\r\n const changedChildren = {};\r\n each(childrenToMerge, (changedKey, changedValue) => {\r\n empty = false;\r\n changedChildren[changedKey] = resolveDeferredValueTree(pathChild(path, changedKey), nodeFromJSON(changedValue), repo.serverSyncTree_, serverValues);\r\n });\r\n if (!empty) {\r\n const writeId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserMerge(repo.serverSyncTree_, path, changedChildren, writeId);\r\n eventQueueQueueEvents(repo.eventQueue_, events);\r\n repo.server_.merge(path.toString(), childrenToMerge, (status, errorReason) => {\r\n const success = status === 'ok';\r\n if (!success) {\r\n warn('update at ' + path + ' failed: ' + status);\r\n }\r\n const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\r\n const affectedPath = clearEvents.length > 0 ? repoRerunTransactions(repo, path) : path;\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, clearEvents);\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n each(childrenToMerge, (changedPath) => {\r\n const affectedPath = repoAbortTransactions(repo, pathChild(path, changedPath));\r\n repoRerunTransactions(repo, affectedPath);\r\n });\r\n // We queued the events above, so just flush the queue here\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, []);\r\n }\r\n else {\r\n log(\"update() called with empty data. Don't do anything.\");\r\n repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\r\n }\r\n}\r\n/**\r\n * Applies all of the changes stored up in the onDisconnect_ tree.\r\n */\r\nfunction repoRunOnDisconnectEvents(repo) {\r\n repoLog(repo, 'onDisconnectEvents');\r\n const serverValues = repoGenerateServerValues(repo);\r\n const resolvedOnDisconnectTree = newSparseSnapshotTree();\r\n sparseSnapshotTreeForEachTree(repo.onDisconnect_, newEmptyPath(), (path, node) => {\r\n const resolved = resolveDeferredValueTree(path, node, repo.serverSyncTree_, serverValues);\r\n sparseSnapshotTreeRemember(resolvedOnDisconnectTree, path, resolved);\r\n });\r\n let events = [];\r\n sparseSnapshotTreeForEachTree(resolvedOnDisconnectTree, newEmptyPath(), (path, snap) => {\r\n events = events.concat(syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap));\r\n const affectedPath = repoAbortTransactions(repo, path);\r\n repoRerunTransactions(repo, affectedPath);\r\n });\r\n repo.onDisconnect_ = newSparseSnapshotTree();\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, newEmptyPath(), events);\r\n}\r\nfunction repoOnDisconnectCancel(repo, path, onComplete) {\r\n repo.server_.onDisconnectCancel(path.toString(), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeForget(repo.onDisconnect_, path);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectSet(repo, path, value, onComplete) {\r\n const newNode = nodeFromJSON(value);\r\n repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectSetWithPriority(repo, path, value, priority, onComplete) {\r\n const newNode = nodeFromJSON(value, priority);\r\n repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectUpdate(repo, path, childrenToMerge, onComplete) {\r\n if (isEmpty(childrenToMerge)) {\r\n log(\"onDisconnect().update() called with empty data. Don't do anything.\");\r\n repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\r\n return;\r\n }\r\n repo.server_.onDisconnectMerge(path.toString(), childrenToMerge, (status, errorReason) => {\r\n if (status === 'ok') {\r\n each(childrenToMerge, (childName, childNode) => {\r\n const newChildNode = nodeFromJSON(childNode);\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, pathChild(path, childName), newChildNode);\r\n });\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoAddEventCallbackForQuery(repo, query, eventRegistration) {\r\n let events;\r\n if (pathGetFront(query._path) === '.info') {\r\n events = syncTreeAddEventRegistration(repo.infoSyncTree_, query, eventRegistration);\r\n }\r\n else {\r\n events = syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration);\r\n }\r\n eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\r\n}\r\nfunction repoRemoveEventCallbackForQuery(repo, query, eventRegistration) {\r\n // These are guaranteed not to raise events, since we're not passing in a cancelError. However, we can future-proof\r\n // a little bit by handling the return values anyways.\r\n let events;\r\n if (pathGetFront(query._path) === '.info') {\r\n events = syncTreeRemoveEventRegistration(repo.infoSyncTree_, query, eventRegistration);\r\n }\r\n else {\r\n events = syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration);\r\n }\r\n eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\r\n}\r\nfunction repoInterrupt(repo) {\r\n if (repo.persistentConnection_) {\r\n repo.persistentConnection_.interrupt(INTERRUPT_REASON);\r\n }\r\n}\r\nfunction repoResume(repo) {\r\n if (repo.persistentConnection_) {\r\n repo.persistentConnection_.resume(INTERRUPT_REASON);\r\n }\r\n}\r\nfunction repoLog(repo, ...varArgs) {\r\n let prefix = '';\r\n if (repo.persistentConnection_) {\r\n prefix = repo.persistentConnection_.id + ':';\r\n }\r\n log(prefix, ...varArgs);\r\n}\r\nfunction repoCallOnCompleteCallback(repo, callback, status, errorReason) {\r\n if (callback) {\r\n exceptionGuard(() => {\r\n if (status === 'ok') {\r\n callback(null);\r\n }\r\n else {\r\n const code = (status || 'error').toUpperCase();\r\n let message = code;\r\n if (errorReason) {\r\n message += ': ' + errorReason;\r\n }\r\n const error = new Error(message);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error.code = code;\r\n callback(error);\r\n }\r\n });\r\n }\r\n}\r\n/**\r\n * Creates a new transaction, adds it to the transactions we're tracking, and\r\n * sends it to the server if possible.\r\n *\r\n * @param path - Path at which to do transaction.\r\n * @param transactionUpdate - Update callback.\r\n * @param onComplete - Completion callback.\r\n * @param unwatcher - Function that will be called when the transaction no longer\r\n * need data updates for `path`.\r\n * @param applyLocally - Whether or not to make intermediate results visible\r\n */\r\nfunction repoStartTransaction(repo, path, transactionUpdate, onComplete, unwatcher, applyLocally) {\r\n repoLog(repo, 'transaction on ' + path);\r\n // Initialize transaction.\r\n const transaction = {\r\n path,\r\n update: transactionUpdate,\r\n onComplete,\r\n // One of TransactionStatus enums.\r\n status: null,\r\n // Used when combining transactions at different locations to figure out\r\n // which one goes first.\r\n order: LUIDGenerator(),\r\n // Whether to raise local events for this transaction.\r\n applyLocally,\r\n // Count of how many times we've retried the transaction.\r\n retryCount: 0,\r\n // Function to call to clean up our .on() listener.\r\n unwatcher,\r\n // Stores why a transaction was aborted.\r\n abortReason: null,\r\n currentWriteId: null,\r\n currentInputSnapshot: null,\r\n currentOutputSnapshotRaw: null,\r\n currentOutputSnapshotResolved: null\r\n };\r\n // Run transaction initially.\r\n const currentState = repoGetLatestState(repo, path, undefined);\r\n transaction.currentInputSnapshot = currentState;\r\n const newVal = transaction.update(currentState.val());\r\n if (newVal === undefined) {\r\n // Abort transaction.\r\n transaction.unwatcher();\r\n transaction.currentOutputSnapshotRaw = null;\r\n transaction.currentOutputSnapshotResolved = null;\r\n if (transaction.onComplete) {\r\n transaction.onComplete(null, false, transaction.currentInputSnapshot);\r\n }\r\n }\r\n else {\r\n validateFirebaseData('transaction failed: Data returned ', newVal, transaction.path);\r\n // Mark as run and add to our queue.\r\n transaction.status = 0 /* TransactionStatus.RUN */;\r\n const queueNode = treeSubTree(repo.transactionQueueTree_, path);\r\n const nodeQueue = treeGetValue(queueNode) || [];\r\n nodeQueue.push(transaction);\r\n treeSetValue(queueNode, nodeQueue);\r\n // Update visibleData and raise events\r\n // Note: We intentionally raise events after updating all of our\r\n // transaction state, since the user could start new transactions from the\r\n // event callbacks.\r\n let priorityForNode;\r\n if (typeof newVal === 'object' &&\r\n newVal !== null &&\r\n contains(newVal, '.priority')) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n priorityForNode = safeGet(newVal, '.priority');\r\n assert(isValidPriority(priorityForNode), 'Invalid priority returned by transaction. ' +\r\n 'Priority must be a valid string, finite number, server value, or null.');\r\n }\r\n else {\r\n const currentNode = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path) ||\r\n ChildrenNode.EMPTY_NODE;\r\n priorityForNode = currentNode.getPriority().val();\r\n }\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeUnresolved = nodeFromJSON(newVal, priorityForNode);\r\n const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, currentState, serverValues);\r\n transaction.currentOutputSnapshotRaw = newNodeUnresolved;\r\n transaction.currentOutputSnapshotResolved = newNode;\r\n transaction.currentWriteId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, transaction.currentWriteId, transaction.applyLocally);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n }\r\n}\r\n/**\r\n * @param excludeSets - A specific set to exclude\r\n */\r\nfunction repoGetLatestState(repo, path, excludeSets) {\r\n return (syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path, excludeSets) ||\r\n ChildrenNode.EMPTY_NODE);\r\n}\r\n/**\r\n * Sends any already-run transactions that aren't waiting for outstanding\r\n * transactions to complete.\r\n *\r\n * Externally it's called with no arguments, but it calls itself recursively\r\n * with a particular transactionQueueTree node to recurse through the tree.\r\n *\r\n * @param node - transactionQueueTree node to start at.\r\n */\r\nfunction repoSendReadyTransactions(repo, node = repo.transactionQueueTree_) {\r\n // Before recursing, make sure any completed transactions are removed.\r\n if (!node) {\r\n repoPruneCompletedTransactionsBelowNode(repo, node);\r\n }\r\n if (treeGetValue(node)) {\r\n const queue = repoBuildTransactionQueue(repo, node);\r\n assert(queue.length > 0, 'Sending zero length transaction queue');\r\n const allRun = queue.every((transaction) => transaction.status === 0 /* TransactionStatus.RUN */);\r\n // If they're all run (and not sent), we can send them. Else, we must wait.\r\n if (allRun) {\r\n repoSendTransactionQueue(repo, treeGetPath(node), queue);\r\n }\r\n }\r\n else if (treeHasChildren(node)) {\r\n treeForEachChild(node, childNode => {\r\n repoSendReadyTransactions(repo, childNode);\r\n });\r\n }\r\n}\r\n/**\r\n * Given a list of run transactions, send them to the server and then handle\r\n * the result (success or failure).\r\n *\r\n * @param path - The location of the queue.\r\n * @param queue - Queue of transactions under the specified location.\r\n */\r\nfunction repoSendTransactionQueue(repo, path, queue) {\r\n // Mark transactions as sent and increment retry count!\r\n const setsToIgnore = queue.map(txn => {\r\n return txn.currentWriteId;\r\n });\r\n const latestState = repoGetLatestState(repo, path, setsToIgnore);\r\n let snapToSend = latestState;\r\n const latestHash = latestState.hash();\r\n for (let i = 0; i < queue.length; i++) {\r\n const txn = queue[i];\r\n assert(txn.status === 0 /* TransactionStatus.RUN */, 'tryToSendTransactionQueue_: items in queue should all be run.');\r\n txn.status = 1 /* TransactionStatus.SENT */;\r\n txn.retryCount++;\r\n const relativePath = newRelativePath(path, txn.path);\r\n // If we've gotten to this point, the output snapshot must be defined.\r\n snapToSend = snapToSend.updateChild(relativePath /** @type {!Node} */, txn.currentOutputSnapshotRaw);\r\n }\r\n const dataToSend = snapToSend.val(true);\r\n const pathToSend = path;\r\n // Send the put.\r\n repo.server_.put(pathToSend.toString(), dataToSend, (status) => {\r\n repoLog(repo, 'transaction put response', {\r\n path: pathToSend.toString(),\r\n status\r\n });\r\n let events = [];\r\n if (status === 'ok') {\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more\r\n // transactions or sets.\r\n const callbacks = [];\r\n for (let i = 0; i < queue.length; i++) {\r\n queue[i].status = 2 /* TransactionStatus.COMPLETED */;\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId));\r\n if (queue[i].onComplete) {\r\n // We never unset the output snapshot, and given that this\r\n // transaction is complete, it should be set\r\n callbacks.push(() => queue[i].onComplete(null, true, queue[i].currentOutputSnapshotResolved));\r\n }\r\n queue[i].unwatcher();\r\n }\r\n // Now remove the completed transactions.\r\n repoPruneCompletedTransactionsBelowNode(repo, treeSubTree(repo.transactionQueueTree_, path));\r\n // There may be pending transactions that we can now send.\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n // Finally, trigger onComplete callbacks.\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n }\r\n else {\r\n // transactions are no longer sent. Update their status appropriately.\r\n if (status === 'datastale') {\r\n for (let i = 0; i < queue.length; i++) {\r\n if (queue[i].status === 3 /* TransactionStatus.SENT_NEEDS_ABORT */) {\r\n queue[i].status = 4 /* TransactionStatus.NEEDS_ABORT */;\r\n }\r\n else {\r\n queue[i].status = 0 /* TransactionStatus.RUN */;\r\n }\r\n }\r\n }\r\n else {\r\n warn('transaction at ' + pathToSend.toString() + ' failed: ' + status);\r\n for (let i = 0; i < queue.length; i++) {\r\n queue[i].status = 4 /* TransactionStatus.NEEDS_ABORT */;\r\n queue[i].abortReason = status;\r\n }\r\n }\r\n repoRerunTransactions(repo, path);\r\n }\r\n }, latestHash);\r\n}\r\n/**\r\n * Finds all transactions dependent on the data at changedPath and reruns them.\r\n *\r\n * Should be called any time cached data changes.\r\n *\r\n * Return the highest path that was affected by rerunning transactions. This\r\n * is the path at which events need to be raised for.\r\n *\r\n * @param changedPath - The path in mergedData that changed.\r\n * @returns The rootmost path that was affected by rerunning transactions.\r\n */\r\nfunction repoRerunTransactions(repo, changedPath) {\r\n const rootMostTransactionNode = repoGetAncestorTransactionNode(repo, changedPath);\r\n const path = treeGetPath(rootMostTransactionNode);\r\n const queue = repoBuildTransactionQueue(repo, rootMostTransactionNode);\r\n repoRerunTransactionQueue(repo, queue, path);\r\n return path;\r\n}\r\n/**\r\n * Does all the work of rerunning transactions (as well as cleans up aborted\r\n * transactions and whatnot).\r\n *\r\n * @param queue - The queue of transactions to run.\r\n * @param path - The path the queue is for.\r\n */\r\nfunction repoRerunTransactionQueue(repo, queue, path) {\r\n if (queue.length === 0) {\r\n return; // Nothing to do!\r\n }\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more transactions or\r\n // sets.\r\n const callbacks = [];\r\n let events = [];\r\n // Ignore all of the sets we're going to re-run.\r\n const txnsToRerun = queue.filter(q => {\r\n return q.status === 0 /* TransactionStatus.RUN */;\r\n });\r\n const setsToIgnore = txnsToRerun.map(q => {\r\n return q.currentWriteId;\r\n });\r\n for (let i = 0; i < queue.length; i++) {\r\n const transaction = queue[i];\r\n const relativePath = newRelativePath(path, transaction.path);\r\n let abortTransaction = false, abortReason;\r\n assert(relativePath !== null, 'rerunTransactionsUnderNode_: relativePath should not be null.');\r\n if (transaction.status === 4 /* TransactionStatus.NEEDS_ABORT */) {\r\n abortTransaction = true;\r\n abortReason = transaction.abortReason;\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n else if (transaction.status === 0 /* TransactionStatus.RUN */) {\r\n if (transaction.retryCount >= MAX_TRANSACTION_RETRIES) {\r\n abortTransaction = true;\r\n abortReason = 'maxretry';\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n else {\r\n // This code reruns a transaction\r\n const currentNode = repoGetLatestState(repo, transaction.path, setsToIgnore);\r\n transaction.currentInputSnapshot = currentNode;\r\n const newData = queue[i].update(currentNode.val());\r\n if (newData !== undefined) {\r\n validateFirebaseData('transaction failed: Data returned ', newData, transaction.path);\r\n let newDataNode = nodeFromJSON(newData);\r\n const hasExplicitPriority = typeof newData === 'object' &&\r\n newData != null &&\r\n contains(newData, '.priority');\r\n if (!hasExplicitPriority) {\r\n // Keep the old priority if there wasn't a priority explicitly specified.\r\n newDataNode = newDataNode.updatePriority(currentNode.getPriority());\r\n }\r\n const oldWriteId = transaction.currentWriteId;\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeResolved = resolveDeferredValueSnapshot(newDataNode, currentNode, serverValues);\r\n transaction.currentOutputSnapshotRaw = newDataNode;\r\n transaction.currentOutputSnapshotResolved = newNodeResolved;\r\n transaction.currentWriteId = repoGetNextWriteId(repo);\r\n // Mutates setsToIgnore in place\r\n setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);\r\n events = events.concat(syncTreeApplyUserOverwrite(repo.serverSyncTree_, transaction.path, newNodeResolved, transaction.currentWriteId, transaction.applyLocally));\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, oldWriteId, true));\r\n }\r\n else {\r\n abortTransaction = true;\r\n abortReason = 'nodata';\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n }\r\n }\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n events = [];\r\n if (abortTransaction) {\r\n // Abort.\r\n queue[i].status = 2 /* TransactionStatus.COMPLETED */;\r\n // Removing a listener can trigger pruning which can muck with\r\n // mergedData/visibleData (as it prunes data). So defer the unwatcher\r\n // until we're done.\r\n (function (unwatcher) {\r\n setTimeout(unwatcher, Math.floor(0));\r\n })(queue[i].unwatcher);\r\n if (queue[i].onComplete) {\r\n if (abortReason === 'nodata') {\r\n callbacks.push(() => queue[i].onComplete(null, false, queue[i].currentInputSnapshot));\r\n }\r\n else {\r\n callbacks.push(() => queue[i].onComplete(new Error(abortReason), false, null));\r\n }\r\n }\r\n }\r\n }\r\n // Clean up completed transactions.\r\n repoPruneCompletedTransactionsBelowNode(repo, repo.transactionQueueTree_);\r\n // Now fire callbacks, now that we're in a good, known state.\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n // Try to send the transaction result to the server.\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n}\r\n/**\r\n * Returns the rootmost ancestor node of the specified path that has a pending\r\n * transaction on it, or just returns the node for the given path if there are\r\n * no pending transactions on any ancestor.\r\n *\r\n * @param path - The location to start at.\r\n * @returns The rootmost node with a transaction.\r\n */\r\nfunction repoGetAncestorTransactionNode(repo, path) {\r\n let front;\r\n // Start at the root and walk deeper into the tree towards path until we\r\n // find a node with pending transactions.\r\n let transactionNode = repo.transactionQueueTree_;\r\n front = pathGetFront(path);\r\n while (front !== null && treeGetValue(transactionNode) === undefined) {\r\n transactionNode = treeSubTree(transactionNode, front);\r\n path = pathPopFront(path);\r\n front = pathGetFront(path);\r\n }\r\n return transactionNode;\r\n}\r\n/**\r\n * Builds the queue of all transactions at or below the specified\r\n * transactionNode.\r\n *\r\n * @param transactionNode\r\n * @returns The generated queue.\r\n */\r\nfunction repoBuildTransactionQueue(repo, transactionNode) {\r\n // Walk any child transaction queues and aggregate them into a single queue.\r\n const transactionQueue = [];\r\n repoAggregateTransactionQueuesForNode(repo, transactionNode, transactionQueue);\r\n // Sort them by the order the transactions were created.\r\n transactionQueue.sort((a, b) => a.order - b.order);\r\n return transactionQueue;\r\n}\r\nfunction repoAggregateTransactionQueuesForNode(repo, node, queue) {\r\n const nodeQueue = treeGetValue(node);\r\n if (nodeQueue) {\r\n for (let i = 0; i < nodeQueue.length; i++) {\r\n queue.push(nodeQueue[i]);\r\n }\r\n }\r\n treeForEachChild(node, child => {\r\n repoAggregateTransactionQueuesForNode(repo, child, queue);\r\n });\r\n}\r\n/**\r\n * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.\r\n */\r\nfunction repoPruneCompletedTransactionsBelowNode(repo, node) {\r\n const queue = treeGetValue(node);\r\n if (queue) {\r\n let to = 0;\r\n for (let from = 0; from < queue.length; from++) {\r\n if (queue[from].status !== 2 /* TransactionStatus.COMPLETED */) {\r\n queue[to] = queue[from];\r\n to++;\r\n }\r\n }\r\n queue.length = to;\r\n treeSetValue(node, queue.length > 0 ? queue : undefined);\r\n }\r\n treeForEachChild(node, childNode => {\r\n repoPruneCompletedTransactionsBelowNode(repo, childNode);\r\n });\r\n}\r\n/**\r\n * Aborts all transactions on ancestors or descendants of the specified path.\r\n * Called when doing a set() or update() since we consider them incompatible\r\n * with transactions.\r\n *\r\n * @param path - Path for which we want to abort related transactions.\r\n */\r\nfunction repoAbortTransactions(repo, path) {\r\n const affectedPath = treeGetPath(repoGetAncestorTransactionNode(repo, path));\r\n const transactionNode = treeSubTree(repo.transactionQueueTree_, path);\r\n treeForEachAncestor(transactionNode, (node) => {\r\n repoAbortTransactionsOnNode(repo, node);\r\n });\r\n repoAbortTransactionsOnNode(repo, transactionNode);\r\n treeForEachDescendant(transactionNode, (node) => {\r\n repoAbortTransactionsOnNode(repo, node);\r\n });\r\n return affectedPath;\r\n}\r\n/**\r\n * Abort transactions stored in this transaction queue node.\r\n *\r\n * @param node - Node to abort transactions for.\r\n */\r\nfunction repoAbortTransactionsOnNode(repo, node) {\r\n const queue = treeGetValue(node);\r\n if (queue) {\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more transactions\r\n // or sets.\r\n const callbacks = [];\r\n // Go through queue. Any already-sent transactions must be marked for\r\n // abort, while the unsent ones can be immediately aborted and removed.\r\n let events = [];\r\n let lastSent = -1;\r\n for (let i = 0; i < queue.length; i++) {\r\n if (queue[i].status === 3 /* TransactionStatus.SENT_NEEDS_ABORT */) ;\r\n else if (queue[i].status === 1 /* TransactionStatus.SENT */) {\r\n assert(lastSent === i - 1, 'All SENT items should be at beginning of queue.');\r\n lastSent = i;\r\n // Mark transaction for abort when it comes back.\r\n queue[i].status = 3 /* TransactionStatus.SENT_NEEDS_ABORT */;\r\n queue[i].abortReason = 'set';\r\n }\r\n else {\r\n assert(queue[i].status === 0 /* TransactionStatus.RUN */, 'Unexpected transaction status in abort');\r\n // We can abort it immediately.\r\n queue[i].unwatcher();\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId, true));\r\n if (queue[i].onComplete) {\r\n callbacks.push(queue[i].onComplete.bind(null, new Error('set'), false, null));\r\n }\r\n }\r\n }\r\n if (lastSent === -1) {\r\n // We're not waiting for any sent transactions. We can clear the queue.\r\n treeSetValue(node, undefined);\r\n }\r\n else {\r\n // Remove the transactions we aborted.\r\n queue.length = lastSent + 1;\r\n }\r\n // Now fire the callbacks.\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, treeGetPath(node), events);\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction decodePath(pathString) {\r\n let pathStringDecoded = '';\r\n const pieces = pathString.split('/');\r\n for (let i = 0; i < pieces.length; i++) {\r\n if (pieces[i].length > 0) {\r\n let piece = pieces[i];\r\n try {\r\n piece = decodeURIComponent(piece.replace(/\\+/g, ' '));\r\n }\r\n catch (e) { }\r\n pathStringDecoded += '/' + piece;\r\n }\r\n }\r\n return pathStringDecoded;\r\n}\r\n/**\r\n * @returns key value hash\r\n */\r\nfunction decodeQuery(queryString) {\r\n const results = {};\r\n if (queryString.charAt(0) === '?') {\r\n queryString = queryString.substring(1);\r\n }\r\n for (const segment of queryString.split('&')) {\r\n if (segment.length === 0) {\r\n continue;\r\n }\r\n const kv = segment.split('=');\r\n if (kv.length === 2) {\r\n results[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);\r\n }\r\n else {\r\n warn(`Invalid query segment '${segment}' in query '${queryString}'`);\r\n }\r\n }\r\n return results;\r\n}\r\nconst parseRepoInfo = function (dataURL, nodeAdmin) {\r\n const parsedUrl = parseDatabaseURL(dataURL), namespace = parsedUrl.namespace;\r\n if (parsedUrl.domain === 'firebase.com') {\r\n fatal(parsedUrl.host +\r\n ' is no longer supported. ' +\r\n 'Please use .firebaseio.com instead');\r\n }\r\n // Catch common error of uninitialized namespace value.\r\n if ((!namespace || namespace === 'undefined') &&\r\n parsedUrl.domain !== 'localhost') {\r\n fatal('Cannot parse Firebase url. Please use https://.firebaseio.com');\r\n }\r\n if (!parsedUrl.secure) {\r\n warnIfPageIsSecure();\r\n }\r\n const webSocketOnly = parsedUrl.scheme === 'ws' || parsedUrl.scheme === 'wss';\r\n return {\r\n repoInfo: new RepoInfo(parsedUrl.host, parsedUrl.secure, namespace, webSocketOnly, nodeAdmin, \r\n /*persistenceKey=*/ '', \r\n /*includeNamespaceInQueryParams=*/ namespace !== parsedUrl.subdomain),\r\n path: new Path(parsedUrl.pathString)\r\n };\r\n};\r\nconst parseDatabaseURL = function (dataURL) {\r\n // Default to empty strings in the event of a malformed string.\r\n let host = '', domain = '', subdomain = '', pathString = '', namespace = '';\r\n // Always default to SSL, unless otherwise specified.\r\n let secure = true, scheme = 'https', port = 443;\r\n // Don't do any validation here. The caller is responsible for validating the result of parsing.\r\n if (typeof dataURL === 'string') {\r\n // Parse scheme.\r\n let colonInd = dataURL.indexOf('//');\r\n if (colonInd >= 0) {\r\n scheme = dataURL.substring(0, colonInd - 1);\r\n dataURL = dataURL.substring(colonInd + 2);\r\n }\r\n // Parse host, path, and query string.\r\n let slashInd = dataURL.indexOf('/');\r\n if (slashInd === -1) {\r\n slashInd = dataURL.length;\r\n }\r\n let questionMarkInd = dataURL.indexOf('?');\r\n if (questionMarkInd === -1) {\r\n questionMarkInd = dataURL.length;\r\n }\r\n host = dataURL.substring(0, Math.min(slashInd, questionMarkInd));\r\n if (slashInd < questionMarkInd) {\r\n // For pathString, questionMarkInd will always come after slashInd\r\n pathString = decodePath(dataURL.substring(slashInd, questionMarkInd));\r\n }\r\n const queryParams = decodeQuery(dataURL.substring(Math.min(dataURL.length, questionMarkInd)));\r\n // If we have a port, use scheme for determining if it's secure.\r\n colonInd = host.indexOf(':');\r\n if (colonInd >= 0) {\r\n secure = scheme === 'https' || scheme === 'wss';\r\n port = parseInt(host.substring(colonInd + 1), 10);\r\n }\r\n else {\r\n colonInd = host.length;\r\n }\r\n const hostWithoutPort = host.slice(0, colonInd);\r\n if (hostWithoutPort.toLowerCase() === 'localhost') {\r\n domain = 'localhost';\r\n }\r\n else if (hostWithoutPort.split('.').length <= 2) {\r\n domain = hostWithoutPort;\r\n }\r\n else {\r\n // Interpret the subdomain of a 3 or more component URL as the namespace name.\r\n const dotInd = host.indexOf('.');\r\n subdomain = host.substring(0, dotInd).toLowerCase();\r\n domain = host.substring(dotInd + 1);\r\n // Normalize namespaces to lowercase to share storage / connection.\r\n namespace = subdomain;\r\n }\r\n // Always treat the value of the `ns` as the namespace name if it is present.\r\n if ('ns' in queryParams) {\r\n namespace = queryParams['ns'];\r\n }\r\n }\r\n return {\r\n host,\r\n port,\r\n domain,\r\n subdomain,\r\n secure,\r\n scheme,\r\n pathString,\r\n namespace\r\n };\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Modeled after base64 web-safe chars, but ordered by ASCII.\r\nconst PUSH_CHARS = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';\r\n/**\r\n * Fancy ID generator that creates 20-character string identifiers with the\r\n * following properties:\r\n *\r\n * 1. They're based on timestamp so that they sort *after* any existing ids.\r\n * 2. They contain 72-bits of random data after the timestamp so that IDs won't\r\n * collide with other clients' IDs.\r\n * 3. They sort *lexicographically* (so the timestamp is converted to characters\r\n * that will sort properly).\r\n * 4. They're monotonically increasing. Even if you generate more than one in\r\n * the same timestamp, the latter ones will sort after the former ones. We do\r\n * this by using the previous random bits but \"incrementing\" them by 1 (only\r\n * in the case of a timestamp collision).\r\n */\r\nconst nextPushId = (function () {\r\n // Timestamp of last push, used to prevent local collisions if you push twice\r\n // in one ms.\r\n let lastPushTime = 0;\r\n // We generate 72-bits of randomness which get turned into 12 characters and\r\n // appended to the timestamp to prevent collisions with other clients. We\r\n // store the last characters we generated because in the event of a collision,\r\n // we'll use those same characters except \"incremented\" by one.\r\n const lastRandChars = [];\r\n return function (now) {\r\n const duplicateTime = now === lastPushTime;\r\n lastPushTime = now;\r\n let i;\r\n const timeStampChars = new Array(8);\r\n for (i = 7; i >= 0; i--) {\r\n timeStampChars[i] = PUSH_CHARS.charAt(now % 64);\r\n // NOTE: Can't use << here because javascript will convert to int and lose\r\n // the upper bits.\r\n now = Math.floor(now / 64);\r\n }\r\n assert(now === 0, 'Cannot push at time == 0');\r\n let id = timeStampChars.join('');\r\n if (!duplicateTime) {\r\n for (i = 0; i < 12; i++) {\r\n lastRandChars[i] = Math.floor(Math.random() * 64);\r\n }\r\n }\r\n else {\r\n // If the timestamp hasn't changed since last push, use the same random\r\n // number, except incremented by 1.\r\n for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {\r\n lastRandChars[i] = 0;\r\n }\r\n lastRandChars[i]++;\r\n }\r\n for (i = 0; i < 12; i++) {\r\n id += PUSH_CHARS.charAt(lastRandChars[i]);\r\n }\r\n assert(id.length === 20, 'nextPushId: Length should be 20.');\r\n return id;\r\n };\r\n})();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Encapsulates the data needed to raise an event\r\n */\r\nclass DataEvent {\r\n /**\r\n * @param eventType - One of: value, child_added, child_changed, child_moved, child_removed\r\n * @param eventRegistration - The function to call to with the event data. User provided\r\n * @param snapshot - The data backing the event\r\n * @param prevName - Optional, the name of the previous child for child_* events.\r\n */\r\n constructor(eventType, eventRegistration, snapshot, prevName) {\r\n this.eventType = eventType;\r\n this.eventRegistration = eventRegistration;\r\n this.snapshot = snapshot;\r\n this.prevName = prevName;\r\n }\r\n getPath() {\r\n const ref = this.snapshot.ref;\r\n if (this.eventType === 'value') {\r\n return ref._path;\r\n }\r\n else {\r\n return ref.parent._path;\r\n }\r\n }\r\n getEventType() {\r\n return this.eventType;\r\n }\r\n getEventRunner() {\r\n return this.eventRegistration.getEventRunner(this);\r\n }\r\n toString() {\r\n return (this.getPath().toString() +\r\n ':' +\r\n this.eventType +\r\n ':' +\r\n stringify(this.snapshot.exportVal()));\r\n }\r\n}\r\nclass CancelEvent {\r\n constructor(eventRegistration, error, path) {\r\n this.eventRegistration = eventRegistration;\r\n this.error = error;\r\n this.path = path;\r\n }\r\n getPath() {\r\n return this.path;\r\n }\r\n getEventType() {\r\n return 'cancel';\r\n }\r\n getEventRunner() {\r\n return this.eventRegistration.getEventRunner(this);\r\n }\r\n toString() {\r\n return this.path.toString() + ':cancel';\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A wrapper class that converts events from the database@exp SDK to the legacy\r\n * Database SDK. Events are not converted directly as event registration relies\r\n * on reference comparison of the original user callback (see `matches()`) and\r\n * relies on equality of the legacy SDK's `context` object.\r\n */\r\nclass CallbackContext {\r\n constructor(snapshotCallback, cancelCallback) {\r\n this.snapshotCallback = snapshotCallback;\r\n this.cancelCallback = cancelCallback;\r\n }\r\n onValue(expDataSnapshot, previousChildName) {\r\n this.snapshotCallback.call(null, expDataSnapshot, previousChildName);\r\n }\r\n onCancel(error) {\r\n assert(this.hasCancelCallback, 'Raising a cancel event on a listener with no cancel callback');\r\n return this.cancelCallback.call(null, error);\r\n }\r\n get hasCancelCallback() {\r\n return !!this.cancelCallback;\r\n }\r\n matches(other) {\r\n return (this.snapshotCallback === other.snapshotCallback ||\r\n (this.snapshotCallback.userCallback !== undefined &&\r\n this.snapshotCallback.userCallback ===\r\n other.snapshotCallback.userCallback &&\r\n this.snapshotCallback.context === other.snapshotCallback.context));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The `onDisconnect` class allows you to write or clear data when your client\r\n * disconnects from the Database server. These updates occur whether your\r\n * client disconnects cleanly or not, so you can rely on them to clean up data\r\n * even if a connection is dropped or a client crashes.\r\n *\r\n * The `onDisconnect` class is most commonly used to manage presence in\r\n * applications where it is useful to detect how many clients are connected and\r\n * when other clients disconnect. See\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information.\r\n *\r\n * To avoid problems when a connection is dropped before the requests can be\r\n * transferred to the Database server, these functions should be called before\r\n * writing any data.\r\n *\r\n * Note that `onDisconnect` operations are only triggered once. If you want an\r\n * operation to occur each time a disconnect occurs, you'll need to re-establish\r\n * the `onDisconnect` operations each time you reconnect.\r\n */\r\nclass OnDisconnect {\r\n /** @hideconstructor */\r\n constructor(_repo, _path) {\r\n this._repo = _repo;\r\n this._path = _path;\r\n }\r\n /**\r\n * Cancels all previously queued `onDisconnect()` set or update events for this\r\n * location and all children.\r\n *\r\n * If a write has been queued for this location via a `set()` or `update()` at a\r\n * parent location, the write at this location will be canceled, though writes\r\n * to sibling locations will still occur.\r\n *\r\n * @returns Resolves when synchronization to the server is complete.\r\n */\r\n cancel() {\r\n const deferred = new Deferred();\r\n repoOnDisconnectCancel(this._repo, this._path, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is deleted when the client is disconnected\r\n * (due to closing the browser, navigating to a new page, or network issues).\r\n *\r\n * @returns Resolves when synchronization to the server is complete.\r\n */\r\n remove() {\r\n validateWritablePath('OnDisconnect.remove', this._path);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSet(this._repo, this._path, null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is set to the specified value when the\r\n * client is disconnected (due to closing the browser, navigating to a new page,\r\n * or network issues).\r\n *\r\n * `set()` is especially useful for implementing \"presence\" systems, where a\r\n * value should be changed or cleared when a user disconnects so that they\r\n * appear \"offline\" to other users. See\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information.\r\n *\r\n * Note that `onDisconnect` operations are only triggered once. If you want an\r\n * operation to occur each time a disconnect occurs, you'll need to re-establish\r\n * the `onDisconnect` operations each time.\r\n *\r\n * @param value - The value to be written to this location on disconnect (can\r\n * be an object, array, string, number, boolean, or null).\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n set(value) {\r\n validateWritablePath('OnDisconnect.set', this._path);\r\n validateFirebaseDataArg('OnDisconnect.set', value, this._path, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSet(this._repo, this._path, value, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is set to the specified value and priority\r\n * when the client is disconnected (due to closing the browser, navigating to a\r\n * new page, or network issues).\r\n *\r\n * @param value - The value to be written to this location on disconnect (can\r\n * be an object, array, string, number, boolean, or null).\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n setWithPriority(value, priority) {\r\n validateWritablePath('OnDisconnect.setWithPriority', this._path);\r\n validateFirebaseDataArg('OnDisconnect.setWithPriority', value, this._path, false);\r\n validatePriority('OnDisconnect.setWithPriority', priority, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSetWithPriority(this._repo, this._path, value, priority, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Writes multiple values at this location when the client is disconnected (due\r\n * to closing the browser, navigating to a new page, or network issues).\r\n *\r\n * The `values` argument contains multiple property-value pairs that will be\r\n * written to the Database together. Each child property can either be a simple\r\n * property (for example, \"name\") or a relative path (for example, \"name/first\")\r\n * from the current location to the data to update.\r\n *\r\n * As opposed to the `set()` method, `update()` can be use to selectively update\r\n * only the referenced properties at the current location (instead of replacing\r\n * all the child properties at the current location).\r\n *\r\n * @param values - Object containing multiple values.\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n update(values) {\r\n validateWritablePath('OnDisconnect.update', this._path);\r\n validateFirebaseMergeDataArg('OnDisconnect.update', values, this._path, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectUpdate(this._repo, this._path, values, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nclass QueryImpl {\r\n /**\r\n * @hideconstructor\r\n */\r\n constructor(_repo, _path, _queryParams, _orderByCalled) {\r\n this._repo = _repo;\r\n this._path = _path;\r\n this._queryParams = _queryParams;\r\n this._orderByCalled = _orderByCalled;\r\n }\r\n get key() {\r\n if (pathIsEmpty(this._path)) {\r\n return null;\r\n }\r\n else {\r\n return pathGetBack(this._path);\r\n }\r\n }\r\n get ref() {\r\n return new ReferenceImpl(this._repo, this._path);\r\n }\r\n get _queryIdentifier() {\r\n const obj = queryParamsGetQueryObject(this._queryParams);\r\n const id = ObjectToUniqueKey(obj);\r\n return id === '{}' ? 'default' : id;\r\n }\r\n /**\r\n * An object representation of the query parameters used by this Query.\r\n */\r\n get _queryObject() {\r\n return queryParamsGetQueryObject(this._queryParams);\r\n }\r\n isEqual(other) {\r\n other = getModularInstance(other);\r\n if (!(other instanceof QueryImpl)) {\r\n return false;\r\n }\r\n const sameRepo = this._repo === other._repo;\r\n const samePath = pathEquals(this._path, other._path);\r\n const sameQueryIdentifier = this._queryIdentifier === other._queryIdentifier;\r\n return sameRepo && samePath && sameQueryIdentifier;\r\n }\r\n toJSON() {\r\n return this.toString();\r\n }\r\n toString() {\r\n return this._repo.toString() + pathToUrlEncodedString(this._path);\r\n }\r\n}\r\n/**\r\n * Validates that no other order by call has been made\r\n */\r\nfunction validateNoPreviousOrderByCall(query, fnName) {\r\n if (query._orderByCalled === true) {\r\n throw new Error(fnName + \": You can't combine multiple orderBy calls.\");\r\n }\r\n}\r\n/**\r\n * Validates start/end values for queries.\r\n */\r\nfunction validateQueryEndpoints(params) {\r\n let startNode = null;\r\n let endNode = null;\r\n if (params.hasStart()) {\r\n startNode = params.getIndexStartValue();\r\n }\r\n if (params.hasEnd()) {\r\n endNode = params.getIndexEndValue();\r\n }\r\n if (params.getIndex() === KEY_INDEX) {\r\n const tooManyArgsError = 'Query: When ordering by key, you may only pass one argument to ' +\r\n 'startAt(), endAt(), or equalTo().';\r\n const wrongArgTypeError = 'Query: When ordering by key, the argument passed to startAt(), startAfter(), ' +\r\n 'endAt(), endBefore(), or equalTo() must be a string.';\r\n if (params.hasStart()) {\r\n const startName = params.getIndexStartName();\r\n if (startName !== MIN_NAME) {\r\n throw new Error(tooManyArgsError);\r\n }\r\n else if (typeof startNode !== 'string') {\r\n throw new Error(wrongArgTypeError);\r\n }\r\n }\r\n if (params.hasEnd()) {\r\n const endName = params.getIndexEndName();\r\n if (endName !== MAX_NAME) {\r\n throw new Error(tooManyArgsError);\r\n }\r\n else if (typeof endNode !== 'string') {\r\n throw new Error(wrongArgTypeError);\r\n }\r\n }\r\n }\r\n else if (params.getIndex() === PRIORITY_INDEX) {\r\n if ((startNode != null && !isValidPriority(startNode)) ||\r\n (endNode != null && !isValidPriority(endNode))) {\r\n throw new Error('Query: When ordering by priority, the first argument passed to startAt(), ' +\r\n 'startAfter() endAt(), endBefore(), or equalTo() must be a valid priority value ' +\r\n '(null, a number, or a string).');\r\n }\r\n }\r\n else {\r\n assert(params.getIndex() instanceof PathIndex ||\r\n params.getIndex() === VALUE_INDEX, 'unknown index type.');\r\n if ((startNode != null && typeof startNode === 'object') ||\r\n (endNode != null && typeof endNode === 'object')) {\r\n throw new Error('Query: First argument passed to startAt(), startAfter(), endAt(), endBefore(), or ' +\r\n 'equalTo() cannot be an object.');\r\n }\r\n }\r\n}\r\n/**\r\n * Validates that limit* has been called with the correct combination of parameters\r\n */\r\nfunction validateLimit(params) {\r\n if (params.hasStart() &&\r\n params.hasEnd() &&\r\n params.hasLimit() &&\r\n !params.hasAnchoredLimit()) {\r\n throw new Error(\"Query: Can't combine startAt(), startAfter(), endAt(), endBefore(), and limit(). Use \" +\r\n 'limitToFirst() or limitToLast() instead.');\r\n }\r\n}\r\n/**\r\n * @internal\r\n */\r\nclass ReferenceImpl extends QueryImpl {\r\n /** @hideconstructor */\r\n constructor(repo, path) {\r\n super(repo, path, new QueryParams(), false);\r\n }\r\n get parent() {\r\n const parentPath = pathParent(this._path);\r\n return parentPath === null\r\n ? null\r\n : new ReferenceImpl(this._repo, parentPath);\r\n }\r\n get root() {\r\n let ref = this;\r\n while (ref.parent !== null) {\r\n ref = ref.parent;\r\n }\r\n return ref;\r\n }\r\n}\r\n/**\r\n * A `DataSnapshot` contains data from a Database location.\r\n *\r\n * Any time you read data from the Database, you receive the data as a\r\n * `DataSnapshot`. A `DataSnapshot` is passed to the event callbacks you attach\r\n * with `on()` or `once()`. You can extract the contents of the snapshot as a\r\n * JavaScript object by calling the `val()` method. Alternatively, you can\r\n * traverse into the snapshot by calling `child()` to return child snapshots\r\n * (which you could then call `val()` on).\r\n *\r\n * A `DataSnapshot` is an efficiently generated, immutable copy of the data at\r\n * a Database location. It cannot be modified and will never change (to modify\r\n * data, you always call the `set()` method on a `Reference` directly).\r\n */\r\nclass DataSnapshot {\r\n /**\r\n * @param _node - A SnapshotNode to wrap.\r\n * @param ref - The location this snapshot came from.\r\n * @param _index - The iteration order for this snapshot\r\n * @hideconstructor\r\n */\r\n constructor(_node, \r\n /**\r\n * The location of this DataSnapshot.\r\n */\r\n ref, _index) {\r\n this._node = _node;\r\n this.ref = ref;\r\n this._index = _index;\r\n }\r\n /**\r\n * Gets the priority value of the data in this `DataSnapshot`.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data |Sorting and filtering data}\r\n * ).\r\n */\r\n get priority() {\r\n // typecast here because we never return deferred values or internal priorities (MAX_PRIORITY)\r\n return this._node.getPriority().val();\r\n }\r\n /**\r\n * The key (last part of the path) of the location of this `DataSnapshot`.\r\n *\r\n * The last token in a Database location is considered its key. For example,\r\n * \"ada\" is the key for the /users/ada/ node. Accessing the key on any\r\n * `DataSnapshot` will return the key for the location that generated it.\r\n * However, accessing the key on the root URL of a Database will return\r\n * `null`.\r\n */\r\n get key() {\r\n return this.ref.key;\r\n }\r\n /** Returns the number of child properties of this `DataSnapshot`. */\r\n get size() {\r\n return this._node.numChildren();\r\n }\r\n /**\r\n * Gets another `DataSnapshot` for the location at the specified relative path.\r\n *\r\n * Passing a relative path to the `child()` method of a DataSnapshot returns\r\n * another `DataSnapshot` for the location at the specified relative path. The\r\n * relative path can either be a simple child name (for example, \"ada\") or a\r\n * deeper, slash-separated path (for example, \"ada/name/first\"). If the child\r\n * location has no data, an empty `DataSnapshot` (that is, a `DataSnapshot`\r\n * whose value is `null`) is returned.\r\n *\r\n * @param path - A relative path to the location of child data.\r\n */\r\n child(path) {\r\n const childPath = new Path(path);\r\n const childRef = child(this.ref, path);\r\n return new DataSnapshot(this._node.getChild(childPath), childRef, PRIORITY_INDEX);\r\n }\r\n /**\r\n * Returns true if this `DataSnapshot` contains any data. It is slightly more\r\n * efficient than using `snapshot.val() !== null`.\r\n */\r\n exists() {\r\n return !this._node.isEmpty();\r\n }\r\n /**\r\n * Exports the entire contents of the DataSnapshot as a JavaScript object.\r\n *\r\n * The `exportVal()` method is similar to `val()`, except priority information\r\n * is included (if available), making it suitable for backing up your data.\r\n *\r\n * @returns The DataSnapshot's contents as a JavaScript value (Object,\r\n * Array, string, number, boolean, or `null`).\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n exportVal() {\r\n return this._node.val(true);\r\n }\r\n /**\r\n * Enumerates the top-level children in the `DataSnapshot`.\r\n *\r\n * Because of the way JavaScript objects work, the ordering of data in the\r\n * JavaScript object returned by `val()` is not guaranteed to match the\r\n * ordering on the server nor the ordering of `onChildAdded()` events. That is\r\n * where `forEach()` comes in handy. It guarantees the children of a\r\n * `DataSnapshot` will be iterated in their query order.\r\n *\r\n * If no explicit `orderBy*()` method is used, results are returned\r\n * ordered by key (unless priorities are used, in which case, results are\r\n * returned by priority).\r\n *\r\n * @param action - A function that will be called for each child DataSnapshot.\r\n * The callback can return true to cancel further enumeration.\r\n * @returns true if enumeration was canceled due to your callback returning\r\n * true.\r\n */\r\n forEach(action) {\r\n if (this._node.isLeafNode()) {\r\n return false;\r\n }\r\n const childrenNode = this._node;\r\n // Sanitize the return value to a boolean. ChildrenNode.forEachChild has a weird return type...\r\n return !!childrenNode.forEachChild(this._index, (key, node) => {\r\n return action(new DataSnapshot(node, child(this.ref, key), PRIORITY_INDEX));\r\n });\r\n }\r\n /**\r\n * Returns true if the specified child path has (non-null) data.\r\n *\r\n * @param path - A relative path to the location of a potential child.\r\n * @returns `true` if data exists at the specified child path; else\r\n * `false`.\r\n */\r\n hasChild(path) {\r\n const childPath = new Path(path);\r\n return !this._node.getChild(childPath).isEmpty();\r\n }\r\n /**\r\n * Returns whether or not the `DataSnapshot` has any non-`null` child\r\n * properties.\r\n *\r\n * You can use `hasChildren()` to determine if a `DataSnapshot` has any\r\n * children. If it does, you can enumerate them using `forEach()`. If it\r\n * doesn't, then either this snapshot contains a primitive value (which can be\r\n * retrieved with `val()`) or it is empty (in which case, `val()` will return\r\n * `null`).\r\n *\r\n * @returns true if this snapshot has any children; else false.\r\n */\r\n hasChildren() {\r\n if (this._node.isLeafNode()) {\r\n return false;\r\n }\r\n else {\r\n return !this._node.isEmpty();\r\n }\r\n }\r\n /**\r\n * Returns a JSON-serializable representation of this object.\r\n */\r\n toJSON() {\r\n return this.exportVal();\r\n }\r\n /**\r\n * Extracts a JavaScript value from a `DataSnapshot`.\r\n *\r\n * Depending on the data in a `DataSnapshot`, the `val()` method may return a\r\n * scalar type (string, number, or boolean), an array, or an object. It may\r\n * also return null, indicating that the `DataSnapshot` is empty (contains no\r\n * data).\r\n *\r\n * @returns The DataSnapshot's contents as a JavaScript value (Object,\r\n * Array, string, number, boolean, or `null`).\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n val() {\r\n return this._node.val();\r\n }\r\n}\r\n/**\r\n *\r\n * Returns a `Reference` representing the location in the Database\r\n * corresponding to the provided path. If no path is provided, the `Reference`\r\n * will point to the root of the Database.\r\n *\r\n * @param db - The database instance to obtain a reference for.\r\n * @param path - Optional path representing the location the returned\r\n * `Reference` will point. If not provided, the returned `Reference` will\r\n * point to the root of the Database.\r\n * @returns If a path is provided, a `Reference`\r\n * pointing to the provided path. Otherwise, a `Reference` pointing to the\r\n * root of the Database.\r\n */\r\nfunction ref(db, path) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('ref');\r\n return path !== undefined ? child(db._root, path) : db._root;\r\n}\r\n/**\r\n * Returns a `Reference` representing the location in the Database\r\n * corresponding to the provided Firebase URL.\r\n *\r\n * An exception is thrown if the URL is not a valid Firebase Database URL or it\r\n * has a different domain than the current `Database` instance.\r\n *\r\n * Note that all query parameters (`orderBy`, `limitToLast`, etc.) are ignored\r\n * and are not applied to the returned `Reference`.\r\n *\r\n * @param db - The database instance to obtain a reference for.\r\n * @param url - The Firebase URL at which the returned `Reference` will\r\n * point.\r\n * @returns A `Reference` pointing to the provided\r\n * Firebase URL.\r\n */\r\nfunction refFromURL(db, url) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('refFromURL');\r\n const parsedURL = parseRepoInfo(url, db._repo.repoInfo_.nodeAdmin);\r\n validateUrl('refFromURL', parsedURL);\r\n const repoInfo = parsedURL.repoInfo;\r\n if (!db._repo.repoInfo_.isCustomHost() &&\r\n repoInfo.host !== db._repo.repoInfo_.host) {\r\n fatal('refFromURL' +\r\n ': Host name does not match the current database: ' +\r\n '(found ' +\r\n repoInfo.host +\r\n ' but expected ' +\r\n db._repo.repoInfo_.host +\r\n ')');\r\n }\r\n return ref(db, parsedURL.path.toString());\r\n}\r\n/**\r\n * Gets a `Reference` for the location at the specified relative path.\r\n *\r\n * The relative path can either be a simple child name (for example, \"ada\") or\r\n * a deeper slash-separated path (for example, \"ada/name/first\").\r\n *\r\n * @param parent - The parent location.\r\n * @param path - A relative path from this location to the desired child\r\n * location.\r\n * @returns The specified child location.\r\n */\r\nfunction child(parent, path) {\r\n parent = getModularInstance(parent);\r\n if (pathGetFront(parent._path) === null) {\r\n validateRootPathString('child', 'path', path, false);\r\n }\r\n else {\r\n validatePathString('child', 'path', path, false);\r\n }\r\n return new ReferenceImpl(parent._repo, pathChild(parent._path, path));\r\n}\r\n/**\r\n * Returns an `OnDisconnect` object - see\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information on how to use it.\r\n *\r\n * @param ref - The reference to add OnDisconnect triggers for.\r\n */\r\nfunction onDisconnect(ref) {\r\n ref = getModularInstance(ref);\r\n return new OnDisconnect(ref._repo, ref._path);\r\n}\r\n/**\r\n * Generates a new child location using a unique key and returns its\r\n * `Reference`.\r\n *\r\n * This is the most common pattern for adding data to a collection of items.\r\n *\r\n * If you provide a value to `push()`, the value is written to the\r\n * generated location. If you don't pass a value, nothing is written to the\r\n * database and the child remains empty (but you can use the `Reference`\r\n * elsewhere).\r\n *\r\n * The unique keys generated by `push()` are ordered by the current time, so the\r\n * resulting list of items is chronologically sorted. The keys are also\r\n * designed to be unguessable (they contain 72 random bits of entropy).\r\n *\r\n * See {@link https://firebase.google.com/docs/database/web/lists-of-data#append_to_a_list_of_data | Append to a list of data}.\r\n * See {@link https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html | The 2^120 Ways to Ensure Unique Identifiers}.\r\n *\r\n * @param parent - The parent location.\r\n * @param value - Optional value to be written at the generated location.\r\n * @returns Combined `Promise` and `Reference`; resolves when write is complete,\r\n * but can be used immediately as the `Reference` to the child location.\r\n */\r\nfunction push(parent, value) {\r\n parent = getModularInstance(parent);\r\n validateWritablePath('push', parent._path);\r\n validateFirebaseDataArg('push', value, parent._path, true);\r\n const now = repoServerTime(parent._repo);\r\n const name = nextPushId(now);\r\n // push() returns a ThennableReference whose promise is fulfilled with a\r\n // regular Reference. We use child() to create handles to two different\r\n // references. The first is turned into a ThennableReference below by adding\r\n // then() and catch() methods and is used as the return value of push(). The\r\n // second remains a regular Reference and is used as the fulfilled value of\r\n // the first ThennableReference.\r\n const thennablePushRef = child(parent, name);\r\n const pushRef = child(parent, name);\r\n let promise;\r\n if (value != null) {\r\n promise = set(pushRef, value).then(() => pushRef);\r\n }\r\n else {\r\n promise = Promise.resolve(pushRef);\r\n }\r\n thennablePushRef.then = promise.then.bind(promise);\r\n thennablePushRef.catch = promise.then.bind(promise, undefined);\r\n return thennablePushRef;\r\n}\r\n/**\r\n * Removes the data at this Database location.\r\n *\r\n * Any data at child locations will also be deleted.\r\n *\r\n * The effect of the remove will be visible immediately and the corresponding\r\n * event 'value' will be triggered. Synchronization of the remove to the\r\n * Firebase servers will also be started, and the returned Promise will resolve\r\n * when complete. If provided, the onComplete callback will be called\r\n * asynchronously after synchronization has finished.\r\n *\r\n * @param ref - The location to remove.\r\n * @returns Resolves when remove on server is complete.\r\n */\r\nfunction remove(ref) {\r\n validateWritablePath('remove', ref._path);\r\n return set(ref, null);\r\n}\r\n/**\r\n * Writes data to this Database location.\r\n *\r\n * This will overwrite any data at this location and all child locations.\r\n *\r\n * The effect of the write will be visible immediately, and the corresponding\r\n * events (\"value\", \"child_added\", etc.) will be triggered. Synchronization of\r\n * the data to the Firebase servers will also be started, and the returned\r\n * Promise will resolve when complete. If provided, the `onComplete` callback\r\n * will be called asynchronously after synchronization has finished.\r\n *\r\n * Passing `null` for the new value is equivalent to calling `remove()`; namely,\r\n * all data at this location and all child locations will be deleted.\r\n *\r\n * `set()` will remove any priority stored at this location, so if priority is\r\n * meant to be preserved, you need to use `setWithPriority()` instead.\r\n *\r\n * Note that modifying data with `set()` will cancel any pending transactions\r\n * at that location, so extreme care should be taken if mixing `set()` and\r\n * `transaction()` to modify the same data.\r\n *\r\n * A single `set()` will generate a single \"value\" event at the location where\r\n * the `set()` was performed.\r\n *\r\n * @param ref - The location to write to.\r\n * @param value - The value to be written (string, number, boolean, object,\r\n * array, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction set(ref, value) {\r\n ref = getModularInstance(ref);\r\n validateWritablePath('set', ref._path);\r\n validateFirebaseDataArg('set', value, ref._path, false);\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, ref._path, value, \r\n /*priority=*/ null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Sets a priority for the data at this Database location.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\r\n * ).\r\n *\r\n * @param ref - The location to write to.\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction setPriority(ref, priority) {\r\n ref = getModularInstance(ref);\r\n validateWritablePath('setPriority', ref._path);\r\n validatePriority('setPriority', priority, false);\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, pathChild(ref._path, '.priority'), priority, null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Writes data the Database location. Like `set()` but also specifies the\r\n * priority for that data.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\r\n * ).\r\n *\r\n * @param ref - The location to write to.\r\n * @param value - The value to be written (string, number, boolean, object,\r\n * array, or null).\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction setWithPriority(ref, value, priority) {\r\n validateWritablePath('setWithPriority', ref._path);\r\n validateFirebaseDataArg('setWithPriority', value, ref._path, false);\r\n validatePriority('setWithPriority', priority, false);\r\n if (ref.key === '.length' || ref.key === '.keys') {\r\n throw 'setWithPriority failed: ' + ref.key + ' is a read-only object.';\r\n }\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, ref._path, value, priority, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Writes multiple values to the Database at once.\r\n *\r\n * The `values` argument contains multiple property-value pairs that will be\r\n * written to the Database together. Each child property can either be a simple\r\n * property (for example, \"name\") or a relative path (for example,\r\n * \"name/first\") from the current location to the data to update.\r\n *\r\n * As opposed to the `set()` method, `update()` can be use to selectively update\r\n * only the referenced properties at the current location (instead of replacing\r\n * all the child properties at the current location).\r\n *\r\n * The effect of the write will be visible immediately, and the corresponding\r\n * events ('value', 'child_added', etc.) will be triggered. Synchronization of\r\n * the data to the Firebase servers will also be started, and the returned\r\n * Promise will resolve when complete. If provided, the `onComplete` callback\r\n * will be called asynchronously after synchronization has finished.\r\n *\r\n * A single `update()` will generate a single \"value\" event at the location\r\n * where the `update()` was performed, regardless of how many children were\r\n * modified.\r\n *\r\n * Note that modifying data with `update()` will cancel any pending\r\n * transactions at that location, so extreme care should be taken if mixing\r\n * `update()` and `transaction()` to modify the same data.\r\n *\r\n * Passing `null` to `update()` will remove the data at this location.\r\n *\r\n * See\r\n * {@link https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html | Introducing multi-location updates and more}.\r\n *\r\n * @param ref - The location to write to.\r\n * @param values - Object containing multiple values.\r\n * @returns Resolves when update on server is complete.\r\n */\r\nfunction update(ref, values) {\r\n validateFirebaseMergeDataArg('update', values, ref._path, false);\r\n const deferred = new Deferred();\r\n repoUpdate(ref._repo, ref._path, values, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Gets the most up-to-date result for this query.\r\n *\r\n * @param query - The query to run.\r\n * @returns A `Promise` which resolves to the resulting DataSnapshot if a value is\r\n * available, or rejects if the client is unable to return a value (e.g., if the\r\n * server is unreachable and there is nothing cached).\r\n */\r\nfunction get(query) {\r\n query = getModularInstance(query);\r\n const callbackContext = new CallbackContext(() => { });\r\n const container = new ValueEventRegistration(callbackContext);\r\n return repoGetValue(query._repo, query, container).then(node => {\r\n return new DataSnapshot(node, new ReferenceImpl(query._repo, query._path), query._queryParams.getIndex());\r\n });\r\n}\r\n/**\r\n * Represents registration for 'value' events.\r\n */\r\nclass ValueEventRegistration {\r\n constructor(callbackContext) {\r\n this.callbackContext = callbackContext;\r\n }\r\n respondsTo(eventType) {\r\n return eventType === 'value';\r\n }\r\n createEvent(change, query) {\r\n const index = query._queryParams.getIndex();\r\n return new DataEvent('value', this, new DataSnapshot(change.snapshotNode, new ReferenceImpl(query._repo, query._path), index));\r\n }\r\n getEventRunner(eventData) {\r\n if (eventData.getEventType() === 'cancel') {\r\n return () => this.callbackContext.onCancel(eventData.error);\r\n }\r\n else {\r\n return () => this.callbackContext.onValue(eventData.snapshot, null);\r\n }\r\n }\r\n createCancelEvent(error, path) {\r\n if (this.callbackContext.hasCancelCallback) {\r\n return new CancelEvent(this, error, path);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n matches(other) {\r\n if (!(other instanceof ValueEventRegistration)) {\r\n return false;\r\n }\r\n else if (!other.callbackContext || !this.callbackContext) {\r\n // If no callback specified, we consider it to match any callback.\r\n return true;\r\n }\r\n else {\r\n return other.callbackContext.matches(this.callbackContext);\r\n }\r\n }\r\n hasAnyCallback() {\r\n return this.callbackContext !== null;\r\n }\r\n}\r\n/**\r\n * Represents the registration of a child_x event.\r\n */\r\nclass ChildEventRegistration {\r\n constructor(eventType, callbackContext) {\r\n this.eventType = eventType;\r\n this.callbackContext = callbackContext;\r\n }\r\n respondsTo(eventType) {\r\n let eventToCheck = eventType === 'children_added' ? 'child_added' : eventType;\r\n eventToCheck =\r\n eventToCheck === 'children_removed' ? 'child_removed' : eventToCheck;\r\n return this.eventType === eventToCheck;\r\n }\r\n createCancelEvent(error, path) {\r\n if (this.callbackContext.hasCancelCallback) {\r\n return new CancelEvent(this, error, path);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n createEvent(change, query) {\r\n assert(change.childName != null, 'Child events should have a childName.');\r\n const childRef = child(new ReferenceImpl(query._repo, query._path), change.childName);\r\n const index = query._queryParams.getIndex();\r\n return new DataEvent(change.type, this, new DataSnapshot(change.snapshotNode, childRef, index), change.prevName);\r\n }\r\n getEventRunner(eventData) {\r\n if (eventData.getEventType() === 'cancel') {\r\n return () => this.callbackContext.onCancel(eventData.error);\r\n }\r\n else {\r\n return () => this.callbackContext.onValue(eventData.snapshot, eventData.prevName);\r\n }\r\n }\r\n matches(other) {\r\n if (other instanceof ChildEventRegistration) {\r\n return (this.eventType === other.eventType &&\r\n (!this.callbackContext ||\r\n !other.callbackContext ||\r\n this.callbackContext.matches(other.callbackContext)));\r\n }\r\n return false;\r\n }\r\n hasAnyCallback() {\r\n return !!this.callbackContext;\r\n }\r\n}\r\nfunction addEventListener(query, eventType, callback, cancelCallbackOrListenOptions, options) {\r\n let cancelCallback;\r\n if (typeof cancelCallbackOrListenOptions === 'object') {\r\n cancelCallback = undefined;\r\n options = cancelCallbackOrListenOptions;\r\n }\r\n if (typeof cancelCallbackOrListenOptions === 'function') {\r\n cancelCallback = cancelCallbackOrListenOptions;\r\n }\r\n if (options && options.onlyOnce) {\r\n const userCallback = callback;\r\n const onceCallback = (dataSnapshot, previousChildName) => {\r\n repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n userCallback(dataSnapshot, previousChildName);\r\n };\r\n onceCallback.userCallback = callback.userCallback;\r\n onceCallback.context = callback.context;\r\n callback = onceCallback;\r\n }\r\n const callbackContext = new CallbackContext(callback, cancelCallback || undefined);\r\n const container = eventType === 'value'\r\n ? new ValueEventRegistration(callbackContext)\r\n : new ChildEventRegistration(eventType, callbackContext);\r\n repoAddEventCallbackForQuery(query._repo, query, container);\r\n return () => repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n}\r\nfunction onValue(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'value', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildAdded(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_added', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildChanged(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_changed', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildMoved(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_moved', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildRemoved(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_removed', callback, cancelCallbackOrListenOptions, options);\r\n}\r\n/**\r\n * Detaches a callback previously attached with the corresponding `on*()` (`onValue`, `onChildAdded`) listener.\r\n * Note: This is not the recommended way to remove a listener. Instead, please use the returned callback function from\r\n * the respective `on*` callbacks.\r\n *\r\n * Detach a callback previously attached with `on*()`. Calling `off()` on a parent listener\r\n * will not automatically remove listeners registered on child nodes, `off()`\r\n * must also be called on any child listeners to remove the callback.\r\n *\r\n * If a callback is not specified, all callbacks for the specified eventType\r\n * will be removed. Similarly, if no eventType is specified, all callbacks\r\n * for the `Reference` will be removed.\r\n *\r\n * Individual listeners can also be removed by invoking their unsubscribe\r\n * callbacks.\r\n *\r\n * @param query - The query that the listener was registered with.\r\n * @param eventType - One of the following strings: \"value\", \"child_added\",\r\n * \"child_changed\", \"child_removed\", or \"child_moved.\" If omitted, all callbacks\r\n * for the `Reference` will be removed.\r\n * @param callback - The callback function that was passed to `on()` or\r\n * `undefined` to remove all callbacks.\r\n */\r\nfunction off(query, eventType, callback) {\r\n let container = null;\r\n const expCallback = callback ? new CallbackContext(callback) : null;\r\n if (eventType === 'value') {\r\n container = new ValueEventRegistration(expCallback);\r\n }\r\n else if (eventType) {\r\n container = new ChildEventRegistration(eventType, expCallback);\r\n }\r\n repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n}\r\n/**\r\n * A `QueryConstraint` is used to narrow the set of documents returned by a\r\n * Database query. `QueryConstraint`s are created by invoking {@link endAt},\r\n * {@link endBefore}, {@link startAt}, {@link startAfter}, {@link\r\n * limitToFirst}, {@link limitToLast}, {@link orderByChild},\r\n * {@link orderByChild}, {@link orderByKey} , {@link orderByPriority} ,\r\n * {@link orderByValue} or {@link equalTo} and\r\n * can then be passed to {@link query} to create a new query instance that\r\n * also contains this `QueryConstraint`.\r\n */\r\nclass QueryConstraint {\r\n}\r\nclass QueryEndAtConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('endAt', this._value, query._path, true);\r\n const newParams = queryParamsEndAt(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('endAt: Starting point was already set (by another call to endAt, ' +\r\n 'endBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified ending point.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The ending point is inclusive, so children with exactly the specified value\r\n * will be included in the query. The optional key argument can be used to\r\n * further limit the range of the query. If it is specified, then children that\r\n * have exactly the specified value must also have a key name less than or equal\r\n * to the specified key.\r\n *\r\n * You can read more about `endAt()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to end at. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to end at, among the children with the previously\r\n * specified priority. This argument is only allowed if ordering by child,\r\n * value, or priority.\r\n */\r\nfunction endAt(value, key) {\r\n validateKey('endAt', 'key', key, true);\r\n return new QueryEndAtConstraint(value, key);\r\n}\r\nclass QueryEndBeforeConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('endBefore', this._value, query._path, false);\r\n const newParams = queryParamsEndBefore(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('endBefore: Starting point was already set (by another call to endAt, ' +\r\n 'endBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified ending point (exclusive).\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The ending point is exclusive. If only a value is provided, children\r\n * with a value less than the specified value will be included in the query.\r\n * If a key is specified, then children must have a value less than or equal\r\n * to the specified value and a key name less than the specified key.\r\n *\r\n * @param value - The value to end before. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to end before, among the children with the\r\n * previously specified priority. This argument is only allowed if ordering by\r\n * child, value, or priority.\r\n */\r\nfunction endBefore(value, key) {\r\n validateKey('endBefore', 'key', key, true);\r\n return new QueryEndBeforeConstraint(value, key);\r\n}\r\nclass QueryStartAtConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('startAt', this._value, query._path, true);\r\n const newParams = queryParamsStartAt(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('startAt: Starting point was already set (by another call to startAt, ' +\r\n 'startBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified starting point.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The starting point is inclusive, so children with exactly the specified value\r\n * will be included in the query. The optional key argument can be used to\r\n * further limit the range of the query. If it is specified, then children that\r\n * have exactly the specified value must also have a key name greater than or\r\n * equal to the specified key.\r\n *\r\n * You can read more about `startAt()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to start at. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start at. This argument is only allowed if\r\n * ordering by child, value, or priority.\r\n */\r\nfunction startAt(value = null, key) {\r\n validateKey('startAt', 'key', key, true);\r\n return new QueryStartAtConstraint(value, key);\r\n}\r\nclass QueryStartAfterConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('startAfter', this._value, query._path, false);\r\n const newParams = queryParamsStartAfter(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('startAfter: Starting point was already set (by another call to startAt, ' +\r\n 'startAfter, or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified starting point (exclusive).\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The starting point is exclusive. If only a value is provided, children\r\n * with a value greater than the specified value will be included in the query.\r\n * If a key is specified, then children must have a value greater than or equal\r\n * to the specified value and a a key name greater than the specified key.\r\n *\r\n * @param value - The value to start after. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start after. This argument is only allowed if\r\n * ordering by child, value, or priority.\r\n */\r\nfunction startAfter(value, key) {\r\n validateKey('startAfter', 'key', key, true);\r\n return new QueryStartAfterConstraint(value, key);\r\n}\r\nclass QueryLimitToFirstConstraint extends QueryConstraint {\r\n constructor(_limit) {\r\n super();\r\n this._limit = _limit;\r\n }\r\n _apply(query) {\r\n if (query._queryParams.hasLimit()) {\r\n throw new Error('limitToFirst: Limit was already set (by another call to limitToFirst ' +\r\n 'or limitToLast).');\r\n }\r\n return new QueryImpl(query._repo, query._path, queryParamsLimitToFirst(query._queryParams, this._limit), query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that if limited to the first specific number\r\n * of children.\r\n *\r\n * The `limitToFirst()` method is used to set a maximum number of children to be\r\n * synced for a given callback. If we set a limit of 100, we will initially only\r\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\r\n * stored in our Database, a `child_added` event will fire for each message.\r\n * However, if we have over 100 messages, we will only receive a `child_added`\r\n * event for the first 100 ordered messages. As items change, we will receive\r\n * `child_removed` events for each item that drops out of the active list so\r\n * that the total number stays at 100.\r\n *\r\n * You can read more about `limitToFirst()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param limit - The maximum number of nodes to include in this query.\r\n */\r\nfunction limitToFirst(limit) {\r\n if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\r\n throw new Error('limitToFirst: First argument must be a positive integer.');\r\n }\r\n return new QueryLimitToFirstConstraint(limit);\r\n}\r\nclass QueryLimitToLastConstraint extends QueryConstraint {\r\n constructor(_limit) {\r\n super();\r\n this._limit = _limit;\r\n }\r\n _apply(query) {\r\n if (query._queryParams.hasLimit()) {\r\n throw new Error('limitToLast: Limit was already set (by another call to limitToFirst ' +\r\n 'or limitToLast).');\r\n }\r\n return new QueryImpl(query._repo, query._path, queryParamsLimitToLast(query._queryParams, this._limit), query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that is limited to return only the last\r\n * specified number of children.\r\n *\r\n * The `limitToLast()` method is used to set a maximum number of children to be\r\n * synced for a given callback. If we set a limit of 100, we will initially only\r\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\r\n * stored in our Database, a `child_added` event will fire for each message.\r\n * However, if we have over 100 messages, we will only receive a `child_added`\r\n * event for the last 100 ordered messages. As items change, we will receive\r\n * `child_removed` events for each item that drops out of the active list so\r\n * that the total number stays at 100.\r\n *\r\n * You can read more about `limitToLast()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param limit - The maximum number of nodes to include in this query.\r\n */\r\nfunction limitToLast(limit) {\r\n if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\r\n throw new Error('limitToLast: First argument must be a positive integer.');\r\n }\r\n return new QueryLimitToLastConstraint(limit);\r\n}\r\nclass QueryOrderByChildConstraint extends QueryConstraint {\r\n constructor(_path) {\r\n super();\r\n this._path = _path;\r\n }\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByChild');\r\n const parsedPath = new Path(this._path);\r\n if (pathIsEmpty(parsedPath)) {\r\n throw new Error('orderByChild: cannot pass in empty path. Use orderByValue() instead.');\r\n }\r\n const index = new PathIndex(parsedPath);\r\n const newParams = queryParamsOrderBy(query._queryParams, index);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by the specified child key.\r\n *\r\n * Queries can only order by one key at a time. Calling `orderByChild()`\r\n * multiple times on the same query is an error.\r\n *\r\n * Firebase queries allow you to order your data by any child key on the fly.\r\n * However, if you know in advance what your indexes will be, you can define\r\n * them via the .indexOn rule in your Security Rules for better performance. See\r\n * the{@link https://firebase.google.com/docs/database/security/indexing-data}\r\n * rule for more information.\r\n *\r\n * You can read more about `orderByChild()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n *\r\n * @param path - The path to order by.\r\n */\r\nfunction orderByChild(path) {\r\n if (path === '$key') {\r\n throw new Error('orderByChild: \"$key\" is invalid. Use orderByKey() instead.');\r\n }\r\n else if (path === '$priority') {\r\n throw new Error('orderByChild: \"$priority\" is invalid. Use orderByPriority() instead.');\r\n }\r\n else if (path === '$value') {\r\n throw new Error('orderByChild: \"$value\" is invalid. Use orderByValue() instead.');\r\n }\r\n validatePathString('orderByChild', 'path', path, false);\r\n return new QueryOrderByChildConstraint(path);\r\n}\r\nclass QueryOrderByKeyConstraint extends QueryConstraint {\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByKey');\r\n const newParams = queryParamsOrderBy(query._queryParams, KEY_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by the key.\r\n *\r\n * Sorts the results of a query by their (ascending) key values.\r\n *\r\n * You can read more about `orderByKey()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n */\r\nfunction orderByKey() {\r\n return new QueryOrderByKeyConstraint();\r\n}\r\nclass QueryOrderByPriorityConstraint extends QueryConstraint {\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByPriority');\r\n const newParams = queryParamsOrderBy(query._queryParams, PRIORITY_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by priority.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}\r\n * for alternatives to priority.\r\n */\r\nfunction orderByPriority() {\r\n return new QueryOrderByPriorityConstraint();\r\n}\r\nclass QueryOrderByValueConstraint extends QueryConstraint {\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByValue');\r\n const newParams = queryParamsOrderBy(query._queryParams, VALUE_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by value.\r\n *\r\n * If the children of a query are all scalar values (string, number, or\r\n * boolean), you can order the results by their (ascending) values.\r\n *\r\n * You can read more about `orderByValue()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n */\r\nfunction orderByValue() {\r\n return new QueryOrderByValueConstraint();\r\n}\r\nclass QueryEqualToValueConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('equalTo', this._value, query._path, false);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('equalTo: Starting point was already set (by another call to startAt/startAfter or ' +\r\n 'equalTo).');\r\n }\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('equalTo: Ending point was already set (by another call to endAt/endBefore or ' +\r\n 'equalTo).');\r\n }\r\n return new QueryEndAtConstraint(this._value, this._key)._apply(new QueryStartAtConstraint(this._value, this._key)._apply(query));\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` that includes children that match the specified\r\n * value.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The optional key argument can be used to further limit the range of the\r\n * query. If it is specified, then children that have exactly the specified\r\n * value must also have exactly the specified key as their key name. This can be\r\n * used to filter result sets with many matches for the same value.\r\n *\r\n * You can read more about `equalTo()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to match for. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start at, among the children with the\r\n * previously specified priority. This argument is only allowed if ordering by\r\n * child, value, or priority.\r\n */\r\nfunction equalTo(value, key) {\r\n validateKey('equalTo', 'key', key, true);\r\n return new QueryEqualToValueConstraint(value, key);\r\n}\r\n/**\r\n * Creates a new immutable instance of `Query` that is extended to also include\r\n * additional query constraints.\r\n *\r\n * @param query - The Query instance to use as a base for the new constraints.\r\n * @param queryConstraints - The list of `QueryConstraint`s to apply.\r\n * @throws if any of the provided query constraints cannot be combined with the\r\n * existing or new constraints.\r\n */\r\nfunction query(query, ...queryConstraints) {\r\n let queryImpl = getModularInstance(query);\r\n for (const constraint of queryConstraints) {\r\n queryImpl = constraint._apply(queryImpl);\r\n }\r\n return queryImpl;\r\n}\r\n/**\r\n * Define reference constructor in various modules\r\n *\r\n * We are doing this here to avoid several circular\r\n * dependency issues\r\n */\r\nsyncPointSetReferenceConstructor(ReferenceImpl);\r\nsyncTreeSetReferenceConstructor(ReferenceImpl);\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This variable is also defined in the firebase Node.js Admin SDK. Before\r\n * modifying this definition, consult the definition in:\r\n *\r\n * https://github.com/firebase/firebase-admin-node\r\n *\r\n * and make sure the two are consistent.\r\n */\r\nconst FIREBASE_DATABASE_EMULATOR_HOST_VAR = 'FIREBASE_DATABASE_EMULATOR_HOST';\r\n/**\r\n * Creates and caches `Repo` instances.\r\n */\r\nconst repos = {};\r\n/**\r\n * If true, any new `Repo` will be created to use `ReadonlyRestClient` (for testing purposes).\r\n */\r\nlet useRestClient = false;\r\n/**\r\n * Update an existing `Repo` in place to point to a new host/port.\r\n */\r\nfunction repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider) {\r\n repo.repoInfo_ = new RepoInfo(`${host}:${port}`, \r\n /* secure= */ false, repo.repoInfo_.namespace, repo.repoInfo_.webSocketOnly, repo.repoInfo_.nodeAdmin, repo.repoInfo_.persistenceKey, repo.repoInfo_.includeNamespaceInQueryParams, \r\n /*isUsingEmulator=*/ true);\r\n if (tokenProvider) {\r\n repo.authTokenProvider_ = tokenProvider;\r\n }\r\n}\r\n/**\r\n * This function should only ever be called to CREATE a new database instance.\r\n * @internal\r\n */\r\nfunction repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url, nodeAdmin) {\r\n let dbUrl = url || app.options.databaseURL;\r\n if (dbUrl === undefined) {\r\n if (!app.options.projectId) {\r\n fatal(\"Can't determine Firebase Database URL. Be sure to include \" +\r\n ' a Project ID when calling firebase.initializeApp().');\r\n }\r\n log('Using default host for project ', app.options.projectId);\r\n dbUrl = `${app.options.projectId}-default-rtdb.firebaseio.com`;\r\n }\r\n let parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\r\n let repoInfo = parsedUrl.repoInfo;\r\n let isEmulator;\r\n let dbEmulatorHost = undefined;\r\n if (typeof process !== 'undefined' && process.env) {\r\n dbEmulatorHost = process.env[FIREBASE_DATABASE_EMULATOR_HOST_VAR];\r\n }\r\n if (dbEmulatorHost) {\r\n isEmulator = true;\r\n dbUrl = `http://${dbEmulatorHost}?ns=${repoInfo.namespace}`;\r\n parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\r\n repoInfo = parsedUrl.repoInfo;\r\n }\r\n else {\r\n isEmulator = !parsedUrl.repoInfo.secure;\r\n }\r\n const authTokenProvider = nodeAdmin && isEmulator\r\n ? new EmulatorTokenProvider(EmulatorTokenProvider.OWNER)\r\n : new FirebaseAuthTokenProvider(app.name, app.options, authProvider);\r\n validateUrl('Invalid Firebase Database URL', parsedUrl);\r\n if (!pathIsEmpty(parsedUrl.path)) {\r\n fatal('Database URL must point to the root of a Firebase Database ' +\r\n '(not including a child path).');\r\n }\r\n const repo = repoManagerCreateRepo(repoInfo, app, authTokenProvider, new AppCheckTokenProvider(app.name, appCheckProvider));\r\n return new Database(repo, app);\r\n}\r\n/**\r\n * Remove the repo and make sure it is disconnected.\r\n *\r\n */\r\nfunction repoManagerDeleteRepo(repo, appName) {\r\n const appRepos = repos[appName];\r\n // This should never happen...\r\n if (!appRepos || appRepos[repo.key] !== repo) {\r\n fatal(`Database ${appName}(${repo.repoInfo_}) has already been deleted.`);\r\n }\r\n repoInterrupt(repo);\r\n delete appRepos[repo.key];\r\n}\r\n/**\r\n * Ensures a repo doesn't already exist and then creates one using the\r\n * provided app.\r\n *\r\n * @param repoInfo - The metadata about the Repo\r\n * @returns The Repo object for the specified server / repoName.\r\n */\r\nfunction repoManagerCreateRepo(repoInfo, app, authTokenProvider, appCheckProvider) {\r\n let appRepos = repos[app.name];\r\n if (!appRepos) {\r\n appRepos = {};\r\n repos[app.name] = appRepos;\r\n }\r\n let repo = appRepos[repoInfo.toURLString()];\r\n if (repo) {\r\n fatal('Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.');\r\n }\r\n repo = new Repo(repoInfo, useRestClient, authTokenProvider, appCheckProvider);\r\n appRepos[repoInfo.toURLString()] = repo;\r\n return repo;\r\n}\r\n/**\r\n * Forces us to use ReadonlyRestClient instead of PersistentConnection for new Repos.\r\n */\r\nfunction repoManagerForceRestClient(forceRestClient) {\r\n useRestClient = forceRestClient;\r\n}\r\n/**\r\n * Class representing a Firebase Realtime Database.\r\n */\r\nclass Database {\r\n /** @hideconstructor */\r\n constructor(_repoInternal, \r\n /** The {@link @firebase/app#FirebaseApp} associated with this Realtime Database instance. */\r\n app) {\r\n this._repoInternal = _repoInternal;\r\n this.app = app;\r\n /** Represents a `Database` instance. */\r\n this['type'] = 'database';\r\n /** Track if the instance has been used (root or repo accessed) */\r\n this._instanceStarted = false;\r\n }\r\n get _repo() {\r\n if (!this._instanceStarted) {\r\n repoStart(this._repoInternal, this.app.options.appId, this.app.options['databaseAuthVariableOverride']);\r\n this._instanceStarted = true;\r\n }\r\n return this._repoInternal;\r\n }\r\n get _root() {\r\n if (!this._rootInternal) {\r\n this._rootInternal = new ReferenceImpl(this._repo, newEmptyPath());\r\n }\r\n return this._rootInternal;\r\n }\r\n _delete() {\r\n if (this._rootInternal !== null) {\r\n repoManagerDeleteRepo(this._repo, this.app.name);\r\n this._repoInternal = null;\r\n this._rootInternal = null;\r\n }\r\n return Promise.resolve();\r\n }\r\n _checkNotDeleted(apiName) {\r\n if (this._rootInternal === null) {\r\n fatal('Cannot call ' + apiName + ' on a deleted database.');\r\n }\r\n }\r\n}\r\nfunction checkTransportInit() {\r\n if (TransportManager.IS_TRANSPORT_INITIALIZED) {\r\n warn('Transport has already been initialized. Please call this function before calling ref or setting up a listener');\r\n }\r\n}\r\n/**\r\n * Force the use of websockets instead of longPolling.\r\n */\r\nfunction forceWebSockets() {\r\n checkTransportInit();\r\n BrowserPollConnection.forceDisallow();\r\n}\r\n/**\r\n * Force the use of longPolling instead of websockets. This will be ignored if websocket protocol is used in databaseURL.\r\n */\r\nfunction forceLongPolling() {\r\n checkTransportInit();\r\n WebSocketConnection.forceDisallow();\r\n BrowserPollConnection.forceAllow();\r\n}\r\n/**\r\n * Returns the instance of the Realtime Database SDK that is associated\r\n * with the provided {@link @firebase/app#FirebaseApp}. Initializes a new instance with\r\n * with default settings if no instance exists or if the existing instance uses\r\n * a custom database URL.\r\n *\r\n * @param app - The {@link @firebase/app#FirebaseApp} instance that the returned Realtime\r\n * Database instance is associated with.\r\n * @param url - The URL of the Realtime Database instance to connect to. If not\r\n * provided, the SDK connects to the default instance of the Firebase App.\r\n * @returns The `Database` instance of the provided app.\r\n */\r\nfunction getDatabase(app = getApp(), url) {\r\n const db = _getProvider(app, 'database').getImmediate({\r\n identifier: url\r\n });\r\n if (!db._instanceStarted) {\r\n const emulator = getDefaultEmulatorHostnameAndPort('database');\r\n if (emulator) {\r\n connectDatabaseEmulator(db, ...emulator);\r\n }\r\n }\r\n return db;\r\n}\r\n/**\r\n * Modify the provided instance to communicate with the Realtime Database\r\n * emulator.\r\n *\r\n *

Note: This method must be called before performing any other operation.\r\n *\r\n * @param db - The instance to modify.\r\n * @param host - The emulator host (ex: localhost)\r\n * @param port - The emulator port (ex: 8080)\r\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\r\n */\r\nfunction connectDatabaseEmulator(db, host, port, options = {}) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('useEmulator');\r\n if (db._instanceStarted) {\r\n fatal('Cannot call useEmulator() after instance has already been initialized.');\r\n }\r\n const repo = db._repoInternal;\r\n let tokenProvider = undefined;\r\n if (repo.repoInfo_.nodeAdmin) {\r\n if (options.mockUserToken) {\r\n fatal('mockUserToken is not supported by the Admin SDK. For client access with mock users, please use the \"firebase\" package instead of \"firebase-admin\".');\r\n }\r\n tokenProvider = new EmulatorTokenProvider(EmulatorTokenProvider.OWNER);\r\n }\r\n else if (options.mockUserToken) {\r\n const token = typeof options.mockUserToken === 'string'\r\n ? options.mockUserToken\r\n : createMockUserToken(options.mockUserToken, db.app.options.projectId);\r\n tokenProvider = new EmulatorTokenProvider(token);\r\n }\r\n // Modify the repo to apply emulator settings\r\n repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider);\r\n}\r\n/**\r\n * Disconnects from the server (all Database operations will be completed\r\n * offline).\r\n *\r\n * The client automatically maintains a persistent connection to the Database\r\n * server, which will remain active indefinitely and reconnect when\r\n * disconnected. However, the `goOffline()` and `goOnline()` methods may be used\r\n * to control the client connection in cases where a persistent connection is\r\n * undesirable.\r\n *\r\n * While offline, the client will no longer receive data updates from the\r\n * Database. However, all Database operations performed locally will continue to\r\n * immediately fire events, allowing your application to continue behaving\r\n * normally. Additionally, each operation performed locally will automatically\r\n * be queued and retried upon reconnection to the Database server.\r\n *\r\n * To reconnect to the Database and begin receiving remote events, see\r\n * `goOnline()`.\r\n *\r\n * @param db - The instance to disconnect.\r\n */\r\nfunction goOffline(db) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('goOffline');\r\n repoInterrupt(db._repo);\r\n}\r\n/**\r\n * Reconnects to the server and synchronizes the offline Database state\r\n * with the server state.\r\n *\r\n * This method should be used after disabling the active connection with\r\n * `goOffline()`. Once reconnected, the client will transmit the proper data\r\n * and fire the appropriate events so that your client \"catches up\"\r\n * automatically.\r\n *\r\n * @param db - The instance to reconnect.\r\n */\r\nfunction goOnline(db) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('goOnline');\r\n repoResume(db._repo);\r\n}\r\nfunction enableLogging(logger, persistent) {\r\n enableLogging$1(logger, persistent);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerDatabase(variant) {\r\n setSDKVersion(SDK_VERSION$1);\r\n _registerComponent(new Component('database', (container, { instanceIdentifier: url }) => {\r\n const app = container.getProvider('app').getImmediate();\r\n const authProvider = container.getProvider('auth-internal');\r\n const appCheckProvider = container.getProvider('app-check-internal');\r\n return repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url);\r\n }, \"PUBLIC\" /* ComponentType.PUBLIC */).setMultipleInstances(true));\r\n registerVersion(name, version, variant);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst SERVER_TIMESTAMP = {\r\n '.sv': 'timestamp'\r\n};\r\n/**\r\n * Returns a placeholder value for auto-populating the current timestamp (time\r\n * since the Unix epoch, in milliseconds) as determined by the Firebase\r\n * servers.\r\n */\r\nfunction serverTimestamp() {\r\n return SERVER_TIMESTAMP;\r\n}\r\n/**\r\n * Returns a placeholder value that can be used to atomically increment the\r\n * current database value by the provided delta.\r\n *\r\n * @param delta - the amount to modify the current value atomically.\r\n * @returns A placeholder value for modifying data atomically server-side.\r\n */\r\nfunction increment(delta) {\r\n return {\r\n '.sv': {\r\n 'increment': delta\r\n }\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A type for the resolve value of {@link runTransaction}.\r\n */\r\nclass TransactionResult {\r\n /** @hideconstructor */\r\n constructor(\r\n /** Whether the transaction was successfully committed. */\r\n committed, \r\n /** The resulting data snapshot. */\r\n snapshot) {\r\n this.committed = committed;\r\n this.snapshot = snapshot;\r\n }\r\n /** Returns a JSON-serializable representation of this object. */\r\n toJSON() {\r\n return { committed: this.committed, snapshot: this.snapshot.toJSON() };\r\n }\r\n}\r\n/**\r\n * Atomically modifies the data at this location.\r\n *\r\n * Atomically modify the data at this location. Unlike a normal `set()`, which\r\n * just overwrites the data regardless of its previous value, `runTransaction()` is\r\n * used to modify the existing value to a new value, ensuring there are no\r\n * conflicts with other clients writing to the same location at the same time.\r\n *\r\n * To accomplish this, you pass `runTransaction()` an update function which is\r\n * used to transform the current value into a new value. If another client\r\n * writes to the location before your new value is successfully written, your\r\n * update function will be called again with the new current value, and the\r\n * write will be retried. This will happen repeatedly until your write succeeds\r\n * without conflict or you abort the transaction by not returning a value from\r\n * your update function.\r\n *\r\n * Note: Modifying data with `set()` will cancel any pending transactions at\r\n * that location, so extreme care should be taken if mixing `set()` and\r\n * `runTransaction()` to update the same data.\r\n *\r\n * Note: When using transactions with Security and Firebase Rules in place, be\r\n * aware that a client needs `.read` access in addition to `.write` access in\r\n * order to perform a transaction. This is because the client-side nature of\r\n * transactions requires the client to read the data in order to transactionally\r\n * update it.\r\n *\r\n * @param ref - The location to atomically modify.\r\n * @param transactionUpdate - A developer-supplied function which will be passed\r\n * the current data stored at this location (as a JavaScript object). The\r\n * function should return the new value it would like written (as a JavaScript\r\n * object). If `undefined` is returned (i.e. you return with no arguments) the\r\n * transaction will be aborted and the data at this location will not be\r\n * modified.\r\n * @param options - An options object to configure transactions.\r\n * @returns A `Promise` that can optionally be used instead of the `onComplete`\r\n * callback to handle success and failure.\r\n */\r\nfunction runTransaction(ref, \r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntransactionUpdate, options) {\r\n var _a;\r\n ref = getModularInstance(ref);\r\n validateWritablePath('Reference.transaction', ref._path);\r\n if (ref.key === '.length' || ref.key === '.keys') {\r\n throw ('Reference.transaction failed: ' + ref.key + ' is a read-only object.');\r\n }\r\n const applyLocally = (_a = options === null || options === void 0 ? void 0 : options.applyLocally) !== null && _a !== void 0 ? _a : true;\r\n const deferred = new Deferred();\r\n const promiseComplete = (error, committed, node) => {\r\n let dataSnapshot = null;\r\n if (error) {\r\n deferred.reject(error);\r\n }\r\n else {\r\n dataSnapshot = new DataSnapshot(node, new ReferenceImpl(ref._repo, ref._path), PRIORITY_INDEX);\r\n deferred.resolve(new TransactionResult(committed, dataSnapshot));\r\n }\r\n };\r\n // Add a watch to make sure we get server updates.\r\n const unwatcher = onValue(ref, () => { });\r\n repoStartTransaction(ref._repo, ref._path, transactionUpdate, promiseComplete, unwatcher, applyLocally);\r\n return deferred.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nPersistentConnection;\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nPersistentConnection.prototype.simpleListen = function (pathString, onComplete) {\r\n this.sendRequest('q', { p: pathString }, onComplete);\r\n};\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nPersistentConnection.prototype.echo = function (data, onEcho) {\r\n this.sendRequest('echo', { d: data }, onEcho);\r\n};\r\n// RealTimeConnection properties that we use in tests.\r\nConnection;\r\n/**\r\n * @internal\r\n */\r\nconst hijackHash = function (newHash) {\r\n const oldPut = PersistentConnection.prototype.put;\r\n PersistentConnection.prototype.put = function (pathString, data, onComplete, hash) {\r\n if (hash !== undefined) {\r\n hash = newHash();\r\n }\r\n oldPut.call(this, pathString, data, onComplete, hash);\r\n };\r\n return function () {\r\n PersistentConnection.prototype.put = oldPut;\r\n };\r\n};\r\nRepoInfo;\r\n/**\r\n * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.\r\n * @internal\r\n */\r\nconst forceRestClient = function (forceRestClient) {\r\n repoManagerForceRestClient(forceRestClient);\r\n};\n\n/**\r\n * Firebase Realtime Database\r\n *\r\n * @packageDocumentation\r\n */\r\nregisterDatabase();\n\nexport { DataSnapshot, Database, OnDisconnect, QueryConstraint, TransactionResult, QueryImpl as _QueryImpl, QueryParams as _QueryParams, ReferenceImpl as _ReferenceImpl, forceRestClient as _TEST_ACCESS_forceRestClient, hijackHash as _TEST_ACCESS_hijackHash, repoManagerDatabaseFromApp as _repoManagerDatabaseFromApp, setSDKVersion as _setSDKVersion, validatePathString as _validatePathString, validateWritablePath as _validateWritablePath, child, connectDatabaseEmulator, enableLogging, endAt, endBefore, equalTo, forceLongPolling, forceWebSockets, get, getDatabase, goOffline, goOnline, increment, limitToFirst, limitToLast, off, onChildAdded, onChildChanged, onChildMoved, onChildRemoved, onDisconnect, onValue, orderByChild, orderByKey, orderByPriority, orderByValue, push, query, ref, refFromURL, remove, runTransaction, serverTimestamp, set, setPriority, setWithPriority, startAfter, startAt, update };\n","import firebase from '@firebase/app-compat';\nimport { Provider, ComponentContainer, Component } from '@firebase/component';\nimport { _validatePathString, onChildMoved, onChildChanged, onChildRemoved, onChildAdded, onValue, off, get, query, limitToFirst, limitToLast, orderByChild, orderByKey, orderByPriority, orderByValue, startAt, startAfter, endAt, endBefore, equalTo, _ReferenceImpl, _QueryImpl, _QueryParams, child, set, _validateWritablePath, update, setWithPriority, remove, runTransaction, setPriority, push, OnDisconnect as OnDisconnect$1, forceWebSockets, forceLongPolling, connectDatabaseEmulator, refFromURL, ref, goOffline, goOnline, serverTimestamp, increment, _setSDKVersion, _repoManagerDatabaseFromApp, enableLogging } from '@firebase/database';\nimport { errorPrefix, validateArgCount, validateCallback, validateContextObject, Deferred } from '@firebase/util';\nimport { Logger } from '@firebase/logger';\n\nconst name = \"@firebase/database-compat\";\nconst version = \"0.3.4\";\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logClient = new Logger('@firebase/database-compat');\r\nconst warn = function (msg) {\r\n const message = 'FIREBASE WARNING: ' + msg;\r\n logClient.warn(message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst validateBoolean = function (fnName, argumentName, bool, optional) {\r\n if (optional && bool === undefined) {\r\n return;\r\n }\r\n if (typeof bool !== 'boolean') {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a boolean.');\r\n }\r\n};\r\nconst validateEventType = function (fnName, eventType, optional) {\r\n if (optional && eventType === undefined) {\r\n return;\r\n }\r\n switch (eventType) {\r\n case 'value':\r\n case 'child_added':\r\n case 'child_removed':\r\n case 'child_changed':\r\n case 'child_moved':\r\n break;\r\n default:\r\n throw new Error(errorPrefix(fnName, 'eventType') +\r\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\r\n '\"child_changed\", or \"child_moved\".');\r\n }\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass OnDisconnect {\r\n constructor(_delegate) {\r\n this._delegate = _delegate;\r\n }\r\n cancel(onComplete) {\r\n validateArgCount('OnDisconnect.cancel', 0, 1, arguments.length);\r\n validateCallback('OnDisconnect.cancel', 'onComplete', onComplete, true);\r\n const result = this._delegate.cancel();\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n remove(onComplete) {\r\n validateArgCount('OnDisconnect.remove', 0, 1, arguments.length);\r\n validateCallback('OnDisconnect.remove', 'onComplete', onComplete, true);\r\n const result = this._delegate.remove();\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n set(value, onComplete) {\r\n validateArgCount('OnDisconnect.set', 1, 2, arguments.length);\r\n validateCallback('OnDisconnect.set', 'onComplete', onComplete, true);\r\n const result = this._delegate.set(value);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n setWithPriority(value, priority, onComplete) {\r\n validateArgCount('OnDisconnect.setWithPriority', 2, 3, arguments.length);\r\n validateCallback('OnDisconnect.setWithPriority', 'onComplete', onComplete, true);\r\n const result = this._delegate.setWithPriority(value, priority);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n update(objectToMerge, onComplete) {\r\n validateArgCount('OnDisconnect.update', 1, 2, arguments.length);\r\n if (Array.isArray(objectToMerge)) {\r\n const newObjectToMerge = {};\r\n for (let i = 0; i < objectToMerge.length; ++i) {\r\n newObjectToMerge['' + i] = objectToMerge[i];\r\n }\r\n objectToMerge = newObjectToMerge;\r\n warn('Passing an Array to firebase.database.onDisconnect().update() is deprecated. Use set() if you want to overwrite the ' +\r\n 'existing data, or an Object with integer keys if you really do want to only update some of the children.');\r\n }\r\n validateCallback('OnDisconnect.update', 'onComplete', onComplete, true);\r\n const result = this._delegate.update(objectToMerge);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass TransactionResult {\r\n /**\r\n * A type for the resolve value of Firebase.transaction.\r\n */\r\n constructor(committed, snapshot) {\r\n this.committed = committed;\r\n this.snapshot = snapshot;\r\n }\r\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n // for end-users\r\n toJSON() {\r\n validateArgCount('TransactionResult.toJSON', 0, 1, arguments.length);\r\n return { committed: this.committed, snapshot: this.snapshot.toJSON() };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Class representing a firebase data snapshot. It wraps a SnapshotNode and\r\n * surfaces the public methods (val, forEach, etc.) we want to expose.\r\n */\r\nclass DataSnapshot {\r\n constructor(_database, _delegate) {\r\n this._database = _database;\r\n this._delegate = _delegate;\r\n }\r\n /**\r\n * Retrieves the snapshot contents as JSON. Returns null if the snapshot is\r\n * empty.\r\n *\r\n * @returns JSON representation of the DataSnapshot contents, or null if empty.\r\n */\r\n val() {\r\n validateArgCount('DataSnapshot.val', 0, 0, arguments.length);\r\n return this._delegate.val();\r\n }\r\n /**\r\n * Returns the snapshot contents as JSON, including priorities of node. Suitable for exporting\r\n * the entire node contents.\r\n * @returns JSON representation of the DataSnapshot contents, or null if empty.\r\n */\r\n exportVal() {\r\n validateArgCount('DataSnapshot.exportVal', 0, 0, arguments.length);\r\n return this._delegate.exportVal();\r\n }\r\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n // for end-users\r\n toJSON() {\r\n // Optional spacer argument is unnecessary because we're depending on recursion rather than stringifying the content\r\n validateArgCount('DataSnapshot.toJSON', 0, 1, arguments.length);\r\n return this._delegate.toJSON();\r\n }\r\n /**\r\n * Returns whether the snapshot contains a non-null value.\r\n *\r\n * @returns Whether the snapshot contains a non-null value, or is empty.\r\n */\r\n exists() {\r\n validateArgCount('DataSnapshot.exists', 0, 0, arguments.length);\r\n return this._delegate.exists();\r\n }\r\n /**\r\n * Returns a DataSnapshot of the specified child node's contents.\r\n *\r\n * @param path - Path to a child.\r\n * @returns DataSnapshot for child node.\r\n */\r\n child(path) {\r\n validateArgCount('DataSnapshot.child', 0, 1, arguments.length);\r\n // Ensure the childPath is a string (can be a number)\r\n path = String(path);\r\n _validatePathString('DataSnapshot.child', 'path', path, false);\r\n return new DataSnapshot(this._database, this._delegate.child(path));\r\n }\r\n /**\r\n * Returns whether the snapshot contains a child at the specified path.\r\n *\r\n * @param path - Path to a child.\r\n * @returns Whether the child exists.\r\n */\r\n hasChild(path) {\r\n validateArgCount('DataSnapshot.hasChild', 1, 1, arguments.length);\r\n _validatePathString('DataSnapshot.hasChild', 'path', path, false);\r\n return this._delegate.hasChild(path);\r\n }\r\n /**\r\n * Returns the priority of the object, or null if no priority was set.\r\n *\r\n * @returns The priority.\r\n */\r\n getPriority() {\r\n validateArgCount('DataSnapshot.getPriority', 0, 0, arguments.length);\r\n return this._delegate.priority;\r\n }\r\n /**\r\n * Iterates through child nodes and calls the specified action for each one.\r\n *\r\n * @param action - Callback function to be called\r\n * for each child.\r\n * @returns True if forEach was canceled by action returning true for\r\n * one of the child nodes.\r\n */\r\n forEach(action) {\r\n validateArgCount('DataSnapshot.forEach', 1, 1, arguments.length);\r\n validateCallback('DataSnapshot.forEach', 'action', action, false);\r\n return this._delegate.forEach(expDataSnapshot => action(new DataSnapshot(this._database, expDataSnapshot)));\r\n }\r\n /**\r\n * Returns whether this DataSnapshot has children.\r\n * @returns True if the DataSnapshot contains 1 or more child nodes.\r\n */\r\n hasChildren() {\r\n validateArgCount('DataSnapshot.hasChildren', 0, 0, arguments.length);\r\n return this._delegate.hasChildren();\r\n }\r\n get key() {\r\n return this._delegate.key;\r\n }\r\n /**\r\n * Returns the number of children for this DataSnapshot.\r\n * @returns The number of children that this DataSnapshot contains.\r\n */\r\n numChildren() {\r\n validateArgCount('DataSnapshot.numChildren', 0, 0, arguments.length);\r\n return this._delegate.size;\r\n }\r\n /**\r\n * @returns The Firebase reference for the location this snapshot's data came\r\n * from.\r\n */\r\n getRef() {\r\n validateArgCount('DataSnapshot.ref', 0, 0, arguments.length);\r\n return new Reference(this._database, this._delegate.ref);\r\n }\r\n get ref() {\r\n return this.getRef();\r\n }\r\n}\r\n/**\r\n * A Query represents a filter to be applied to a firebase location. This object purely represents the\r\n * query expression (and exposes our public API to build the query). The actual query logic is in ViewBase.js.\r\n *\r\n * Since every Firebase reference is a query, Firebase inherits from this object.\r\n */\r\nclass Query {\r\n constructor(database, _delegate) {\r\n this.database = database;\r\n this._delegate = _delegate;\r\n }\r\n on(eventType, callback, cancelCallbackOrContext, context) {\r\n var _a;\r\n validateArgCount('Query.on', 2, 4, arguments.length);\r\n validateCallback('Query.on', 'callback', callback, false);\r\n const ret = Query.getCancelAndContextArgs_('Query.on', cancelCallbackOrContext, context);\r\n const valueCallback = (expSnapshot, previousChildName) => {\r\n callback.call(ret.context, new DataSnapshot(this.database, expSnapshot), previousChildName);\r\n };\r\n valueCallback.userCallback = callback;\r\n valueCallback.context = ret.context;\r\n const cancelCallback = (_a = ret.cancel) === null || _a === void 0 ? void 0 : _a.bind(ret.context);\r\n switch (eventType) {\r\n case 'value':\r\n onValue(this._delegate, valueCallback, cancelCallback);\r\n return callback;\r\n case 'child_added':\r\n onChildAdded(this._delegate, valueCallback, cancelCallback);\r\n return callback;\r\n case 'child_removed':\r\n onChildRemoved(this._delegate, valueCallback, cancelCallback);\r\n return callback;\r\n case 'child_changed':\r\n onChildChanged(this._delegate, valueCallback, cancelCallback);\r\n return callback;\r\n case 'child_moved':\r\n onChildMoved(this._delegate, valueCallback, cancelCallback);\r\n return callback;\r\n default:\r\n throw new Error(errorPrefix('Query.on', 'eventType') +\r\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\r\n '\"child_changed\", or \"child_moved\".');\r\n }\r\n }\r\n off(eventType, callback, context) {\r\n validateArgCount('Query.off', 0, 3, arguments.length);\r\n validateEventType('Query.off', eventType, true);\r\n validateCallback('Query.off', 'callback', callback, true);\r\n validateContextObject('Query.off', 'context', context, true);\r\n if (callback) {\r\n const valueCallback = () => { };\r\n valueCallback.userCallback = callback;\r\n valueCallback.context = context;\r\n off(this._delegate, eventType, valueCallback);\r\n }\r\n else {\r\n off(this._delegate, eventType);\r\n }\r\n }\r\n /**\r\n * Get the server-value for this query, or return a cached value if not connected.\r\n */\r\n get() {\r\n return get(this._delegate).then(expSnapshot => {\r\n return new DataSnapshot(this.database, expSnapshot);\r\n });\r\n }\r\n /**\r\n * Attaches a listener, waits for the first event, and then removes the listener\r\n */\r\n once(eventType, callback, failureCallbackOrContext, context) {\r\n validateArgCount('Query.once', 1, 4, arguments.length);\r\n validateCallback('Query.once', 'callback', callback, true);\r\n const ret = Query.getCancelAndContextArgs_('Query.once', failureCallbackOrContext, context);\r\n const deferred = new Deferred();\r\n const valueCallback = (expSnapshot, previousChildName) => {\r\n const result = new DataSnapshot(this.database, expSnapshot);\r\n if (callback) {\r\n callback.call(ret.context, result, previousChildName);\r\n }\r\n deferred.resolve(result);\r\n };\r\n valueCallback.userCallback = callback;\r\n valueCallback.context = ret.context;\r\n const cancelCallback = (error) => {\r\n if (ret.cancel) {\r\n ret.cancel.call(ret.context, error);\r\n }\r\n deferred.reject(error);\r\n };\r\n switch (eventType) {\r\n case 'value':\r\n onValue(this._delegate, valueCallback, cancelCallback, {\r\n onlyOnce: true\r\n });\r\n break;\r\n case 'child_added':\r\n onChildAdded(this._delegate, valueCallback, cancelCallback, {\r\n onlyOnce: true\r\n });\r\n break;\r\n case 'child_removed':\r\n onChildRemoved(this._delegate, valueCallback, cancelCallback, {\r\n onlyOnce: true\r\n });\r\n break;\r\n case 'child_changed':\r\n onChildChanged(this._delegate, valueCallback, cancelCallback, {\r\n onlyOnce: true\r\n });\r\n break;\r\n case 'child_moved':\r\n onChildMoved(this._delegate, valueCallback, cancelCallback, {\r\n onlyOnce: true\r\n });\r\n break;\r\n default:\r\n throw new Error(errorPrefix('Query.once', 'eventType') +\r\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\r\n '\"child_changed\", or \"child_moved\".');\r\n }\r\n return deferred.promise;\r\n }\r\n /**\r\n * Set a limit and anchor it to the start of the window.\r\n */\r\n limitToFirst(limit) {\r\n validateArgCount('Query.limitToFirst', 1, 1, arguments.length);\r\n return new Query(this.database, query(this._delegate, limitToFirst(limit)));\r\n }\r\n /**\r\n * Set a limit and anchor it to the end of the window.\r\n */\r\n limitToLast(limit) {\r\n validateArgCount('Query.limitToLast', 1, 1, arguments.length);\r\n return new Query(this.database, query(this._delegate, limitToLast(limit)));\r\n }\r\n /**\r\n * Given a child path, return a new query ordered by the specified grandchild path.\r\n */\r\n orderByChild(path) {\r\n validateArgCount('Query.orderByChild', 1, 1, arguments.length);\r\n return new Query(this.database, query(this._delegate, orderByChild(path)));\r\n }\r\n /**\r\n * Return a new query ordered by the KeyIndex\r\n */\r\n orderByKey() {\r\n validateArgCount('Query.orderByKey', 0, 0, arguments.length);\r\n return new Query(this.database, query(this._delegate, orderByKey()));\r\n }\r\n /**\r\n * Return a new query ordered by the PriorityIndex\r\n */\r\n orderByPriority() {\r\n validateArgCount('Query.orderByPriority', 0, 0, arguments.length);\r\n return new Query(this.database, query(this._delegate, orderByPriority()));\r\n }\r\n /**\r\n * Return a new query ordered by the ValueIndex\r\n */\r\n orderByValue() {\r\n validateArgCount('Query.orderByValue', 0, 0, arguments.length);\r\n return new Query(this.database, query(this._delegate, orderByValue()));\r\n }\r\n startAt(value = null, name) {\r\n validateArgCount('Query.startAt', 0, 2, arguments.length);\r\n return new Query(this.database, query(this._delegate, startAt(value, name)));\r\n }\r\n startAfter(value = null, name) {\r\n validateArgCount('Query.startAfter', 0, 2, arguments.length);\r\n return new Query(this.database, query(this._delegate, startAfter(value, name)));\r\n }\r\n endAt(value = null, name) {\r\n validateArgCount('Query.endAt', 0, 2, arguments.length);\r\n return new Query(this.database, query(this._delegate, endAt(value, name)));\r\n }\r\n endBefore(value = null, name) {\r\n validateArgCount('Query.endBefore', 0, 2, arguments.length);\r\n return new Query(this.database, query(this._delegate, endBefore(value, name)));\r\n }\r\n /**\r\n * Load the selection of children with exactly the specified value, and, optionally,\r\n * the specified name.\r\n */\r\n equalTo(value, name) {\r\n validateArgCount('Query.equalTo', 1, 2, arguments.length);\r\n return new Query(this.database, query(this._delegate, equalTo(value, name)));\r\n }\r\n /**\r\n * @returns URL for this location.\r\n */\r\n toString() {\r\n validateArgCount('Query.toString', 0, 0, arguments.length);\r\n return this._delegate.toString();\r\n }\r\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n // for end-users.\r\n toJSON() {\r\n // An optional spacer argument is unnecessary for a string.\r\n validateArgCount('Query.toJSON', 0, 1, arguments.length);\r\n return this._delegate.toJSON();\r\n }\r\n /**\r\n * Return true if this query and the provided query are equivalent; otherwise, return false.\r\n */\r\n isEqual(other) {\r\n validateArgCount('Query.isEqual', 1, 1, arguments.length);\r\n if (!(other instanceof Query)) {\r\n const error = 'Query.isEqual failed: First argument must be an instance of firebase.database.Query.';\r\n throw new Error(error);\r\n }\r\n return this._delegate.isEqual(other._delegate);\r\n }\r\n /**\r\n * Helper used by .on and .once to extract the context and or cancel arguments.\r\n * @param fnName - The function name (on or once)\r\n *\r\n */\r\n static getCancelAndContextArgs_(fnName, cancelOrContext, context) {\r\n const ret = { cancel: undefined, context: undefined };\r\n if (cancelOrContext && context) {\r\n ret.cancel = cancelOrContext;\r\n validateCallback(fnName, 'cancel', ret.cancel, true);\r\n ret.context = context;\r\n validateContextObject(fnName, 'context', ret.context, true);\r\n }\r\n else if (cancelOrContext) {\r\n // we have either a cancel callback or a context.\r\n if (typeof cancelOrContext === 'object' && cancelOrContext !== null) {\r\n // it's a context!\r\n ret.context = cancelOrContext;\r\n }\r\n else if (typeof cancelOrContext === 'function') {\r\n ret.cancel = cancelOrContext;\r\n }\r\n else {\r\n throw new Error(errorPrefix(fnName, 'cancelOrContext') +\r\n ' must either be a cancel callback or a context object.');\r\n }\r\n }\r\n return ret;\r\n }\r\n get ref() {\r\n return new Reference(this.database, new _ReferenceImpl(this._delegate._repo, this._delegate._path));\r\n }\r\n}\r\nclass Reference extends Query {\r\n /**\r\n * Call options:\r\n * new Reference(Repo, Path) or\r\n * new Reference(url: string, string|RepoManager)\r\n *\r\n * Externally - this is the firebase.database.Reference type.\r\n */\r\n constructor(database, _delegate) {\r\n super(database, new _QueryImpl(_delegate._repo, _delegate._path, new _QueryParams(), false));\r\n this.database = database;\r\n this._delegate = _delegate;\r\n }\r\n /** @returns {?string} */\r\n getKey() {\r\n validateArgCount('Reference.key', 0, 0, arguments.length);\r\n return this._delegate.key;\r\n }\r\n child(pathString) {\r\n validateArgCount('Reference.child', 1, 1, arguments.length);\r\n if (typeof pathString === 'number') {\r\n pathString = String(pathString);\r\n }\r\n return new Reference(this.database, child(this._delegate, pathString));\r\n }\r\n /** @returns {?Reference} */\r\n getParent() {\r\n validateArgCount('Reference.parent', 0, 0, arguments.length);\r\n const parent = this._delegate.parent;\r\n return parent ? new Reference(this.database, parent) : null;\r\n }\r\n /** @returns {!Reference} */\r\n getRoot() {\r\n validateArgCount('Reference.root', 0, 0, arguments.length);\r\n return new Reference(this.database, this._delegate.root);\r\n }\r\n set(newVal, onComplete) {\r\n validateArgCount('Reference.set', 1, 2, arguments.length);\r\n validateCallback('Reference.set', 'onComplete', onComplete, true);\r\n const result = set(this._delegate, newVal);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n update(values, onComplete) {\r\n validateArgCount('Reference.update', 1, 2, arguments.length);\r\n if (Array.isArray(values)) {\r\n const newObjectToMerge = {};\r\n for (let i = 0; i < values.length; ++i) {\r\n newObjectToMerge['' + i] = values[i];\r\n }\r\n values = newObjectToMerge;\r\n warn('Passing an Array to Firebase.update() is deprecated. ' +\r\n 'Use set() if you want to overwrite the existing data, or ' +\r\n 'an Object with integer keys if you really do want to ' +\r\n 'only update some of the children.');\r\n }\r\n _validateWritablePath('Reference.update', this._delegate._path);\r\n validateCallback('Reference.update', 'onComplete', onComplete, true);\r\n const result = update(this._delegate, values);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n setWithPriority(newVal, newPriority, onComplete) {\r\n validateArgCount('Reference.setWithPriority', 2, 3, arguments.length);\r\n validateCallback('Reference.setWithPriority', 'onComplete', onComplete, true);\r\n const result = setWithPriority(this._delegate, newVal, newPriority);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n remove(onComplete) {\r\n validateArgCount('Reference.remove', 0, 1, arguments.length);\r\n validateCallback('Reference.remove', 'onComplete', onComplete, true);\r\n const result = remove(this._delegate);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n transaction(transactionUpdate, onComplete, applyLocally) {\r\n validateArgCount('Reference.transaction', 1, 3, arguments.length);\r\n validateCallback('Reference.transaction', 'transactionUpdate', transactionUpdate, false);\r\n validateCallback('Reference.transaction', 'onComplete', onComplete, true);\r\n validateBoolean('Reference.transaction', 'applyLocally', applyLocally, true);\r\n const result = runTransaction(this._delegate, transactionUpdate, {\r\n applyLocally\r\n }).then(transactionResult => new TransactionResult(transactionResult.committed, new DataSnapshot(this.database, transactionResult.snapshot)));\r\n if (onComplete) {\r\n result.then(transactionResult => onComplete(null, transactionResult.committed, transactionResult.snapshot), error => onComplete(error, false, null));\r\n }\r\n return result;\r\n }\r\n setPriority(priority, onComplete) {\r\n validateArgCount('Reference.setPriority', 1, 2, arguments.length);\r\n validateCallback('Reference.setPriority', 'onComplete', onComplete, true);\r\n const result = setPriority(this._delegate, priority);\r\n if (onComplete) {\r\n result.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n return result;\r\n }\r\n push(value, onComplete) {\r\n validateArgCount('Reference.push', 0, 2, arguments.length);\r\n validateCallback('Reference.push', 'onComplete', onComplete, true);\r\n const expPromise = push(this._delegate, value);\r\n const promise = expPromise.then(expRef => new Reference(this.database, expRef));\r\n if (onComplete) {\r\n promise.then(() => onComplete(null), error => onComplete(error));\r\n }\r\n const result = new Reference(this.database, expPromise);\r\n result.then = promise.then.bind(promise);\r\n result.catch = promise.catch.bind(promise, undefined);\r\n return result;\r\n }\r\n onDisconnect() {\r\n _validateWritablePath('Reference.onDisconnect', this._delegate._path);\r\n return new OnDisconnect(new OnDisconnect$1(this._delegate._repo, this._delegate._path));\r\n }\r\n get key() {\r\n return this.getKey();\r\n }\r\n get parent() {\r\n return this.getParent();\r\n }\r\n get root() {\r\n return this.getRoot();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Class representing a firebase database.\r\n */\r\nclass Database {\r\n /**\r\n * The constructor should not be called by users of our public API.\r\n */\r\n constructor(_delegate, app) {\r\n this._delegate = _delegate;\r\n this.app = app;\r\n this.INTERNAL = {\r\n delete: () => this._delegate._delete(),\r\n forceWebSockets,\r\n forceLongPolling\r\n };\r\n }\r\n /**\r\n * Modify this instance to communicate with the Realtime Database emulator.\r\n *\r\n *

Note: This method must be called before performing any other operation.\r\n *\r\n * @param host - the emulator host (ex: localhost)\r\n * @param port - the emulator port (ex: 8080)\r\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\r\n */\r\n useEmulator(host, port, options = {}) {\r\n connectDatabaseEmulator(this._delegate, host, port, options);\r\n }\r\n ref(path) {\r\n validateArgCount('database.ref', 0, 1, arguments.length);\r\n if (path instanceof Reference) {\r\n const childRef = refFromURL(this._delegate, path.toString());\r\n return new Reference(this, childRef);\r\n }\r\n else {\r\n const childRef = ref(this._delegate, path);\r\n return new Reference(this, childRef);\r\n }\r\n }\r\n /**\r\n * Returns a reference to the root or the path specified in url.\r\n * We throw a exception if the url is not in the same domain as the\r\n * current repo.\r\n * @returns Firebase reference.\r\n */\r\n refFromURL(url) {\r\n const apiName = 'database.refFromURL';\r\n validateArgCount(apiName, 1, 1, arguments.length);\r\n const childRef = refFromURL(this._delegate, url);\r\n return new Reference(this, childRef);\r\n }\r\n // Make individual repo go offline.\r\n goOffline() {\r\n validateArgCount('database.goOffline', 0, 0, arguments.length);\r\n return goOffline(this._delegate);\r\n }\r\n goOnline() {\r\n validateArgCount('database.goOnline', 0, 0, arguments.length);\r\n return goOnline(this._delegate);\r\n }\r\n}\r\nDatabase.ServerValue = {\r\n TIMESTAMP: serverTimestamp(),\r\n increment: (delta) => increment(delta)\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Used by console to create a database based on the app,\r\n * passed database URL and a custom auth implementation.\r\n *\r\n * @param app - A valid FirebaseApp-like object\r\n * @param url - A valid Firebase databaseURL\r\n * @param version - custom version e.g. firebase-admin version\r\n * @param customAuthImpl - custom auth implementation\r\n */\r\nfunction initStandalone({ app, url, version, customAuthImpl, namespace, nodeAdmin = false }) {\r\n _setSDKVersion(version);\r\n /**\r\n * ComponentContainer('database-standalone') is just a placeholder that doesn't perform\r\n * any actual function.\r\n */\r\n const authProvider = new Provider('auth-internal', new ComponentContainer('database-standalone'));\r\n authProvider.setComponent(new Component('auth-internal', () => customAuthImpl, \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n return {\r\n instance: new Database(_repoManagerDatabaseFromApp(app, authProvider, \r\n /* appCheckProvider= */ undefined, url, nodeAdmin), app),\r\n namespace\r\n };\r\n}\n\nvar INTERNAL = /*#__PURE__*/Object.freeze({\n __proto__: null,\n initStandalone: initStandalone\n});\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ServerValue = Database.ServerValue;\r\nfunction registerDatabase(instance) {\r\n // Register the Database Service with the 'firebase' namespace.\r\n instance.INTERNAL.registerComponent(new Component('database-compat', (container, { instanceIdentifier: url }) => {\r\n /* Dependencies */\r\n // getImmediate for FirebaseApp will always succeed\r\n const app = container.getProvider('app-compat').getImmediate();\r\n const databaseExp = container\r\n .getProvider('database')\r\n .getImmediate({ identifier: url });\r\n return new Database(databaseExp, app);\r\n }, \"PUBLIC\" /* ComponentType.PUBLIC */)\r\n .setServiceProps(\r\n // firebase.database namespace properties\r\n {\r\n Reference,\r\n Query,\r\n Database,\r\n DataSnapshot,\r\n enableLogging,\r\n INTERNAL,\r\n ServerValue\r\n })\r\n .setMultipleInstances(true));\r\n instance.registerVersion(name, version);\r\n}\r\nregisterDatabase(firebase);\n\nexport { registerDatabase };\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\nimport { innerFrom } from '../observable/innerFrom';\nexport function distinct(keySelector, flushes) {\n return operate((source, subscriber) => {\n const distinctKeys = new Set();\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n const key = keySelector ? keySelector(value) : value;\n if (!distinctKeys.has(key)) {\n distinctKeys.add(key);\n subscriber.next(value);\n }\n }));\n flushes && innerFrom(flushes).subscribe(createOperatorSubscriber(subscriber, () => distinctKeys.clear(), noop));\n });\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from '../observable/innerFrom';\nimport { Subject } from '../Subject';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber, OperatorSubscriber } from './OperatorSubscriber';\nexport function groupBy(keySelector, elementOrOptions, duration, connector) {\n return operate((source, subscriber) => {\n let element;\n if (!elementOrOptions || typeof elementOrOptions === 'function') {\n element = elementOrOptions;\n }\n else {\n ({ duration, element, connector } = elementOrOptions);\n }\n const groups = new Map();\n const notify = (cb) => {\n groups.forEach(cb);\n cb(subscriber);\n };\n const handleError = (err) => notify((consumer) => consumer.error(err));\n let activeGroups = 0;\n let teardownAttempted = false;\n const groupBySourceSubscriber = new OperatorSubscriber(subscriber, (value) => {\n try {\n const key = keySelector(value);\n let group = groups.get(key);\n if (!group) {\n groups.set(key, (group = connector ? connector() : new Subject()));\n const grouped = createGroupedObservable(key, group);\n subscriber.next(grouped);\n if (duration) {\n const durationSubscriber = createOperatorSubscriber(group, () => {\n group.complete();\n durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n }, undefined, undefined, () => groups.delete(key));\n groupBySourceSubscriber.add(innerFrom(duration(grouped)).subscribe(durationSubscriber));\n }\n }\n group.next(element ? element(value) : value);\n }\n catch (err) {\n handleError(err);\n }\n }, () => notify((consumer) => consumer.complete()), handleError, () => groups.clear(), () => {\n teardownAttempted = true;\n return activeGroups === 0;\n });\n source.subscribe(groupBySourceSubscriber);\n function createGroupedObservable(key, groupSubject) {\n const result = new Observable((groupSubscriber) => {\n activeGroups++;\n const innerSub = groupSubject.subscribe(groupSubscriber);\n return () => {\n innerSub.unsubscribe();\n --activeGroups === 0 && teardownAttempted && groupBySourceSubscriber.unsubscribe();\n };\n });\n result.key = key;\n return result;\n }\n });\n}\n","import { getApps as getApps$1, getApp as getApp$1, registerVersion as registerVersion$1, deleteApp as deleteApp$1, initializeApp as initializeApp$1, initializeServerApp as initializeServerApp$1, onLog as onLog$1, setLogLevel as setLogLevel$1 } from 'firebase/app';\nexport * from 'firebase/app';\nimport { from, timer } from 'rxjs';\nimport { concatMap, distinct } from 'rxjs/operators';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Optional, PLATFORM_ID, VERSION as VERSION$1, NgModule, Inject, NgZone, Injector, makeEnvironmentProviders } from '@angular/core';\nimport { VERSION, ɵAngularFireSchedulers, ɵzoneWrap } from '@angular/fire';\n\nclass FirebaseApp {\n constructor(app) {\n return app;\n }\n}\nclass FirebaseApps {\n constructor() {\n return getApps$1();\n }\n}\nconst firebaseApp$ = timer(0, 300).pipe(concatMap(() => from(getApps$1())), distinct());\n\nfunction defaultFirebaseAppFactory(provided) {\n // Use the provided app, if there is only one, otherwise fetch the default app\n if (provided && provided.length === 1) {\n return provided[0];\n }\n return new FirebaseApp(getApp$1());\n}\n// With FIREBASE_APPS I wanted to capture the default app instance, if it is initialized by\n// the reserved URL; ɵPROVIDED_FIREBASE_APPS is not for public consumption and serves to ensure that all\n// provideFirebaseApp(...) calls are satisfied before FirebaseApp$ or FirebaseApp is resolved\nconst PROVIDED_FIREBASE_APPS = new InjectionToken('angularfire2._apps');\n// Injecting FirebaseApp will now only inject the default Firebase App\n// this allows allows beginners to import /__/firebase/init.js to auto initialize Firebase App\n// from the reserved URL.\nconst DEFAULT_FIREBASE_APP_PROVIDER = {\n provide: FirebaseApp,\n useFactory: defaultFirebaseAppFactory,\n deps: [\n [new Optional(), PROVIDED_FIREBASE_APPS],\n ],\n};\nconst FIREBASE_APPS_PROVIDER = {\n provide: FirebaseApps,\n deps: [\n [new Optional(), PROVIDED_FIREBASE_APPS],\n ],\n};\nfunction firebaseAppFactory(fn) {\n return (zone, injector) => {\n const platformId = injector.get(PLATFORM_ID);\n registerVersion$1('angularfire', VERSION.full, 'core');\n registerVersion$1('angularfire', VERSION.full, 'app');\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n registerVersion$1('angular', VERSION$1.full, platformId.toString());\n const app = zone.runOutsideAngular(() => fn(injector));\n return new FirebaseApp(app);\n };\n}\nclass FirebaseAppModule {\n // eslint-disable-next-line @typescript-eslint/ban-types\n constructor(platformId) {\n registerVersion$1('angularfire', VERSION.full, 'core');\n registerVersion$1('angularfire', VERSION.full, 'app');\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n registerVersion$1('angular', VERSION$1.full, platformId.toString());\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: FirebaseAppModule, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.6\", ngImport: i0, type: FirebaseAppModule });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: FirebaseAppModule, providers: [\n DEFAULT_FIREBASE_APP_PROVIDER,\n FIREBASE_APPS_PROVIDER,\n ] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: FirebaseAppModule, decorators: [{\n type: NgModule,\n args: [{\n providers: [\n DEFAULT_FIREBASE_APP_PROVIDER,\n FIREBASE_APPS_PROVIDER,\n ]\n }]\n }], ctorParameters: () => [{ type: Object, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }] });\n// Calling initializeApp({ ... }, 'name') multiple times will add more FirebaseApps into the FIREBASE_APPS\n// injection scope. This allows developers to more easily work with multiple Firebase Applications. Downside\n// is that DI for app name and options doesn't really make sense anymore.\nfunction provideFirebaseApp(fn, ...deps) {\n return makeEnvironmentProviders([\n DEFAULT_FIREBASE_APP_PROVIDER,\n FIREBASE_APPS_PROVIDER,\n {\n provide: PROVIDED_FIREBASE_APPS,\n useFactory: firebaseAppFactory(fn),\n multi: true,\n deps: [\n NgZone,\n Injector,\n ɵAngularFireSchedulers,\n ...deps,\n ],\n }\n ]);\n}\n\n// DO NOT MODIFY, this file is autogenerated by tools/build.ts\nconst deleteApp = ɵzoneWrap(deleteApp$1, true);\nconst getApp = ɵzoneWrap(getApp$1, true);\nconst getApps = ɵzoneWrap(getApps$1, true);\nconst initializeApp = ɵzoneWrap(initializeApp$1, true);\nconst initializeServerApp = ɵzoneWrap(initializeServerApp$1, true);\nconst onLog = ɵzoneWrap(onLog$1, true);\nconst registerVersion = ɵzoneWrap(registerVersion$1, true);\nconst setLogLevel = ɵzoneWrap(setLogLevel$1, true);\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { FirebaseApp, FirebaseAppModule, FirebaseApps, deleteApp, firebaseApp$, getApp, getApps, initializeApp, initializeServerApp, onLog, provideFirebaseApp, registerVersion, setLogLevel };\n","import { onAuthStateChanged, onIdTokenChanged, getIdToken } from 'firebase/auth';\nimport { Observable, from, of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Create an observable of authentication state. The observer is only\n * triggered on sign-in or sign-out.\n * @param auth firebase.auth.Auth\n */\nfunction authState(auth) {\n return new Observable(function (subscriber) {\n var unsubscribe = onAuthStateChanged(auth, subscriber.next.bind(subscriber), subscriber.error.bind(subscriber), subscriber.complete.bind(subscriber));\n return { unsubscribe: unsubscribe };\n });\n}\n/**\n * Create an observable of user state. The observer is triggered for sign-in,\n * sign-out, and token refresh events\n * @param auth firebase.auth.Auth\n */\nfunction user(auth) {\n return new Observable(function (subscriber) {\n var unsubscribe = onIdTokenChanged(auth, subscriber.next.bind(subscriber), subscriber.error.bind(subscriber), subscriber.complete.bind(subscriber));\n return { unsubscribe: unsubscribe };\n });\n}\n/**\n * Create an observable of idToken state. The observer is triggered for sign-in,\n * sign-out, and token refresh events\n * @param auth firebase.auth.Auth\n */\nfunction idToken(auth) {\n return user(auth).pipe(switchMap(function (user) { return (user ? from(getIdToken(user)) : of(null)); }));\n}\n\nexport { authState, idToken, user };\n","import { ɵgetAllInstancesOf, ɵgetDefaultInstanceOf, VERSION, ɵAngularFireSchedulers, ɵAppCheckInstances, ɵzoneWrap } from '@angular/fire';\nimport { from, timer } from 'rxjs';\nimport { concatMap, distinct } from 'rxjs/operators';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Optional, NgModule, NgZone, Injector, makeEnvironmentProviders } from '@angular/core';\nimport { FirebaseApp, FirebaseApps } from '@angular/fire/app';\nimport { registerVersion } from 'firebase/app';\nimport { authState as authState$1, user as user$1, idToken as idToken$1 } from 'rxfire/auth';\nimport { applyActionCode as applyActionCode$1, beforeAuthStateChanged as beforeAuthStateChanged$1, checkActionCode as checkActionCode$1, confirmPasswordReset as confirmPasswordReset$1, connectAuthEmulator as connectAuthEmulator$1, createUserWithEmailAndPassword as createUserWithEmailAndPassword$1, deleteUser as deleteUser$1, fetchSignInMethodsForEmail as fetchSignInMethodsForEmail$1, getAdditionalUserInfo as getAdditionalUserInfo$1, getAuth as getAuth$1, getIdToken as getIdToken$1, getIdTokenResult as getIdTokenResult$1, getMultiFactorResolver as getMultiFactorResolver$1, getRedirectResult as getRedirectResult$1, initializeAuth as initializeAuth$1, initializeRecaptchaConfig as initializeRecaptchaConfig$1, isSignInWithEmailLink as isSignInWithEmailLink$1, linkWithCredential as linkWithCredential$1, linkWithPhoneNumber as linkWithPhoneNumber$1, linkWithPopup as linkWithPopup$1, linkWithRedirect as linkWithRedirect$1, multiFactor as multiFactor$1, onAuthStateChanged as onAuthStateChanged$1, onIdTokenChanged as onIdTokenChanged$1, parseActionCodeURL as parseActionCodeURL$1, reauthenticateWithCredential as reauthenticateWithCredential$1, reauthenticateWithPhoneNumber as reauthenticateWithPhoneNumber$1, reauthenticateWithPopup as reauthenticateWithPopup$1, reauthenticateWithRedirect as reauthenticateWithRedirect$1, reload as reload$1, revokeAccessToken as revokeAccessToken$1, sendEmailVerification as sendEmailVerification$1, sendPasswordResetEmail as sendPasswordResetEmail$1, sendSignInLinkToEmail as sendSignInLinkToEmail$1, setPersistence as setPersistence$1, signInAnonymously as signInAnonymously$1, signInWithCredential as signInWithCredential$1, signInWithCustomToken as signInWithCustomToken$1, signInWithEmailAndPassword as signInWithEmailAndPassword$1, signInWithEmailLink as signInWithEmailLink$1, signInWithPhoneNumber as signInWithPhoneNumber$1, signInWithPopup as signInWithPopup$1, signInWithRedirect as signInWithRedirect$1, signOut as signOut$1, unlink as unlink$1, updateCurrentUser as updateCurrentUser$1, updateEmail as updateEmail$1, updatePassword as updatePassword$1, updatePhoneNumber as updatePhoneNumber$1, updateProfile as updateProfile$1, useDeviceLanguage as useDeviceLanguage$1, validatePassword as validatePassword$1, verifyBeforeUpdateEmail as verifyBeforeUpdateEmail$1, verifyPasswordResetCode as verifyPasswordResetCode$1 } from 'firebase/auth';\nexport * from 'firebase/auth';\n\nconst AUTH_PROVIDER_NAME = 'auth';\nclass Auth {\n constructor(auth) {\n return auth;\n }\n}\nclass AuthInstances {\n constructor() {\n return ɵgetAllInstancesOf(AUTH_PROVIDER_NAME);\n }\n}\nconst authInstance$ = timer(0, 300).pipe(concatMap(() => from(ɵgetAllInstancesOf(AUTH_PROVIDER_NAME))), distinct());\n\nconst PROVIDED_AUTH_INSTANCES = new InjectionToken('angularfire2.auth-instances');\nfunction defaultAuthInstanceFactory(provided, defaultApp) {\n const defaultAuth = ɵgetDefaultInstanceOf(AUTH_PROVIDER_NAME, provided, defaultApp);\n return defaultAuth && new Auth(defaultAuth);\n}\nfunction authInstanceFactory(fn) {\n return (zone, injector) => {\n const auth = zone.runOutsideAngular(() => fn(injector));\n return new Auth(auth);\n };\n}\nconst AUTH_INSTANCES_PROVIDER = {\n provide: AuthInstances,\n deps: [\n [new Optional(), PROVIDED_AUTH_INSTANCES],\n ]\n};\nconst DEFAULT_AUTH_INSTANCE_PROVIDER = {\n provide: Auth,\n useFactory: defaultAuthInstanceFactory,\n deps: [\n [new Optional(), PROVIDED_AUTH_INSTANCES],\n FirebaseApp,\n ]\n};\nclass AuthModule {\n constructor() {\n registerVersion('angularfire', VERSION.full, 'auth');\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.6\", ngImport: i0, type: AuthModule });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AuthModule, providers: [\n DEFAULT_AUTH_INSTANCE_PROVIDER,\n AUTH_INSTANCES_PROVIDER,\n ] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AuthModule, decorators: [{\n type: NgModule,\n args: [{\n providers: [\n DEFAULT_AUTH_INSTANCE_PROVIDER,\n AUTH_INSTANCES_PROVIDER,\n ]\n }]\n }], ctorParameters: () => [] });\nfunction provideAuth(fn, ...deps) {\n registerVersion('angularfire', VERSION.full, 'auth');\n return makeEnvironmentProviders([\n DEFAULT_AUTH_INSTANCE_PROVIDER,\n AUTH_INSTANCES_PROVIDER,\n {\n provide: PROVIDED_AUTH_INSTANCES,\n useFactory: authInstanceFactory(fn),\n multi: true,\n deps: [\n NgZone,\n Injector,\n ɵAngularFireSchedulers,\n FirebaseApps,\n [new Optional(), ɵAppCheckInstances],\n ...deps,\n ]\n }\n ]);\n}\n\n// DO NOT MODIFY, this file is autogenerated by tools/build.ts\nconst authState = ɵzoneWrap(authState$1, true);\nconst user = ɵzoneWrap(user$1, true);\nconst idToken = ɵzoneWrap(idToken$1, true);\n\n// DO NOT MODIFY, this file is autogenerated by tools/build.ts\nconst applyActionCode = ɵzoneWrap(applyActionCode$1, true);\nconst beforeAuthStateChanged = ɵzoneWrap(beforeAuthStateChanged$1, true);\nconst checkActionCode = ɵzoneWrap(checkActionCode$1, true);\nconst confirmPasswordReset = ɵzoneWrap(confirmPasswordReset$1, true);\nconst connectAuthEmulator = ɵzoneWrap(connectAuthEmulator$1, true);\nconst createUserWithEmailAndPassword = ɵzoneWrap(createUserWithEmailAndPassword$1, true);\nconst deleteUser = ɵzoneWrap(deleteUser$1, true);\nconst fetchSignInMethodsForEmail = ɵzoneWrap(fetchSignInMethodsForEmail$1, true);\nconst getAdditionalUserInfo = ɵzoneWrap(getAdditionalUserInfo$1, true);\nconst getAuth = ɵzoneWrap(getAuth$1, true);\nconst getIdToken = ɵzoneWrap(getIdToken$1, true);\nconst getIdTokenResult = ɵzoneWrap(getIdTokenResult$1, true);\nconst getMultiFactorResolver = ɵzoneWrap(getMultiFactorResolver$1, true);\nconst getRedirectResult = ɵzoneWrap(getRedirectResult$1, true);\nconst initializeAuth = ɵzoneWrap(initializeAuth$1, true);\nconst initializeRecaptchaConfig = ɵzoneWrap(initializeRecaptchaConfig$1, true);\nconst isSignInWithEmailLink = ɵzoneWrap(isSignInWithEmailLink$1, true);\nconst linkWithCredential = ɵzoneWrap(linkWithCredential$1, true);\nconst linkWithPhoneNumber = ɵzoneWrap(linkWithPhoneNumber$1, true);\nconst linkWithPopup = ɵzoneWrap(linkWithPopup$1, true);\nconst linkWithRedirect = ɵzoneWrap(linkWithRedirect$1, true);\nconst multiFactor = ɵzoneWrap(multiFactor$1, true);\nconst onAuthStateChanged = ɵzoneWrap(onAuthStateChanged$1, true);\nconst onIdTokenChanged = ɵzoneWrap(onIdTokenChanged$1, true);\nconst parseActionCodeURL = ɵzoneWrap(parseActionCodeURL$1, true);\nconst reauthenticateWithCredential = ɵzoneWrap(reauthenticateWithCredential$1, true);\nconst reauthenticateWithPhoneNumber = ɵzoneWrap(reauthenticateWithPhoneNumber$1, true);\nconst reauthenticateWithPopup = ɵzoneWrap(reauthenticateWithPopup$1, true);\nconst reauthenticateWithRedirect = ɵzoneWrap(reauthenticateWithRedirect$1, true);\nconst reload = ɵzoneWrap(reload$1, true);\nconst revokeAccessToken = ɵzoneWrap(revokeAccessToken$1, true);\nconst sendEmailVerification = ɵzoneWrap(sendEmailVerification$1, true);\nconst sendPasswordResetEmail = ɵzoneWrap(sendPasswordResetEmail$1, true);\nconst sendSignInLinkToEmail = ɵzoneWrap(sendSignInLinkToEmail$1, true);\nconst setPersistence = ɵzoneWrap(setPersistence$1, true);\nconst signInAnonymously = ɵzoneWrap(signInAnonymously$1, true);\nconst signInWithCredential = ɵzoneWrap(signInWithCredential$1, true);\nconst signInWithCustomToken = ɵzoneWrap(signInWithCustomToken$1, true);\nconst signInWithEmailAndPassword = ɵzoneWrap(signInWithEmailAndPassword$1, true);\nconst signInWithEmailLink = ɵzoneWrap(signInWithEmailLink$1, true);\nconst signInWithPhoneNumber = ɵzoneWrap(signInWithPhoneNumber$1, true);\nconst signInWithPopup = ɵzoneWrap(signInWithPopup$1, true);\nconst signInWithRedirect = ɵzoneWrap(signInWithRedirect$1, true);\nconst signOut = ɵzoneWrap(signOut$1, true);\nconst unlink = ɵzoneWrap(unlink$1, true);\nconst updateCurrentUser = ɵzoneWrap(updateCurrentUser$1, true);\nconst updateEmail = ɵzoneWrap(updateEmail$1, true);\nconst updatePassword = ɵzoneWrap(updatePassword$1, true);\nconst updatePhoneNumber = ɵzoneWrap(updatePhoneNumber$1, true);\nconst updateProfile = ɵzoneWrap(updateProfile$1, true);\nconst useDeviceLanguage = ɵzoneWrap(useDeviceLanguage$1, true);\nconst validatePassword = ɵzoneWrap(validatePassword$1, true);\nconst verifyBeforeUpdateEmail = ɵzoneWrap(verifyBeforeUpdateEmail$1, true);\nconst verifyPasswordResetCode = ɵzoneWrap(verifyPasswordResetCode$1, true);\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Auth, AuthInstances, AuthModule, applyActionCode, authInstance$, authState, beforeAuthStateChanged, checkActionCode, confirmPasswordReset, connectAuthEmulator, createUserWithEmailAndPassword, deleteUser, fetchSignInMethodsForEmail, getAdditionalUserInfo, getAuth, getIdToken, getIdTokenResult, getMultiFactorResolver, getRedirectResult, idToken, initializeAuth, initializeRecaptchaConfig, isSignInWithEmailLink, linkWithCredential, linkWithPhoneNumber, linkWithPopup, linkWithRedirect, multiFactor, onAuthStateChanged, onIdTokenChanged, parseActionCodeURL, provideAuth, reauthenticateWithCredential, reauthenticateWithPhoneNumber, reauthenticateWithPopup, reauthenticateWithRedirect, reload, revokeAccessToken, sendEmailVerification, sendPasswordResetEmail, sendSignInLinkToEmail, setPersistence, signInAnonymously, signInWithCredential, signInWithCustomToken, signInWithEmailAndPassword, signInWithEmailLink, signInWithPhoneNumber, signInWithPopup, signInWithRedirect, signOut, unlink, updateCurrentUser, updateEmail, updatePassword, updatePhoneNumber, updateProfile, useDeviceLanguage, user, validatePassword, verifyBeforeUpdateEmail, verifyPasswordResetCode };\n","import { ɵgetAllInstancesOf, ɵisSupportedError, ɵzoneWrap, VERSION, ɵgetDefaultInstanceOf, ɵAngularFireSchedulers } from '@angular/fire';\nimport { from, timer, of } from 'rxjs';\nimport { concatMap, distinct, filter, switchMap, map, groupBy, distinctUntilChanged, startWith, pairwise, mergeMap } from 'rxjs/operators';\nimport * as i0 from '@angular/core';\nimport { Injectable, Optional, InjectionToken, APP_INITIALIZER, NgModule, NgZone, Injector, makeEnvironmentProviders } from '@angular/core';\nimport { FirebaseApp, FirebaseApps } from '@angular/fire/app';\nimport { registerVersion } from 'firebase/app';\nimport { isSupported as isSupported$1, getAnalytics as getAnalytics$1, getGoogleAnalyticsClientId as getGoogleAnalyticsClientId$1, initializeAnalytics as initializeAnalytics$1, logEvent as logEvent$1, setAnalyticsCollectionEnabled as setAnalyticsCollectionEnabled$1, setConsent as setConsent$1, setCurrentScreen as setCurrentScreen$1, setDefaultEventParameters as setDefaultEventParameters$1, settings as settings$1, setUserId as setUserId$1, setUserProperties as setUserProperties$1 } from 'firebase/analytics';\nexport * from 'firebase/analytics';\nimport * as i2 from '@angular/platform-browser';\nimport * as i1$1 from '@angular/router';\nimport { ActivationEnd, ɵEmptyOutletComponent } from '@angular/router';\nimport * as i1 from '@angular/fire/auth';\nimport { authState } from '@angular/fire/auth';\n\nclass Analytics {\n constructor(analytics) {\n return analytics;\n }\n}\nconst ANALYTICS_PROVIDER_NAME = 'analytics';\nclass AnalyticsInstances {\n constructor() {\n return ɵgetAllInstancesOf(ANALYTICS_PROVIDER_NAME);\n }\n}\nconst analyticInstance$ = timer(0, 300).pipe(concatMap(() => from(ɵgetAllInstancesOf(ANALYTICS_PROVIDER_NAME))), distinct());\n\nconst isAnalyticsSupportedValueSymbol = '__angularfire_symbol__analyticsIsSupportedValue';\nconst isAnalyticsSupportedPromiseSymbol = '__angularfire_symbol__analyticsIsSupported';\nglobalThis[isAnalyticsSupportedPromiseSymbol] ||= isSupported$1().then(it => globalThis[isAnalyticsSupportedValueSymbol] = it).catch(() => globalThis[isAnalyticsSupportedValueSymbol] = false);\nconst isAnalyticsSupportedFactory = {\n async: () => globalThis[isAnalyticsSupportedPromiseSymbol],\n sync: () => {\n const ret = globalThis[isAnalyticsSupportedValueSymbol];\n if (ret === undefined) {\n throw new Error(ɵisSupportedError('Analytics'));\n }\n return ret;\n }\n};\n\nconst isSupported = isAnalyticsSupportedFactory.async;\n\n// DO NOT MODIFY, this file is autogenerated by tools/build.ts\nconst getAnalytics = ɵzoneWrap(getAnalytics$1, true);\nconst getGoogleAnalyticsClientId = ɵzoneWrap(getGoogleAnalyticsClientId$1, true);\nconst initializeAnalytics = ɵzoneWrap(initializeAnalytics$1, true);\nconst logEvent = ɵzoneWrap(logEvent$1, true);\nconst setAnalyticsCollectionEnabled = ɵzoneWrap(setAnalyticsCollectionEnabled$1, true);\nconst setConsent = ɵzoneWrap(setConsent$1, true);\nconst setCurrentScreen = ɵzoneWrap(setCurrentScreen$1, true);\nconst setDefaultEventParameters = ɵzoneWrap(setDefaultEventParameters$1, true);\nconst settings = ɵzoneWrap(settings$1, true);\nconst setUserId = ɵzoneWrap(setUserId$1, true);\nconst setUserProperties = ɵzoneWrap(setUserProperties$1, true);\n\nclass UserTrackingService {\n initialized;\n disposables = [];\n constructor(auth, zone, injector) {\n registerVersion('angularfire', VERSION.full, 'user-tracking');\n let resolveInitialized;\n this.initialized = zone.runOutsideAngular(() => new Promise(resolve => { resolveInitialized = resolve; }));\n // The APP_INITIALIZER that is making isSupported() sync for the sake of convenient DI\n // may not be done when services are initialized. Guard the functionality by first ensuring\n // that the (global) promise has resolved, then get Analytics from the injector.\n isSupported().then(() => {\n const analytics = injector.get(Analytics);\n if (analytics) {\n this.disposables = [\n // TODO add credential tracking back in\n authState(auth).subscribe(user => {\n setUserId(analytics, user?.uid);\n resolveInitialized();\n }),\n ];\n }\n else {\n resolveInitialized();\n }\n });\n }\n ngOnDestroy() {\n this.disposables.forEach(it => it.unsubscribe());\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: UserTrackingService, deps: [{ token: i1.Auth }, { token: i0.NgZone }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: UserTrackingService });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: UserTrackingService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i1.Auth }, { type: i0.NgZone }, { type: i0.Injector }] });\n\nconst FIREBASE_EVENT_ORIGIN_KEY = 'firebase_event_origin';\nconst FIREBASE_PREVIOUS_SCREEN_CLASS_KEY = 'firebase_previous_class';\nconst FIREBASE_PREVIOUS_SCREEN_INSTANCE_ID_KEY = 'firebase_previous_id';\nconst FIREBASE_PREVIOUS_SCREEN_NAME_KEY = 'firebase_previous_screen';\nconst FIREBASE_SCREEN_CLASS_KEY = 'firebase_screen_class';\nconst FIREBASE_SCREEN_INSTANCE_ID_KEY = 'firebase_screen_id';\nconst FIREBASE_SCREEN_NAME_KEY = 'firebase_screen';\nconst OUTLET_KEY = 'outlet';\nconst PAGE_PATH_KEY = 'page_path';\nconst PAGE_TITLE_KEY = 'page_title';\nconst SCREEN_CLASS_KEY = 'screen_class';\nconst SCREEN_NAME_KEY = 'screen_name';\nconst SCREEN_VIEW_EVENT = 'screen_view';\nconst EVENT_ORIGIN_AUTO = 'auto';\nconst SCREEN_INSTANCE_DELIMITER = '#';\n// this is an INT64 in iOS/Android but use INT32 cause javascript\nlet nextScreenInstanceID = Math.floor(Math.random() * (2 ** 32 - 1)) - 2 ** 31;\nconst knownScreenInstanceIDs = {};\nconst getScreenInstanceID = (params) => {\n // unique the screen class against the outlet name\n const screenInstanceKey = [\n params[SCREEN_CLASS_KEY],\n params[OUTLET_KEY]\n ].join(SCREEN_INSTANCE_DELIMITER);\n // eslint-disable-next-line no-prototype-builtins\n if (knownScreenInstanceIDs.hasOwnProperty(screenInstanceKey)) {\n return knownScreenInstanceIDs[screenInstanceKey];\n }\n else {\n const ret = nextScreenInstanceID++;\n knownScreenInstanceIDs[screenInstanceKey] = ret;\n return ret;\n }\n};\nconst ɵscreenViewEvent = (router, title, componentFactoryResolver) => {\n const activationEndEvents = router.events.pipe(filter(e => e instanceof ActivationEnd));\n return activationEndEvents.pipe(switchMap(activationEnd => {\n // router parseUrl is having trouble with outlets when they're empty\n // e.g, /asdf/1(bob://sally:asdf), so put another slash in when empty\n const urlTree = router.parseUrl(router.url.replace(/(?:\\().+(?:\\))/g, a => a.replace('://', ':///')));\n const pagePath = urlTree.root.children[activationEnd.snapshot.outlet]?.toString() || '';\n const actualSnapshot = router.routerState.root.children.map(it => it).find(it => it.outlet === activationEnd.snapshot.outlet);\n if (!actualSnapshot) {\n return of(null);\n }\n let actualDeep = actualSnapshot;\n while (actualDeep.firstChild) {\n actualDeep = actualDeep.firstChild;\n }\n const screenName = actualDeep.pathFromRoot.map(s => s.routeConfig?.path).filter(it => it).join('/') || '/';\n const params = {\n [SCREEN_NAME_KEY]: screenName,\n [PAGE_PATH_KEY]: `/${pagePath}`,\n [FIREBASE_EVENT_ORIGIN_KEY]: EVENT_ORIGIN_AUTO,\n [FIREBASE_SCREEN_NAME_KEY]: screenName,\n [OUTLET_KEY]: activationEnd.snapshot.outlet\n };\n if (title) {\n params[PAGE_TITLE_KEY] = title.getTitle();\n }\n let component = actualSnapshot.component;\n if (component) {\n if (component === ɵEmptyOutletComponent) {\n let deepSnapshot = activationEnd.snapshot;\n // TODO when might there be mutple children, different outlets? explore\n while (deepSnapshot.firstChild) {\n deepSnapshot = deepSnapshot.firstChild;\n }\n component = deepSnapshot.component;\n }\n }\n else {\n component = activationEnd.snapshot.component;\n }\n if (typeof component === 'string') {\n return of({ ...params, [SCREEN_CLASS_KEY]: component });\n }\n else if (component) {\n const componentFactory = componentFactoryResolver.resolveComponentFactory(component);\n return of({ ...params, [SCREEN_CLASS_KEY]: componentFactory.selector });\n }\n // lazy loads cause extra activations, ignore\n return of(null);\n }), filter(it => !!it), map(params => ({\n [FIREBASE_SCREEN_CLASS_KEY]: params[SCREEN_CLASS_KEY],\n [FIREBASE_SCREEN_INSTANCE_ID_KEY]: getScreenInstanceID(params),\n ...params\n })), groupBy(it => it[OUTLET_KEY]), mergeMap(it => it.pipe(distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)), startWith(undefined), pairwise(), map(([prior, current]) => prior ? {\n [FIREBASE_PREVIOUS_SCREEN_CLASS_KEY]: prior[SCREEN_CLASS_KEY],\n [FIREBASE_PREVIOUS_SCREEN_NAME_KEY]: prior[SCREEN_NAME_KEY],\n [FIREBASE_PREVIOUS_SCREEN_INSTANCE_ID_KEY]: prior[FIREBASE_SCREEN_INSTANCE_ID_KEY],\n ...current\n } : current))));\n};\nclass ScreenTrackingService {\n disposable;\n constructor(router, title, componentFactoryResolver, zone, userTrackingService, injector) {\n registerVersion('angularfire', VERSION.full, 'screen-tracking');\n // The APP_INITIALIZER that is making isSupported() sync for the sake of convenient DI\n // may not be done when services are initialized. Guard the functionality by first ensuring\n // that the (global) promise has resolved, then get Analytics from the injector.\n isSupported().then(() => {\n const analytics = injector.get(Analytics);\n if (!router || !analytics) {\n return;\n }\n zone.runOutsideAngular(() => {\n this.disposable = ɵscreenViewEvent(router, title, componentFactoryResolver).pipe(switchMap(async (params) => {\n if (userTrackingService) {\n await userTrackingService.initialized;\n }\n return logEvent(analytics, SCREEN_VIEW_EVENT, params);\n })).subscribe();\n });\n });\n }\n ngOnDestroy() {\n if (this.disposable) {\n this.disposable.unsubscribe();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: ScreenTrackingService, deps: [{ token: i1$1.Router, optional: true }, { token: i2.Title, optional: true }, { token: i0.ComponentFactoryResolver }, { token: i0.NgZone }, { token: UserTrackingService, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: ScreenTrackingService });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: ScreenTrackingService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i1$1.Router, decorators: [{\n type: Optional\n }] }, { type: i2.Title, decorators: [{\n type: Optional\n }] }, { type: i0.ComponentFactoryResolver }, { type: i0.NgZone }, { type: UserTrackingService, decorators: [{\n type: Optional\n }] }, { type: i0.Injector }] });\n\nconst PROVIDED_ANALYTICS_INSTANCES = new InjectionToken('angularfire2.analytics-instances');\nfunction defaultAnalyticsInstanceFactory(provided, defaultApp) {\n if (!isAnalyticsSupportedFactory.sync()) {\n return null;\n }\n const defaultAnalytics = ɵgetDefaultInstanceOf(ANALYTICS_PROVIDER_NAME, provided, defaultApp);\n return defaultAnalytics && new Analytics(defaultAnalytics);\n}\nfunction analyticsInstanceFactory(fn) {\n return (zone, injector) => {\n if (!isAnalyticsSupportedFactory.sync()) {\n return null;\n }\n const analytics = zone.runOutsideAngular(() => fn(injector));\n return new Analytics(analytics);\n };\n}\nconst ANALYTICS_INSTANCES_PROVIDER = {\n provide: AnalyticsInstances,\n deps: [\n [new Optional(), PROVIDED_ANALYTICS_INSTANCES],\n ]\n};\nconst DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {\n provide: Analytics,\n useFactory: defaultAnalyticsInstanceFactory,\n deps: [\n [new Optional(), PROVIDED_ANALYTICS_INSTANCES],\n FirebaseApp,\n ]\n};\nclass AnalyticsModule {\n constructor(_screenTrackingService, _userTrackingService) {\n registerVersion('angularfire', VERSION.full, 'analytics');\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AnalyticsModule, deps: [{ token: ScreenTrackingService, optional: true }, { token: UserTrackingService, optional: true }], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.6\", ngImport: i0, type: AnalyticsModule });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AnalyticsModule, providers: [\n DEFAULT_ANALYTICS_INSTANCE_PROVIDER,\n ANALYTICS_INSTANCES_PROVIDER,\n {\n provide: APP_INITIALIZER,\n useValue: isAnalyticsSupportedFactory.async,\n multi: true,\n }\n ] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AnalyticsModule, decorators: [{\n type: NgModule,\n args: [{\n providers: [\n DEFAULT_ANALYTICS_INSTANCE_PROVIDER,\n ANALYTICS_INSTANCES_PROVIDER,\n {\n provide: APP_INITIALIZER,\n useValue: isAnalyticsSupportedFactory.async,\n multi: true,\n }\n ]\n }]\n }], ctorParameters: () => [{ type: ScreenTrackingService, decorators: [{\n type: Optional\n }] }, { type: UserTrackingService, decorators: [{\n type: Optional\n }] }] });\nfunction provideAnalytics(fn, ...deps) {\n registerVersion('angularfire', VERSION.full, 'analytics');\n return makeEnvironmentProviders([\n DEFAULT_ANALYTICS_INSTANCE_PROVIDER,\n ANALYTICS_INSTANCES_PROVIDER,\n {\n provide: APP_INITIALIZER,\n useValue: isAnalyticsSupportedFactory.async,\n multi: true,\n },\n {\n provide: PROVIDED_ANALYTICS_INSTANCES,\n useFactory: analyticsInstanceFactory(fn),\n multi: true,\n deps: [\n NgZone,\n Injector,\n ɵAngularFireSchedulers,\n FirebaseApps,\n ...deps,\n ],\n },\n ]);\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Analytics, AnalyticsInstances, AnalyticsModule, ScreenTrackingService, UserTrackingService, analyticInstance$, getAnalytics, getGoogleAnalyticsClientId, initializeAnalytics, isSupported, logEvent, provideAnalytics, setAnalyticsCollectionEnabled, setConsent, setCurrentScreen, setDefaultEventParameters, setUserId, setUserProperties, settings, ɵscreenViewEvent };\n","import { isPlatformBrowser, isPlatformServer } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, PLATFORM_ID, Injectable, Optional, Inject, NgModule } from '@angular/core';\nimport * as i2 from '@angular/fire';\nimport { VERSION } from '@angular/fire';\nimport * as i1 from '@angular/fire/compat';\nimport { ɵcacheInstance, ɵlazySDKProxy, ɵapplyMixins } from '@angular/fire/compat';\nimport { isSupported } from 'firebase/analytics';\nimport { EMPTY, of } from 'rxjs';\nimport { observeOn, switchMap, map, shareReplay } from 'rxjs/operators';\nimport firebase from 'firebase/compat/app';\nimport { ɵscreenViewEvent } from '@angular/fire/analytics';\nimport * as i3 from '@angular/platform-browser';\nimport * as i2$2 from '@angular/router';\nimport * as i2$1 from '@angular/fire/compat/auth';\n\n// DO NOT MODIFY, this file is autogenerated by tools/build.ts\n// Export a null object with the same keys as firebase/compat/analytics, so Proxy can work with proxy-polyfill in Internet Explorer\nconst proxyPolyfillCompat = {\n app: null,\n logEvent: null,\n setCurrentScreen: null,\n setUserId: null,\n setUserProperties: null,\n setAnalyticsCollectionEnabled: null,\n};\n\nconst COLLECTION_ENABLED = new InjectionToken('angularfire2.analytics.analyticsCollectionEnabled');\nconst APP_VERSION = new InjectionToken('angularfire2.analytics.appVersion');\nconst APP_NAME = new InjectionToken('angularfire2.analytics.appName');\nconst DEBUG_MODE = new InjectionToken('angularfire2.analytics.debugMode');\nconst CONFIG = new InjectionToken('angularfire2.analytics.config');\nconst APP_NAME_KEY = 'app_name';\nconst APP_VERSION_KEY = 'app_version';\nconst DEBUG_MODE_KEY = 'debug_mode';\nconst GTAG_CONFIG_COMMAND = 'config';\nconst GTAG_FUNCTION_NAME = 'gtag'; // TODO rename these\nconst DATA_LAYER_NAME = 'dataLayer';\nconst SEND_TO_KEY = 'send_to';\nclass AngularFireAnalytics {\n measurementId;\n analyticsInitialized = new Promise(() => undefined);\n async updateConfig(config) {\n await this.analyticsInitialized;\n window[GTAG_FUNCTION_NAME](GTAG_CONFIG_COMMAND, this.measurementId, { ...config, update: true });\n }\n constructor(app, analyticsCollectionEnabled, providedAppVersion, providedAppName, debugModeEnabled, providedConfig, \n // eslint-disable-next-line @typescript-eslint/ban-types\n platformId, zone, schedulers) {\n if (isPlatformBrowser(platformId)) {\n window[DATA_LAYER_NAME] = window[DATA_LAYER_NAME] || [];\n // It turns out we can't rely on the measurementId in the Firebase config JSON\n // this identifier is not stable. firebase/analytics does a call to get a fresh value\n // falling back on the one in the config. Rather than do that ourselves we should listen\n // on our gtag function for a analytics config command\n // e.g, ['config', measurementId, { origin: 'firebase', firebase_id }]\n const parseMeasurementId = (...args) => {\n if (args[0] === 'config' && args[2].origin === 'firebase') {\n this.measurementId = args[1];\n return true;\n }\n else {\n return false;\n }\n };\n const patchGtag = (fn) => {\n window[GTAG_FUNCTION_NAME] = (...args) => {\n if (fn) {\n fn(...args);\n }\n // Inject app_name and app_version into events\n // TODO(jamesdaniels): I'm doing this as documented but it's still not\n // showing up in the console. Investigate. Guessing it's just part of the\n // whole GA4 transition mess.\n if (args[0] === 'event' && args[2][SEND_TO_KEY] === this.measurementId) {\n if (providedAppName) {\n args[2][APP_NAME_KEY] = providedAppName;\n }\n if (providedAppVersion) {\n args[2][APP_VERSION_KEY] = providedAppVersion;\n }\n }\n if (debugModeEnabled && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.info(...args);\n }\n /**\n * According to the gtag documentation, this function that defines a custom data layer cannot be\n * an arrow function because 'arguments' is not an array. It is actually an object that behaves\n * like an array and contains more information then just indexes. Transforming this into arrow function\n * caused issue #2505 where analytics no longer sent any data.\n */\n (function (..._args) {\n window[DATA_LAYER_NAME].push(arguments);\n })(...args);\n };\n };\n // Unclear if we still need to but I was running into config/events I passed\n // to gtag before ['js' timestamp] weren't getting parsed, so let's make a promise\n // that resolves when firebase/analytics has configured gtag.js that we wait on\n // before sending anything\n const firebaseAnalyticsAlreadyInitialized = window[DATA_LAYER_NAME].some(parseMeasurementId);\n if (firebaseAnalyticsAlreadyInitialized) {\n this.analyticsInitialized = Promise.resolve();\n patchGtag();\n }\n else {\n this.analyticsInitialized = new Promise(resolve => {\n patchGtag((...args) => {\n if (parseMeasurementId(...args)) {\n resolve();\n }\n });\n });\n }\n if (providedConfig) {\n this.updateConfig(providedConfig);\n }\n if (debugModeEnabled) {\n this.updateConfig({ [DEBUG_MODE_KEY]: 1 });\n }\n }\n else {\n this.analyticsInitialized = Promise.resolve();\n }\n const analytics = of(undefined).pipe(observeOn(schedulers.outsideAngular), switchMap(isSupported), switchMap(supported => supported ? zone.runOutsideAngular(() => import('firebase/compat/analytics')) : EMPTY), map(() => {\n return ɵcacheInstance(`analytics`, 'AngularFireAnalytics', app.name, () => {\n const analytics = app.analytics();\n if (analyticsCollectionEnabled === false) {\n analytics.setAnalyticsCollectionEnabled(false);\n }\n return analytics;\n }, [app, analyticsCollectionEnabled, providedConfig, debugModeEnabled]);\n }), shareReplay({ bufferSize: 1, refCount: false }));\n return ɵlazySDKProxy(this, analytics, zone);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireAnalytics, deps: [{ token: i1.FirebaseApp }, { token: COLLECTION_ENABLED, optional: true }, { token: APP_VERSION, optional: true }, { token: APP_NAME, optional: true }, { token: DEBUG_MODE, optional: true }, { token: CONFIG, optional: true }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: i2.ɵAngularFireSchedulers }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireAnalytics, providedIn: 'any' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireAnalytics, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'any'\n }]\n }], ctorParameters: () => [{ type: i1.FirebaseApp }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [COLLECTION_ENABLED]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [APP_VERSION]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [APP_NAME]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DEBUG_MODE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CONFIG]\n }] }, { type: Object, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: i0.NgZone }, { type: i2.ɵAngularFireSchedulers }] });\nɵapplyMixins(AngularFireAnalytics, [proxyPolyfillCompat]);\n\nclass UserTrackingService {\n initialized;\n disposables = [];\n // TODO a user properties injector\n constructor(analytics, \n // eslint-disable-next-line @typescript-eslint/ban-types\n platformId, auth, zone) {\n firebase.registerVersion('angularfire', VERSION.full, 'compat-user-tracking');\n if (!isPlatformServer(platformId)) {\n let resolveInitialized;\n this.initialized = zone.runOutsideAngular(() => new Promise(resolve => resolveInitialized = resolve));\n this.disposables = [\n auth.authState.subscribe(user => {\n analytics.setUserId(user?.uid);\n resolveInitialized();\n }),\n auth.credential.subscribe(credential => {\n if (credential) {\n const method = credential.user.isAnonymous ? 'anonymous' : credential.additionalUserInfo.providerId;\n if (credential.additionalUserInfo.isNewUser) {\n analytics.logEvent('sign_up', { method });\n }\n analytics.logEvent('login', { method });\n }\n })\n ];\n }\n else {\n this.initialized = Promise.resolve();\n }\n }\n ngOnDestroy() {\n this.disposables.forEach(it => it.unsubscribe());\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: UserTrackingService, deps: [{ token: AngularFireAnalytics }, { token: PLATFORM_ID }, { token: i2$1.AngularFireAuth }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: UserTrackingService });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: UserTrackingService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: AngularFireAnalytics }, { type: Object, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: i2$1.AngularFireAuth }, { type: i0.NgZone }] });\n\nconst SCREEN_VIEW_EVENT = 'screen_view';\nclass ScreenTrackingService {\n disposable;\n constructor(analytics, router, title, componentFactoryResolver, zone, userTrackingService) {\n firebase.registerVersion('angularfire', VERSION.full, 'compat-screen-tracking');\n if (!router || !analytics) {\n return this;\n }\n zone.runOutsideAngular(() => {\n this.disposable = ɵscreenViewEvent(router, title, componentFactoryResolver).pipe(switchMap(async (params) => {\n if (userTrackingService) {\n await userTrackingService.initialized;\n }\n return await analytics.logEvent(SCREEN_VIEW_EVENT, params);\n })).subscribe();\n });\n }\n ngOnDestroy() {\n if (this.disposable) {\n this.disposable.unsubscribe();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: ScreenTrackingService, deps: [{ token: AngularFireAnalytics }, { token: i2$2.Router, optional: true }, { token: i3.Title, optional: true }, { token: i0.ComponentFactoryResolver }, { token: i0.NgZone }, { token: UserTrackingService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: ScreenTrackingService });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: ScreenTrackingService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: AngularFireAnalytics }, { type: i2$2.Router, decorators: [{\n type: Optional\n }] }, { type: i3.Title, decorators: [{\n type: Optional\n }] }, { type: i0.ComponentFactoryResolver }, { type: i0.NgZone }, { type: UserTrackingService, decorators: [{\n type: Optional\n }] }] });\n\nclass AngularFireAnalyticsModule {\n constructor(analytics, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n screenTracking, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n userTracking) {\n firebase.registerVersion('angularfire', VERSION.full, 'analytics-compat');\n // calling anything on analytics will eagerly load the SDK\n analytics.app.then(() => undefined);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireAnalyticsModule, deps: [{ token: AngularFireAnalytics }, { token: ScreenTrackingService, optional: true }, { token: UserTrackingService, optional: true }], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireAnalyticsModule });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireAnalyticsModule, providers: [AngularFireAnalytics] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"17.0.6\", ngImport: i0, type: AngularFireAnalyticsModule, decorators: [{\n type: NgModule,\n args: [{\n providers: [AngularFireAnalytics]\n }]\n }], ctorParameters: () => [{ type: AngularFireAnalytics }, { type: ScreenTrackingService, decorators: [{\n type: Optional\n }] }, { type: UserTrackingService, decorators: [{\n type: Optional\n }] }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { APP_NAME, APP_VERSION, AngularFireAnalytics, AngularFireAnalyticsModule, COLLECTION_ENABLED, CONFIG, DEBUG_MODE, ScreenTrackingService, UserTrackingService };\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { QueueTrackerComponent } from './components/queue-tracker/queue-tracker.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { PipeModule } from 'src/app/shared/pipe/pipe.module';\nimport { QueueTrackerListComponent } from './components/queue-tracker-list/queue-tracker-list.component';\nimport { MaterialModule } from 'src/app/material/material.module';\nimport { StoreScannerComponent } from './components/store-scanner/store-scanner.component';\nimport { DisplayService } from './display.service';\n\n\n@NgModule({\n declarations: [QueueTrackerComponent, QueueTrackerListComponent, StoreScannerComponent],\n imports: [\n CommonModule,\n TranslateModule,\n PipeModule,\n MaterialModule,\n// NgxQRCodeModule,\n ],\n providers: [\n DisplayService,\n ],\n exports: [\n QueueTrackerComponent,\n QueueTrackerListComponent,\n StoreScannerComponent,\n ],\n})\nexport class DisplayModule { }\n","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule, Injector } from '@angular/core';\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { ComponentsModule } from './components/components.module';\nimport { HttpClient, HttpClientModule } from '@angular/common/http';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { environment } from 'src/environments/environment';\nimport { MaterialModule } from './material/material.module';\nimport { RECAPTCHA_V3_SITE_KEY, RecaptchaV3Module } from 'ng-recaptcha';\nimport {\n FeedbackService,\n LocaleService,\n NotificationService,\n PresenceService,\n PusherService,\n ServiceLocator,\n StorageService,\n TerminalService,\n TicketService,\n} from './shared/services';\nimport { BoticarioModule } from './boticario/boticario.module';\nimport { PipeModule } from './shared/pipe/pipe.module';\nimport { NgxMaskDirective, NgxMaskPipe } from 'ngx-mask';\nimport { AngularFireModule } from '@angular/fire/compat';\nimport 'firebase/compat/app';\nimport 'firebase/compat/auth'; \nimport 'firebase/compat/database';\nimport { AngularFireAnalyticsModule, ScreenTrackingService } from '@angular/fire/compat/analytics';\nimport { PagesModule } from './shared/pages/pages.module';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { CustomFieldsModule } from './modules/custom-fields/custom-fields.module';\nimport { DisplayModule } from './modules/display/display.module';\nimport { TicketListComponent } from './ticket-list/ticket-list.component';\nimport { DisplayComponent } from './display/display.component';\nimport { FilazeroModule } from './filazero/filazero.module';\nimport { GoogleMapsModule } from '@angular/google-maps';\nimport { QRCodeModule } from 'angularx-qrcode';\nexport function HttpLoaderFactory(http: HttpClient) {\n return new TranslateHttpLoader(http);\n}\n\n@NgModule({\n declarations: [\n AppComponent,\n TicketListComponent,\n DisplayComponent\n ],\n imports: [\n AngularFireModule.initializeApp(environment.firebase, 'express'),\n AngularFireAnalyticsModule,\n AppRoutingModule,\n BoticarioModule,\n BrowserAnimationsModule,\n BrowserModule,\n ComponentsModule,\n CustomFieldsModule,\n DisplayModule,\n FilazeroModule,\n FormsModule,\n GoogleMapsModule,\n HttpClientModule,\n MaterialModule,\n NgxMaskDirective, NgxMaskPipe,\n PagesModule,\n PipeModule,\n QRCodeModule,\n ReactiveFormsModule,\n RecaptchaV3Module,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n }),\n ],\n providers: [\n FeedbackService,\n LocaleService,\n NotificationService,\n PresenceService,\n PusherService,\n ScreenTrackingService,\n StorageService,\n TerminalService,\n TicketService,\n { provide: RECAPTCHA_V3_SITE_KEY, useValue: environment.recaptchaKey },\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule {\n constructor(private Injector: Injector) {\n ServiceLocator.injector = this.Injector;\n }\n}\n","\nimport { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","import { SDK_VERSION, _isFirebaseServerApp, _getProvider, _registerComponent, registerVersion, getApp } from '@firebase/app';\nimport { ErrorFactory, isBrowserExtension, isMobileCordova, isReactNative, FirebaseError, querystring, getModularInstance, base64Decode, getUA, isIE, createSubscribe, deepEqual, querystringDecode, extractQuerystring, isEmpty, getExperimentalSetting, getDefaultEmulatorHost } from '@firebase/util';\nimport { Logger, LogLevel } from '@firebase/logger';\nimport { __rest } from 'tslib';\nimport { Component } from '@firebase/component';\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An enum of factors that may be used for multifactor authentication.\r\n *\r\n * @public\r\n */\r\nconst FactorId = {\r\n /** Phone as second factor */\r\n PHONE: 'phone',\r\n TOTP: 'totp'\r\n};\r\n/**\r\n * Enumeration of supported providers.\r\n *\r\n * @public\r\n */\r\nconst ProviderId = {\r\n /** Facebook provider ID */\r\n FACEBOOK: 'facebook.com',\r\n /** GitHub provider ID */\r\n GITHUB: 'github.com',\r\n /** Google provider ID */\r\n GOOGLE: 'google.com',\r\n /** Password provider */\r\n PASSWORD: 'password',\r\n /** Phone provider */\r\n PHONE: 'phone',\r\n /** Twitter provider ID */\r\n TWITTER: 'twitter.com'\r\n};\r\n/**\r\n * Enumeration of supported sign-in methods.\r\n *\r\n * @public\r\n */\r\nconst SignInMethod = {\r\n /** Email link sign in method */\r\n EMAIL_LINK: 'emailLink',\r\n /** Email/password sign in method */\r\n EMAIL_PASSWORD: 'password',\r\n /** Facebook sign in method */\r\n FACEBOOK: 'facebook.com',\r\n /** GitHub sign in method */\r\n GITHUB: 'github.com',\r\n /** Google sign in method */\r\n GOOGLE: 'google.com',\r\n /** Phone sign in method */\r\n PHONE: 'phone',\r\n /** Twitter sign in method */\r\n TWITTER: 'twitter.com'\r\n};\r\n/**\r\n * Enumeration of supported operation types.\r\n *\r\n * @public\r\n */\r\nconst OperationType = {\r\n /** Operation involving linking an additional provider to an already signed-in user. */\r\n LINK: 'link',\r\n /** Operation involving using a provider to reauthenticate an already signed-in user. */\r\n REAUTHENTICATE: 'reauthenticate',\r\n /** Operation involving signing in a user. */\r\n SIGN_IN: 'signIn'\r\n};\r\n/**\r\n * An enumeration of the possible email action types.\r\n *\r\n * @public\r\n */\r\nconst ActionCodeOperation = {\r\n /** The email link sign-in action. */\r\n EMAIL_SIGNIN: 'EMAIL_SIGNIN',\r\n /** The password reset action. */\r\n PASSWORD_RESET: 'PASSWORD_RESET',\r\n /** The email revocation action. */\r\n RECOVER_EMAIL: 'RECOVER_EMAIL',\r\n /** The revert second factor addition email action. */\r\n REVERT_SECOND_FACTOR_ADDITION: 'REVERT_SECOND_FACTOR_ADDITION',\r\n /** The revert second factor addition email action. */\r\n VERIFY_AND_CHANGE_EMAIL: 'VERIFY_AND_CHANGE_EMAIL',\r\n /** The email verification action. */\r\n VERIFY_EMAIL: 'VERIFY_EMAIL'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _debugErrorMap() {\r\n return {\r\n [\"admin-restricted-operation\" /* AuthErrorCode.ADMIN_ONLY_OPERATION */]: 'This operation is restricted to administrators only.',\r\n [\"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */]: '',\r\n [\"app-not-authorized\" /* AuthErrorCode.APP_NOT_AUTHORIZED */]: \"This app, identified by the domain where it's hosted, is not \" +\r\n 'authorized to use Firebase Authentication with the provided API key. ' +\r\n 'Review your key configuration in the Google API console.',\r\n [\"app-not-installed\" /* AuthErrorCode.APP_NOT_INSTALLED */]: 'The requested mobile application corresponding to the identifier (' +\r\n 'Android package name or iOS bundle ID) provided is not installed on ' +\r\n 'this device.',\r\n [\"captcha-check-failed\" /* AuthErrorCode.CAPTCHA_CHECK_FAILED */]: 'The reCAPTCHA response token provided is either invalid, expired, ' +\r\n 'already used or the domain associated with it does not match the list ' +\r\n 'of whitelisted domains.',\r\n [\"code-expired\" /* AuthErrorCode.CODE_EXPIRED */]: 'The SMS code has expired. Please re-send the verification code to try ' +\r\n 'again.',\r\n [\"cordova-not-ready\" /* AuthErrorCode.CORDOVA_NOT_READY */]: 'Cordova framework is not ready.',\r\n [\"cors-unsupported\" /* AuthErrorCode.CORS_UNSUPPORTED */]: 'This browser is not supported.',\r\n [\"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */]: 'This credential is already associated with a different user account.',\r\n [\"custom-token-mismatch\" /* AuthErrorCode.CREDENTIAL_MISMATCH */]: 'The custom token corresponds to a different audience.',\r\n [\"requires-recent-login\" /* AuthErrorCode.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */]: 'This operation is sensitive and requires recent authentication. Log in ' +\r\n 'again before retrying this request.',\r\n [\"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */]: 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\r\n 'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\r\n 'starting any other Firebase SDK.',\r\n [\"dynamic-link-not-activated\" /* AuthErrorCode.DYNAMIC_LINK_NOT_ACTIVATED */]: 'Please activate Dynamic Links in the Firebase Console and agree to the terms and ' +\r\n 'conditions.',\r\n [\"email-change-needs-verification\" /* AuthErrorCode.EMAIL_CHANGE_NEEDS_VERIFICATION */]: 'Multi-factor users must always have a verified email.',\r\n [\"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */]: 'The email address is already in use by another account.',\r\n [\"emulator-config-failed\" /* AuthErrorCode.EMULATOR_CONFIG_FAILED */]: 'Auth instance has already been used to make a network call. Auth can ' +\r\n 'no longer be configured to use the emulator. Try calling ' +\r\n '\"connectAuthEmulator()\" sooner.',\r\n [\"expired-action-code\" /* AuthErrorCode.EXPIRED_OOB_CODE */]: 'The action code has expired.',\r\n [\"cancelled-popup-request\" /* AuthErrorCode.EXPIRED_POPUP_REQUEST */]: 'This operation has been cancelled due to another conflicting popup being opened.',\r\n [\"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */]: 'An internal AuthError has occurred.',\r\n [\"invalid-app-credential\" /* AuthErrorCode.INVALID_APP_CREDENTIAL */]: 'The phone verification request contains an invalid application verifier.' +\r\n ' The reCAPTCHA token response is either invalid or expired.',\r\n [\"invalid-app-id\" /* AuthErrorCode.INVALID_APP_ID */]: 'The mobile app identifier is not registed for the current project.',\r\n [\"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */]: \"This user's credential isn't valid for this project. This can happen \" +\r\n \"if the user's token has been tampered with, or if the user isn't for \" +\r\n 'the project associated with this API key.',\r\n [\"invalid-auth-event\" /* AuthErrorCode.INVALID_AUTH_EVENT */]: 'An internal AuthError has occurred.',\r\n [\"invalid-verification-code\" /* AuthErrorCode.INVALID_CODE */]: 'The SMS verification code used to create the phone auth credential is ' +\r\n 'invalid. Please resend the verification code sms and be sure to use the ' +\r\n 'verification code provided by the user.',\r\n [\"invalid-continue-uri\" /* AuthErrorCode.INVALID_CONTINUE_URI */]: 'The continue URL provided in the request is invalid.',\r\n [\"invalid-cordova-configuration\" /* AuthErrorCode.INVALID_CORDOVA_CONFIGURATION */]: 'The following Cordova plugins must be installed to enable OAuth sign-in: ' +\r\n 'cordova-plugin-buildinfo, cordova-universal-links-plugin, ' +\r\n 'cordova-plugin-browsertab, cordova-plugin-inappbrowser and ' +\r\n 'cordova-plugin-customurlscheme.',\r\n [\"invalid-custom-token\" /* AuthErrorCode.INVALID_CUSTOM_TOKEN */]: 'The custom token format is incorrect. Please check the documentation.',\r\n [\"invalid-dynamic-link-domain\" /* AuthErrorCode.INVALID_DYNAMIC_LINK_DOMAIN */]: 'The provided dynamic link domain is not configured or authorized for the current project.',\r\n [\"invalid-email\" /* AuthErrorCode.INVALID_EMAIL */]: 'The email address is badly formatted.',\r\n [\"invalid-emulator-scheme\" /* AuthErrorCode.INVALID_EMULATOR_SCHEME */]: 'Emulator URL must start with a valid scheme (http:// or https://).',\r\n [\"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */]: 'Your API key is invalid, please check you have copied it correctly.',\r\n [\"invalid-cert-hash\" /* AuthErrorCode.INVALID_CERT_HASH */]: 'The SHA-1 certificate hash provided is invalid.',\r\n [\"invalid-credential\" /* AuthErrorCode.INVALID_CREDENTIAL */]: 'The supplied auth credential is incorrect, malformed or has expired.',\r\n [\"invalid-message-payload\" /* AuthErrorCode.INVALID_MESSAGE_PAYLOAD */]: 'The email template corresponding to this action contains invalid characters in its message. ' +\r\n 'Please fix by going to the Auth email templates section in the Firebase Console.',\r\n [\"invalid-multi-factor-session\" /* AuthErrorCode.INVALID_MFA_SESSION */]: 'The request does not contain a valid proof of first factor successful sign-in.',\r\n [\"invalid-oauth-provider\" /* AuthErrorCode.INVALID_OAUTH_PROVIDER */]: 'EmailAuthProvider is not supported for this operation. This operation ' +\r\n 'only supports OAuth providers.',\r\n [\"invalid-oauth-client-id\" /* AuthErrorCode.INVALID_OAUTH_CLIENT_ID */]: 'The OAuth client ID provided is either invalid or does not match the ' +\r\n 'specified API key.',\r\n [\"unauthorized-domain\" /* AuthErrorCode.INVALID_ORIGIN */]: 'This domain is not authorized for OAuth operations for your Firebase ' +\r\n 'project. Edit the list of authorized domains from the Firebase console.',\r\n [\"invalid-action-code\" /* AuthErrorCode.INVALID_OOB_CODE */]: 'The action code is invalid. This can happen if the code is malformed, ' +\r\n 'expired, or has already been used.',\r\n [\"wrong-password\" /* AuthErrorCode.INVALID_PASSWORD */]: 'The password is invalid or the user does not have a password.',\r\n [\"invalid-persistence-type\" /* AuthErrorCode.INVALID_PERSISTENCE */]: 'The specified persistence type is invalid. It can only be local, session or none.',\r\n [\"invalid-phone-number\" /* AuthErrorCode.INVALID_PHONE_NUMBER */]: 'The format of the phone number provided is incorrect. Please enter the ' +\r\n 'phone number in a format that can be parsed into E.164 format. E.164 ' +\r\n 'phone numbers are written in the format [+][country code][subscriber ' +\r\n 'number including area code].',\r\n [\"invalid-provider-id\" /* AuthErrorCode.INVALID_PROVIDER_ID */]: 'The specified provider ID is invalid.',\r\n [\"invalid-recipient-email\" /* AuthErrorCode.INVALID_RECIPIENT_EMAIL */]: 'The email corresponding to this action failed to send as the provided ' +\r\n 'recipient email address is invalid.',\r\n [\"invalid-sender\" /* AuthErrorCode.INVALID_SENDER */]: 'The email template corresponding to this action contains an invalid sender email or name. ' +\r\n 'Please fix by going to the Auth email templates section in the Firebase Console.',\r\n [\"invalid-verification-id\" /* AuthErrorCode.INVALID_SESSION_INFO */]: 'The verification ID used to create the phone auth credential is invalid.',\r\n [\"invalid-tenant-id\" /* AuthErrorCode.INVALID_TENANT_ID */]: \"The Auth instance's tenant ID is invalid.\",\r\n [\"login-blocked\" /* AuthErrorCode.LOGIN_BLOCKED */]: 'Login blocked by user-provided method: {$originalMessage}',\r\n [\"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */]: 'An Android Package Name must be provided if the Android App is required to be installed.',\r\n [\"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */]: 'Be sure to include authDomain when calling firebase.initializeApp(), ' +\r\n 'by following the instructions in the Firebase console.',\r\n [\"missing-app-credential\" /* AuthErrorCode.MISSING_APP_CREDENTIAL */]: 'The phone verification request is missing an application verifier ' +\r\n 'assertion. A reCAPTCHA response token needs to be provided.',\r\n [\"missing-verification-code\" /* AuthErrorCode.MISSING_CODE */]: 'The phone auth credential was created with an empty SMS verification code.',\r\n [\"missing-continue-uri\" /* AuthErrorCode.MISSING_CONTINUE_URI */]: 'A continue URL must be provided in the request.',\r\n [\"missing-iframe-start\" /* AuthErrorCode.MISSING_IFRAME_START */]: 'An internal AuthError has occurred.',\r\n [\"missing-ios-bundle-id\" /* AuthErrorCode.MISSING_IOS_BUNDLE_ID */]: 'An iOS Bundle ID must be provided if an App Store ID is provided.',\r\n [\"missing-or-invalid-nonce\" /* AuthErrorCode.MISSING_OR_INVALID_NONCE */]: 'The request does not contain a valid nonce. This can occur if the ' +\r\n 'SHA-256 hash of the provided raw nonce does not match the hashed nonce ' +\r\n 'in the ID token payload.',\r\n [\"missing-password\" /* AuthErrorCode.MISSING_PASSWORD */]: 'A non-empty password must be provided',\r\n [\"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */]: 'No second factor identifier is provided.',\r\n [\"missing-multi-factor-session\" /* AuthErrorCode.MISSING_MFA_SESSION */]: 'The request is missing proof of first factor successful sign-in.',\r\n [\"missing-phone-number\" /* AuthErrorCode.MISSING_PHONE_NUMBER */]: 'To send verification codes, provide a phone number for the recipient.',\r\n [\"missing-verification-id\" /* AuthErrorCode.MISSING_SESSION_INFO */]: 'The phone auth credential was created with an empty verification ID.',\r\n [\"app-deleted\" /* AuthErrorCode.MODULE_DESTROYED */]: 'This instance of FirebaseApp has been deleted.',\r\n [\"multi-factor-info-not-found\" /* AuthErrorCode.MFA_INFO_NOT_FOUND */]: 'The user does not have a second factor matching the identifier provided.',\r\n [\"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */]: 'Proof of ownership of a second factor is required to complete sign-in.',\r\n [\"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */]: 'An account already exists with the same email address but different ' +\r\n 'sign-in credentials. Sign in using a provider associated with this ' +\r\n 'email address.',\r\n [\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */]: 'A network AuthError (such as timeout, interrupted connection or unreachable host) has occurred.',\r\n [\"no-auth-event\" /* AuthErrorCode.NO_AUTH_EVENT */]: 'An internal AuthError has occurred.',\r\n [\"no-such-provider\" /* AuthErrorCode.NO_SUCH_PROVIDER */]: 'User was not linked to an account with the given provider.',\r\n [\"null-user\" /* AuthErrorCode.NULL_USER */]: 'A null user object was provided as the argument for an operation which ' +\r\n 'requires a non-null user object.',\r\n [\"operation-not-allowed\" /* AuthErrorCode.OPERATION_NOT_ALLOWED */]: 'The given sign-in provider is disabled for this Firebase project. ' +\r\n 'Enable it in the Firebase console, under the sign-in method tab of the ' +\r\n 'Auth section.',\r\n [\"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */]: 'This operation is not supported in the environment this application is ' +\r\n 'running on. \"location.protocol\" must be http, https or chrome-extension' +\r\n ' and web storage must be enabled.',\r\n [\"popup-blocked\" /* AuthErrorCode.POPUP_BLOCKED */]: 'Unable to establish a connection with the popup. It may have been blocked by the browser.',\r\n [\"popup-closed-by-user\" /* AuthErrorCode.POPUP_CLOSED_BY_USER */]: 'The popup has been closed by the user before finalizing the operation.',\r\n [\"provider-already-linked\" /* AuthErrorCode.PROVIDER_ALREADY_LINKED */]: 'User can only be linked to one identity for the given provider.',\r\n [\"quota-exceeded\" /* AuthErrorCode.QUOTA_EXCEEDED */]: \"The project's quota for this operation has been exceeded.\",\r\n [\"redirect-cancelled-by-user\" /* AuthErrorCode.REDIRECT_CANCELLED_BY_USER */]: 'The redirect operation has been cancelled by the user before finalizing.',\r\n [\"redirect-operation-pending\" /* AuthErrorCode.REDIRECT_OPERATION_PENDING */]: 'A redirect sign-in operation is already pending.',\r\n [\"rejected-credential\" /* AuthErrorCode.REJECTED_CREDENTIAL */]: 'The request contains malformed or mismatching credentials.',\r\n [\"second-factor-already-in-use\" /* AuthErrorCode.SECOND_FACTOR_ALREADY_ENROLLED */]: 'The second factor is already enrolled on this account.',\r\n [\"maximum-second-factor-count-exceeded\" /* AuthErrorCode.SECOND_FACTOR_LIMIT_EXCEEDED */]: 'The maximum allowed number of second factors on a user has been exceeded.',\r\n [\"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */]: \"The provided tenant ID does not match the Auth instance's tenant ID\",\r\n [\"timeout\" /* AuthErrorCode.TIMEOUT */]: 'The operation has timed out.',\r\n [\"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */]: \"The user's credential is no longer valid. The user must sign in again.\",\r\n [\"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */]: 'We have blocked all requests from this device due to unusual activity. ' +\r\n 'Try again later.',\r\n [\"unauthorized-continue-uri\" /* AuthErrorCode.UNAUTHORIZED_DOMAIN */]: 'The domain of the continue URL is not whitelisted. Please whitelist ' +\r\n 'the domain in the Firebase console.',\r\n [\"unsupported-first-factor\" /* AuthErrorCode.UNSUPPORTED_FIRST_FACTOR */]: 'Enrolling a second factor or signing in with a multi-factor account requires sign-in with a supported first factor.',\r\n [\"unsupported-persistence-type\" /* AuthErrorCode.UNSUPPORTED_PERSISTENCE */]: 'The current environment does not support the specified persistence type.',\r\n [\"unsupported-tenant-operation\" /* AuthErrorCode.UNSUPPORTED_TENANT_OPERATION */]: 'This operation is not supported in a multi-tenant context.',\r\n [\"unverified-email\" /* AuthErrorCode.UNVERIFIED_EMAIL */]: 'The operation requires a verified email.',\r\n [\"user-cancelled\" /* AuthErrorCode.USER_CANCELLED */]: 'The user did not grant your application the permissions it requested.',\r\n [\"user-not-found\" /* AuthErrorCode.USER_DELETED */]: 'There is no user record corresponding to this identifier. The user may ' +\r\n 'have been deleted.',\r\n [\"user-disabled\" /* AuthErrorCode.USER_DISABLED */]: 'The user account has been disabled by an administrator.',\r\n [\"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */]: 'The supplied credentials do not correspond to the previously signed in user.',\r\n [\"user-signed-out\" /* AuthErrorCode.USER_SIGNED_OUT */]: '',\r\n [\"weak-password\" /* AuthErrorCode.WEAK_PASSWORD */]: 'The password must be 6 characters long or more.',\r\n [\"web-storage-unsupported\" /* AuthErrorCode.WEB_STORAGE_UNSUPPORTED */]: 'This browser is not supported or 3rd party cookies and data may be disabled.',\r\n [\"already-initialized\" /* AuthErrorCode.ALREADY_INITIALIZED */]: 'initializeAuth() has already been called with ' +\r\n 'different options. To avoid this error, call initializeAuth() with the ' +\r\n 'same options as when it was originally called, or call getAuth() to return the' +\r\n ' already initialized instance.',\r\n [\"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */]: 'The reCAPTCHA token is missing when sending request to the backend.',\r\n [\"invalid-recaptcha-token\" /* AuthErrorCode.INVALID_RECAPTCHA_TOKEN */]: 'The reCAPTCHA token is invalid when sending request to the backend.',\r\n [\"invalid-recaptcha-action\" /* AuthErrorCode.INVALID_RECAPTCHA_ACTION */]: 'The reCAPTCHA action is invalid when sending request to the backend.',\r\n [\"recaptcha-not-enabled\" /* AuthErrorCode.RECAPTCHA_NOT_ENABLED */]: 'reCAPTCHA Enterprise integration is not enabled for this project.',\r\n [\"missing-client-type\" /* AuthErrorCode.MISSING_CLIENT_TYPE */]: 'The reCAPTCHA client type is missing when sending request to the backend.',\r\n [\"missing-recaptcha-version\" /* AuthErrorCode.MISSING_RECAPTCHA_VERSION */]: 'The reCAPTCHA version is missing when sending request to the backend.',\r\n [\"invalid-req-type\" /* AuthErrorCode.INVALID_REQ_TYPE */]: 'Invalid request parameters.',\r\n [\"invalid-recaptcha-version\" /* AuthErrorCode.INVALID_RECAPTCHA_VERSION */]: 'The reCAPTCHA version is invalid when sending request to the backend.',\r\n [\"unsupported-password-policy-schema-version\" /* AuthErrorCode.UNSUPPORTED_PASSWORD_POLICY_SCHEMA_VERSION */]: 'The password policy received from the backend uses a schema version that is not supported by this version of the Firebase SDK.',\r\n [\"password-does-not-meet-requirements\" /* AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */]: 'The password does not meet the requirements.'\r\n };\r\n}\r\nfunction _prodErrorMap() {\r\n // We will include this one message in the prod error map since by the very\r\n // nature of this error, developers will never be able to see the message\r\n // using the debugErrorMap (which is installed during auth initialization).\r\n return {\r\n [\"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */]: 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\r\n 'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\r\n 'starting any other Firebase SDK.'\r\n };\r\n}\r\n/**\r\n * A verbose error map with detailed descriptions for most error codes.\r\n *\r\n * See discussion at {@link AuthErrorMap}\r\n *\r\n * @public\r\n */\r\nconst debugErrorMap = _debugErrorMap;\r\n/**\r\n * A minimal error map with all verbose error messages stripped.\r\n *\r\n * See discussion at {@link AuthErrorMap}\r\n *\r\n * @public\r\n */\r\nconst prodErrorMap = _prodErrorMap;\r\nconst _DEFAULT_AUTH_ERROR_FACTORY = new ErrorFactory('auth', 'Firebase', _prodErrorMap());\r\n/**\r\n * A map of potential `Auth` error codes, for easier comparison with errors\r\n * thrown by the SDK.\r\n *\r\n * @remarks\r\n * Note that you can't tree-shake individual keys\r\n * in the map, so by using the map you might substantially increase your\r\n * bundle size.\r\n *\r\n * @public\r\n */\r\nconst AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY = {\r\n ADMIN_ONLY_OPERATION: 'auth/admin-restricted-operation',\r\n ARGUMENT_ERROR: 'auth/argument-error',\r\n APP_NOT_AUTHORIZED: 'auth/app-not-authorized',\r\n APP_NOT_INSTALLED: 'auth/app-not-installed',\r\n CAPTCHA_CHECK_FAILED: 'auth/captcha-check-failed',\r\n CODE_EXPIRED: 'auth/code-expired',\r\n CORDOVA_NOT_READY: 'auth/cordova-not-ready',\r\n CORS_UNSUPPORTED: 'auth/cors-unsupported',\r\n CREDENTIAL_ALREADY_IN_USE: 'auth/credential-already-in-use',\r\n CREDENTIAL_MISMATCH: 'auth/custom-token-mismatch',\r\n CREDENTIAL_TOO_OLD_LOGIN_AGAIN: 'auth/requires-recent-login',\r\n DEPENDENT_SDK_INIT_BEFORE_AUTH: 'auth/dependent-sdk-initialized-before-auth',\r\n DYNAMIC_LINK_NOT_ACTIVATED: 'auth/dynamic-link-not-activated',\r\n EMAIL_CHANGE_NEEDS_VERIFICATION: 'auth/email-change-needs-verification',\r\n EMAIL_EXISTS: 'auth/email-already-in-use',\r\n EMULATOR_CONFIG_FAILED: 'auth/emulator-config-failed',\r\n EXPIRED_OOB_CODE: 'auth/expired-action-code',\r\n EXPIRED_POPUP_REQUEST: 'auth/cancelled-popup-request',\r\n INTERNAL_ERROR: 'auth/internal-error',\r\n INVALID_API_KEY: 'auth/invalid-api-key',\r\n INVALID_APP_CREDENTIAL: 'auth/invalid-app-credential',\r\n INVALID_APP_ID: 'auth/invalid-app-id',\r\n INVALID_AUTH: 'auth/invalid-user-token',\r\n INVALID_AUTH_EVENT: 'auth/invalid-auth-event',\r\n INVALID_CERT_HASH: 'auth/invalid-cert-hash',\r\n INVALID_CODE: 'auth/invalid-verification-code',\r\n INVALID_CONTINUE_URI: 'auth/invalid-continue-uri',\r\n INVALID_CORDOVA_CONFIGURATION: 'auth/invalid-cordova-configuration',\r\n INVALID_CUSTOM_TOKEN: 'auth/invalid-custom-token',\r\n INVALID_DYNAMIC_LINK_DOMAIN: 'auth/invalid-dynamic-link-domain',\r\n INVALID_EMAIL: 'auth/invalid-email',\r\n INVALID_EMULATOR_SCHEME: 'auth/invalid-emulator-scheme',\r\n INVALID_IDP_RESPONSE: 'auth/invalid-credential',\r\n INVALID_LOGIN_CREDENTIALS: 'auth/invalid-credential',\r\n INVALID_MESSAGE_PAYLOAD: 'auth/invalid-message-payload',\r\n INVALID_MFA_SESSION: 'auth/invalid-multi-factor-session',\r\n INVALID_OAUTH_CLIENT_ID: 'auth/invalid-oauth-client-id',\r\n INVALID_OAUTH_PROVIDER: 'auth/invalid-oauth-provider',\r\n INVALID_OOB_CODE: 'auth/invalid-action-code',\r\n INVALID_ORIGIN: 'auth/unauthorized-domain',\r\n INVALID_PASSWORD: 'auth/wrong-password',\r\n INVALID_PERSISTENCE: 'auth/invalid-persistence-type',\r\n INVALID_PHONE_NUMBER: 'auth/invalid-phone-number',\r\n INVALID_PROVIDER_ID: 'auth/invalid-provider-id',\r\n INVALID_RECIPIENT_EMAIL: 'auth/invalid-recipient-email',\r\n INVALID_SENDER: 'auth/invalid-sender',\r\n INVALID_SESSION_INFO: 'auth/invalid-verification-id',\r\n INVALID_TENANT_ID: 'auth/invalid-tenant-id',\r\n MFA_INFO_NOT_FOUND: 'auth/multi-factor-info-not-found',\r\n MFA_REQUIRED: 'auth/multi-factor-auth-required',\r\n MISSING_ANDROID_PACKAGE_NAME: 'auth/missing-android-pkg-name',\r\n MISSING_APP_CREDENTIAL: 'auth/missing-app-credential',\r\n MISSING_AUTH_DOMAIN: 'auth/auth-domain-config-required',\r\n MISSING_CODE: 'auth/missing-verification-code',\r\n MISSING_CONTINUE_URI: 'auth/missing-continue-uri',\r\n MISSING_IFRAME_START: 'auth/missing-iframe-start',\r\n MISSING_IOS_BUNDLE_ID: 'auth/missing-ios-bundle-id',\r\n MISSING_OR_INVALID_NONCE: 'auth/missing-or-invalid-nonce',\r\n MISSING_MFA_INFO: 'auth/missing-multi-factor-info',\r\n MISSING_MFA_SESSION: 'auth/missing-multi-factor-session',\r\n MISSING_PHONE_NUMBER: 'auth/missing-phone-number',\r\n MISSING_SESSION_INFO: 'auth/missing-verification-id',\r\n MODULE_DESTROYED: 'auth/app-deleted',\r\n NEED_CONFIRMATION: 'auth/account-exists-with-different-credential',\r\n NETWORK_REQUEST_FAILED: 'auth/network-request-failed',\r\n NULL_USER: 'auth/null-user',\r\n NO_AUTH_EVENT: 'auth/no-auth-event',\r\n NO_SUCH_PROVIDER: 'auth/no-such-provider',\r\n OPERATION_NOT_ALLOWED: 'auth/operation-not-allowed',\r\n OPERATION_NOT_SUPPORTED: 'auth/operation-not-supported-in-this-environment',\r\n POPUP_BLOCKED: 'auth/popup-blocked',\r\n POPUP_CLOSED_BY_USER: 'auth/popup-closed-by-user',\r\n PROVIDER_ALREADY_LINKED: 'auth/provider-already-linked',\r\n QUOTA_EXCEEDED: 'auth/quota-exceeded',\r\n REDIRECT_CANCELLED_BY_USER: 'auth/redirect-cancelled-by-user',\r\n REDIRECT_OPERATION_PENDING: 'auth/redirect-operation-pending',\r\n REJECTED_CREDENTIAL: 'auth/rejected-credential',\r\n SECOND_FACTOR_ALREADY_ENROLLED: 'auth/second-factor-already-in-use',\r\n SECOND_FACTOR_LIMIT_EXCEEDED: 'auth/maximum-second-factor-count-exceeded',\r\n TENANT_ID_MISMATCH: 'auth/tenant-id-mismatch',\r\n TIMEOUT: 'auth/timeout',\r\n TOKEN_EXPIRED: 'auth/user-token-expired',\r\n TOO_MANY_ATTEMPTS_TRY_LATER: 'auth/too-many-requests',\r\n UNAUTHORIZED_DOMAIN: 'auth/unauthorized-continue-uri',\r\n UNSUPPORTED_FIRST_FACTOR: 'auth/unsupported-first-factor',\r\n UNSUPPORTED_PERSISTENCE: 'auth/unsupported-persistence-type',\r\n UNSUPPORTED_TENANT_OPERATION: 'auth/unsupported-tenant-operation',\r\n UNVERIFIED_EMAIL: 'auth/unverified-email',\r\n USER_CANCELLED: 'auth/user-cancelled',\r\n USER_DELETED: 'auth/user-not-found',\r\n USER_DISABLED: 'auth/user-disabled',\r\n USER_MISMATCH: 'auth/user-mismatch',\r\n USER_SIGNED_OUT: 'auth/user-signed-out',\r\n WEAK_PASSWORD: 'auth/weak-password',\r\n WEB_STORAGE_UNSUPPORTED: 'auth/web-storage-unsupported',\r\n ALREADY_INITIALIZED: 'auth/already-initialized',\r\n RECAPTCHA_NOT_ENABLED: 'auth/recaptcha-not-enabled',\r\n MISSING_RECAPTCHA_TOKEN: 'auth/missing-recaptcha-token',\r\n INVALID_RECAPTCHA_TOKEN: 'auth/invalid-recaptcha-token',\r\n INVALID_RECAPTCHA_ACTION: 'auth/invalid-recaptcha-action',\r\n MISSING_CLIENT_TYPE: 'auth/missing-client-type',\r\n MISSING_RECAPTCHA_VERSION: 'auth/missing-recaptcha-version',\r\n INVALID_RECAPTCHA_VERSION: 'auth/invalid-recaptcha-version',\r\n INVALID_REQ_TYPE: 'auth/invalid-req-type'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logClient = new Logger('@firebase/auth');\r\nfunction _logWarn(msg, ...args) {\r\n if (logClient.logLevel <= LogLevel.WARN) {\r\n logClient.warn(`Auth (${SDK_VERSION}): ${msg}`, ...args);\r\n }\r\n}\r\nfunction _logError(msg, ...args) {\r\n if (logClient.logLevel <= LogLevel.ERROR) {\r\n logClient.error(`Auth (${SDK_VERSION}): ${msg}`, ...args);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _fail(authOrCode, ...rest) {\r\n throw createErrorInternal(authOrCode, ...rest);\r\n}\r\nfunction _createError(authOrCode, ...rest) {\r\n return createErrorInternal(authOrCode, ...rest);\r\n}\r\nfunction _errorWithCustomMessage(auth, code, message) {\r\n const errorMap = Object.assign(Object.assign({}, prodErrorMap()), { [code]: message });\r\n const factory = new ErrorFactory('auth', 'Firebase', errorMap);\r\n return factory.create(code, {\r\n appName: auth.name\r\n });\r\n}\r\nfunction _serverAppCurrentUserOperationNotSupportedError(auth) {\r\n return _errorWithCustomMessage(auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */, 'Operations that alter the current user are not supported in conjunction with FirebaseServerApp');\r\n}\r\nfunction _assertInstanceOf(auth, object, instance) {\r\n const constructorInstance = instance;\r\n if (!(object instanceof constructorInstance)) {\r\n if (constructorInstance.name !== object.constructor.name) {\r\n _fail(auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n }\r\n throw _errorWithCustomMessage(auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */, `Type of ${object.constructor.name} does not match expected instance.` +\r\n `Did you pass a reference from a different Auth SDK?`);\r\n }\r\n}\r\nfunction createErrorInternal(authOrCode, ...rest) {\r\n if (typeof authOrCode !== 'string') {\r\n const code = rest[0];\r\n const fullParams = [...rest.slice(1)];\r\n if (fullParams[0]) {\r\n fullParams[0].appName = authOrCode.name;\r\n }\r\n return authOrCode._errorFactory.create(code, ...fullParams);\r\n }\r\n return _DEFAULT_AUTH_ERROR_FACTORY.create(authOrCode, ...rest);\r\n}\r\nfunction _assert(assertion, authOrCode, ...rest) {\r\n if (!assertion) {\r\n throw createErrorInternal(authOrCode, ...rest);\r\n }\r\n}\r\n/**\r\n * Unconditionally fails, throwing an internal error with the given message.\r\n *\r\n * @param failure type of failure encountered\r\n * @throws Error\r\n */\r\nfunction debugFail(failure) {\r\n // Log the failure in addition to throw an exception, just in case the\r\n // exception is swallowed.\r\n const message = `INTERNAL ASSERTION FAILED: ` + failure;\r\n _logError(message);\r\n // NOTE: We don't use FirebaseError here because these are internal failures\r\n // that cannot be handled by the user. (Also it would create a circular\r\n // dependency between the error and assert modules which doesn't work.)\r\n throw new Error(message);\r\n}\r\n/**\r\n * Fails if the given assertion condition is false, throwing an Error with the\r\n * given message if it did.\r\n *\r\n * @param assertion\r\n * @param message\r\n */\r\nfunction debugAssert(assertion, message) {\r\n if (!assertion) {\r\n debugFail(message);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _getCurrentUrl() {\r\n var _a;\r\n return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.href)) || '';\r\n}\r\nfunction _isHttpOrHttps() {\r\n return _getCurrentScheme() === 'http:' || _getCurrentScheme() === 'https:';\r\n}\r\nfunction _getCurrentScheme() {\r\n var _a;\r\n return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.protocol)) || null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Determine whether the browser is working online\r\n */\r\nfunction _isOnline() {\r\n if (typeof navigator !== 'undefined' &&\r\n navigator &&\r\n 'onLine' in navigator &&\r\n typeof navigator.onLine === 'boolean' &&\r\n // Apply only for traditional web apps and Chrome extensions.\r\n // This is especially true for Cordova apps which have unreliable\r\n // navigator.onLine behavior unless cordova-plugin-network-information is\r\n // installed which overwrites the native navigator.onLine value and\r\n // defines navigator.connection.\r\n (_isHttpOrHttps() || isBrowserExtension() || 'connection' in navigator)) {\r\n return navigator.onLine;\r\n }\r\n // If we can't determine the state, assume it is online.\r\n return true;\r\n}\r\nfunction _getUserLanguage() {\r\n if (typeof navigator === 'undefined') {\r\n return null;\r\n }\r\n const navigatorLanguage = navigator;\r\n return (\r\n // Most reliable, but only supported in Chrome/Firefox.\r\n (navigatorLanguage.languages && navigatorLanguage.languages[0]) ||\r\n // Supported in most browsers, but returns the language of the browser\r\n // UI, not the language set in browser settings.\r\n navigatorLanguage.language ||\r\n // Couldn't determine language.\r\n null);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A structure to help pick between a range of long and short delay durations\r\n * depending on the current environment. In general, the long delay is used for\r\n * mobile environments whereas short delays are used for desktop environments.\r\n */\r\nclass Delay {\r\n constructor(shortDelay, longDelay) {\r\n this.shortDelay = shortDelay;\r\n this.longDelay = longDelay;\r\n // Internal error when improperly initialized.\r\n debugAssert(longDelay > shortDelay, 'Short delay should be less than long delay!');\r\n this.isMobile = isMobileCordova() || isReactNative();\r\n }\r\n get() {\r\n if (!_isOnline()) {\r\n // Pick the shorter timeout.\r\n return Math.min(5000 /* DelayMin.OFFLINE */, this.shortDelay);\r\n }\r\n // If running in a mobile environment, return the long delay, otherwise\r\n // return the short delay.\r\n // This could be improved in the future to dynamically change based on other\r\n // variables instead of just reading the current environment.\r\n return this.isMobile ? this.longDelay : this.shortDelay;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _emulatorUrl(config, path) {\r\n debugAssert(config.emulator, 'Emulator should always be set here');\r\n const { url } = config.emulator;\r\n if (!path) {\r\n return url;\r\n }\r\n return `${url}${path.startsWith('/') ? path.slice(1) : path}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FetchProvider {\r\n static initialize(fetchImpl, headersImpl, responseImpl) {\r\n this.fetchImpl = fetchImpl;\r\n if (headersImpl) {\r\n this.headersImpl = headersImpl;\r\n }\r\n if (responseImpl) {\r\n this.responseImpl = responseImpl;\r\n }\r\n }\r\n static fetch() {\r\n if (this.fetchImpl) {\r\n return this.fetchImpl;\r\n }\r\n if (typeof self !== 'undefined' && 'fetch' in self) {\r\n return self.fetch;\r\n }\r\n if (typeof globalThis !== 'undefined' && globalThis.fetch) {\r\n return globalThis.fetch;\r\n }\r\n if (typeof fetch !== 'undefined') {\r\n return fetch;\r\n }\r\n debugFail('Could not find fetch implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n }\r\n static headers() {\r\n if (this.headersImpl) {\r\n return this.headersImpl;\r\n }\r\n if (typeof self !== 'undefined' && 'Headers' in self) {\r\n return self.Headers;\r\n }\r\n if (typeof globalThis !== 'undefined' && globalThis.Headers) {\r\n return globalThis.Headers;\r\n }\r\n if (typeof Headers !== 'undefined') {\r\n return Headers;\r\n }\r\n debugFail('Could not find Headers implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n }\r\n static response() {\r\n if (this.responseImpl) {\r\n return this.responseImpl;\r\n }\r\n if (typeof self !== 'undefined' && 'Response' in self) {\r\n return self.Response;\r\n }\r\n if (typeof globalThis !== 'undefined' && globalThis.Response) {\r\n return globalThis.Response;\r\n }\r\n if (typeof Response !== 'undefined') {\r\n return Response;\r\n }\r\n debugFail('Could not find Response implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Map from errors returned by the server to errors to developer visible errors\r\n */\r\nconst SERVER_ERROR_MAP = {\r\n // Custom token errors.\r\n [\"CREDENTIAL_MISMATCH\" /* ServerError.CREDENTIAL_MISMATCH */]: \"custom-token-mismatch\" /* AuthErrorCode.CREDENTIAL_MISMATCH */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_CUSTOM_TOKEN\" /* ServerError.MISSING_CUSTOM_TOKEN */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Create Auth URI errors.\r\n [\"INVALID_IDENTIFIER\" /* ServerError.INVALID_IDENTIFIER */]: \"invalid-email\" /* AuthErrorCode.INVALID_EMAIL */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_CONTINUE_URI\" /* ServerError.MISSING_CONTINUE_URI */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Sign in with email and password errors (some apply to sign up too).\r\n [\"INVALID_PASSWORD\" /* ServerError.INVALID_PASSWORD */]: \"wrong-password\" /* AuthErrorCode.INVALID_PASSWORD */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_PASSWORD\" /* ServerError.MISSING_PASSWORD */]: \"missing-password\" /* AuthErrorCode.MISSING_PASSWORD */,\r\n // Thrown if Email Enumeration Protection is enabled in the project and the email or password is\r\n // invalid.\r\n [\"INVALID_LOGIN_CREDENTIALS\" /* ServerError.INVALID_LOGIN_CREDENTIALS */]: \"invalid-credential\" /* AuthErrorCode.INVALID_CREDENTIAL */,\r\n // Sign up with email and password errors.\r\n [\"EMAIL_EXISTS\" /* ServerError.EMAIL_EXISTS */]: \"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */,\r\n [\"PASSWORD_LOGIN_DISABLED\" /* ServerError.PASSWORD_LOGIN_DISABLED */]: \"operation-not-allowed\" /* AuthErrorCode.OPERATION_NOT_ALLOWED */,\r\n // Verify assertion for sign in with credential errors:\r\n [\"INVALID_IDP_RESPONSE\" /* ServerError.INVALID_IDP_RESPONSE */]: \"invalid-credential\" /* AuthErrorCode.INVALID_CREDENTIAL */,\r\n [\"INVALID_PENDING_TOKEN\" /* ServerError.INVALID_PENDING_TOKEN */]: \"invalid-credential\" /* AuthErrorCode.INVALID_CREDENTIAL */,\r\n [\"FEDERATED_USER_ID_ALREADY_LINKED\" /* ServerError.FEDERATED_USER_ID_ALREADY_LINKED */]: \"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_REQ_TYPE\" /* ServerError.MISSING_REQ_TYPE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Send Password reset email errors:\r\n [\"EMAIL_NOT_FOUND\" /* ServerError.EMAIL_NOT_FOUND */]: \"user-not-found\" /* AuthErrorCode.USER_DELETED */,\r\n [\"RESET_PASSWORD_EXCEED_LIMIT\" /* ServerError.RESET_PASSWORD_EXCEED_LIMIT */]: \"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */,\r\n [\"EXPIRED_OOB_CODE\" /* ServerError.EXPIRED_OOB_CODE */]: \"expired-action-code\" /* AuthErrorCode.EXPIRED_OOB_CODE */,\r\n [\"INVALID_OOB_CODE\" /* ServerError.INVALID_OOB_CODE */]: \"invalid-action-code\" /* AuthErrorCode.INVALID_OOB_CODE */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_OOB_CODE\" /* ServerError.MISSING_OOB_CODE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Operations that require ID token in request:\r\n [\"CREDENTIAL_TOO_OLD_LOGIN_AGAIN\" /* ServerError.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */]: \"requires-recent-login\" /* AuthErrorCode.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */,\r\n [\"INVALID_ID_TOKEN\" /* ServerError.INVALID_ID_TOKEN */]: \"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */,\r\n [\"TOKEN_EXPIRED\" /* ServerError.TOKEN_EXPIRED */]: \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */,\r\n [\"USER_NOT_FOUND\" /* ServerError.USER_NOT_FOUND */]: \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */,\r\n // Other errors.\r\n [\"TOO_MANY_ATTEMPTS_TRY_LATER\" /* ServerError.TOO_MANY_ATTEMPTS_TRY_LATER */]: \"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */,\r\n [\"PASSWORD_DOES_NOT_MEET_REQUIREMENTS\" /* ServerError.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */]: \"password-does-not-meet-requirements\" /* AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */,\r\n // Phone Auth related errors.\r\n [\"INVALID_CODE\" /* ServerError.INVALID_CODE */]: \"invalid-verification-code\" /* AuthErrorCode.INVALID_CODE */,\r\n [\"INVALID_SESSION_INFO\" /* ServerError.INVALID_SESSION_INFO */]: \"invalid-verification-id\" /* AuthErrorCode.INVALID_SESSION_INFO */,\r\n [\"INVALID_TEMPORARY_PROOF\" /* ServerError.INVALID_TEMPORARY_PROOF */]: \"invalid-credential\" /* AuthErrorCode.INVALID_CREDENTIAL */,\r\n [\"MISSING_SESSION_INFO\" /* ServerError.MISSING_SESSION_INFO */]: \"missing-verification-id\" /* AuthErrorCode.MISSING_SESSION_INFO */,\r\n [\"SESSION_EXPIRED\" /* ServerError.SESSION_EXPIRED */]: \"code-expired\" /* AuthErrorCode.CODE_EXPIRED */,\r\n // Other action code errors when additional settings passed.\r\n // MISSING_CONTINUE_URI is getting mapped to INTERNAL_ERROR above.\r\n // This is OK as this error will be caught by client side validation.\r\n [\"MISSING_ANDROID_PACKAGE_NAME\" /* ServerError.MISSING_ANDROID_PACKAGE_NAME */]: \"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */,\r\n [\"UNAUTHORIZED_DOMAIN\" /* ServerError.UNAUTHORIZED_DOMAIN */]: \"unauthorized-continue-uri\" /* AuthErrorCode.UNAUTHORIZED_DOMAIN */,\r\n // getProjectConfig errors when clientId is passed.\r\n [\"INVALID_OAUTH_CLIENT_ID\" /* ServerError.INVALID_OAUTH_CLIENT_ID */]: \"invalid-oauth-client-id\" /* AuthErrorCode.INVALID_OAUTH_CLIENT_ID */,\r\n // User actions (sign-up or deletion) disabled errors.\r\n [\"ADMIN_ONLY_OPERATION\" /* ServerError.ADMIN_ONLY_OPERATION */]: \"admin-restricted-operation\" /* AuthErrorCode.ADMIN_ONLY_OPERATION */,\r\n // Multi factor related errors.\r\n [\"INVALID_MFA_PENDING_CREDENTIAL\" /* ServerError.INVALID_MFA_PENDING_CREDENTIAL */]: \"invalid-multi-factor-session\" /* AuthErrorCode.INVALID_MFA_SESSION */,\r\n [\"MFA_ENROLLMENT_NOT_FOUND\" /* ServerError.MFA_ENROLLMENT_NOT_FOUND */]: \"multi-factor-info-not-found\" /* AuthErrorCode.MFA_INFO_NOT_FOUND */,\r\n [\"MISSING_MFA_ENROLLMENT_ID\" /* ServerError.MISSING_MFA_ENROLLMENT_ID */]: \"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */,\r\n [\"MISSING_MFA_PENDING_CREDENTIAL\" /* ServerError.MISSING_MFA_PENDING_CREDENTIAL */]: \"missing-multi-factor-session\" /* AuthErrorCode.MISSING_MFA_SESSION */,\r\n [\"SECOND_FACTOR_EXISTS\" /* ServerError.SECOND_FACTOR_EXISTS */]: \"second-factor-already-in-use\" /* AuthErrorCode.SECOND_FACTOR_ALREADY_ENROLLED */,\r\n [\"SECOND_FACTOR_LIMIT_EXCEEDED\" /* ServerError.SECOND_FACTOR_LIMIT_EXCEEDED */]: \"maximum-second-factor-count-exceeded\" /* AuthErrorCode.SECOND_FACTOR_LIMIT_EXCEEDED */,\r\n // Blocking functions related errors.\r\n [\"BLOCKING_FUNCTION_ERROR_RESPONSE\" /* ServerError.BLOCKING_FUNCTION_ERROR_RESPONSE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Recaptcha related errors.\r\n [\"RECAPTCHA_NOT_ENABLED\" /* ServerError.RECAPTCHA_NOT_ENABLED */]: \"recaptcha-not-enabled\" /* AuthErrorCode.RECAPTCHA_NOT_ENABLED */,\r\n [\"MISSING_RECAPTCHA_TOKEN\" /* ServerError.MISSING_RECAPTCHA_TOKEN */]: \"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */,\r\n [\"INVALID_RECAPTCHA_TOKEN\" /* ServerError.INVALID_RECAPTCHA_TOKEN */]: \"invalid-recaptcha-token\" /* AuthErrorCode.INVALID_RECAPTCHA_TOKEN */,\r\n [\"INVALID_RECAPTCHA_ACTION\" /* ServerError.INVALID_RECAPTCHA_ACTION */]: \"invalid-recaptcha-action\" /* AuthErrorCode.INVALID_RECAPTCHA_ACTION */,\r\n [\"MISSING_CLIENT_TYPE\" /* ServerError.MISSING_CLIENT_TYPE */]: \"missing-client-type\" /* AuthErrorCode.MISSING_CLIENT_TYPE */,\r\n [\"MISSING_RECAPTCHA_VERSION\" /* ServerError.MISSING_RECAPTCHA_VERSION */]: \"missing-recaptcha-version\" /* AuthErrorCode.MISSING_RECAPTCHA_VERSION */,\r\n [\"INVALID_RECAPTCHA_VERSION\" /* ServerError.INVALID_RECAPTCHA_VERSION */]: \"invalid-recaptcha-version\" /* AuthErrorCode.INVALID_RECAPTCHA_VERSION */,\r\n [\"INVALID_REQ_TYPE\" /* ServerError.INVALID_REQ_TYPE */]: \"invalid-req-type\" /* AuthErrorCode.INVALID_REQ_TYPE */\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_API_TIMEOUT_MS = new Delay(30000, 60000);\r\nfunction _addTidIfNecessary(auth, request) {\r\n if (auth.tenantId && !request.tenantId) {\r\n return Object.assign(Object.assign({}, request), { tenantId: auth.tenantId });\r\n }\r\n return request;\r\n}\r\nasync function _performApiRequest(auth, method, path, request, customErrorMap = {}) {\r\n return _performFetchWithErrorHandling(auth, customErrorMap, async () => {\r\n let body = {};\r\n let params = {};\r\n if (request) {\r\n if (method === \"GET\" /* HttpMethod.GET */) {\r\n params = request;\r\n }\r\n else {\r\n body = {\r\n body: JSON.stringify(request)\r\n };\r\n }\r\n }\r\n const query = querystring(Object.assign({ key: auth.config.apiKey }, params)).slice(1);\r\n const headers = await auth._getAdditionalHeaders();\r\n headers[\"Content-Type\" /* HttpHeader.CONTENT_TYPE */] = 'application/json';\r\n if (auth.languageCode) {\r\n headers[\"X-Firebase-Locale\" /* HttpHeader.X_FIREBASE_LOCALE */] = auth.languageCode;\r\n }\r\n return FetchProvider.fetch()(_getFinalTarget(auth, auth.config.apiHost, path, query), Object.assign({ method,\r\n headers, referrerPolicy: 'no-referrer' }, body));\r\n });\r\n}\r\nasync function _performFetchWithErrorHandling(auth, customErrorMap, fetchFn) {\r\n auth._canInitEmulator = false;\r\n const errorMap = Object.assign(Object.assign({}, SERVER_ERROR_MAP), customErrorMap);\r\n try {\r\n const networkTimeout = new NetworkTimeout(auth);\r\n const response = await Promise.race([\r\n fetchFn(),\r\n networkTimeout.promise\r\n ]);\r\n // If we've reached this point, the fetch succeeded and the networkTimeout\r\n // didn't throw; clear the network timeout delay so that Node won't hang\r\n networkTimeout.clearNetworkTimeout();\r\n const json = await response.json();\r\n if ('needConfirmation' in json) {\r\n throw _makeTaggedError(auth, \"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */, json);\r\n }\r\n if (response.ok && !('errorMessage' in json)) {\r\n return json;\r\n }\r\n else {\r\n const errorMessage = response.ok ? json.errorMessage : json.error.message;\r\n const [serverErrorCode, serverErrorMessage] = errorMessage.split(' : ');\r\n if (serverErrorCode === \"FEDERATED_USER_ID_ALREADY_LINKED\" /* ServerError.FEDERATED_USER_ID_ALREADY_LINKED */) {\r\n throw _makeTaggedError(auth, \"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */, json);\r\n }\r\n else if (serverErrorCode === \"EMAIL_EXISTS\" /* ServerError.EMAIL_EXISTS */) {\r\n throw _makeTaggedError(auth, \"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */, json);\r\n }\r\n else if (serverErrorCode === \"USER_DISABLED\" /* ServerError.USER_DISABLED */) {\r\n throw _makeTaggedError(auth, \"user-disabled\" /* AuthErrorCode.USER_DISABLED */, json);\r\n }\r\n const authError = errorMap[serverErrorCode] ||\r\n serverErrorCode\r\n .toLowerCase()\r\n .replace(/[_\\s]+/g, '-');\r\n if (serverErrorMessage) {\r\n throw _errorWithCustomMessage(auth, authError, serverErrorMessage);\r\n }\r\n else {\r\n _fail(auth, authError);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n throw e;\r\n }\r\n // Changing this to a different error code will log user out when there is a network error\r\n // because we treat any error other than NETWORK_REQUEST_FAILED as token is invalid.\r\n // https://github.com/firebase/firebase-js-sdk/blob/4fbc73610d70be4e0852e7de63a39cb7897e8546/packages/auth/src/core/auth/auth_impl.ts#L309-L316\r\n _fail(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */, { 'message': String(e) });\r\n }\r\n}\r\nasync function _performSignInRequest(auth, method, path, request, customErrorMap = {}) {\r\n const serverResponse = (await _performApiRequest(auth, method, path, request, customErrorMap));\r\n if ('mfaPendingCredential' in serverResponse) {\r\n _fail(auth, \"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */, {\r\n _serverResponse: serverResponse\r\n });\r\n }\r\n return serverResponse;\r\n}\r\nfunction _getFinalTarget(auth, host, path, query) {\r\n const base = `${host}${path}?${query}`;\r\n if (!auth.config.emulator) {\r\n return `${auth.config.apiScheme}://${base}`;\r\n }\r\n return _emulatorUrl(auth.config, base);\r\n}\r\nfunction _parseEnforcementState(enforcementStateStr) {\r\n switch (enforcementStateStr) {\r\n case 'ENFORCE':\r\n return \"ENFORCE\" /* EnforcementState.ENFORCE */;\r\n case 'AUDIT':\r\n return \"AUDIT\" /* EnforcementState.AUDIT */;\r\n case 'OFF':\r\n return \"OFF\" /* EnforcementState.OFF */;\r\n default:\r\n return \"ENFORCEMENT_STATE_UNSPECIFIED\" /* EnforcementState.ENFORCEMENT_STATE_UNSPECIFIED */;\r\n }\r\n}\r\nclass NetworkTimeout {\r\n constructor(auth) {\r\n this.auth = auth;\r\n // Node timers and browser timers are fundamentally incompatible, but we\r\n // don't care about the value here\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.timer = null;\r\n this.promise = new Promise((_, reject) => {\r\n this.timer = setTimeout(() => {\r\n return reject(_createError(this.auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n }, DEFAULT_API_TIMEOUT_MS.get());\r\n });\r\n }\r\n clearNetworkTimeout() {\r\n clearTimeout(this.timer);\r\n }\r\n}\r\nfunction _makeTaggedError(auth, code, response) {\r\n const errorParams = {\r\n appName: auth.name\r\n };\r\n if (response.email) {\r\n errorParams.email = response.email;\r\n }\r\n if (response.phoneNumber) {\r\n errorParams.phoneNumber = response.phoneNumber;\r\n }\r\n const error = _createError(auth, code, errorParams);\r\n // We know customData is defined on error because errorParams is defined\r\n error.customData._tokenResponse = response;\r\n return error;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction isV2(grecaptcha) {\r\n return (grecaptcha !== undefined &&\r\n grecaptcha.getResponse !== undefined);\r\n}\r\nfunction isEnterprise(grecaptcha) {\r\n return (grecaptcha !== undefined &&\r\n grecaptcha.enterprise !== undefined);\r\n}\r\nclass RecaptchaConfig {\r\n constructor(response) {\r\n /**\r\n * The reCAPTCHA site key.\r\n */\r\n this.siteKey = '';\r\n /**\r\n * The list of providers and their enablement status for reCAPTCHA Enterprise.\r\n */\r\n this.recaptchaEnforcementState = [];\r\n if (response.recaptchaKey === undefined) {\r\n throw new Error('recaptchaKey undefined');\r\n }\r\n // Example response.recaptchaKey: \"projects/proj123/keys/sitekey123\"\r\n this.siteKey = response.recaptchaKey.split('/')[3];\r\n this.recaptchaEnforcementState = response.recaptchaEnforcementState;\r\n }\r\n /**\r\n * Returns the reCAPTCHA Enterprise enforcement state for the given provider.\r\n *\r\n * @param providerStr - The provider whose enforcement state is to be returned.\r\n * @returns The reCAPTCHA Enterprise enforcement state for the given provider.\r\n */\r\n getProviderEnforcementState(providerStr) {\r\n if (!this.recaptchaEnforcementState ||\r\n this.recaptchaEnforcementState.length === 0) {\r\n return null;\r\n }\r\n for (const recaptchaEnforcementState of this.recaptchaEnforcementState) {\r\n if (recaptchaEnforcementState.provider &&\r\n recaptchaEnforcementState.provider === providerStr) {\r\n return _parseEnforcementState(recaptchaEnforcementState.enforcementState);\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Returns true if the reCAPTCHA Enterprise enforcement state for the provider is set to ENFORCE or AUDIT.\r\n *\r\n * @param providerStr - The provider whose enablement state is to be returned.\r\n * @returns Whether or not reCAPTCHA Enterprise protection is enabled for the given provider.\r\n */\r\n isProviderEnabled(providerStr) {\r\n return (this.getProviderEnforcementState(providerStr) ===\r\n \"ENFORCE\" /* EnforcementState.ENFORCE */ ||\r\n this.getProviderEnforcementState(providerStr) === \"AUDIT\" /* EnforcementState.AUDIT */);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function getRecaptchaParams(auth) {\r\n return ((await _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v1/recaptchaParams\" /* Endpoint.GET_RECAPTCHA_PARAM */)).recaptchaSiteKey || '');\r\n}\r\nasync function getRecaptchaConfig(auth, request) {\r\n return _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v2/recaptchaConfig\" /* Endpoint.GET_RECAPTCHA_CONFIG */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function deleteAccount(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:delete\" /* Endpoint.DELETE_ACCOUNT */, request);\r\n}\r\nasync function deleteLinkedAccounts(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\r\n}\r\nasync function getAccountInfo(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:lookup\" /* Endpoint.GET_ACCOUNT_INFO */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction utcTimestampToDateString(utcTimestamp) {\r\n if (!utcTimestamp) {\r\n return undefined;\r\n }\r\n try {\r\n // Convert to date object.\r\n const date = new Date(Number(utcTimestamp));\r\n // Test date is valid.\r\n if (!isNaN(date.getTime())) {\r\n // Convert to UTC date string.\r\n return date.toUTCString();\r\n }\r\n }\r\n catch (e) {\r\n // Do nothing. undefined will be returned.\r\n }\r\n return undefined;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a JSON Web Token (JWT) used to identify the user to a Firebase service.\r\n *\r\n * @remarks\r\n * Returns the current token if it has not expired or if it will not expire in the next five\r\n * minutes. Otherwise, this will refresh the token and return a new one.\r\n *\r\n * @param user - The user.\r\n * @param forceRefresh - Force refresh regardless of token expiration.\r\n *\r\n * @public\r\n */\r\nfunction getIdToken(user, forceRefresh = false) {\r\n return getModularInstance(user).getIdToken(forceRefresh);\r\n}\r\n/**\r\n * Returns a deserialized JSON Web Token (JWT) used to identify the user to a Firebase service.\r\n *\r\n * @remarks\r\n * Returns the current token if it has not expired or if it will not expire in the next five\r\n * minutes. Otherwise, this will refresh the token and return a new one.\r\n *\r\n * @param user - The user.\r\n * @param forceRefresh - Force refresh regardless of token expiration.\r\n *\r\n * @public\r\n */\r\nasync function getIdTokenResult(user, forceRefresh = false) {\r\n const userInternal = getModularInstance(user);\r\n const token = await userInternal.getIdToken(forceRefresh);\r\n const claims = _parseToken(token);\r\n _assert(claims && claims.exp && claims.auth_time && claims.iat, userInternal.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const firebase = typeof claims.firebase === 'object' ? claims.firebase : undefined;\r\n const signInProvider = firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_provider'];\r\n return {\r\n claims,\r\n token,\r\n authTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.auth_time)),\r\n issuedAtTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.iat)),\r\n expirationTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.exp)),\r\n signInProvider: signInProvider || null,\r\n signInSecondFactor: (firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_second_factor']) || null\r\n };\r\n}\r\nfunction secondsStringToMilliseconds(seconds) {\r\n return Number(seconds) * 1000;\r\n}\r\nfunction _parseToken(token) {\r\n const [algorithm, payload, signature] = token.split('.');\r\n if (algorithm === undefined ||\r\n payload === undefined ||\r\n signature === undefined) {\r\n _logError('JWT malformed, contained fewer than 3 sections');\r\n return null;\r\n }\r\n try {\r\n const decoded = base64Decode(payload);\r\n if (!decoded) {\r\n _logError('Failed to decode base64 JWT payload');\r\n return null;\r\n }\r\n return JSON.parse(decoded);\r\n }\r\n catch (e) {\r\n _logError('Caught error parsing JWT payload as JSON', e === null || e === void 0 ? void 0 : e.toString());\r\n return null;\r\n }\r\n}\r\n/**\r\n * Extract expiresIn TTL from a token by subtracting the expiration from the issuance.\r\n */\r\nfunction _tokenExpiresIn(token) {\r\n const parsedToken = _parseToken(token);\r\n _assert(parsedToken, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof parsedToken.exp !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof parsedToken.iat !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return Number(parsedToken.exp) - Number(parsedToken.iat);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _logoutIfInvalidated(user, promise, bypassAuthState = false) {\r\n if (bypassAuthState) {\r\n return promise;\r\n }\r\n try {\r\n return await promise;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError && isUserInvalidated(e)) {\r\n if (user.auth.currentUser === user) {\r\n await user.auth.signOut();\r\n }\r\n }\r\n throw e;\r\n }\r\n}\r\nfunction isUserInvalidated({ code }) {\r\n return (code === `auth/${\"user-disabled\" /* AuthErrorCode.USER_DISABLED */}` ||\r\n code === `auth/${\"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */}`);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ProactiveRefresh {\r\n constructor(user) {\r\n this.user = user;\r\n this.isRunning = false;\r\n // Node timers and browser timers return fundamentally different types.\r\n // We don't actually care what the value is but TS won't accept unknown and\r\n // we can't cast properly in both environments.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.timerId = null;\r\n this.errorBackoff = 30000 /* Duration.RETRY_BACKOFF_MIN */;\r\n }\r\n _start() {\r\n if (this.isRunning) {\r\n return;\r\n }\r\n this.isRunning = true;\r\n this.schedule();\r\n }\r\n _stop() {\r\n if (!this.isRunning) {\r\n return;\r\n }\r\n this.isRunning = false;\r\n if (this.timerId !== null) {\r\n clearTimeout(this.timerId);\r\n }\r\n }\r\n getInterval(wasError) {\r\n var _a;\r\n if (wasError) {\r\n const interval = this.errorBackoff;\r\n this.errorBackoff = Math.min(this.errorBackoff * 2, 960000 /* Duration.RETRY_BACKOFF_MAX */);\r\n return interval;\r\n }\r\n else {\r\n // Reset the error backoff\r\n this.errorBackoff = 30000 /* Duration.RETRY_BACKOFF_MIN */;\r\n const expTime = (_a = this.user.stsTokenManager.expirationTime) !== null && _a !== void 0 ? _a : 0;\r\n const interval = expTime - Date.now() - 300000 /* Duration.OFFSET */;\r\n return Math.max(0, interval);\r\n }\r\n }\r\n schedule(wasError = false) {\r\n if (!this.isRunning) {\r\n // Just in case...\r\n return;\r\n }\r\n const interval = this.getInterval(wasError);\r\n this.timerId = setTimeout(async () => {\r\n await this.iteration();\r\n }, interval);\r\n }\r\n async iteration() {\r\n try {\r\n await this.user.getIdToken(true);\r\n }\r\n catch (e) {\r\n // Only retry on network errors\r\n if ((e === null || e === void 0 ? void 0 : e.code) ===\r\n `auth/${\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */}`) {\r\n this.schedule(/* wasError */ true);\r\n }\r\n return;\r\n }\r\n this.schedule();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass UserMetadata {\r\n constructor(createdAt, lastLoginAt) {\r\n this.createdAt = createdAt;\r\n this.lastLoginAt = lastLoginAt;\r\n this._initializeTime();\r\n }\r\n _initializeTime() {\r\n this.lastSignInTime = utcTimestampToDateString(this.lastLoginAt);\r\n this.creationTime = utcTimestampToDateString(this.createdAt);\r\n }\r\n _copy(metadata) {\r\n this.createdAt = metadata.createdAt;\r\n this.lastLoginAt = metadata.lastLoginAt;\r\n this._initializeTime();\r\n }\r\n toJSON() {\r\n return {\r\n createdAt: this.createdAt,\r\n lastLoginAt: this.lastLoginAt\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _reloadWithoutSaving(user) {\r\n var _a;\r\n const auth = user.auth;\r\n const idToken = await user.getIdToken();\r\n const response = await _logoutIfInvalidated(user, getAccountInfo(auth, { idToken }));\r\n _assert(response === null || response === void 0 ? void 0 : response.users.length, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const coreAccount = response.users[0];\r\n user._notifyReloadListener(coreAccount);\r\n const newProviderData = ((_a = coreAccount.providerUserInfo) === null || _a === void 0 ? void 0 : _a.length)\r\n ? extractProviderData(coreAccount.providerUserInfo)\r\n : [];\r\n const providerData = mergeProviderData(user.providerData, newProviderData);\r\n // Preserves the non-nonymous status of the stored user, even if no more\r\n // credentials (federated or email/password) are linked to the user. If\r\n // the user was previously anonymous, then use provider data to update.\r\n // On the other hand, if it was not anonymous before, it should never be\r\n // considered anonymous now.\r\n const oldIsAnonymous = user.isAnonymous;\r\n const newIsAnonymous = !(user.email && coreAccount.passwordHash) && !(providerData === null || providerData === void 0 ? void 0 : providerData.length);\r\n const isAnonymous = !oldIsAnonymous ? false : newIsAnonymous;\r\n const updates = {\r\n uid: coreAccount.localId,\r\n displayName: coreAccount.displayName || null,\r\n photoURL: coreAccount.photoUrl || null,\r\n email: coreAccount.email || null,\r\n emailVerified: coreAccount.emailVerified || false,\r\n phoneNumber: coreAccount.phoneNumber || null,\r\n tenantId: coreAccount.tenantId || null,\r\n providerData,\r\n metadata: new UserMetadata(coreAccount.createdAt, coreAccount.lastLoginAt),\r\n isAnonymous\r\n };\r\n Object.assign(user, updates);\r\n}\r\n/**\r\n * Reloads user account data, if signed in.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nasync function reload(user) {\r\n const userInternal = getModularInstance(user);\r\n await _reloadWithoutSaving(userInternal);\r\n // Even though the current user hasn't changed, update\r\n // current user will trigger a persistence update w/ the\r\n // new info.\r\n await userInternal.auth._persistUserIfCurrent(userInternal);\r\n userInternal.auth._notifyListenersIfCurrent(userInternal);\r\n}\r\nfunction mergeProviderData(original, newData) {\r\n const deduped = original.filter(o => !newData.some(n => n.providerId === o.providerId));\r\n return [...deduped, ...newData];\r\n}\r\nfunction extractProviderData(providers) {\r\n return providers.map((_a) => {\r\n var { providerId } = _a, provider = __rest(_a, [\"providerId\"]);\r\n return {\r\n providerId,\r\n uid: provider.rawId || '',\r\n displayName: provider.displayName || null,\r\n email: provider.email || null,\r\n phoneNumber: provider.phoneNumber || null,\r\n photoURL: provider.photoUrl || null\r\n };\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function requestStsToken(auth, refreshToken) {\r\n const response = await _performFetchWithErrorHandling(auth, {}, async () => {\r\n const body = querystring({\r\n 'grant_type': 'refresh_token',\r\n 'refresh_token': refreshToken\r\n }).slice(1);\r\n const { tokenApiHost, apiKey } = auth.config;\r\n const url = _getFinalTarget(auth, tokenApiHost, \"/v1/token\" /* Endpoint.TOKEN */, `key=${apiKey}`);\r\n const headers = await auth._getAdditionalHeaders();\r\n headers[\"Content-Type\" /* HttpHeader.CONTENT_TYPE */] = 'application/x-www-form-urlencoded';\r\n return FetchProvider.fetch()(url, {\r\n method: \"POST\" /* HttpMethod.POST */,\r\n headers,\r\n body\r\n });\r\n });\r\n // The response comes back in snake_case. Convert to camel:\r\n return {\r\n accessToken: response.access_token,\r\n expiresIn: response.expires_in,\r\n refreshToken: response.refresh_token\r\n };\r\n}\r\nasync function revokeToken(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts:revokeToken\" /* Endpoint.REVOKE_TOKEN */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * We need to mark this class as internal explicitly to exclude it in the public typings, because\r\n * it references AuthInternal which has a circular dependency with UserInternal.\r\n *\r\n * @internal\r\n */\r\nclass StsTokenManager {\r\n constructor() {\r\n this.refreshToken = null;\r\n this.accessToken = null;\r\n this.expirationTime = null;\r\n }\r\n get isExpired() {\r\n return (!this.expirationTime ||\r\n Date.now() > this.expirationTime - 30000 /* Buffer.TOKEN_REFRESH */);\r\n }\r\n updateFromServerResponse(response) {\r\n _assert(response.idToken, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof response.idToken !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof response.refreshToken !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const expiresIn = 'expiresIn' in response && typeof response.expiresIn !== 'undefined'\r\n ? Number(response.expiresIn)\r\n : _tokenExpiresIn(response.idToken);\r\n this.updateTokensAndExpiration(response.idToken, response.refreshToken, expiresIn);\r\n }\r\n updateFromIdToken(idToken) {\r\n _assert(idToken.length !== 0, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const expiresIn = _tokenExpiresIn(idToken);\r\n this.updateTokensAndExpiration(idToken, null, expiresIn);\r\n }\r\n async getToken(auth, forceRefresh = false) {\r\n if (!forceRefresh && this.accessToken && !this.isExpired) {\r\n return this.accessToken;\r\n }\r\n _assert(this.refreshToken, auth, \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */);\r\n if (this.refreshToken) {\r\n await this.refresh(auth, this.refreshToken);\r\n return this.accessToken;\r\n }\r\n return null;\r\n }\r\n clearRefreshToken() {\r\n this.refreshToken = null;\r\n }\r\n async refresh(auth, oldToken) {\r\n const { accessToken, refreshToken, expiresIn } = await requestStsToken(auth, oldToken);\r\n this.updateTokensAndExpiration(accessToken, refreshToken, Number(expiresIn));\r\n }\r\n updateTokensAndExpiration(accessToken, refreshToken, expiresInSec) {\r\n this.refreshToken = refreshToken || null;\r\n this.accessToken = accessToken || null;\r\n this.expirationTime = Date.now() + expiresInSec * 1000;\r\n }\r\n static fromJSON(appName, object) {\r\n const { refreshToken, accessToken, expirationTime } = object;\r\n const manager = new StsTokenManager();\r\n if (refreshToken) {\r\n _assert(typeof refreshToken === 'string', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\r\n appName\r\n });\r\n manager.refreshToken = refreshToken;\r\n }\r\n if (accessToken) {\r\n _assert(typeof accessToken === 'string', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\r\n appName\r\n });\r\n manager.accessToken = accessToken;\r\n }\r\n if (expirationTime) {\r\n _assert(typeof expirationTime === 'number', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\r\n appName\r\n });\r\n manager.expirationTime = expirationTime;\r\n }\r\n return manager;\r\n }\r\n toJSON() {\r\n return {\r\n refreshToken: this.refreshToken,\r\n accessToken: this.accessToken,\r\n expirationTime: this.expirationTime\r\n };\r\n }\r\n _assign(stsTokenManager) {\r\n this.accessToken = stsTokenManager.accessToken;\r\n this.refreshToken = stsTokenManager.refreshToken;\r\n this.expirationTime = stsTokenManager.expirationTime;\r\n }\r\n _clone() {\r\n return Object.assign(new StsTokenManager(), this.toJSON());\r\n }\r\n _performRefresh() {\r\n return debugFail('not implemented');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction assertStringOrUndefined(assertion, appName) {\r\n _assert(typeof assertion === 'string' || typeof assertion === 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, { appName });\r\n}\r\nclass UserImpl {\r\n constructor(_a) {\r\n var { uid, auth, stsTokenManager } = _a, opt = __rest(_a, [\"uid\", \"auth\", \"stsTokenManager\"]);\r\n // For the user object, provider is always Firebase.\r\n this.providerId = \"firebase\" /* ProviderId.FIREBASE */;\r\n this.proactiveRefresh = new ProactiveRefresh(this);\r\n this.reloadUserInfo = null;\r\n this.reloadListener = null;\r\n this.uid = uid;\r\n this.auth = auth;\r\n this.stsTokenManager = stsTokenManager;\r\n this.accessToken = stsTokenManager.accessToken;\r\n this.displayName = opt.displayName || null;\r\n this.email = opt.email || null;\r\n this.emailVerified = opt.emailVerified || false;\r\n this.phoneNumber = opt.phoneNumber || null;\r\n this.photoURL = opt.photoURL || null;\r\n this.isAnonymous = opt.isAnonymous || false;\r\n this.tenantId = opt.tenantId || null;\r\n this.providerData = opt.providerData ? [...opt.providerData] : [];\r\n this.metadata = new UserMetadata(opt.createdAt || undefined, opt.lastLoginAt || undefined);\r\n }\r\n async getIdToken(forceRefresh) {\r\n const accessToken = await _logoutIfInvalidated(this, this.stsTokenManager.getToken(this.auth, forceRefresh));\r\n _assert(accessToken, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n if (this.accessToken !== accessToken) {\r\n this.accessToken = accessToken;\r\n await this.auth._persistUserIfCurrent(this);\r\n this.auth._notifyListenersIfCurrent(this);\r\n }\r\n return accessToken;\r\n }\r\n getIdTokenResult(forceRefresh) {\r\n return getIdTokenResult(this, forceRefresh);\r\n }\r\n reload() {\r\n return reload(this);\r\n }\r\n _assign(user) {\r\n if (this === user) {\r\n return;\r\n }\r\n _assert(this.uid === user.uid, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n this.displayName = user.displayName;\r\n this.photoURL = user.photoURL;\r\n this.email = user.email;\r\n this.emailVerified = user.emailVerified;\r\n this.phoneNumber = user.phoneNumber;\r\n this.isAnonymous = user.isAnonymous;\r\n this.tenantId = user.tenantId;\r\n this.providerData = user.providerData.map(userInfo => (Object.assign({}, userInfo)));\r\n this.metadata._copy(user.metadata);\r\n this.stsTokenManager._assign(user.stsTokenManager);\r\n }\r\n _clone(auth) {\r\n const newUser = new UserImpl(Object.assign(Object.assign({}, this), { auth, stsTokenManager: this.stsTokenManager._clone() }));\r\n newUser.metadata._copy(this.metadata);\r\n return newUser;\r\n }\r\n _onReload(callback) {\r\n // There should only ever be one listener, and that is a single instance of MultiFactorUser\r\n _assert(!this.reloadListener, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n this.reloadListener = callback;\r\n if (this.reloadUserInfo) {\r\n this._notifyReloadListener(this.reloadUserInfo);\r\n this.reloadUserInfo = null;\r\n }\r\n }\r\n _notifyReloadListener(userInfo) {\r\n if (this.reloadListener) {\r\n this.reloadListener(userInfo);\r\n }\r\n else {\r\n // If no listener is subscribed yet, save the result so it's available when they do subscribe\r\n this.reloadUserInfo = userInfo;\r\n }\r\n }\r\n _startProactiveRefresh() {\r\n this.proactiveRefresh._start();\r\n }\r\n _stopProactiveRefresh() {\r\n this.proactiveRefresh._stop();\r\n }\r\n async _updateTokensIfNecessary(response, reload = false) {\r\n let tokensRefreshed = false;\r\n if (response.idToken &&\r\n response.idToken !== this.stsTokenManager.accessToken) {\r\n this.stsTokenManager.updateFromServerResponse(response);\r\n tokensRefreshed = true;\r\n }\r\n if (reload) {\r\n await _reloadWithoutSaving(this);\r\n }\r\n await this.auth._persistUserIfCurrent(this);\r\n if (tokensRefreshed) {\r\n this.auth._notifyListenersIfCurrent(this);\r\n }\r\n }\r\n async delete() {\r\n if (_isFirebaseServerApp(this.auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(this.auth));\r\n }\r\n const idToken = await this.getIdToken();\r\n await _logoutIfInvalidated(this, deleteAccount(this.auth, { idToken }));\r\n this.stsTokenManager.clearRefreshToken();\r\n // TODO: Determine if cancellable-promises are necessary to use in this class so that delete()\r\n // cancels pending actions...\r\n return this.auth.signOut();\r\n }\r\n toJSON() {\r\n return Object.assign(Object.assign({ uid: this.uid, email: this.email || undefined, emailVerified: this.emailVerified, displayName: this.displayName || undefined, isAnonymous: this.isAnonymous, photoURL: this.photoURL || undefined, phoneNumber: this.phoneNumber || undefined, tenantId: this.tenantId || undefined, providerData: this.providerData.map(userInfo => (Object.assign({}, userInfo))), stsTokenManager: this.stsTokenManager.toJSON(), \r\n // Redirect event ID must be maintained in case there is a pending\r\n // redirect event.\r\n _redirectEventId: this._redirectEventId }, this.metadata.toJSON()), { \r\n // Required for compatibility with the legacy SDK (go/firebase-auth-sdk-persistence-parsing):\r\n apiKey: this.auth.config.apiKey, appName: this.auth.name });\r\n }\r\n get refreshToken() {\r\n return this.stsTokenManager.refreshToken || '';\r\n }\r\n static _fromJSON(auth, object) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h;\r\n const displayName = (_a = object.displayName) !== null && _a !== void 0 ? _a : undefined;\r\n const email = (_b = object.email) !== null && _b !== void 0 ? _b : undefined;\r\n const phoneNumber = (_c = object.phoneNumber) !== null && _c !== void 0 ? _c : undefined;\r\n const photoURL = (_d = object.photoURL) !== null && _d !== void 0 ? _d : undefined;\r\n const tenantId = (_e = object.tenantId) !== null && _e !== void 0 ? _e : undefined;\r\n const _redirectEventId = (_f = object._redirectEventId) !== null && _f !== void 0 ? _f : undefined;\r\n const createdAt = (_g = object.createdAt) !== null && _g !== void 0 ? _g : undefined;\r\n const lastLoginAt = (_h = object.lastLoginAt) !== null && _h !== void 0 ? _h : undefined;\r\n const { uid, emailVerified, isAnonymous, providerData, stsTokenManager: plainObjectTokenManager } = object;\r\n _assert(uid && plainObjectTokenManager, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const stsTokenManager = StsTokenManager.fromJSON(this.name, plainObjectTokenManager);\r\n _assert(typeof uid === 'string', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n assertStringOrUndefined(displayName, auth.name);\r\n assertStringOrUndefined(email, auth.name);\r\n _assert(typeof emailVerified === 'boolean', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof isAnonymous === 'boolean', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n assertStringOrUndefined(phoneNumber, auth.name);\r\n assertStringOrUndefined(photoURL, auth.name);\r\n assertStringOrUndefined(tenantId, auth.name);\r\n assertStringOrUndefined(_redirectEventId, auth.name);\r\n assertStringOrUndefined(createdAt, auth.name);\r\n assertStringOrUndefined(lastLoginAt, auth.name);\r\n const user = new UserImpl({\r\n uid,\r\n auth,\r\n email,\r\n emailVerified,\r\n displayName,\r\n isAnonymous,\r\n photoURL,\r\n phoneNumber,\r\n tenantId,\r\n stsTokenManager,\r\n createdAt,\r\n lastLoginAt\r\n });\r\n if (providerData && Array.isArray(providerData)) {\r\n user.providerData = providerData.map(userInfo => (Object.assign({}, userInfo)));\r\n }\r\n if (_redirectEventId) {\r\n user._redirectEventId = _redirectEventId;\r\n }\r\n return user;\r\n }\r\n /**\r\n * Initialize a User from an idToken server response\r\n * @param auth\r\n * @param idTokenResponse\r\n */\r\n static async _fromIdTokenResponse(auth, idTokenResponse, isAnonymous = false) {\r\n const stsTokenManager = new StsTokenManager();\r\n stsTokenManager.updateFromServerResponse(idTokenResponse);\r\n // Initialize the Firebase Auth user.\r\n const user = new UserImpl({\r\n uid: idTokenResponse.localId,\r\n auth,\r\n stsTokenManager,\r\n isAnonymous\r\n });\r\n // Updates the user info and data and resolves with a user instance.\r\n await _reloadWithoutSaving(user);\r\n return user;\r\n }\r\n /**\r\n * Initialize a User from an idToken server response\r\n * @param auth\r\n * @param idTokenResponse\r\n */\r\n static async _fromGetAccountInfoResponse(auth, response, idToken) {\r\n const coreAccount = response.users[0];\r\n _assert(coreAccount.localId !== undefined, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const providerData = coreAccount.providerUserInfo !== undefined\r\n ? extractProviderData(coreAccount.providerUserInfo)\r\n : [];\r\n const isAnonymous = !(coreAccount.email && coreAccount.passwordHash) && !(providerData === null || providerData === void 0 ? void 0 : providerData.length);\r\n const stsTokenManager = new StsTokenManager();\r\n stsTokenManager.updateFromIdToken(idToken);\r\n // Initialize the Firebase Auth user.\r\n const user = new UserImpl({\r\n uid: coreAccount.localId,\r\n auth,\r\n stsTokenManager,\r\n isAnonymous\r\n });\r\n // update the user with data from the GetAccountInfo response.\r\n const updates = {\r\n uid: coreAccount.localId,\r\n displayName: coreAccount.displayName || null,\r\n photoURL: coreAccount.photoUrl || null,\r\n email: coreAccount.email || null,\r\n emailVerified: coreAccount.emailVerified || false,\r\n phoneNumber: coreAccount.phoneNumber || null,\r\n tenantId: coreAccount.tenantId || null,\r\n providerData,\r\n metadata: new UserMetadata(coreAccount.createdAt, coreAccount.lastLoginAt),\r\n isAnonymous: !(coreAccount.email && coreAccount.passwordHash) &&\r\n !(providerData === null || providerData === void 0 ? void 0 : providerData.length)\r\n };\r\n Object.assign(user, updates);\r\n return user;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst instanceCache = new Map();\r\nfunction _getInstance(cls) {\r\n debugAssert(cls instanceof Function, 'Expected a class definition');\r\n let instance = instanceCache.get(cls);\r\n if (instance) {\r\n debugAssert(instance instanceof cls, 'Instance stored in cache mismatched with class');\r\n return instance;\r\n }\r\n instance = new cls();\r\n instanceCache.set(cls, instance);\r\n return instance;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass InMemoryPersistence {\r\n constructor() {\r\n this.type = \"NONE\" /* PersistenceType.NONE */;\r\n this.storage = {};\r\n }\r\n async _isAvailable() {\r\n return true;\r\n }\r\n async _set(key, value) {\r\n this.storage[key] = value;\r\n }\r\n async _get(key) {\r\n const value = this.storage[key];\r\n return value === undefined ? null : value;\r\n }\r\n async _remove(key) {\r\n delete this.storage[key];\r\n }\r\n _addListener(_key, _listener) {\r\n // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\r\n return;\r\n }\r\n _removeListener(_key, _listener) {\r\n // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\r\n return;\r\n }\r\n}\r\nInMemoryPersistence.type = 'NONE';\r\n/**\r\n * An implementation of {@link Persistence} of type 'NONE'.\r\n *\r\n * @public\r\n */\r\nconst inMemoryPersistence = InMemoryPersistence;\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _persistenceKeyName(key, apiKey, appName) {\r\n return `${\"firebase\" /* Namespace.PERSISTENCE */}:${key}:${apiKey}:${appName}`;\r\n}\r\nclass PersistenceUserManager {\r\n constructor(persistence, auth, userKey) {\r\n this.persistence = persistence;\r\n this.auth = auth;\r\n this.userKey = userKey;\r\n const { config, name } = this.auth;\r\n this.fullUserKey = _persistenceKeyName(this.userKey, config.apiKey, name);\r\n this.fullPersistenceKey = _persistenceKeyName(\"persistence\" /* KeyName.PERSISTENCE_USER */, config.apiKey, name);\r\n this.boundEventHandler = auth._onStorageEvent.bind(auth);\r\n this.persistence._addListener(this.fullUserKey, this.boundEventHandler);\r\n }\r\n setCurrentUser(user) {\r\n return this.persistence._set(this.fullUserKey, user.toJSON());\r\n }\r\n async getCurrentUser() {\r\n const blob = await this.persistence._get(this.fullUserKey);\r\n return blob ? UserImpl._fromJSON(this.auth, blob) : null;\r\n }\r\n removeCurrentUser() {\r\n return this.persistence._remove(this.fullUserKey);\r\n }\r\n savePersistenceForRedirect() {\r\n return this.persistence._set(this.fullPersistenceKey, this.persistence.type);\r\n }\r\n async setPersistence(newPersistence) {\r\n if (this.persistence === newPersistence) {\r\n return;\r\n }\r\n const currentUser = await this.getCurrentUser();\r\n await this.removeCurrentUser();\r\n this.persistence = newPersistence;\r\n if (currentUser) {\r\n return this.setCurrentUser(currentUser);\r\n }\r\n }\r\n delete() {\r\n this.persistence._removeListener(this.fullUserKey, this.boundEventHandler);\r\n }\r\n static async create(auth, persistenceHierarchy, userKey = \"authUser\" /* KeyName.AUTH_USER */) {\r\n if (!persistenceHierarchy.length) {\r\n return new PersistenceUserManager(_getInstance(inMemoryPersistence), auth, userKey);\r\n }\r\n // Eliminate any persistences that are not available\r\n const availablePersistences = (await Promise.all(persistenceHierarchy.map(async (persistence) => {\r\n if (await persistence._isAvailable()) {\r\n return persistence;\r\n }\r\n return undefined;\r\n }))).filter(persistence => persistence);\r\n // Fall back to the first persistence listed, or in memory if none available\r\n let selectedPersistence = availablePersistences[0] ||\r\n _getInstance(inMemoryPersistence);\r\n const key = _persistenceKeyName(userKey, auth.config.apiKey, auth.name);\r\n // Pull out the existing user, setting the chosen persistence to that\r\n // persistence if the user exists.\r\n let userToMigrate = null;\r\n // Note, here we check for a user in _all_ persistences, not just the\r\n // ones deemed available. If we can migrate a user out of a broken\r\n // persistence, we will (but only if that persistence supports migration).\r\n for (const persistence of persistenceHierarchy) {\r\n try {\r\n const blob = await persistence._get(key);\r\n if (blob) {\r\n const user = UserImpl._fromJSON(auth, blob); // throws for unparsable blob (wrong format)\r\n if (persistence !== selectedPersistence) {\r\n userToMigrate = user;\r\n }\r\n selectedPersistence = persistence;\r\n break;\r\n }\r\n }\r\n catch (_a) { }\r\n }\r\n // If we find the user in a persistence that does support migration, use\r\n // that migration path (of only persistences that support migration)\r\n const migrationHierarchy = availablePersistences.filter(p => p._shouldAllowMigration);\r\n // If the persistence does _not_ allow migration, just finish off here\r\n if (!selectedPersistence._shouldAllowMigration ||\r\n !migrationHierarchy.length) {\r\n return new PersistenceUserManager(selectedPersistence, auth, userKey);\r\n }\r\n selectedPersistence = migrationHierarchy[0];\r\n if (userToMigrate) {\r\n // This normally shouldn't throw since chosenPersistence.isAvailable() is true, but if it does\r\n // we'll just let it bubble to surface the error.\r\n await selectedPersistence._set(key, userToMigrate.toJSON());\r\n }\r\n // Attempt to clear the key in other persistences but ignore errors. This helps prevent issues\r\n // such as users getting stuck with a previous account after signing out and refreshing the tab.\r\n await Promise.all(persistenceHierarchy.map(async (persistence) => {\r\n if (persistence !== selectedPersistence) {\r\n try {\r\n await persistence._remove(key);\r\n }\r\n catch (_a) { }\r\n }\r\n }));\r\n return new PersistenceUserManager(selectedPersistence, auth, userKey);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Determine the browser for the purposes of reporting usage to the API\r\n */\r\nfunction _getBrowserName(userAgent) {\r\n const ua = userAgent.toLowerCase();\r\n if (ua.includes('opera/') || ua.includes('opr/') || ua.includes('opios/')) {\r\n return \"Opera\" /* BrowserName.OPERA */;\r\n }\r\n else if (_isIEMobile(ua)) {\r\n // Windows phone IEMobile browser.\r\n return \"IEMobile\" /* BrowserName.IEMOBILE */;\r\n }\r\n else if (ua.includes('msie') || ua.includes('trident/')) {\r\n return \"IE\" /* BrowserName.IE */;\r\n }\r\n else if (ua.includes('edge/')) {\r\n return \"Edge\" /* BrowserName.EDGE */;\r\n }\r\n else if (_isFirefox(ua)) {\r\n return \"Firefox\" /* BrowserName.FIREFOX */;\r\n }\r\n else if (ua.includes('silk/')) {\r\n return \"Silk\" /* BrowserName.SILK */;\r\n }\r\n else if (_isBlackBerry(ua)) {\r\n // Blackberry browser.\r\n return \"Blackberry\" /* BrowserName.BLACKBERRY */;\r\n }\r\n else if (_isWebOS(ua)) {\r\n // WebOS default browser.\r\n return \"Webos\" /* BrowserName.WEBOS */;\r\n }\r\n else if (_isSafari(ua)) {\r\n return \"Safari\" /* BrowserName.SAFARI */;\r\n }\r\n else if ((ua.includes('chrome/') || _isChromeIOS(ua)) &&\r\n !ua.includes('edge/')) {\r\n return \"Chrome\" /* BrowserName.CHROME */;\r\n }\r\n else if (_isAndroid(ua)) {\r\n // Android stock browser.\r\n return \"Android\" /* BrowserName.ANDROID */;\r\n }\r\n else {\r\n // Most modern browsers have name/version at end of user agent string.\r\n const re = /([a-zA-Z\\d\\.]+)\\/[a-zA-Z\\d\\.]*$/;\r\n const matches = userAgent.match(re);\r\n if ((matches === null || matches === void 0 ? void 0 : matches.length) === 2) {\r\n return matches[1];\r\n }\r\n }\r\n return \"Other\" /* BrowserName.OTHER */;\r\n}\r\nfunction _isFirefox(ua = getUA()) {\r\n return /firefox\\//i.test(ua);\r\n}\r\nfunction _isSafari(userAgent = getUA()) {\r\n const ua = userAgent.toLowerCase();\r\n return (ua.includes('safari/') &&\r\n !ua.includes('chrome/') &&\r\n !ua.includes('crios/') &&\r\n !ua.includes('android'));\r\n}\r\nfunction _isChromeIOS(ua = getUA()) {\r\n return /crios\\//i.test(ua);\r\n}\r\nfunction _isIEMobile(ua = getUA()) {\r\n return /iemobile/i.test(ua);\r\n}\r\nfunction _isAndroid(ua = getUA()) {\r\n return /android/i.test(ua);\r\n}\r\nfunction _isBlackBerry(ua = getUA()) {\r\n return /blackberry/i.test(ua);\r\n}\r\nfunction _isWebOS(ua = getUA()) {\r\n return /webos/i.test(ua);\r\n}\r\nfunction _isIOS(ua = getUA()) {\r\n return (/iphone|ipad|ipod/i.test(ua) ||\r\n (/macintosh/i.test(ua) && /mobile/i.test(ua)));\r\n}\r\nfunction _isIOS7Or8(ua = getUA()) {\r\n return (/(iPad|iPhone|iPod).*OS 7_\\d/i.test(ua) ||\r\n /(iPad|iPhone|iPod).*OS 8_\\d/i.test(ua));\r\n}\r\nfunction _isIOSStandalone(ua = getUA()) {\r\n var _a;\r\n return _isIOS(ua) && !!((_a = window.navigator) === null || _a === void 0 ? void 0 : _a.standalone);\r\n}\r\nfunction _isIE10() {\r\n return isIE() && document.documentMode === 10;\r\n}\r\nfunction _isMobileBrowser(ua = getUA()) {\r\n // TODO: implement getBrowserName equivalent for OS.\r\n return (_isIOS(ua) ||\r\n _isAndroid(ua) ||\r\n _isWebOS(ua) ||\r\n _isBlackBerry(ua) ||\r\n /windows phone/i.test(ua) ||\r\n _isIEMobile(ua));\r\n}\r\nfunction _isIframe() {\r\n try {\r\n // Check that the current window is not the top window.\r\n // If so, return true.\r\n return !!(window && window !== window.top);\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/*\r\n * Determine the SDK version string\r\n */\r\nfunction _getClientVersion(clientPlatform, frameworks = []) {\r\n let reportedPlatform;\r\n switch (clientPlatform) {\r\n case \"Browser\" /* ClientPlatform.BROWSER */:\r\n // In a browser environment, report the browser name.\r\n reportedPlatform = _getBrowserName(getUA());\r\n break;\r\n case \"Worker\" /* ClientPlatform.WORKER */:\r\n // Technically a worker runs from a browser but we need to differentiate a\r\n // worker from a browser.\r\n // For example: Chrome-Worker/JsCore/4.9.1/FirebaseCore-web.\r\n reportedPlatform = `${_getBrowserName(getUA())}-${clientPlatform}`;\r\n break;\r\n default:\r\n reportedPlatform = clientPlatform;\r\n }\r\n const reportedFrameworks = frameworks.length\r\n ? frameworks.join(',')\r\n : 'FirebaseCore-web'; /* default value if no other framework is used */\r\n return `${reportedPlatform}/${\"JsCore\" /* ClientImplementation.CORE */}/${SDK_VERSION}/${reportedFrameworks}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthMiddlewareQueue {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.queue = [];\r\n }\r\n pushCallback(callback, onAbort) {\r\n // The callback could be sync or async. Wrap it into a\r\n // function that is always async.\r\n const wrappedCallback = (user) => new Promise((resolve, reject) => {\r\n try {\r\n const result = callback(user);\r\n // Either resolve with existing promise or wrap a non-promise\r\n // return value into a promise.\r\n resolve(result);\r\n }\r\n catch (e) {\r\n // Sync callback throws.\r\n reject(e);\r\n }\r\n });\r\n // Attach the onAbort if present\r\n wrappedCallback.onAbort = onAbort;\r\n this.queue.push(wrappedCallback);\r\n const index = this.queue.length - 1;\r\n return () => {\r\n // Unsubscribe. Replace with no-op. Do not remove from array, or it will disturb\r\n // indexing of other elements.\r\n this.queue[index] = () => Promise.resolve();\r\n };\r\n }\r\n async runMiddleware(nextUser) {\r\n if (this.auth.currentUser === nextUser) {\r\n return;\r\n }\r\n // While running the middleware, build a temporary stack of onAbort\r\n // callbacks to call if one middleware callback rejects.\r\n const onAbortStack = [];\r\n try {\r\n for (const beforeStateCallback of this.queue) {\r\n await beforeStateCallback(nextUser);\r\n // Only push the onAbort if the callback succeeds\r\n if (beforeStateCallback.onAbort) {\r\n onAbortStack.push(beforeStateCallback.onAbort);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // Run all onAbort, with separate try/catch to ignore any errors and\r\n // continue\r\n onAbortStack.reverse();\r\n for (const onAbort of onAbortStack) {\r\n try {\r\n onAbort();\r\n }\r\n catch (_) {\r\n /* swallow error */\r\n }\r\n }\r\n throw this.auth._errorFactory.create(\"login-blocked\" /* AuthErrorCode.LOGIN_BLOCKED */, {\r\n originalMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2023 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Fetches the password policy for the currently set tenant or the project if no tenant is set.\r\n *\r\n * @param auth Auth object.\r\n * @param request Password policy request.\r\n * @returns Password policy response.\r\n */\r\nasync function _getPasswordPolicy(auth, request = {}) {\r\n return _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v2/passwordPolicy\" /* Endpoint.GET_PASSWORD_POLICY */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2023 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Minimum min password length enforced by the backend, even if no minimum length is set.\r\nconst MINIMUM_MIN_PASSWORD_LENGTH = 6;\r\n/**\r\n * Stores password policy requirements and provides password validation against the policy.\r\n *\r\n * @internal\r\n */\r\nclass PasswordPolicyImpl {\r\n constructor(response) {\r\n var _a, _b, _c, _d;\r\n // Only include custom strength options defined in the response.\r\n const responseOptions = response.customStrengthOptions;\r\n this.customStrengthOptions = {};\r\n // TODO: Remove once the backend is updated to include the minimum min password length instead of undefined when there is no minimum length set.\r\n this.customStrengthOptions.minPasswordLength =\r\n (_a = responseOptions.minPasswordLength) !== null && _a !== void 0 ? _a : MINIMUM_MIN_PASSWORD_LENGTH;\r\n if (responseOptions.maxPasswordLength) {\r\n this.customStrengthOptions.maxPasswordLength =\r\n responseOptions.maxPasswordLength;\r\n }\r\n if (responseOptions.containsLowercaseCharacter !== undefined) {\r\n this.customStrengthOptions.containsLowercaseLetter =\r\n responseOptions.containsLowercaseCharacter;\r\n }\r\n if (responseOptions.containsUppercaseCharacter !== undefined) {\r\n this.customStrengthOptions.containsUppercaseLetter =\r\n responseOptions.containsUppercaseCharacter;\r\n }\r\n if (responseOptions.containsNumericCharacter !== undefined) {\r\n this.customStrengthOptions.containsNumericCharacter =\r\n responseOptions.containsNumericCharacter;\r\n }\r\n if (responseOptions.containsNonAlphanumericCharacter !== undefined) {\r\n this.customStrengthOptions.containsNonAlphanumericCharacter =\r\n responseOptions.containsNonAlphanumericCharacter;\r\n }\r\n this.enforcementState = response.enforcementState;\r\n if (this.enforcementState === 'ENFORCEMENT_STATE_UNSPECIFIED') {\r\n this.enforcementState = 'OFF';\r\n }\r\n // Use an empty string if no non-alphanumeric characters are specified in the response.\r\n this.allowedNonAlphanumericCharacters =\r\n (_c = (_b = response.allowedNonAlphanumericCharacters) === null || _b === void 0 ? void 0 : _b.join('')) !== null && _c !== void 0 ? _c : '';\r\n this.forceUpgradeOnSignin = (_d = response.forceUpgradeOnSignin) !== null && _d !== void 0 ? _d : false;\r\n this.schemaVersion = response.schemaVersion;\r\n }\r\n validatePassword(password) {\r\n var _a, _b, _c, _d, _e, _f;\r\n const status = {\r\n isValid: true,\r\n passwordPolicy: this\r\n };\r\n // Check the password length and character options.\r\n this.validatePasswordLengthOptions(password, status);\r\n this.validatePasswordCharacterOptions(password, status);\r\n // Combine the status into single isValid property.\r\n status.isValid && (status.isValid = (_a = status.meetsMinPasswordLength) !== null && _a !== void 0 ? _a : true);\r\n status.isValid && (status.isValid = (_b = status.meetsMaxPasswordLength) !== null && _b !== void 0 ? _b : true);\r\n status.isValid && (status.isValid = (_c = status.containsLowercaseLetter) !== null && _c !== void 0 ? _c : true);\r\n status.isValid && (status.isValid = (_d = status.containsUppercaseLetter) !== null && _d !== void 0 ? _d : true);\r\n status.isValid && (status.isValid = (_e = status.containsNumericCharacter) !== null && _e !== void 0 ? _e : true);\r\n status.isValid && (status.isValid = (_f = status.containsNonAlphanumericCharacter) !== null && _f !== void 0 ? _f : true);\r\n return status;\r\n }\r\n /**\r\n * Validates that the password meets the length options for the policy.\r\n *\r\n * @param password Password to validate.\r\n * @param status Validation status.\r\n */\r\n validatePasswordLengthOptions(password, status) {\r\n const minPasswordLength = this.customStrengthOptions.minPasswordLength;\r\n const maxPasswordLength = this.customStrengthOptions.maxPasswordLength;\r\n if (minPasswordLength) {\r\n status.meetsMinPasswordLength = password.length >= minPasswordLength;\r\n }\r\n if (maxPasswordLength) {\r\n status.meetsMaxPasswordLength = password.length <= maxPasswordLength;\r\n }\r\n }\r\n /**\r\n * Validates that the password meets the character options for the policy.\r\n *\r\n * @param password Password to validate.\r\n * @param status Validation status.\r\n */\r\n validatePasswordCharacterOptions(password, status) {\r\n // Assign statuses for requirements even if the password is an empty string.\r\n this.updatePasswordCharacterOptionsStatuses(status, \r\n /* containsLowercaseCharacter= */ false, \r\n /* containsUppercaseCharacter= */ false, \r\n /* containsNumericCharacter= */ false, \r\n /* containsNonAlphanumericCharacter= */ false);\r\n let passwordChar;\r\n for (let i = 0; i < password.length; i++) {\r\n passwordChar = password.charAt(i);\r\n this.updatePasswordCharacterOptionsStatuses(status, \r\n /* containsLowercaseCharacter= */ passwordChar >= 'a' &&\r\n passwordChar <= 'z', \r\n /* containsUppercaseCharacter= */ passwordChar >= 'A' &&\r\n passwordChar <= 'Z', \r\n /* containsNumericCharacter= */ passwordChar >= '0' &&\r\n passwordChar <= '9', \r\n /* containsNonAlphanumericCharacter= */ this.allowedNonAlphanumericCharacters.includes(passwordChar));\r\n }\r\n }\r\n /**\r\n * Updates the running validation status with the statuses for the character options.\r\n * Expected to be called each time a character is processed to update each option status\r\n * based on the current character.\r\n *\r\n * @param status Validation status.\r\n * @param containsLowercaseCharacter Whether the character is a lowercase letter.\r\n * @param containsUppercaseCharacter Whether the character is an uppercase letter.\r\n * @param containsNumericCharacter Whether the character is a numeric character.\r\n * @param containsNonAlphanumericCharacter Whether the character is a non-alphanumeric character.\r\n */\r\n updatePasswordCharacterOptionsStatuses(status, containsLowercaseCharacter, containsUppercaseCharacter, containsNumericCharacter, containsNonAlphanumericCharacter) {\r\n if (this.customStrengthOptions.containsLowercaseLetter) {\r\n status.containsLowercaseLetter || (status.containsLowercaseLetter = containsLowercaseCharacter);\r\n }\r\n if (this.customStrengthOptions.containsUppercaseLetter) {\r\n status.containsUppercaseLetter || (status.containsUppercaseLetter = containsUppercaseCharacter);\r\n }\r\n if (this.customStrengthOptions.containsNumericCharacter) {\r\n status.containsNumericCharacter || (status.containsNumericCharacter = containsNumericCharacter);\r\n }\r\n if (this.customStrengthOptions.containsNonAlphanumericCharacter) {\r\n status.containsNonAlphanumericCharacter || (status.containsNonAlphanumericCharacter = containsNonAlphanumericCharacter);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthImpl {\r\n constructor(app, heartbeatServiceProvider, appCheckServiceProvider, config) {\r\n this.app = app;\r\n this.heartbeatServiceProvider = heartbeatServiceProvider;\r\n this.appCheckServiceProvider = appCheckServiceProvider;\r\n this.config = config;\r\n this.currentUser = null;\r\n this.emulatorConfig = null;\r\n this.operations = Promise.resolve();\r\n this.authStateSubscription = new Subscription(this);\r\n this.idTokenSubscription = new Subscription(this);\r\n this.beforeStateQueue = new AuthMiddlewareQueue(this);\r\n this.redirectUser = null;\r\n this.isProactiveRefreshEnabled = false;\r\n this.EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION = 1;\r\n // Any network calls will set this to true and prevent subsequent emulator\r\n // initialization\r\n this._canInitEmulator = true;\r\n this._isInitialized = false;\r\n this._deleted = false;\r\n this._initializationPromise = null;\r\n this._popupRedirectResolver = null;\r\n this._errorFactory = _DEFAULT_AUTH_ERROR_FACTORY;\r\n this._agentRecaptchaConfig = null;\r\n this._tenantRecaptchaConfigs = {};\r\n this._projectPasswordPolicy = null;\r\n this._tenantPasswordPolicies = {};\r\n // Tracks the last notified UID for state change listeners to prevent\r\n // repeated calls to the callbacks. Undefined means it's never been\r\n // called, whereas null means it's been called with a signed out user\r\n this.lastNotifiedUid = undefined;\r\n this.languageCode = null;\r\n this.tenantId = null;\r\n this.settings = { appVerificationDisabledForTesting: false };\r\n this.frameworks = [];\r\n this.name = app.name;\r\n this.clientVersion = config.sdkClientVersion;\r\n }\r\n _initializeWithPersistence(persistenceHierarchy, popupRedirectResolver) {\r\n if (popupRedirectResolver) {\r\n this._popupRedirectResolver = _getInstance(popupRedirectResolver);\r\n }\r\n // Have to check for app deletion throughout initialization (after each\r\n // promise resolution)\r\n this._initializationPromise = this.queue(async () => {\r\n var _a, _b;\r\n if (this._deleted) {\r\n return;\r\n }\r\n this.persistenceManager = await PersistenceUserManager.create(this, persistenceHierarchy);\r\n if (this._deleted) {\r\n return;\r\n }\r\n // Initialize the resolver early if necessary (only applicable to web:\r\n // this will cause the iframe to load immediately in certain cases)\r\n if ((_a = this._popupRedirectResolver) === null || _a === void 0 ? void 0 : _a._shouldInitProactively) {\r\n // If this fails, don't halt auth loading\r\n try {\r\n await this._popupRedirectResolver._initialize(this);\r\n }\r\n catch (e) {\r\n /* Ignore the error */\r\n }\r\n }\r\n await this.initializeCurrentUser(popupRedirectResolver);\r\n this.lastNotifiedUid = ((_b = this.currentUser) === null || _b === void 0 ? void 0 : _b.uid) || null;\r\n if (this._deleted) {\r\n return;\r\n }\r\n this._isInitialized = true;\r\n });\r\n return this._initializationPromise;\r\n }\r\n /**\r\n * If the persistence is changed in another window, the user manager will let us know\r\n */\r\n async _onStorageEvent() {\r\n if (this._deleted) {\r\n return;\r\n }\r\n const user = await this.assertedPersistence.getCurrentUser();\r\n if (!this.currentUser && !user) {\r\n // No change, do nothing (was signed out and remained signed out).\r\n return;\r\n }\r\n // If the same user is to be synchronized.\r\n if (this.currentUser && user && this.currentUser.uid === user.uid) {\r\n // Data update, simply copy data changes.\r\n this._currentUser._assign(user);\r\n // If tokens changed from previous user tokens, this will trigger\r\n // notifyAuthListeners_.\r\n await this.currentUser.getIdToken();\r\n return;\r\n }\r\n // Update current Auth state. Either a new login or logout.\r\n // Skip blocking callbacks, they should not apply to a change in another tab.\r\n await this._updateCurrentUser(user, /* skipBeforeStateCallbacks */ true);\r\n }\r\n async initializeCurrentUserFromIdToken(idToken) {\r\n try {\r\n const response = await getAccountInfo(this, { idToken });\r\n const user = await UserImpl._fromGetAccountInfoResponse(this, response, idToken);\r\n await this.directlySetCurrentUser(user);\r\n }\r\n catch (err) {\r\n console.warn('FirebaseServerApp could not login user with provided authIdToken: ', err);\r\n await this.directlySetCurrentUser(null);\r\n }\r\n }\r\n async initializeCurrentUser(popupRedirectResolver) {\r\n var _a;\r\n if (_isFirebaseServerApp(this.app)) {\r\n const idToken = this.app.settings.authIdToken;\r\n if (idToken) {\r\n // Start the auth operation in the next tick to allow a moment for the customer's app to\r\n // attach an emulator, if desired.\r\n return new Promise(resolve => {\r\n setTimeout(() => this.initializeCurrentUserFromIdToken(idToken).then(resolve, resolve));\r\n });\r\n }\r\n else {\r\n return this.directlySetCurrentUser(null);\r\n }\r\n }\r\n // First check to see if we have a pending redirect event.\r\n const previouslyStoredUser = (await this.assertedPersistence.getCurrentUser());\r\n let futureCurrentUser = previouslyStoredUser;\r\n let needsTocheckMiddleware = false;\r\n if (popupRedirectResolver && this.config.authDomain) {\r\n await this.getOrInitRedirectPersistenceManager();\r\n const redirectUserEventId = (_a = this.redirectUser) === null || _a === void 0 ? void 0 : _a._redirectEventId;\r\n const storedUserEventId = futureCurrentUser === null || futureCurrentUser === void 0 ? void 0 : futureCurrentUser._redirectEventId;\r\n const result = await this.tryRedirectSignIn(popupRedirectResolver);\r\n // If the stored user (i.e. the old \"currentUser\") has a redirectId that\r\n // matches the redirect user, then we want to initially sign in with the\r\n // new user object from result.\r\n // TODO(samgho): More thoroughly test all of this\r\n if ((!redirectUserEventId || redirectUserEventId === storedUserEventId) &&\r\n (result === null || result === void 0 ? void 0 : result.user)) {\r\n futureCurrentUser = result.user;\r\n needsTocheckMiddleware = true;\r\n }\r\n }\r\n // If no user in persistence, there is no current user. Set to null.\r\n if (!futureCurrentUser) {\r\n return this.directlySetCurrentUser(null);\r\n }\r\n if (!futureCurrentUser._redirectEventId) {\r\n // This isn't a redirect link operation, we can reload and bail.\r\n // First though, ensure that we check the middleware is happy.\r\n if (needsTocheckMiddleware) {\r\n try {\r\n await this.beforeStateQueue.runMiddleware(futureCurrentUser);\r\n }\r\n catch (e) {\r\n futureCurrentUser = previouslyStoredUser;\r\n // We know this is available since the bit is only set when the\r\n // resolver is available\r\n this._popupRedirectResolver._overrideRedirectResult(this, () => Promise.reject(e));\r\n }\r\n }\r\n if (futureCurrentUser) {\r\n return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\r\n }\r\n else {\r\n return this.directlySetCurrentUser(null);\r\n }\r\n }\r\n _assert(this._popupRedirectResolver, this, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n await this.getOrInitRedirectPersistenceManager();\r\n // If the redirect user's event ID matches the current user's event ID,\r\n // DO NOT reload the current user, otherwise they'll be cleared from storage.\r\n // This is important for the reauthenticateWithRedirect() flow.\r\n if (this.redirectUser &&\r\n this.redirectUser._redirectEventId === futureCurrentUser._redirectEventId) {\r\n return this.directlySetCurrentUser(futureCurrentUser);\r\n }\r\n return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\r\n }\r\n async tryRedirectSignIn(redirectResolver) {\r\n // The redirect user needs to be checked (and signed in if available)\r\n // during auth initialization. All of the normal sign in and link/reauth\r\n // flows call back into auth and push things onto the promise queue. We\r\n // need to await the result of the redirect sign in *inside the promise\r\n // queue*. This presents a problem: we run into deadlock. See:\r\n // ┌> [Initialization] ─────┐\r\n // ┌> [] │\r\n // └─ [getRedirectResult] <─┘\r\n // where [] are tasks on the queue and arrows denote awaits\r\n // Initialization will never complete because it's waiting on something\r\n // that's waiting for initialization to complete!\r\n //\r\n // Instead, this method calls getRedirectResult() (stored in\r\n // _completeRedirectFn) with an optional parameter that instructs all of\r\n // the underlying auth operations to skip anything that mutates auth state.\r\n let result = null;\r\n try {\r\n // We know this._popupRedirectResolver is set since redirectResolver\r\n // is passed in. The _completeRedirectFn expects the unwrapped extern.\r\n result = await this._popupRedirectResolver._completeRedirectFn(this, redirectResolver, true);\r\n }\r\n catch (e) {\r\n // Swallow any errors here; the code can retrieve them in\r\n // getRedirectResult().\r\n await this._setRedirectUser(null);\r\n }\r\n return result;\r\n }\r\n async reloadAndSetCurrentUserOrClear(user) {\r\n try {\r\n await _reloadWithoutSaving(user);\r\n }\r\n catch (e) {\r\n if ((e === null || e === void 0 ? void 0 : e.code) !==\r\n `auth/${\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */}`) {\r\n // Something's wrong with the user's token. Log them out and remove\r\n // them from storage\r\n return this.directlySetCurrentUser(null);\r\n }\r\n }\r\n return this.directlySetCurrentUser(user);\r\n }\r\n useDeviceLanguage() {\r\n this.languageCode = _getUserLanguage();\r\n }\r\n async _delete() {\r\n this._deleted = true;\r\n }\r\n async updateCurrentUser(userExtern) {\r\n if (_isFirebaseServerApp(this.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(this));\r\n }\r\n // The public updateCurrentUser method needs to make a copy of the user,\r\n // and also check that the project matches\r\n const user = userExtern\r\n ? getModularInstance(userExtern)\r\n : null;\r\n if (user) {\r\n _assert(user.auth.config.apiKey === this.config.apiKey, this, \"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */);\r\n }\r\n return this._updateCurrentUser(user && user._clone(this));\r\n }\r\n async _updateCurrentUser(user, skipBeforeStateCallbacks = false) {\r\n if (this._deleted) {\r\n return;\r\n }\r\n if (user) {\r\n _assert(this.tenantId === user.tenantId, this, \"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */);\r\n }\r\n if (!skipBeforeStateCallbacks) {\r\n await this.beforeStateQueue.runMiddleware(user);\r\n }\r\n return this.queue(async () => {\r\n await this.directlySetCurrentUser(user);\r\n this.notifyAuthListeners();\r\n });\r\n }\r\n async signOut() {\r\n if (_isFirebaseServerApp(this.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(this));\r\n }\r\n // Run first, to block _setRedirectUser() if any callbacks fail.\r\n await this.beforeStateQueue.runMiddleware(null);\r\n // Clear the redirect user when signOut is called\r\n if (this.redirectPersistenceManager || this._popupRedirectResolver) {\r\n await this._setRedirectUser(null);\r\n }\r\n // Prevent callbacks from being called again in _updateCurrentUser, as\r\n // they were already called in the first line.\r\n return this._updateCurrentUser(null, /* skipBeforeStateCallbacks */ true);\r\n }\r\n setPersistence(persistence) {\r\n if (_isFirebaseServerApp(this.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(this));\r\n }\r\n return this.queue(async () => {\r\n await this.assertedPersistence.setPersistence(_getInstance(persistence));\r\n });\r\n }\r\n _getRecaptchaConfig() {\r\n if (this.tenantId == null) {\r\n return this._agentRecaptchaConfig;\r\n }\r\n else {\r\n return this._tenantRecaptchaConfigs[this.tenantId];\r\n }\r\n }\r\n async validatePassword(password) {\r\n if (!this._getPasswordPolicyInternal()) {\r\n await this._updatePasswordPolicy();\r\n }\r\n // Password policy will be defined after fetching.\r\n const passwordPolicy = this._getPasswordPolicyInternal();\r\n // Check that the policy schema version is supported by the SDK.\r\n // TODO: Update this logic to use a max supported policy schema version once we have multiple schema versions.\r\n if (passwordPolicy.schemaVersion !==\r\n this.EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION) {\r\n return Promise.reject(this._errorFactory.create(\"unsupported-password-policy-schema-version\" /* AuthErrorCode.UNSUPPORTED_PASSWORD_POLICY_SCHEMA_VERSION */, {}));\r\n }\r\n return passwordPolicy.validatePassword(password);\r\n }\r\n _getPasswordPolicyInternal() {\r\n if (this.tenantId === null) {\r\n return this._projectPasswordPolicy;\r\n }\r\n else {\r\n return this._tenantPasswordPolicies[this.tenantId];\r\n }\r\n }\r\n async _updatePasswordPolicy() {\r\n const response = await _getPasswordPolicy(this);\r\n const passwordPolicy = new PasswordPolicyImpl(response);\r\n if (this.tenantId === null) {\r\n this._projectPasswordPolicy = passwordPolicy;\r\n }\r\n else {\r\n this._tenantPasswordPolicies[this.tenantId] = passwordPolicy;\r\n }\r\n }\r\n _getPersistence() {\r\n return this.assertedPersistence.persistence.type;\r\n }\r\n _updateErrorMap(errorMap) {\r\n this._errorFactory = new ErrorFactory('auth', 'Firebase', errorMap());\r\n }\r\n onAuthStateChanged(nextOrObserver, error, completed) {\r\n return this.registerStateListener(this.authStateSubscription, nextOrObserver, error, completed);\r\n }\r\n beforeAuthStateChanged(callback, onAbort) {\r\n return this.beforeStateQueue.pushCallback(callback, onAbort);\r\n }\r\n onIdTokenChanged(nextOrObserver, error, completed) {\r\n return this.registerStateListener(this.idTokenSubscription, nextOrObserver, error, completed);\r\n }\r\n authStateReady() {\r\n return new Promise((resolve, reject) => {\r\n if (this.currentUser) {\r\n resolve();\r\n }\r\n else {\r\n const unsubscribe = this.onAuthStateChanged(() => {\r\n unsubscribe();\r\n resolve();\r\n }, reject);\r\n }\r\n });\r\n }\r\n /**\r\n * Revokes the given access token. Currently only supports Apple OAuth access tokens.\r\n */\r\n async revokeAccessToken(token) {\r\n if (this.currentUser) {\r\n const idToken = await this.currentUser.getIdToken();\r\n // Generalize this to accept other providers once supported.\r\n const request = {\r\n providerId: 'apple.com',\r\n tokenType: \"ACCESS_TOKEN\" /* TokenType.ACCESS_TOKEN */,\r\n token,\r\n idToken\r\n };\r\n if (this.tenantId != null) {\r\n request.tenantId = this.tenantId;\r\n }\r\n await revokeToken(this, request);\r\n }\r\n }\r\n toJSON() {\r\n var _a;\r\n return {\r\n apiKey: this.config.apiKey,\r\n authDomain: this.config.authDomain,\r\n appName: this.name,\r\n currentUser: (_a = this._currentUser) === null || _a === void 0 ? void 0 : _a.toJSON()\r\n };\r\n }\r\n async _setRedirectUser(user, popupRedirectResolver) {\r\n const redirectManager = await this.getOrInitRedirectPersistenceManager(popupRedirectResolver);\r\n return user === null\r\n ? redirectManager.removeCurrentUser()\r\n : redirectManager.setCurrentUser(user);\r\n }\r\n async getOrInitRedirectPersistenceManager(popupRedirectResolver) {\r\n if (!this.redirectPersistenceManager) {\r\n const resolver = (popupRedirectResolver && _getInstance(popupRedirectResolver)) ||\r\n this._popupRedirectResolver;\r\n _assert(resolver, this, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n this.redirectPersistenceManager = await PersistenceUserManager.create(this, [_getInstance(resolver._redirectPersistence)], \"redirectUser\" /* KeyName.REDIRECT_USER */);\r\n this.redirectUser =\r\n await this.redirectPersistenceManager.getCurrentUser();\r\n }\r\n return this.redirectPersistenceManager;\r\n }\r\n async _redirectUserForId(id) {\r\n var _a, _b;\r\n // Make sure we've cleared any pending persistence actions if we're not in\r\n // the initializer\r\n if (this._isInitialized) {\r\n await this.queue(async () => { });\r\n }\r\n if (((_a = this._currentUser) === null || _a === void 0 ? void 0 : _a._redirectEventId) === id) {\r\n return this._currentUser;\r\n }\r\n if (((_b = this.redirectUser) === null || _b === void 0 ? void 0 : _b._redirectEventId) === id) {\r\n return this.redirectUser;\r\n }\r\n return null;\r\n }\r\n async _persistUserIfCurrent(user) {\r\n if (user === this.currentUser) {\r\n return this.queue(async () => this.directlySetCurrentUser(user));\r\n }\r\n }\r\n /** Notifies listeners only if the user is current */\r\n _notifyListenersIfCurrent(user) {\r\n if (user === this.currentUser) {\r\n this.notifyAuthListeners();\r\n }\r\n }\r\n _key() {\r\n return `${this.config.authDomain}:${this.config.apiKey}:${this.name}`;\r\n }\r\n _startProactiveRefresh() {\r\n this.isProactiveRefreshEnabled = true;\r\n if (this.currentUser) {\r\n this._currentUser._startProactiveRefresh();\r\n }\r\n }\r\n _stopProactiveRefresh() {\r\n this.isProactiveRefreshEnabled = false;\r\n if (this.currentUser) {\r\n this._currentUser._stopProactiveRefresh();\r\n }\r\n }\r\n /** Returns the current user cast as the internal type */\r\n get _currentUser() {\r\n return this.currentUser;\r\n }\r\n notifyAuthListeners() {\r\n var _a, _b;\r\n if (!this._isInitialized) {\r\n return;\r\n }\r\n this.idTokenSubscription.next(this.currentUser);\r\n const currentUid = (_b = (_a = this.currentUser) === null || _a === void 0 ? void 0 : _a.uid) !== null && _b !== void 0 ? _b : null;\r\n if (this.lastNotifiedUid !== currentUid) {\r\n this.lastNotifiedUid = currentUid;\r\n this.authStateSubscription.next(this.currentUser);\r\n }\r\n }\r\n registerStateListener(subscription, nextOrObserver, error, completed) {\r\n if (this._deleted) {\r\n return () => { };\r\n }\r\n const cb = typeof nextOrObserver === 'function'\r\n ? nextOrObserver\r\n : nextOrObserver.next.bind(nextOrObserver);\r\n let isUnsubscribed = false;\r\n const promise = this._isInitialized\r\n ? Promise.resolve()\r\n : this._initializationPromise;\r\n _assert(promise, this, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n // The callback needs to be called asynchronously per the spec.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n promise.then(() => {\r\n if (isUnsubscribed) {\r\n return;\r\n }\r\n cb(this.currentUser);\r\n });\r\n if (typeof nextOrObserver === 'function') {\r\n const unsubscribe = subscription.addObserver(nextOrObserver, error, completed);\r\n return () => {\r\n isUnsubscribed = true;\r\n unsubscribe();\r\n };\r\n }\r\n else {\r\n const unsubscribe = subscription.addObserver(nextOrObserver);\r\n return () => {\r\n isUnsubscribed = true;\r\n unsubscribe();\r\n };\r\n }\r\n }\r\n /**\r\n * Unprotected (from race conditions) method to set the current user. This\r\n * should only be called from within a queued callback. This is necessary\r\n * because the queue shouldn't rely on another queued callback.\r\n */\r\n async directlySetCurrentUser(user) {\r\n if (this.currentUser && this.currentUser !== user) {\r\n this._currentUser._stopProactiveRefresh();\r\n }\r\n if (user && this.isProactiveRefreshEnabled) {\r\n user._startProactiveRefresh();\r\n }\r\n this.currentUser = user;\r\n if (user) {\r\n await this.assertedPersistence.setCurrentUser(user);\r\n }\r\n else {\r\n await this.assertedPersistence.removeCurrentUser();\r\n }\r\n }\r\n queue(action) {\r\n // In case something errors, the callback still should be called in order\r\n // to keep the promise chain alive\r\n this.operations = this.operations.then(action, action);\r\n return this.operations;\r\n }\r\n get assertedPersistence() {\r\n _assert(this.persistenceManager, this, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return this.persistenceManager;\r\n }\r\n _logFramework(framework) {\r\n if (!framework || this.frameworks.includes(framework)) {\r\n return;\r\n }\r\n this.frameworks.push(framework);\r\n // Sort alphabetically so that \"FirebaseCore-web,FirebaseUI-web\" and\r\n // \"FirebaseUI-web,FirebaseCore-web\" aren't viewed as different.\r\n this.frameworks.sort();\r\n this.clientVersion = _getClientVersion(this.config.clientPlatform, this._getFrameworks());\r\n }\r\n _getFrameworks() {\r\n return this.frameworks;\r\n }\r\n async _getAdditionalHeaders() {\r\n var _a;\r\n // Additional headers on every request\r\n const headers = {\r\n [\"X-Client-Version\" /* HttpHeader.X_CLIENT_VERSION */]: this.clientVersion\r\n };\r\n if (this.app.options.appId) {\r\n headers[\"X-Firebase-gmpid\" /* HttpHeader.X_FIREBASE_GMPID */] = this.app.options.appId;\r\n }\r\n // If the heartbeat service exists, add the heartbeat string\r\n const heartbeatsHeader = await ((_a = this.heartbeatServiceProvider\r\n .getImmediate({\r\n optional: true\r\n })) === null || _a === void 0 ? void 0 : _a.getHeartbeatsHeader());\r\n if (heartbeatsHeader) {\r\n headers[\"X-Firebase-Client\" /* HttpHeader.X_FIREBASE_CLIENT */] = heartbeatsHeader;\r\n }\r\n // If the App Check service exists, add the App Check token in the headers\r\n const appCheckToken = await this._getAppCheckToken();\r\n if (appCheckToken) {\r\n headers[\"X-Firebase-AppCheck\" /* HttpHeader.X_FIREBASE_APP_CHECK */] = appCheckToken;\r\n }\r\n return headers;\r\n }\r\n async _getAppCheckToken() {\r\n var _a;\r\n const appCheckTokenResult = await ((_a = this.appCheckServiceProvider\r\n .getImmediate({ optional: true })) === null || _a === void 0 ? void 0 : _a.getToken());\r\n if (appCheckTokenResult === null || appCheckTokenResult === void 0 ? void 0 : appCheckTokenResult.error) {\r\n // Context: appCheck.getToken() will never throw even if an error happened.\r\n // In the error case, a dummy token will be returned along with an error field describing\r\n // the error. In general, we shouldn't care about the error condition and just use\r\n // the token (actual or dummy) to send requests.\r\n _logWarn(`Error while retrieving App Check token: ${appCheckTokenResult.error}`);\r\n }\r\n return appCheckTokenResult === null || appCheckTokenResult === void 0 ? void 0 : appCheckTokenResult.token;\r\n }\r\n}\r\n/**\r\n * Method to be used to cast down to our private implmentation of Auth.\r\n * It will also handle unwrapping from the compat type if necessary\r\n *\r\n * @param auth Auth object passed in from developer\r\n */\r\nfunction _castAuth(auth) {\r\n return getModularInstance(auth);\r\n}\r\n/** Helper class to wrap subscriber logic */\r\nclass Subscription {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.observer = null;\r\n this.addObserver = createSubscribe(observer => (this.observer = observer));\r\n }\r\n get next() {\r\n _assert(this.observer, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return this.observer.next.bind(this.observer);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet externalJSProvider = {\r\n async loadJS() {\r\n throw new Error('Unable to load external scripts');\r\n },\r\n recaptchaV2Script: '',\r\n recaptchaEnterpriseScript: '',\r\n gapiScript: ''\r\n};\r\nfunction _setExternalJSProvider(p) {\r\n externalJSProvider = p;\r\n}\r\nfunction _loadJS(url) {\r\n return externalJSProvider.loadJS(url);\r\n}\r\nfunction _recaptchaV2ScriptUrl() {\r\n return externalJSProvider.recaptchaV2Script;\r\n}\r\nfunction _recaptchaEnterpriseScriptUrl() {\r\n return externalJSProvider.recaptchaEnterpriseScript;\r\n}\r\nfunction _gapiScriptUrl() {\r\n return externalJSProvider.gapiScript;\r\n}\r\nfunction _generateCallbackName(prefix) {\r\n return `__${prefix}${Math.floor(Math.random() * 1000000)}`;\r\n}\n\n/* eslint-disable @typescript-eslint/no-require-imports */\r\nconst RECAPTCHA_ENTERPRISE_VERIFIER_TYPE = 'recaptcha-enterprise';\r\nconst FAKE_TOKEN = 'NO_RECAPTCHA';\r\nclass RecaptchaEnterpriseVerifier {\r\n /**\r\n *\r\n * @param authExtern - The corresponding Firebase {@link Auth} instance.\r\n *\r\n */\r\n constructor(authExtern) {\r\n /**\r\n * Identifies the type of application verifier (e.g. \"recaptcha-enterprise\").\r\n */\r\n this.type = RECAPTCHA_ENTERPRISE_VERIFIER_TYPE;\r\n this.auth = _castAuth(authExtern);\r\n }\r\n /**\r\n * Executes the verification process.\r\n *\r\n * @returns A Promise for a token that can be used to assert the validity of a request.\r\n */\r\n async verify(action = 'verify', forceRefresh = false) {\r\n async function retrieveSiteKey(auth) {\r\n if (!forceRefresh) {\r\n if (auth.tenantId == null && auth._agentRecaptchaConfig != null) {\r\n return auth._agentRecaptchaConfig.siteKey;\r\n }\r\n if (auth.tenantId != null &&\r\n auth._tenantRecaptchaConfigs[auth.tenantId] !== undefined) {\r\n return auth._tenantRecaptchaConfigs[auth.tenantId].siteKey;\r\n }\r\n }\r\n return new Promise(async (resolve, reject) => {\r\n getRecaptchaConfig(auth, {\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */,\r\n version: \"RECAPTCHA_ENTERPRISE\" /* RecaptchaVersion.ENTERPRISE */\r\n })\r\n .then(response => {\r\n if (response.recaptchaKey === undefined) {\r\n reject(new Error('recaptcha Enterprise site key undefined'));\r\n }\r\n else {\r\n const config = new RecaptchaConfig(response);\r\n if (auth.tenantId == null) {\r\n auth._agentRecaptchaConfig = config;\r\n }\r\n else {\r\n auth._tenantRecaptchaConfigs[auth.tenantId] = config;\r\n }\r\n return resolve(config.siteKey);\r\n }\r\n })\r\n .catch(error => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n function retrieveRecaptchaToken(siteKey, resolve, reject) {\r\n const grecaptcha = window.grecaptcha;\r\n if (isEnterprise(grecaptcha)) {\r\n grecaptcha.enterprise.ready(() => {\r\n grecaptcha.enterprise\r\n .execute(siteKey, { action })\r\n .then(token => {\r\n resolve(token);\r\n })\r\n .catch(() => {\r\n resolve(FAKE_TOKEN);\r\n });\r\n });\r\n }\r\n else {\r\n reject(Error('No reCAPTCHA enterprise script loaded.'));\r\n }\r\n }\r\n return new Promise((resolve, reject) => {\r\n retrieveSiteKey(this.auth)\r\n .then(siteKey => {\r\n if (!forceRefresh && isEnterprise(window.grecaptcha)) {\r\n retrieveRecaptchaToken(siteKey, resolve, reject);\r\n }\r\n else {\r\n if (typeof window === 'undefined') {\r\n reject(new Error('RecaptchaVerifier is only supported in browser'));\r\n return;\r\n }\r\n let url = _recaptchaEnterpriseScriptUrl();\r\n if (url.length !== 0) {\r\n url += siteKey;\r\n }\r\n _loadJS(url)\r\n .then(() => {\r\n retrieveRecaptchaToken(siteKey, resolve, reject);\r\n })\r\n .catch(error => {\r\n reject(error);\r\n });\r\n }\r\n })\r\n .catch(error => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\nasync function injectRecaptchaFields(auth, request, action, captchaResp = false) {\r\n const verifier = new RecaptchaEnterpriseVerifier(auth);\r\n let captchaResponse;\r\n try {\r\n captchaResponse = await verifier.verify(action);\r\n }\r\n catch (error) {\r\n captchaResponse = await verifier.verify(action, true);\r\n }\r\n const newRequest = Object.assign({}, request);\r\n if (!captchaResp) {\r\n Object.assign(newRequest, { captchaResponse });\r\n }\r\n else {\r\n Object.assign(newRequest, { 'captchaResp': captchaResponse });\r\n }\r\n Object.assign(newRequest, { 'clientType': \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */ });\r\n Object.assign(newRequest, {\r\n 'recaptchaVersion': \"RECAPTCHA_ENTERPRISE\" /* RecaptchaVersion.ENTERPRISE */\r\n });\r\n return newRequest;\r\n}\r\nasync function handleRecaptchaFlow(authInstance, request, actionName, actionMethod) {\r\n var _a;\r\n if ((_a = authInstance\r\n ._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.isProviderEnabled(\"EMAIL_PASSWORD_PROVIDER\" /* RecaptchaProvider.EMAIL_PASSWORD_PROVIDER */)) {\r\n const requestWithRecaptcha = await injectRecaptchaFields(authInstance, request, actionName, actionName === \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */);\r\n return actionMethod(authInstance, requestWithRecaptcha);\r\n }\r\n else {\r\n return actionMethod(authInstance, request).catch(async (error) => {\r\n if (error.code === `auth/${\"missing-recaptcha-token\" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */}`) {\r\n console.log(`${actionName} is protected by reCAPTCHA Enterprise for this project. Automatically triggering the reCAPTCHA flow and restarting the flow.`);\r\n const requestWithRecaptcha = await injectRecaptchaFields(authInstance, request, actionName, actionName === \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */);\r\n return actionMethod(authInstance, requestWithRecaptcha);\r\n }\r\n else {\r\n return Promise.reject(error);\r\n }\r\n });\r\n }\r\n}\r\nasync function _initializeRecaptchaConfig(auth) {\r\n const authInternal = _castAuth(auth);\r\n const response = await getRecaptchaConfig(authInternal, {\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */,\r\n version: \"RECAPTCHA_ENTERPRISE\" /* RecaptchaVersion.ENTERPRISE */\r\n });\r\n const config = new RecaptchaConfig(response);\r\n if (authInternal.tenantId == null) {\r\n authInternal._agentRecaptchaConfig = config;\r\n }\r\n else {\r\n authInternal._tenantRecaptchaConfigs[authInternal.tenantId] = config;\r\n }\r\n if (config.isProviderEnabled(\"EMAIL_PASSWORD_PROVIDER\" /* RecaptchaProvider.EMAIL_PASSWORD_PROVIDER */)) {\r\n const verifier = new RecaptchaEnterpriseVerifier(authInternal);\r\n void verifier.verify();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Initializes an {@link Auth} instance with fine-grained control over\r\n * {@link Dependencies}.\r\n *\r\n * @remarks\r\n *\r\n * This function allows more control over the {@link Auth} instance than\r\n * {@link getAuth}. `getAuth` uses platform-specific defaults to supply\r\n * the {@link Dependencies}. In general, `getAuth` is the easiest way to\r\n * initialize Auth and works for most use cases. Use `initializeAuth` if you\r\n * need control over which persistence layer is used, or to minimize bundle\r\n * size if you're not using either `signInWithPopup` or `signInWithRedirect`.\r\n *\r\n * For example, if your app only uses anonymous accounts and you only want\r\n * accounts saved for the current session, initialize `Auth` with:\r\n *\r\n * ```js\r\n * const auth = initializeAuth(app, {\r\n * persistence: browserSessionPersistence,\r\n * popupRedirectResolver: undefined,\r\n * });\r\n * ```\r\n *\r\n * @public\r\n */\r\nfunction initializeAuth(app, deps) {\r\n const provider = _getProvider(app, 'auth');\r\n if (provider.isInitialized()) {\r\n const auth = provider.getImmediate();\r\n const initialOptions = provider.getOptions();\r\n if (deepEqual(initialOptions, deps !== null && deps !== void 0 ? deps : {})) {\r\n return auth;\r\n }\r\n else {\r\n _fail(auth, \"already-initialized\" /* AuthErrorCode.ALREADY_INITIALIZED */);\r\n }\r\n }\r\n const auth = provider.initialize({ options: deps });\r\n return auth;\r\n}\r\nfunction _initializeAuthInstance(auth, deps) {\r\n const persistence = (deps === null || deps === void 0 ? void 0 : deps.persistence) || [];\r\n const hierarchy = (Array.isArray(persistence) ? persistence : [persistence]).map(_getInstance);\r\n if (deps === null || deps === void 0 ? void 0 : deps.errorMap) {\r\n auth._updateErrorMap(deps.errorMap);\r\n }\r\n // This promise is intended to float; auth initialization happens in the\r\n // background, meanwhile the auth object may be used by the app.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n auth._initializeWithPersistence(hierarchy, deps === null || deps === void 0 ? void 0 : deps.popupRedirectResolver);\r\n}\n\n/**\r\n * Changes the {@link Auth} instance to communicate with the Firebase Auth Emulator, instead of production\r\n * Firebase Auth services.\r\n *\r\n * @remarks\r\n * This must be called synchronously immediately following the first call to\r\n * {@link initializeAuth}. Do not use with production credentials as emulator\r\n * traffic is not encrypted.\r\n *\r\n *\r\n * @example\r\n * ```javascript\r\n * connectAuthEmulator(auth, 'http://127.0.0.1:9099', { disableWarnings: true });\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param url - The URL at which the emulator is running (eg, 'http://localhost:9099').\r\n * @param options - Optional. `options.disableWarnings` defaults to `false`. Set it to\r\n * `true` to disable the warning banner attached to the DOM.\r\n *\r\n * @public\r\n */\r\nfunction connectAuthEmulator(auth, url, options) {\r\n const authInternal = _castAuth(auth);\r\n _assert(authInternal._canInitEmulator, authInternal, \"emulator-config-failed\" /* AuthErrorCode.EMULATOR_CONFIG_FAILED */);\r\n _assert(/^https?:\\/\\//.test(url), authInternal, \"invalid-emulator-scheme\" /* AuthErrorCode.INVALID_EMULATOR_SCHEME */);\r\n const disableWarnings = !!(options === null || options === void 0 ? void 0 : options.disableWarnings);\r\n const protocol = extractProtocol(url);\r\n const { host, port } = extractHostAndPort(url);\r\n const portStr = port === null ? '' : `:${port}`;\r\n // Always replace path with \"/\" (even if input url had no path at all, or had a different one).\r\n authInternal.config.emulator = { url: `${protocol}//${host}${portStr}/` };\r\n authInternal.settings.appVerificationDisabledForTesting = true;\r\n authInternal.emulatorConfig = Object.freeze({\r\n host,\r\n port,\r\n protocol: protocol.replace(':', ''),\r\n options: Object.freeze({ disableWarnings })\r\n });\r\n if (!disableWarnings) {\r\n emitEmulatorWarning();\r\n }\r\n}\r\nfunction extractProtocol(url) {\r\n const protocolEnd = url.indexOf(':');\r\n return protocolEnd < 0 ? '' : url.substr(0, protocolEnd + 1);\r\n}\r\nfunction extractHostAndPort(url) {\r\n const protocol = extractProtocol(url);\r\n const authority = /(\\/\\/)?([^?#/]+)/.exec(url.substr(protocol.length)); // Between // and /, ? or #.\r\n if (!authority) {\r\n return { host: '', port: null };\r\n }\r\n const hostAndPort = authority[2].split('@').pop() || ''; // Strip out \"username:password@\".\r\n const bracketedIPv6 = /^(\\[[^\\]]+\\])(:|$)/.exec(hostAndPort);\r\n if (bracketedIPv6) {\r\n const host = bracketedIPv6[1];\r\n return { host, port: parsePort(hostAndPort.substr(host.length + 1)) };\r\n }\r\n else {\r\n const [host, port] = hostAndPort.split(':');\r\n return { host, port: parsePort(port) };\r\n }\r\n}\r\nfunction parsePort(portStr) {\r\n if (!portStr) {\r\n return null;\r\n }\r\n const port = Number(portStr);\r\n if (isNaN(port)) {\r\n return null;\r\n }\r\n return port;\r\n}\r\nfunction emitEmulatorWarning() {\r\n function attachBanner() {\r\n const el = document.createElement('p');\r\n const sty = el.style;\r\n el.innerText =\r\n 'Running in emulator mode. Do not use with production credentials.';\r\n sty.position = 'fixed';\r\n sty.width = '100%';\r\n sty.backgroundColor = '#ffffff';\r\n sty.border = '.1em solid #000000';\r\n sty.color = '#b50000';\r\n sty.bottom = '0px';\r\n sty.left = '0px';\r\n sty.margin = '0px';\r\n sty.zIndex = '10000';\r\n sty.textAlign = 'center';\r\n el.classList.add('firebase-emulator-warning');\r\n document.body.appendChild(el);\r\n }\r\n if (typeof console !== 'undefined' && typeof console.info === 'function') {\r\n console.info('WARNING: You are using the Auth Emulator,' +\r\n ' which is intended for local testing only. Do not use with' +\r\n ' production credentials.');\r\n }\r\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\r\n if (document.readyState === 'loading') {\r\n window.addEventListener('DOMContentLoaded', attachBanner);\r\n }\r\n else {\r\n attachBanner();\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface that represents the credentials returned by an {@link AuthProvider}.\r\n *\r\n * @remarks\r\n * Implementations specify the details about each auth provider's credential requirements.\r\n *\r\n * @public\r\n */\r\nclass AuthCredential {\r\n /** @internal */\r\n constructor(\r\n /**\r\n * The authentication provider ID for the credential.\r\n *\r\n * @remarks\r\n * For example, 'facebook.com', or 'google.com'.\r\n */\r\n providerId, \r\n /**\r\n * The authentication sign in method for the credential.\r\n *\r\n * @remarks\r\n * For example, {@link SignInMethod}.EMAIL_PASSWORD, or\r\n * {@link SignInMethod}.EMAIL_LINK. This corresponds to the sign-in method\r\n * identifier as returned in {@link fetchSignInMethodsForEmail}.\r\n */\r\n signInMethod) {\r\n this.providerId = providerId;\r\n this.signInMethod = signInMethod;\r\n }\r\n /**\r\n * Returns a JSON-serializable representation of this object.\r\n *\r\n * @returns a JSON-serializable representation of this object.\r\n */\r\n toJSON() {\r\n return debugFail('not implemented');\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(_auth) {\r\n return debugFail('not implemented');\r\n }\r\n /** @internal */\r\n _linkToIdToken(_auth, _idToken) {\r\n return debugFail('not implemented');\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(_auth) {\r\n return debugFail('not implemented');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function resetPassword(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:resetPassword\" /* Endpoint.RESET_PASSWORD */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function updateEmailPassword(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\r\n}\r\n// Used for linking an email/password account to an existing idToken. Uses the same request/response\r\n// format as updateEmailPassword.\r\nasync function linkEmailPassword(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signUp\" /* Endpoint.SIGN_UP */, request);\r\n}\r\nasync function applyActionCode$1(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithPassword(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPassword\" /* Endpoint.SIGN_IN_WITH_PASSWORD */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function sendOobCode(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:sendOobCode\" /* Endpoint.SEND_OOB_CODE */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function sendEmailVerification$1(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\r\nasync function sendPasswordResetEmail$1(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\r\nasync function sendSignInLinkToEmail$1(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\r\nasync function verifyAndChangeEmail(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithEmailLink$1(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithEmailLink\" /* Endpoint.SIGN_IN_WITH_EMAIL_LINK */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function signInWithEmailLinkForLinking(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithEmailLink\" /* Endpoint.SIGN_IN_WITH_EMAIL_LINK */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface that represents the credentials returned by {@link EmailAuthProvider} for\r\n * {@link ProviderId}.PASSWORD\r\n *\r\n * @remarks\r\n * Covers both {@link SignInMethod}.EMAIL_PASSWORD and\r\n * {@link SignInMethod}.EMAIL_LINK.\r\n *\r\n * @public\r\n */\r\nclass EmailAuthCredential extends AuthCredential {\r\n /** @internal */\r\n constructor(\r\n /** @internal */\r\n _email, \r\n /** @internal */\r\n _password, signInMethod, \r\n /** @internal */\r\n _tenantId = null) {\r\n super(\"password\" /* ProviderId.PASSWORD */, signInMethod);\r\n this._email = _email;\r\n this._password = _password;\r\n this._tenantId = _tenantId;\r\n }\r\n /** @internal */\r\n static _fromEmailAndPassword(email, password) {\r\n return new EmailAuthCredential(email, password, \"password\" /* SignInMethod.EMAIL_PASSWORD */);\r\n }\r\n /** @internal */\r\n static _fromEmailAndCode(email, oobCode, tenantId = null) {\r\n return new EmailAuthCredential(email, oobCode, \"emailLink\" /* SignInMethod.EMAIL_LINK */, tenantId);\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n return {\r\n email: this._email,\r\n password: this._password,\r\n signInMethod: this.signInMethod,\r\n tenantId: this._tenantId\r\n };\r\n }\r\n /**\r\n * Static method to deserialize a JSON representation of an object into an {@link AuthCredential}.\r\n *\r\n * @param json - Either `object` or the stringified representation of the object. When string is\r\n * provided, `JSON.parse` would be called first.\r\n *\r\n * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\r\n */\r\n static fromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n if ((obj === null || obj === void 0 ? void 0 : obj.email) && (obj === null || obj === void 0 ? void 0 : obj.password)) {\r\n if (obj.signInMethod === \"password\" /* SignInMethod.EMAIL_PASSWORD */) {\r\n return this._fromEmailAndPassword(obj.email, obj.password);\r\n }\r\n else if (obj.signInMethod === \"emailLink\" /* SignInMethod.EMAIL_LINK */) {\r\n return this._fromEmailAndCode(obj.email, obj.password, obj.tenantId);\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n async _getIdTokenResponse(auth) {\r\n switch (this.signInMethod) {\r\n case \"password\" /* SignInMethod.EMAIL_PASSWORD */:\r\n const request = {\r\n returnSecureToken: true,\r\n email: this._email,\r\n password: this._password,\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\r\n };\r\n return handleRecaptchaFlow(auth, request, \"signInWithPassword\" /* RecaptchaActionName.SIGN_IN_WITH_PASSWORD */, signInWithPassword);\r\n case \"emailLink\" /* SignInMethod.EMAIL_LINK */:\r\n return signInWithEmailLink$1(auth, {\r\n email: this._email,\r\n oobCode: this._password\r\n });\r\n default:\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n }\r\n /** @internal */\r\n async _linkToIdToken(auth, idToken) {\r\n switch (this.signInMethod) {\r\n case \"password\" /* SignInMethod.EMAIL_PASSWORD */:\r\n const request = {\r\n idToken,\r\n returnSecureToken: true,\r\n email: this._email,\r\n password: this._password,\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\r\n };\r\n return handleRecaptchaFlow(auth, request, \"signUpPassword\" /* RecaptchaActionName.SIGN_UP_PASSWORD */, linkEmailPassword);\r\n case \"emailLink\" /* SignInMethod.EMAIL_LINK */:\r\n return signInWithEmailLinkForLinking(auth, {\r\n idToken,\r\n email: this._email,\r\n oobCode: this._password\r\n });\r\n default:\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n return this._getIdTokenResponse(auth);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithIdp(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithIdp\" /* Endpoint.SIGN_IN_WITH_IDP */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IDP_REQUEST_URI$1 = 'http://localhost';\r\n/**\r\n * Represents the OAuth credentials returned by an {@link OAuthProvider}.\r\n *\r\n * @remarks\r\n * Implementations specify the details about each auth provider's credential requirements.\r\n *\r\n * @public\r\n */\r\nclass OAuthCredential extends AuthCredential {\r\n constructor() {\r\n super(...arguments);\r\n this.pendingToken = null;\r\n }\r\n /** @internal */\r\n static _fromParams(params) {\r\n const cred = new OAuthCredential(params.providerId, params.signInMethod);\r\n if (params.idToken || params.accessToken) {\r\n // OAuth 2 and either ID token or access token.\r\n if (params.idToken) {\r\n cred.idToken = params.idToken;\r\n }\r\n if (params.accessToken) {\r\n cred.accessToken = params.accessToken;\r\n }\r\n // Add nonce if available and no pendingToken is present.\r\n if (params.nonce && !params.pendingToken) {\r\n cred.nonce = params.nonce;\r\n }\r\n if (params.pendingToken) {\r\n cred.pendingToken = params.pendingToken;\r\n }\r\n }\r\n else if (params.oauthToken && params.oauthTokenSecret) {\r\n // OAuth 1 and OAuth token with token secret\r\n cred.accessToken = params.oauthToken;\r\n cred.secret = params.oauthTokenSecret;\r\n }\r\n else {\r\n _fail(\"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n }\r\n return cred;\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n return {\r\n idToken: this.idToken,\r\n accessToken: this.accessToken,\r\n secret: this.secret,\r\n nonce: this.nonce,\r\n pendingToken: this.pendingToken,\r\n providerId: this.providerId,\r\n signInMethod: this.signInMethod\r\n };\r\n }\r\n /**\r\n * Static method to deserialize a JSON representation of an object into an\r\n * {@link AuthCredential}.\r\n *\r\n * @param json - Input can be either Object or the stringified representation of the object.\r\n * When string is provided, JSON.parse would be called first.\r\n *\r\n * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\r\n */\r\n static fromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n const { providerId, signInMethod } = obj, rest = __rest(obj, [\"providerId\", \"signInMethod\"]);\r\n if (!providerId || !signInMethod) {\r\n return null;\r\n }\r\n const cred = new OAuthCredential(providerId, signInMethod);\r\n cred.idToken = rest.idToken || undefined;\r\n cred.accessToken = rest.accessToken || undefined;\r\n cred.secret = rest.secret;\r\n cred.nonce = rest.nonce;\r\n cred.pendingToken = rest.pendingToken || null;\r\n return cred;\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(auth) {\r\n const request = this.buildRequest();\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _linkToIdToken(auth, idToken) {\r\n const request = this.buildRequest();\r\n request.idToken = idToken;\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n const request = this.buildRequest();\r\n request.autoCreate = false;\r\n return signInWithIdp(auth, request);\r\n }\r\n buildRequest() {\r\n const request = {\r\n requestUri: IDP_REQUEST_URI$1,\r\n returnSecureToken: true\r\n };\r\n if (this.pendingToken) {\r\n request.pendingToken = this.pendingToken;\r\n }\r\n else {\r\n const postBody = {};\r\n if (this.idToken) {\r\n postBody['id_token'] = this.idToken;\r\n }\r\n if (this.accessToken) {\r\n postBody['access_token'] = this.accessToken;\r\n }\r\n if (this.secret) {\r\n postBody['oauth_token_secret'] = this.secret;\r\n }\r\n postBody['providerId'] = this.providerId;\r\n if (this.nonce && !this.pendingToken) {\r\n postBody['nonce'] = this.nonce;\r\n }\r\n request.postBody = querystring(postBody);\r\n }\r\n return request;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function sendPhoneVerificationCode(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:sendVerificationCode\" /* Endpoint.SEND_VERIFICATION_CODE */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function signInWithPhoneNumber$1(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function linkWithPhoneNumber$1(auth, request) {\r\n const response = await _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, request));\r\n if (response.temporaryProof) {\r\n throw _makeTaggedError(auth, \"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */, response);\r\n }\r\n return response;\r\n}\r\nconst VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_ = {\r\n [\"USER_NOT_FOUND\" /* ServerError.USER_NOT_FOUND */]: \"user-not-found\" /* AuthErrorCode.USER_DELETED */\r\n};\r\nasync function verifyPhoneNumberForExisting(auth, request) {\r\n const apiRequest = Object.assign(Object.assign({}, request), { operation: 'REAUTH' });\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, apiRequest), VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Represents the credentials returned by {@link PhoneAuthProvider}.\r\n *\r\n * @public\r\n */\r\nclass PhoneAuthCredential extends AuthCredential {\r\n constructor(params) {\r\n super(\"phone\" /* ProviderId.PHONE */, \"phone\" /* SignInMethod.PHONE */);\r\n this.params = params;\r\n }\r\n /** @internal */\r\n static _fromVerification(verificationId, verificationCode) {\r\n return new PhoneAuthCredential({ verificationId, verificationCode });\r\n }\r\n /** @internal */\r\n static _fromTokenResponse(phoneNumber, temporaryProof) {\r\n return new PhoneAuthCredential({ phoneNumber, temporaryProof });\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(auth) {\r\n return signInWithPhoneNumber$1(auth, this._makeVerificationRequest());\r\n }\r\n /** @internal */\r\n _linkToIdToken(auth, idToken) {\r\n return linkWithPhoneNumber$1(auth, Object.assign({ idToken }, this._makeVerificationRequest()));\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n return verifyPhoneNumberForExisting(auth, this._makeVerificationRequest());\r\n }\r\n /** @internal */\r\n _makeVerificationRequest() {\r\n const { temporaryProof, phoneNumber, verificationId, verificationCode } = this.params;\r\n if (temporaryProof && phoneNumber) {\r\n return { temporaryProof, phoneNumber };\r\n }\r\n return {\r\n sessionInfo: verificationId,\r\n code: verificationCode\r\n };\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n const obj = {\r\n providerId: this.providerId\r\n };\r\n if (this.params.phoneNumber) {\r\n obj.phoneNumber = this.params.phoneNumber;\r\n }\r\n if (this.params.temporaryProof) {\r\n obj.temporaryProof = this.params.temporaryProof;\r\n }\r\n if (this.params.verificationCode) {\r\n obj.verificationCode = this.params.verificationCode;\r\n }\r\n if (this.params.verificationId) {\r\n obj.verificationId = this.params.verificationId;\r\n }\r\n return obj;\r\n }\r\n /** Generates a phone credential based on a plain object or a JSON string. */\r\n static fromJSON(json) {\r\n if (typeof json === 'string') {\r\n json = JSON.parse(json);\r\n }\r\n const { verificationId, verificationCode, phoneNumber, temporaryProof } = json;\r\n if (!verificationCode &&\r\n !verificationId &&\r\n !phoneNumber &&\r\n !temporaryProof) {\r\n return null;\r\n }\r\n return new PhoneAuthCredential({\r\n verificationId,\r\n verificationCode,\r\n phoneNumber,\r\n temporaryProof\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Maps the mode string in action code URL to Action Code Info operation.\r\n *\r\n * @param mode\r\n */\r\nfunction parseMode(mode) {\r\n switch (mode) {\r\n case 'recoverEmail':\r\n return \"RECOVER_EMAIL\" /* ActionCodeOperation.RECOVER_EMAIL */;\r\n case 'resetPassword':\r\n return \"PASSWORD_RESET\" /* ActionCodeOperation.PASSWORD_RESET */;\r\n case 'signIn':\r\n return \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */;\r\n case 'verifyEmail':\r\n return \"VERIFY_EMAIL\" /* ActionCodeOperation.VERIFY_EMAIL */;\r\n case 'verifyAndChangeEmail':\r\n return \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */;\r\n case 'revertSecondFactorAddition':\r\n return \"REVERT_SECOND_FACTOR_ADDITION\" /* ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION */;\r\n default:\r\n return null;\r\n }\r\n}\r\n/**\r\n * Helper to parse FDL links\r\n *\r\n * @param url\r\n */\r\nfunction parseDeepLink(url) {\r\n const link = querystringDecode(extractQuerystring(url))['link'];\r\n // Double link case (automatic redirect).\r\n const doubleDeepLink = link\r\n ? querystringDecode(extractQuerystring(link))['deep_link_id']\r\n : null;\r\n // iOS custom scheme links.\r\n const iOSDeepLink = querystringDecode(extractQuerystring(url))['deep_link_id'];\r\n const iOSDoubleDeepLink = iOSDeepLink\r\n ? querystringDecode(extractQuerystring(iOSDeepLink))['link']\r\n : null;\r\n return iOSDoubleDeepLink || iOSDeepLink || doubleDeepLink || link || url;\r\n}\r\n/**\r\n * A utility class to parse email action URLs such as password reset, email verification,\r\n * email link sign in, etc.\r\n *\r\n * @public\r\n */\r\nclass ActionCodeURL {\r\n /**\r\n * @param actionLink - The link from which to extract the URL.\r\n * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\r\n *\r\n * @internal\r\n */\r\n constructor(actionLink) {\r\n var _a, _b, _c, _d, _e, _f;\r\n const searchParams = querystringDecode(extractQuerystring(actionLink));\r\n const apiKey = (_a = searchParams[\"apiKey\" /* QueryField.API_KEY */]) !== null && _a !== void 0 ? _a : null;\r\n const code = (_b = searchParams[\"oobCode\" /* QueryField.CODE */]) !== null && _b !== void 0 ? _b : null;\r\n const operation = parseMode((_c = searchParams[\"mode\" /* QueryField.MODE */]) !== null && _c !== void 0 ? _c : null);\r\n // Validate API key, code and mode.\r\n _assert(apiKey && code && operation, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n this.apiKey = apiKey;\r\n this.operation = operation;\r\n this.code = code;\r\n this.continueUrl = (_d = searchParams[\"continueUrl\" /* QueryField.CONTINUE_URL */]) !== null && _d !== void 0 ? _d : null;\r\n this.languageCode = (_e = searchParams[\"languageCode\" /* QueryField.LANGUAGE_CODE */]) !== null && _e !== void 0 ? _e : null;\r\n this.tenantId = (_f = searchParams[\"tenantId\" /* QueryField.TENANT_ID */]) !== null && _f !== void 0 ? _f : null;\r\n }\r\n /**\r\n * Parses the email action link string and returns an {@link ActionCodeURL} if the link is valid,\r\n * otherwise returns null.\r\n *\r\n * @param link - The email action link string.\r\n * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\r\n *\r\n * @public\r\n */\r\n static parseLink(link) {\r\n const actionLink = parseDeepLink(link);\r\n try {\r\n return new ActionCodeURL(actionLink);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/**\r\n * Parses the email action link string and returns an {@link ActionCodeURL} if\r\n * the link is valid, otherwise returns null.\r\n *\r\n * @public\r\n */\r\nfunction parseActionCodeURL(link) {\r\n return ActionCodeURL.parseLink(link);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating {@link EmailAuthCredential}.\r\n *\r\n * @public\r\n */\r\nclass EmailAuthProvider {\r\n constructor() {\r\n /**\r\n * Always set to {@link ProviderId}.PASSWORD, even for email link.\r\n */\r\n this.providerId = EmailAuthProvider.PROVIDER_ID;\r\n }\r\n /**\r\n * Initialize an {@link AuthCredential} using an email and password.\r\n *\r\n * @example\r\n * ```javascript\r\n * const authCredential = EmailAuthProvider.credential(email, password);\r\n * const userCredential = await signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * const userCredential = await signInWithEmailAndPassword(auth, email, password);\r\n * ```\r\n *\r\n * @param email - Email address.\r\n * @param password - User account password.\r\n * @returns The auth provider credential.\r\n */\r\n static credential(email, password) {\r\n return EmailAuthCredential._fromEmailAndPassword(email, password);\r\n }\r\n /**\r\n * Initialize an {@link AuthCredential} using an email and an email link after a sign in with\r\n * email link operation.\r\n *\r\n * @example\r\n * ```javascript\r\n * const authCredential = EmailAuthProvider.credentialWithLink(auth, email, emailLink);\r\n * const userCredential = await signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * await sendSignInLinkToEmail(auth, email);\r\n * // Obtain emailLink from user.\r\n * const userCredential = await signInWithEmailLink(auth, email, emailLink);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance used to verify the link.\r\n * @param email - Email address.\r\n * @param emailLink - Sign-in email link.\r\n * @returns - The auth provider credential.\r\n */\r\n static credentialWithLink(email, emailLink) {\r\n const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\r\n _assert(actionCodeUrl, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return EmailAuthCredential._fromEmailAndCode(email, actionCodeUrl.code, actionCodeUrl.tenantId);\r\n }\r\n}\r\n/**\r\n * Always set to {@link ProviderId}.PASSWORD, even for email link.\r\n */\r\nEmailAuthProvider.PROVIDER_ID = \"password\" /* ProviderId.PASSWORD */;\r\n/**\r\n * Always set to {@link SignInMethod}.EMAIL_PASSWORD.\r\n */\r\nEmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD = \"password\" /* SignInMethod.EMAIL_PASSWORD */;\r\n/**\r\n * Always set to {@link SignInMethod}.EMAIL_LINK.\r\n */\r\nEmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD = \"emailLink\" /* SignInMethod.EMAIL_LINK */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The base class for all Federated providers (OAuth (including OIDC), SAML).\r\n *\r\n * This class is not meant to be instantiated directly.\r\n *\r\n * @public\r\n */\r\nclass FederatedAuthProvider {\r\n /**\r\n * Constructor for generic OAuth providers.\r\n *\r\n * @param providerId - Provider for which credentials should be generated.\r\n */\r\n constructor(providerId) {\r\n this.providerId = providerId;\r\n /** @internal */\r\n this.defaultLanguageCode = null;\r\n /** @internal */\r\n this.customParameters = {};\r\n }\r\n /**\r\n * Set the language gode.\r\n *\r\n * @param languageCode - language code\r\n */\r\n setDefaultLanguage(languageCode) {\r\n this.defaultLanguageCode = languageCode;\r\n }\r\n /**\r\n * Sets the OAuth custom parameters to pass in an OAuth request for popup and redirect sign-in\r\n * operations.\r\n *\r\n * @remarks\r\n * For a detailed list, check the reserved required OAuth 2.0 parameters such as `client_id`,\r\n * `redirect_uri`, `scope`, `response_type`, and `state` are not allowed and will be ignored.\r\n *\r\n * @param customOAuthParameters - The custom OAuth parameters to pass in the OAuth request.\r\n */\r\n setCustomParameters(customOAuthParameters) {\r\n this.customParameters = customOAuthParameters;\r\n return this;\r\n }\r\n /**\r\n * Retrieve the current list of {@link CustomParameters}.\r\n */\r\n getCustomParameters() {\r\n return this.customParameters;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Common code to all OAuth providers. This is separate from the\r\n * {@link OAuthProvider} so that child providers (like\r\n * {@link GoogleAuthProvider}) don't inherit the `credential` instance method.\r\n * Instead, they rely on a static `credential` method.\r\n */\r\nclass BaseOAuthProvider extends FederatedAuthProvider {\r\n constructor() {\r\n super(...arguments);\r\n /** @internal */\r\n this.scopes = [];\r\n }\r\n /**\r\n * Add an OAuth scope to the credential.\r\n *\r\n * @param scope - Provider OAuth scope to add.\r\n */\r\n addScope(scope) {\r\n // If not already added, add scope to list.\r\n if (!this.scopes.includes(scope)) {\r\n this.scopes.push(scope);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Retrieve the current list of OAuth scopes.\r\n */\r\n getScopes() {\r\n return [...this.scopes];\r\n }\r\n}\r\n/**\r\n * Provider for generating generic {@link OAuthCredential}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new OAuthProvider('google.com');\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a OAuth Access Token for the provider.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new OAuthProvider('google.com');\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a OAuth Access Token for the provider.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * ```\r\n * @public\r\n */\r\nclass OAuthProvider extends BaseOAuthProvider {\r\n /**\r\n * Creates an {@link OAuthCredential} from a JSON string or a plain object.\r\n * @param json - A plain object or a JSON string\r\n */\r\n static credentialFromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n _assert('providerId' in obj && 'signInMethod' in obj, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return OAuthCredential._fromParams(obj);\r\n }\r\n /**\r\n * Creates a {@link OAuthCredential} from a generic OAuth provider's access token or ID token.\r\n *\r\n * @remarks\r\n * The raw nonce is required when an ID token with a nonce field is provided. The SHA-256 hash of\r\n * the raw nonce must match the nonce field in the ID token.\r\n *\r\n * @example\r\n * ```javascript\r\n * // `googleUser` from the onsuccess Google Sign In callback.\r\n * // Initialize a generate OAuth provider with a `google.com` providerId.\r\n * const provider = new OAuthProvider('google.com');\r\n * const credential = provider.credential({\r\n * idToken: googleUser.getAuthResponse().id_token,\r\n * });\r\n * const result = await signInWithCredential(credential);\r\n * ```\r\n *\r\n * @param params - Either the options object containing the ID token, access token and raw nonce\r\n * or the ID token string.\r\n */\r\n credential(params) {\r\n return this._credential(Object.assign(Object.assign({}, params), { nonce: params.rawNonce }));\r\n }\r\n /** An internal credential method that accepts more permissive options */\r\n _credential(params) {\r\n _assert(params.idToken || params.accessToken, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n // For OAuthCredential, sign in method is same as providerId.\r\n return OAuthCredential._fromParams(Object.assign(Object.assign({}, params), { providerId: this.providerId, signInMethod: this.providerId }));\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return OAuthProvider.oauthCredentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return OAuthProvider.oauthCredentialFromTaggedObject((error.customData || {}));\r\n }\r\n static oauthCredentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { oauthIdToken, oauthAccessToken, oauthTokenSecret, pendingToken, nonce, providerId } = tokenResponse;\r\n if (!oauthAccessToken &&\r\n !oauthTokenSecret &&\r\n !oauthIdToken &&\r\n !pendingToken) {\r\n return null;\r\n }\r\n if (!providerId) {\r\n return null;\r\n }\r\n try {\r\n return new OAuthProvider(providerId)._credential({\r\n idToken: oauthIdToken,\r\n accessToken: oauthAccessToken,\r\n nonce,\r\n pendingToken\r\n });\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.FACEBOOK.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('user_birthday');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = FacebookAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * provider.addScope('user_birthday');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = FacebookAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass FacebookAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"facebook.com\" /* ProviderId.FACEBOOK */);\r\n }\r\n /**\r\n * Creates a credential for Facebook.\r\n *\r\n * @example\r\n * ```javascript\r\n * // `event` from the Facebook auth.authResponseChange callback.\r\n * const credential = FacebookAuthProvider.credential(event.authResponse.accessToken);\r\n * const result = await signInWithCredential(credential);\r\n * ```\r\n *\r\n * @param accessToken - Facebook access token.\r\n */\r\n static credential(accessToken) {\r\n return OAuthCredential._fromParams({\r\n providerId: FacebookAuthProvider.PROVIDER_ID,\r\n signInMethod: FacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD,\r\n accessToken\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return FacebookAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return FacebookAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\r\n return null;\r\n }\r\n if (!tokenResponse.oauthAccessToken) {\r\n return null;\r\n }\r\n try {\r\n return FacebookAuthProvider.credential(tokenResponse.oauthAccessToken);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.FACEBOOK. */\r\nFacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD = \"facebook.com\" /* SignInMethod.FACEBOOK */;\r\n/** Always set to {@link ProviderId}.FACEBOOK. */\r\nFacebookAuthProvider.PROVIDER_ID = \"facebook.com\" /* ProviderId.FACEBOOK */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.GOOGLE.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new GoogleAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Google Access Token.\r\n * const credential = GoogleAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new GoogleAuthProvider();\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Google Access Token.\r\n * const credential = GoogleAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass GoogleAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"google.com\" /* ProviderId.GOOGLE */);\r\n this.addScope('profile');\r\n }\r\n /**\r\n * Creates a credential for Google. At least one of ID token and access token is required.\r\n *\r\n * @example\r\n * ```javascript\r\n * // \\`googleUser\\` from the onsuccess Google Sign In callback.\r\n * const credential = GoogleAuthProvider.credential(googleUser.getAuthResponse().id_token);\r\n * const result = await signInWithCredential(credential);\r\n * ```\r\n *\r\n * @param idToken - Google ID token.\r\n * @param accessToken - Google access token.\r\n */\r\n static credential(idToken, accessToken) {\r\n return OAuthCredential._fromParams({\r\n providerId: GoogleAuthProvider.PROVIDER_ID,\r\n signInMethod: GoogleAuthProvider.GOOGLE_SIGN_IN_METHOD,\r\n idToken,\r\n accessToken\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return GoogleAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return GoogleAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { oauthIdToken, oauthAccessToken } = tokenResponse;\r\n if (!oauthIdToken && !oauthAccessToken) {\r\n // This could be an oauth 1 credential or a phone credential\r\n return null;\r\n }\r\n try {\r\n return GoogleAuthProvider.credential(oauthIdToken, oauthAccessToken);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.GOOGLE. */\r\nGoogleAuthProvider.GOOGLE_SIGN_IN_METHOD = \"google.com\" /* SignInMethod.GOOGLE */;\r\n/** Always set to {@link ProviderId}.GOOGLE. */\r\nGoogleAuthProvider.PROVIDER_ID = \"google.com\" /* ProviderId.GOOGLE */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.GITHUB.\r\n *\r\n * @remarks\r\n * GitHub requires an OAuth 2.0 redirect, so you can either handle the redirect directly, or use\r\n * the {@link signInWithPopup} handler:\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new GithubAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('repo');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Github Access Token.\r\n * const credential = GithubAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new GithubAuthProvider();\r\n * provider.addScope('repo');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Github Access Token.\r\n * const credential = GithubAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n * @public\r\n */\r\nclass GithubAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"github.com\" /* ProviderId.GITHUB */);\r\n }\r\n /**\r\n * Creates a credential for Github.\r\n *\r\n * @param accessToken - Github access token.\r\n */\r\n static credential(accessToken) {\r\n return OAuthCredential._fromParams({\r\n providerId: GithubAuthProvider.PROVIDER_ID,\r\n signInMethod: GithubAuthProvider.GITHUB_SIGN_IN_METHOD,\r\n accessToken\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return GithubAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return GithubAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\r\n return null;\r\n }\r\n if (!tokenResponse.oauthAccessToken) {\r\n return null;\r\n }\r\n try {\r\n return GithubAuthProvider.credential(tokenResponse.oauthAccessToken);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.GITHUB. */\r\nGithubAuthProvider.GITHUB_SIGN_IN_METHOD = \"github.com\" /* SignInMethod.GITHUB */;\r\n/** Always set to {@link ProviderId}.GITHUB. */\r\nGithubAuthProvider.PROVIDER_ID = \"github.com\" /* ProviderId.GITHUB */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IDP_REQUEST_URI = 'http://localhost';\r\n/**\r\n * @public\r\n */\r\nclass SAMLAuthCredential extends AuthCredential {\r\n /** @internal */\r\n constructor(providerId, pendingToken) {\r\n super(providerId, providerId);\r\n this.pendingToken = pendingToken;\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(auth) {\r\n const request = this.buildRequest();\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _linkToIdToken(auth, idToken) {\r\n const request = this.buildRequest();\r\n request.idToken = idToken;\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n const request = this.buildRequest();\r\n request.autoCreate = false;\r\n return signInWithIdp(auth, request);\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n return {\r\n signInMethod: this.signInMethod,\r\n providerId: this.providerId,\r\n pendingToken: this.pendingToken\r\n };\r\n }\r\n /**\r\n * Static method to deserialize a JSON representation of an object into an\r\n * {@link AuthCredential}.\r\n *\r\n * @param json - Input can be either Object or the stringified representation of the object.\r\n * When string is provided, JSON.parse would be called first.\r\n *\r\n * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\r\n */\r\n static fromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n const { providerId, signInMethod, pendingToken } = obj;\r\n if (!providerId ||\r\n !signInMethod ||\r\n !pendingToken ||\r\n providerId !== signInMethod) {\r\n return null;\r\n }\r\n return new SAMLAuthCredential(providerId, pendingToken);\r\n }\r\n /**\r\n * Helper static method to avoid exposing the constructor to end users.\r\n *\r\n * @internal\r\n */\r\n static _create(providerId, pendingToken) {\r\n return new SAMLAuthCredential(providerId, pendingToken);\r\n }\r\n buildRequest() {\r\n return {\r\n requestUri: IDP_REQUEST_URI,\r\n returnSecureToken: true,\r\n pendingToken: this.pendingToken\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst SAML_PROVIDER_PREFIX = 'saml.';\r\n/**\r\n * An {@link AuthProvider} for SAML.\r\n *\r\n * @public\r\n */\r\nclass SAMLAuthProvider extends FederatedAuthProvider {\r\n /**\r\n * Constructor. The providerId must start with \"saml.\"\r\n * @param providerId - SAML provider ID.\r\n */\r\n constructor(providerId) {\r\n _assert(providerId.startsWith(SAML_PROVIDER_PREFIX), \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n super(providerId);\r\n }\r\n /**\r\n * Generates an {@link AuthCredential} from a {@link UserCredential} after a\r\n * successful SAML flow completes.\r\n *\r\n * @remarks\r\n *\r\n * For example, to get an {@link AuthCredential}, you could write the\r\n * following code:\r\n *\r\n * ```js\r\n * const userCredential = await signInWithPopup(auth, samlProvider);\r\n * const credential = SAMLAuthProvider.credentialFromResult(userCredential);\r\n * ```\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return SAMLAuthProvider.samlCredentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return SAMLAuthProvider.samlCredentialFromTaggedObject((error.customData || {}));\r\n }\r\n /**\r\n * Creates an {@link AuthCredential} from a JSON string or a plain object.\r\n * @param json - A plain object or a JSON string\r\n */\r\n static credentialFromJSON(json) {\r\n const credential = SAMLAuthCredential.fromJSON(json);\r\n _assert(credential, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return credential;\r\n }\r\n static samlCredentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { pendingToken, providerId } = tokenResponse;\r\n if (!pendingToken || !providerId) {\r\n return null;\r\n }\r\n try {\r\n return SAMLAuthCredential._create(providerId, pendingToken);\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.TWITTER.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new TwitterAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Twitter Access Token and Secret.\r\n * const credential = TwitterAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * const secret = credential.secret;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new TwitterAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Twitter Access Token and Secret.\r\n * const credential = TwitterAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * const secret = credential.secret;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass TwitterAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"twitter.com\" /* ProviderId.TWITTER */);\r\n }\r\n /**\r\n * Creates a credential for Twitter.\r\n *\r\n * @param token - Twitter access token.\r\n * @param secret - Twitter secret.\r\n */\r\n static credential(token, secret) {\r\n return OAuthCredential._fromParams({\r\n providerId: TwitterAuthProvider.PROVIDER_ID,\r\n signInMethod: TwitterAuthProvider.TWITTER_SIGN_IN_METHOD,\r\n oauthToken: token,\r\n oauthTokenSecret: secret\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return TwitterAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return TwitterAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { oauthAccessToken, oauthTokenSecret } = tokenResponse;\r\n if (!oauthAccessToken || !oauthTokenSecret) {\r\n return null;\r\n }\r\n try {\r\n return TwitterAuthProvider.credential(oauthAccessToken, oauthTokenSecret);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.TWITTER. */\r\nTwitterAuthProvider.TWITTER_SIGN_IN_METHOD = \"twitter.com\" /* SignInMethod.TWITTER */;\r\n/** Always set to {@link ProviderId}.TWITTER. */\r\nTwitterAuthProvider.PROVIDER_ID = \"twitter.com\" /* ProviderId.TWITTER */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signUp(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signUp\" /* Endpoint.SIGN_UP */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass UserCredentialImpl {\r\n constructor(params) {\r\n this.user = params.user;\r\n this.providerId = params.providerId;\r\n this._tokenResponse = params._tokenResponse;\r\n this.operationType = params.operationType;\r\n }\r\n static async _fromIdTokenResponse(auth, operationType, idTokenResponse, isAnonymous = false) {\r\n const user = await UserImpl._fromIdTokenResponse(auth, idTokenResponse, isAnonymous);\r\n const providerId = providerIdForResponse(idTokenResponse);\r\n const userCred = new UserCredentialImpl({\r\n user,\r\n providerId,\r\n _tokenResponse: idTokenResponse,\r\n operationType\r\n });\r\n return userCred;\r\n }\r\n static async _forOperation(user, operationType, response) {\r\n await user._updateTokensIfNecessary(response, /* reload */ true);\r\n const providerId = providerIdForResponse(response);\r\n return new UserCredentialImpl({\r\n user,\r\n providerId,\r\n _tokenResponse: response,\r\n operationType\r\n });\r\n }\r\n}\r\nfunction providerIdForResponse(response) {\r\n if (response.providerId) {\r\n return response.providerId;\r\n }\r\n if ('phoneNumber' in response) {\r\n return \"phone\" /* ProviderId.PHONE */;\r\n }\r\n return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Asynchronously signs in as an anonymous user.\r\n *\r\n * @remarks\r\n * If there is already an anonymous user signed in, that user will be returned; otherwise, a\r\n * new anonymous user identity will be created and returned.\r\n *\r\n * This method is not supported by {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nasync function signInAnonymously(auth) {\r\n var _a;\r\n if (_isFirebaseServerApp(auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\r\n }\r\n const authInternal = _castAuth(auth);\r\n await authInternal._initializationPromise;\r\n if ((_a = authInternal.currentUser) === null || _a === void 0 ? void 0 : _a.isAnonymous) {\r\n // If an anonymous user is already signed in, no need to sign them in again.\r\n return new UserCredentialImpl({\r\n user: authInternal.currentUser,\r\n providerId: null,\r\n operationType: \"signIn\" /* OperationType.SIGN_IN */\r\n });\r\n }\r\n const response = await signUp(authInternal, {\r\n returnSecureToken: true\r\n });\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response, true);\r\n await authInternal._updateCurrentUser(userCredential.user);\r\n return userCredential;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorError extends FirebaseError {\r\n constructor(auth, error, operationType, user) {\r\n var _a;\r\n super(error.code, error.message);\r\n this.operationType = operationType;\r\n this.user = user;\r\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n Object.setPrototypeOf(this, MultiFactorError.prototype);\r\n this.customData = {\r\n appName: auth.name,\r\n tenantId: (_a = auth.tenantId) !== null && _a !== void 0 ? _a : undefined,\r\n _serverResponse: error.customData._serverResponse,\r\n operationType\r\n };\r\n }\r\n static _fromErrorAndOperation(auth, error, operationType, user) {\r\n return new MultiFactorError(auth, error, operationType, user);\r\n }\r\n}\r\nfunction _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user) {\r\n const idTokenProvider = operationType === \"reauthenticate\" /* OperationType.REAUTHENTICATE */\r\n ? credential._getReauthenticationResolver(auth)\r\n : credential._getIdTokenResponse(auth);\r\n return idTokenProvider.catch(error => {\r\n if (error.code === `auth/${\"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */}`) {\r\n throw MultiFactorError._fromErrorAndOperation(auth, error, operationType, user);\r\n }\r\n throw error;\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Takes a set of UserInfo provider data and converts it to a set of names\r\n */\r\nfunction providerDataAsNames(providerData) {\r\n return new Set(providerData\r\n .map(({ providerId }) => providerId)\r\n .filter(pid => !!pid));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Unlinks a provider from a user account.\r\n *\r\n * @param user - The user.\r\n * @param providerId - The provider to unlink.\r\n *\r\n * @public\r\n */\r\nasync function unlink(user, providerId) {\r\n const userInternal = getModularInstance(user);\r\n await _assertLinkedStatus(true, userInternal, providerId);\r\n const { providerUserInfo } = await deleteLinkedAccounts(userInternal.auth, {\r\n idToken: await userInternal.getIdToken(),\r\n deleteProvider: [providerId]\r\n });\r\n const providersLeft = providerDataAsNames(providerUserInfo || []);\r\n userInternal.providerData = userInternal.providerData.filter(pd => providersLeft.has(pd.providerId));\r\n if (!providersLeft.has(\"phone\" /* ProviderId.PHONE */)) {\r\n userInternal.phoneNumber = null;\r\n }\r\n await userInternal.auth._persistUserIfCurrent(userInternal);\r\n return userInternal;\r\n}\r\nasync function _link$1(user, credential, bypassAuthState = false) {\r\n const response = await _logoutIfInvalidated(user, credential._linkToIdToken(user.auth, await user.getIdToken()), bypassAuthState);\r\n return UserCredentialImpl._forOperation(user, \"link\" /* OperationType.LINK */, response);\r\n}\r\nasync function _assertLinkedStatus(expected, user, provider) {\r\n await _reloadWithoutSaving(user);\r\n const providerIds = providerDataAsNames(user.providerData);\r\n const code = expected === false\r\n ? \"provider-already-linked\" /* AuthErrorCode.PROVIDER_ALREADY_LINKED */\r\n : \"no-such-provider\" /* AuthErrorCode.NO_SUCH_PROVIDER */;\r\n _assert(providerIds.has(provider) === expected, user.auth, code);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _reauthenticate(user, credential, bypassAuthState = false) {\r\n const { auth } = user;\r\n if (_isFirebaseServerApp(auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\r\n }\r\n const operationType = \"reauthenticate\" /* OperationType.REAUTHENTICATE */;\r\n try {\r\n const response = await _logoutIfInvalidated(user, _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user), bypassAuthState);\r\n _assert(response.idToken, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const parsed = _parseToken(response.idToken);\r\n _assert(parsed, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const { sub: localId } = parsed;\r\n _assert(user.uid === localId, auth, \"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */);\r\n return UserCredentialImpl._forOperation(user, operationType, response);\r\n }\r\n catch (e) {\r\n // Convert user deleted error into user mismatch\r\n if ((e === null || e === void 0 ? void 0 : e.code) === `auth/${\"user-not-found\" /* AuthErrorCode.USER_DELETED */}`) {\r\n _fail(auth, \"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */);\r\n }\r\n throw e;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _signInWithCredential(auth, credential, bypassAuthState = false) {\r\n if (_isFirebaseServerApp(auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\r\n }\r\n const operationType = \"signIn\" /* OperationType.SIGN_IN */;\r\n const response = await _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential);\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(auth, operationType, response);\r\n if (!bypassAuthState) {\r\n await auth._updateCurrentUser(userCredential.user);\r\n }\r\n return userCredential;\r\n}\r\n/**\r\n * Asynchronously signs in with the given credentials.\r\n *\r\n * @remarks\r\n * An {@link AuthProvider} can be used to generate the credential.\r\n *\r\n * This method is not supported by {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function signInWithCredential(auth, credential) {\r\n return _signInWithCredential(_castAuth(auth), credential);\r\n}\r\n/**\r\n * Links the user account with the given credentials.\r\n *\r\n * @remarks\r\n * An {@link AuthProvider} can be used to generate the credential.\r\n *\r\n * @param user - The user.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function linkWithCredential(user, credential) {\r\n const userInternal = getModularInstance(user);\r\n await _assertLinkedStatus(false, userInternal, credential.providerId);\r\n return _link$1(userInternal, credential);\r\n}\r\n/**\r\n * Re-authenticates a user using a fresh credential.\r\n *\r\n * @remarks\r\n * Use before operations such as {@link updatePassword} that require tokens from recent sign-in\r\n * attempts. This method can be used to recover from a `CREDENTIAL_TOO_OLD_LOGIN_AGAIN` error\r\n * or a `TOKEN_EXPIRED` error.\r\n *\r\n * This method is not supported on any {@link User} signed in by {@link Auth} instances\r\n * created with a {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @param user - The user.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithCredential(user, credential) {\r\n return _reauthenticate(getModularInstance(user), credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithCustomToken$1(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithCustomToken\" /* Endpoint.SIGN_IN_WITH_CUSTOM_TOKEN */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Asynchronously signs in using a custom token.\r\n *\r\n * @remarks\r\n * Custom tokens are used to integrate Firebase Auth with existing auth systems, and must\r\n * be generated by an auth backend using the\r\n * {@link https://firebase.google.com/docs/reference/admin/node/admin.auth.Auth#createcustomtoken | createCustomToken}\r\n * method in the {@link https://firebase.google.com/docs/auth/admin | Admin SDK} .\r\n *\r\n * Fails with an error if the token is invalid, expired, or not accepted by the Firebase Auth service.\r\n *\r\n * This method is not supported by {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param customToken - The custom token to sign in with.\r\n *\r\n * @public\r\n */\r\nasync function signInWithCustomToken(auth, customToken) {\r\n if (_isFirebaseServerApp(auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\r\n }\r\n const authInternal = _castAuth(auth);\r\n const response = await signInWithCustomToken$1(authInternal, {\r\n token: customToken,\r\n returnSecureToken: true\r\n });\r\n const cred = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response);\r\n await authInternal._updateCurrentUser(cred.user);\r\n return cred;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorInfoImpl {\r\n constructor(factorId, response) {\r\n this.factorId = factorId;\r\n this.uid = response.mfaEnrollmentId;\r\n this.enrollmentTime = new Date(response.enrolledAt).toUTCString();\r\n this.displayName = response.displayName;\r\n }\r\n static _fromServerResponse(auth, enrollment) {\r\n if ('phoneInfo' in enrollment) {\r\n return PhoneMultiFactorInfoImpl._fromServerResponse(auth, enrollment);\r\n }\r\n else if ('totpInfo' in enrollment) {\r\n return TotpMultiFactorInfoImpl._fromServerResponse(auth, enrollment);\r\n }\r\n return _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n}\r\nclass PhoneMultiFactorInfoImpl extends MultiFactorInfoImpl {\r\n constructor(response) {\r\n super(\"phone\" /* FactorId.PHONE */, response);\r\n this.phoneNumber = response.phoneInfo;\r\n }\r\n static _fromServerResponse(_auth, enrollment) {\r\n return new PhoneMultiFactorInfoImpl(enrollment);\r\n }\r\n}\r\nclass TotpMultiFactorInfoImpl extends MultiFactorInfoImpl {\r\n constructor(response) {\r\n super(\"totp\" /* FactorId.TOTP */, response);\r\n }\r\n static _fromServerResponse(_auth, enrollment) {\r\n return new TotpMultiFactorInfoImpl(enrollment);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _setActionCodeSettingsOnRequest(auth, request, actionCodeSettings) {\r\n var _a;\r\n _assert(((_a = actionCodeSettings.url) === null || _a === void 0 ? void 0 : _a.length) > 0, auth, \"invalid-continue-uri\" /* AuthErrorCode.INVALID_CONTINUE_URI */);\r\n _assert(typeof actionCodeSettings.dynamicLinkDomain === 'undefined' ||\r\n actionCodeSettings.dynamicLinkDomain.length > 0, auth, \"invalid-dynamic-link-domain\" /* AuthErrorCode.INVALID_DYNAMIC_LINK_DOMAIN */);\r\n request.continueUrl = actionCodeSettings.url;\r\n request.dynamicLinkDomain = actionCodeSettings.dynamicLinkDomain;\r\n request.canHandleCodeInApp = actionCodeSettings.handleCodeInApp;\r\n if (actionCodeSettings.iOS) {\r\n _assert(actionCodeSettings.iOS.bundleId.length > 0, auth, \"missing-ios-bundle-id\" /* AuthErrorCode.MISSING_IOS_BUNDLE_ID */);\r\n request.iOSBundleId = actionCodeSettings.iOS.bundleId;\r\n }\r\n if (actionCodeSettings.android) {\r\n _assert(actionCodeSettings.android.packageName.length > 0, auth, \"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */);\r\n request.androidInstallApp = actionCodeSettings.android.installApp;\r\n request.androidMinimumVersionCode =\r\n actionCodeSettings.android.minimumVersion;\r\n request.androidPackageName = actionCodeSettings.android.packageName;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Updates the password policy cached in the {@link Auth} instance if a policy is already\r\n * cached for the project or tenant.\r\n *\r\n * @remarks\r\n * We only fetch the password policy if the password did not meet policy requirements and\r\n * there is an existing policy cached. A developer must call validatePassword at least\r\n * once for the cache to be automatically updated.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @private\r\n */\r\nasync function recachePasswordPolicy(auth) {\r\n const authInternal = _castAuth(auth);\r\n if (authInternal._getPasswordPolicyInternal()) {\r\n await authInternal._updatePasswordPolicy();\r\n }\r\n}\r\n/**\r\n * Sends a password reset email to the given email address. This method does not throw an error when\r\n * there's no user account with the given email address and\r\n * {@link https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection | Email Enumeration Protection}\r\n * is enabled.\r\n *\r\n * @remarks\r\n * To complete the password reset, call {@link confirmPasswordReset} with the code supplied in\r\n * the email sent to the user, along with the new password specified by the user.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendPasswordResetEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain code from user.\r\n * await confirmPasswordReset('user@example.com', code);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendPasswordResetEmail(auth, email, actionCodeSettings) {\r\n const authInternal = _castAuth(auth);\r\n const request = {\r\n requestType: \"PASSWORD_RESET\" /* ActionCodeOperation.PASSWORD_RESET */,\r\n email,\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\r\n };\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);\r\n }\r\n await handleRecaptchaFlow(authInternal, request, \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */, sendPasswordResetEmail$1);\r\n}\r\n/**\r\n * Completes the password reset process, given a confirmation code and new password.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A confirmation code sent to the user.\r\n * @param newPassword - The new password.\r\n *\r\n * @public\r\n */\r\nasync function confirmPasswordReset(auth, oobCode, newPassword) {\r\n await resetPassword(getModularInstance(auth), {\r\n oobCode,\r\n newPassword\r\n })\r\n .catch(async (error) => {\r\n if (error.code ===\r\n `auth/${\"password-does-not-meet-requirements\" /* AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */}`) {\r\n void recachePasswordPolicy(auth);\r\n }\r\n throw error;\r\n });\r\n // Do not return the email.\r\n}\r\n/**\r\n * Applies a verification code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function applyActionCode(auth, oobCode) {\r\n await applyActionCode$1(getModularInstance(auth), { oobCode });\r\n}\r\n/**\r\n * Checks a verification code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @returns metadata about the code.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function checkActionCode(auth, oobCode) {\r\n const authModular = getModularInstance(auth);\r\n const response = await resetPassword(authModular, { oobCode });\r\n // Email could be empty only if the request type is EMAIL_SIGNIN or\r\n // VERIFY_AND_CHANGE_EMAIL.\r\n // New email should not be empty if the request type is\r\n // VERIFY_AND_CHANGE_EMAIL.\r\n // Multi-factor info could not be empty if the request type is\r\n // REVERT_SECOND_FACTOR_ADDITION.\r\n const operation = response.requestType;\r\n _assert(operation, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n switch (operation) {\r\n case \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */:\r\n break;\r\n case \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */:\r\n _assert(response.newEmail, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n break;\r\n case \"REVERT_SECOND_FACTOR_ADDITION\" /* ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION */:\r\n _assert(response.mfaInfo, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n // fall through\r\n default:\r\n _assert(response.email, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n // The multi-factor info for revert second factor addition\r\n let multiFactorInfo = null;\r\n if (response.mfaInfo) {\r\n multiFactorInfo = MultiFactorInfoImpl._fromServerResponse(_castAuth(authModular), response.mfaInfo);\r\n }\r\n return {\r\n data: {\r\n email: (response.requestType === \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */\r\n ? response.newEmail\r\n : response.email) || null,\r\n previousEmail: (response.requestType === \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */\r\n ? response.email\r\n : response.newEmail) || null,\r\n multiFactorInfo\r\n },\r\n operation\r\n };\r\n}\r\n/**\r\n * Checks a password reset code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @returns the user's email address if valid.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param code - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function verifyPasswordResetCode(auth, code) {\r\n const { data } = await checkActionCode(getModularInstance(auth), code);\r\n // Email should always be present since a code was sent to it\r\n return data.email;\r\n}\r\n/**\r\n * Creates a new user account associated with the specified email address and password.\r\n *\r\n * @remarks\r\n * On successful creation of the user account, this user will also be signed in to your application.\r\n *\r\n * User account creation can fail if the account already exists or the password is invalid.\r\n *\r\n * This method is not supported on {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * Note: The email address acts as a unique identifier for the user and enables an email-based\r\n * password reset. This function will create a new user account and set the initial user password.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param password - The user's chosen password.\r\n *\r\n * @public\r\n */\r\nasync function createUserWithEmailAndPassword(auth, email, password) {\r\n if (_isFirebaseServerApp(auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\r\n }\r\n const authInternal = _castAuth(auth);\r\n const request = {\r\n returnSecureToken: true,\r\n email,\r\n password,\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\r\n };\r\n const signUpResponse = handleRecaptchaFlow(authInternal, request, \"signUpPassword\" /* RecaptchaActionName.SIGN_UP_PASSWORD */, signUp);\r\n const response = await signUpResponse.catch(error => {\r\n if (error.code === `auth/${\"password-does-not-meet-requirements\" /* AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */}`) {\r\n void recachePasswordPolicy(auth);\r\n }\r\n throw error;\r\n });\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response);\r\n await authInternal._updateCurrentUser(userCredential.user);\r\n return userCredential;\r\n}\r\n/**\r\n * Asynchronously signs in using an email and password.\r\n *\r\n * @remarks\r\n * Fails with an error if the email address and password do not match. When\r\n * {@link https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection | Email Enumeration Protection}\r\n * is enabled, this method fails with \"auth/invalid-credential\" in case of an invalid\r\n * email/password.\r\n *\r\n * This method is not supported on {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * Note: The user's password is NOT the password used to access the user's email account. The\r\n * email address serves as a unique identifier for the user, and the password is used to access\r\n * the user's account in your Firebase project. See also: {@link createUserWithEmailAndPassword}.\r\n *\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The users email address.\r\n * @param password - The users password.\r\n *\r\n * @public\r\n */\r\nfunction signInWithEmailAndPassword(auth, email, password) {\r\n if (_isFirebaseServerApp(auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\r\n }\r\n return signInWithCredential(getModularInstance(auth), EmailAuthProvider.credential(email, password)).catch(async (error) => {\r\n if (error.code === `auth/${\"password-does-not-meet-requirements\" /* AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */}`) {\r\n void recachePasswordPolicy(auth);\r\n }\r\n throw error;\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Sends a sign-in email link to the user with the specified email.\r\n *\r\n * @remarks\r\n * The sign-in operation has to always be completed in the app unlike other out of band email\r\n * actions (password reset and email verifications). This is because, at the end of the flow,\r\n * the user is expected to be signed in and their Auth state persisted within the app.\r\n *\r\n * To complete sign in with the email link, call {@link signInWithEmailLink} with the email\r\n * address and the email link supplied in the email sent to the user.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain emailLink from the user.\r\n * if(isSignInWithEmailLink(auth, emailLink)) {\r\n * await signInWithEmailLink(auth, 'user@example.com', emailLink);\r\n * }\r\n * ```\r\n *\r\n * @param authInternal - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendSignInLinkToEmail(auth, email, actionCodeSettings) {\r\n const authInternal = _castAuth(auth);\r\n const request = {\r\n requestType: \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */,\r\n email,\r\n clientType: \"CLIENT_TYPE_WEB\" /* RecaptchaClientType.WEB */\r\n };\r\n function setActionCodeSettings(request, actionCodeSettings) {\r\n _assert(actionCodeSettings.handleCodeInApp, authInternal, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);\r\n }\r\n }\r\n setActionCodeSettings(request, actionCodeSettings);\r\n await handleRecaptchaFlow(authInternal, request, \"getOobCode\" /* RecaptchaActionName.GET_OOB_CODE */, sendSignInLinkToEmail$1);\r\n}\r\n/**\r\n * Checks if an incoming link is a sign-in with email link suitable for {@link signInWithEmailLink}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param emailLink - The link sent to the user's email address.\r\n *\r\n * @public\r\n */\r\nfunction isSignInWithEmailLink(auth, emailLink) {\r\n const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\r\n return (actionCodeUrl === null || actionCodeUrl === void 0 ? void 0 : actionCodeUrl.operation) === \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */;\r\n}\r\n/**\r\n * Asynchronously signs in using an email and sign-in email link.\r\n *\r\n * @remarks\r\n * If no link is passed, the link is inferred from the current URL.\r\n *\r\n * Fails with an error if the email address is invalid or OTP in email link expires.\r\n *\r\n * This method is not supported by {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * Note: Confirm the link is a sign-in email link before calling this method firebase.auth.Auth.isSignInWithEmailLink.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain emailLink from the user.\r\n * if(isSignInWithEmailLink(auth, emailLink)) {\r\n * await signInWithEmailLink(auth, 'user@example.com', emailLink);\r\n * }\r\n * ```\r\n *\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param emailLink - The link sent to the user's email address.\r\n *\r\n * @public\r\n */\r\nasync function signInWithEmailLink(auth, email, emailLink) {\r\n if (_isFirebaseServerApp(auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\r\n }\r\n const authModular = getModularInstance(auth);\r\n const credential = EmailAuthProvider.credentialWithLink(email, emailLink || _getCurrentUrl());\r\n // Check if the tenant ID in the email link matches the tenant ID on Auth\r\n // instance.\r\n _assert(credential._tenantId === (authModular.tenantId || null), authModular, \"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */);\r\n return signInWithCredential(authModular, credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function createAuthUri(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:createAuthUri\" /* Endpoint.CREATE_AUTH_URI */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Gets the list of possible sign in methods for the given email address. This method returns an\r\n * empty list when\r\n * {@link https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection | Email Enumeration Protection}\r\n * is enabled, irrespective of the number of authentication methods available for the given email.\r\n *\r\n * @remarks\r\n * This is useful to differentiate methods of sign-in for the same provider, eg.\r\n * {@link EmailAuthProvider} which has 2 methods of sign-in,\r\n * {@link SignInMethod}.EMAIL_PASSWORD and\r\n * {@link SignInMethod}.EMAIL_LINK.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n *\r\n * Deprecated. Migrating off of this method is recommended as a security best-practice.\r\n * Learn more in the Identity Platform documentation for\r\n * {@link https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection | Email Enumeration Protection}.\r\n * @public\r\n */\r\nasync function fetchSignInMethodsForEmail(auth, email) {\r\n // createAuthUri returns an error if continue URI is not http or https.\r\n // For environments like Cordova, Chrome extensions, native frameworks, file\r\n // systems, etc, use http://localhost as continue URL.\r\n const continueUri = _isHttpOrHttps() ? _getCurrentUrl() : 'http://localhost';\r\n const request = {\r\n identifier: email,\r\n continueUri\r\n };\r\n const { signinMethods } = await createAuthUri(getModularInstance(auth), request);\r\n return signinMethods || [];\r\n}\r\n/**\r\n * Sends a verification email to a user.\r\n *\r\n * @remarks\r\n * The verification process is completed by calling {@link applyActionCode}.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendEmailVerification(user, actionCodeSettings);\r\n * // Obtain code from the user.\r\n * await applyActionCode(auth, code);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendEmailVerification(user, actionCodeSettings) {\r\n const userInternal = getModularInstance(user);\r\n const idToken = await user.getIdToken();\r\n const request = {\r\n requestType: \"VERIFY_EMAIL\" /* ActionCodeOperation.VERIFY_EMAIL */,\r\n idToken\r\n };\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);\r\n }\r\n const { email } = await sendEmailVerification$1(userInternal.auth, request);\r\n if (email !== user.email) {\r\n await user.reload();\r\n }\r\n}\r\n/**\r\n * Sends a verification email to a new email address.\r\n *\r\n * @remarks\r\n * The user's email will be updated to the new one after being verified.\r\n *\r\n * If you have a custom email action handler, you can complete the verification process by calling\r\n * {@link applyActionCode}.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await verifyBeforeUpdateEmail(user, 'newemail@example.com', actionCodeSettings);\r\n * // Obtain code from the user.\r\n * await applyActionCode(auth, code);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param newEmail - The new email address to be verified before update.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function verifyBeforeUpdateEmail(user, newEmail, actionCodeSettings) {\r\n const userInternal = getModularInstance(user);\r\n const idToken = await user.getIdToken();\r\n const request = {\r\n requestType: \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */,\r\n idToken,\r\n newEmail\r\n };\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);\r\n }\r\n const { email } = await verifyAndChangeEmail(userInternal.auth, request);\r\n if (email !== user.email) {\r\n // If the local copy of the email on user is outdated, reload the\r\n // user.\r\n await user.reload();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function updateProfile$1(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Updates a user's profile data.\r\n *\r\n * @param user - The user.\r\n * @param profile - The profile's `displayName` and `photoURL` to update.\r\n *\r\n * @public\r\n */\r\nasync function updateProfile(user, { displayName, photoURL: photoUrl }) {\r\n if (displayName === undefined && photoUrl === undefined) {\r\n return;\r\n }\r\n const userInternal = getModularInstance(user);\r\n const idToken = await userInternal.getIdToken();\r\n const profileRequest = {\r\n idToken,\r\n displayName,\r\n photoUrl,\r\n returnSecureToken: true\r\n };\r\n const response = await _logoutIfInvalidated(userInternal, updateProfile$1(userInternal.auth, profileRequest));\r\n userInternal.displayName = response.displayName || null;\r\n userInternal.photoURL = response.photoUrl || null;\r\n // Update the password provider as well\r\n const passwordProvider = userInternal.providerData.find(({ providerId }) => providerId === \"password\" /* ProviderId.PASSWORD */);\r\n if (passwordProvider) {\r\n passwordProvider.displayName = userInternal.displayName;\r\n passwordProvider.photoURL = userInternal.photoURL;\r\n }\r\n await userInternal._updateTokensIfNecessary(response);\r\n}\r\n/**\r\n * Updates the user's email address.\r\n *\r\n * @remarks\r\n * An email will be sent to the original email address (if it was set) that allows to revoke the\r\n * email address change, in order to protect them from account hijacking.\r\n *\r\n * This method is not supported on any {@link User} signed in by {@link Auth} instances\r\n * created with a {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * Important: this is a security sensitive operation that requires the user to have recently signed\r\n * in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n * @param newEmail - The new email address.\r\n *\r\n * Throws \"auth/operation-not-allowed\" error when\r\n * {@link https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection | Email Enumeration Protection}\r\n * is enabled.\r\n * Deprecated - Use {@link verifyBeforeUpdateEmail} instead.\r\n *\r\n * @public\r\n */\r\nfunction updateEmail(user, newEmail) {\r\n const userInternal = getModularInstance(user);\r\n if (_isFirebaseServerApp(userInternal.auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(userInternal.auth));\r\n }\r\n return updateEmailOrPassword(userInternal, newEmail, null);\r\n}\r\n/**\r\n * Updates the user's password.\r\n *\r\n * @remarks\r\n * Important: this is a security sensitive operation that requires the user to have recently signed\r\n * in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n * @param newPassword - The new password.\r\n *\r\n * @public\r\n */\r\nfunction updatePassword(user, newPassword) {\r\n return updateEmailOrPassword(getModularInstance(user), null, newPassword);\r\n}\r\nasync function updateEmailOrPassword(user, email, password) {\r\n const { auth } = user;\r\n const idToken = await user.getIdToken();\r\n const request = {\r\n idToken,\r\n returnSecureToken: true\r\n };\r\n if (email) {\r\n request.email = email;\r\n }\r\n if (password) {\r\n request.password = password;\r\n }\r\n const response = await _logoutIfInvalidated(user, updateEmailPassword(auth, request));\r\n await user._updateTokensIfNecessary(response, /* reload */ true);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Parse the `AdditionalUserInfo` from the ID token response.\r\n *\r\n */\r\nfunction _fromIdTokenResponse(idTokenResponse) {\r\n var _a, _b;\r\n if (!idTokenResponse) {\r\n return null;\r\n }\r\n const { providerId } = idTokenResponse;\r\n const profile = idTokenResponse.rawUserInfo\r\n ? JSON.parse(idTokenResponse.rawUserInfo)\r\n : {};\r\n const isNewUser = idTokenResponse.isNewUser ||\r\n idTokenResponse.kind === \"identitytoolkit#SignupNewUserResponse\" /* IdTokenResponseKind.SignupNewUser */;\r\n if (!providerId && (idTokenResponse === null || idTokenResponse === void 0 ? void 0 : idTokenResponse.idToken)) {\r\n const signInProvider = (_b = (_a = _parseToken(idTokenResponse.idToken)) === null || _a === void 0 ? void 0 : _a.firebase) === null || _b === void 0 ? void 0 : _b['sign_in_provider'];\r\n if (signInProvider) {\r\n const filteredProviderId = signInProvider !== \"anonymous\" /* ProviderId.ANONYMOUS */ &&\r\n signInProvider !== \"custom\" /* ProviderId.CUSTOM */\r\n ? signInProvider\r\n : null;\r\n // Uses generic class in accordance with the legacy SDK.\r\n return new GenericAdditionalUserInfo(isNewUser, filteredProviderId);\r\n }\r\n }\r\n if (!providerId) {\r\n return null;\r\n }\r\n switch (providerId) {\r\n case \"facebook.com\" /* ProviderId.FACEBOOK */:\r\n return new FacebookAdditionalUserInfo(isNewUser, profile);\r\n case \"github.com\" /* ProviderId.GITHUB */:\r\n return new GithubAdditionalUserInfo(isNewUser, profile);\r\n case \"google.com\" /* ProviderId.GOOGLE */:\r\n return new GoogleAdditionalUserInfo(isNewUser, profile);\r\n case \"twitter.com\" /* ProviderId.TWITTER */:\r\n return new TwitterAdditionalUserInfo(isNewUser, profile, idTokenResponse.screenName || null);\r\n case \"custom\" /* ProviderId.CUSTOM */:\r\n case \"anonymous\" /* ProviderId.ANONYMOUS */:\r\n return new GenericAdditionalUserInfo(isNewUser, null);\r\n default:\r\n return new GenericAdditionalUserInfo(isNewUser, providerId, profile);\r\n }\r\n}\r\nclass GenericAdditionalUserInfo {\r\n constructor(isNewUser, providerId, profile = {}) {\r\n this.isNewUser = isNewUser;\r\n this.providerId = providerId;\r\n this.profile = profile;\r\n }\r\n}\r\nclass FederatedAdditionalUserInfoWithUsername extends GenericAdditionalUserInfo {\r\n constructor(isNewUser, providerId, profile, username) {\r\n super(isNewUser, providerId, profile);\r\n this.username = username;\r\n }\r\n}\r\nclass FacebookAdditionalUserInfo extends GenericAdditionalUserInfo {\r\n constructor(isNewUser, profile) {\r\n super(isNewUser, \"facebook.com\" /* ProviderId.FACEBOOK */, profile);\r\n }\r\n}\r\nclass GithubAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\r\n constructor(isNewUser, profile) {\r\n super(isNewUser, \"github.com\" /* ProviderId.GITHUB */, profile, typeof (profile === null || profile === void 0 ? void 0 : profile.login) === 'string' ? profile === null || profile === void 0 ? void 0 : profile.login : null);\r\n }\r\n}\r\nclass GoogleAdditionalUserInfo extends GenericAdditionalUserInfo {\r\n constructor(isNewUser, profile) {\r\n super(isNewUser, \"google.com\" /* ProviderId.GOOGLE */, profile);\r\n }\r\n}\r\nclass TwitterAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\r\n constructor(isNewUser, profile, screenName) {\r\n super(isNewUser, \"twitter.com\" /* ProviderId.TWITTER */, profile, screenName);\r\n }\r\n}\r\n/**\r\n * Extracts provider specific {@link AdditionalUserInfo} for the given credential.\r\n *\r\n * @param userCredential - The user credential.\r\n *\r\n * @public\r\n */\r\nfunction getAdditionalUserInfo(userCredential) {\r\n const { user, _tokenResponse } = userCredential;\r\n if (user.isAnonymous && !_tokenResponse) {\r\n // Handle the special case where signInAnonymously() gets called twice.\r\n // No network call is made so there's nothing to actually fill this in\r\n return {\r\n providerId: null,\r\n isNewUser: false,\r\n profile: null\r\n };\r\n }\r\n return _fromIdTokenResponse(_tokenResponse);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Non-optional auth methods.\r\n/**\r\n * Changes the type of persistence on the {@link Auth} instance for the currently saved\r\n * `Auth` session and applies this type of persistence for future sign-in requests, including\r\n * sign-in with redirect requests.\r\n *\r\n * @remarks\r\n * This makes it easy for a user signing in to specify whether their session should be\r\n * remembered or not. It also makes it easier to never persist the `Auth` state for applications\r\n * that are shared by other users or have sensitive data.\r\n *\r\n * This method does not work in a Node.js environment or with {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @example\r\n * ```javascript\r\n * setPersistence(auth, browserSessionPersistence);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param persistence - The {@link Persistence} to use.\r\n * @returns A `Promise` that resolves once the persistence change has completed\r\n *\r\n * @public\r\n */\r\nfunction setPersistence(auth, persistence) {\r\n return getModularInstance(auth).setPersistence(persistence);\r\n}\r\n/**\r\n * Loads the reCAPTCHA configuration into the `Auth` instance.\r\n *\r\n * @remarks\r\n * This will load the reCAPTCHA config, which indicates whether the reCAPTCHA\r\n * verification flow should be triggered for each auth provider, into the\r\n * current Auth session.\r\n *\r\n * If initializeRecaptchaConfig() is not invoked, the auth flow will always start\r\n * without reCAPTCHA verification. If the provider is configured to require reCAPTCHA\r\n * verification, the SDK will transparently load the reCAPTCHA config and restart the\r\n * auth flows.\r\n *\r\n * Thus, by calling this optional method, you will reduce the latency of future auth flows.\r\n * Loading the reCAPTCHA config early will also enhance the signal collected by reCAPTCHA.\r\n *\r\n * This method does not work in a Node.js environment.\r\n *\r\n * @example\r\n * ```javascript\r\n * initializeRecaptchaConfig(auth);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nfunction initializeRecaptchaConfig(auth) {\r\n return _initializeRecaptchaConfig(auth);\r\n}\r\n/**\r\n * Validates the password against the password policy configured for the project or tenant.\r\n *\r\n * @remarks\r\n * If no tenant ID is set on the `Auth` instance, then this method will use the password\r\n * policy configured for the project. Otherwise, this method will use the policy configured\r\n * for the tenant. If a password policy has not been configured, then the default policy\r\n * configured for all projects will be used.\r\n *\r\n * If an auth flow fails because a submitted password does not meet the password policy\r\n * requirements and this method has previously been called, then this method will use the\r\n * most recent policy available when called again.\r\n *\r\n * @example\r\n * ```javascript\r\n * validatePassword(auth, 'some-password');\r\n * ```\r\n *\r\n * @param auth The {@link Auth} instance.\r\n * @param password The password to validate.\r\n *\r\n * @public\r\n */\r\nasync function validatePassword(auth, password) {\r\n const authInternal = _castAuth(auth);\r\n return authInternal.validatePassword(password);\r\n}\r\n/**\r\n * Adds an observer for changes to the signed-in user's ID token.\r\n *\r\n * @remarks\r\n * This includes sign-in, sign-out, and token refresh events.\r\n * This will not be triggered automatically upon ID token expiration. Use {@link User.getIdToken} to refresh the ID token.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param nextOrObserver - callback triggered on change.\r\n * @param error - Deprecated. This callback is never triggered. Errors\r\n * on signing in/out can be caught in promises returned from\r\n * sign-in/sign-out functions.\r\n * @param completed - Deprecated. This callback is never triggered.\r\n *\r\n * @public\r\n */\r\nfunction onIdTokenChanged(auth, nextOrObserver, error, completed) {\r\n return getModularInstance(auth).onIdTokenChanged(nextOrObserver, error, completed);\r\n}\r\n/**\r\n * Adds a blocking callback that runs before an auth state change\r\n * sets a new user.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param callback - callback triggered before new user value is set.\r\n * If this throws, it blocks the user from being set.\r\n * @param onAbort - callback triggered if a later `beforeAuthStateChanged()`\r\n * callback throws, allowing you to undo any side effects.\r\n */\r\nfunction beforeAuthStateChanged(auth, callback, onAbort) {\r\n return getModularInstance(auth).beforeAuthStateChanged(callback, onAbort);\r\n}\r\n/**\r\n * Adds an observer for changes to the user's sign-in state.\r\n *\r\n * @remarks\r\n * To keep the old behavior, see {@link onIdTokenChanged}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param nextOrObserver - callback triggered on change.\r\n * @param error - Deprecated. This callback is never triggered. Errors\r\n * on signing in/out can be caught in promises returned from\r\n * sign-in/sign-out functions.\r\n * @param completed - Deprecated. This callback is never triggered.\r\n *\r\n * @public\r\n */\r\nfunction onAuthStateChanged(auth, nextOrObserver, error, completed) {\r\n return getModularInstance(auth).onAuthStateChanged(nextOrObserver, error, completed);\r\n}\r\n/**\r\n * Sets the current language to the default device/browser preference.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nfunction useDeviceLanguage(auth) {\r\n getModularInstance(auth).useDeviceLanguage();\r\n}\r\n/**\r\n * Asynchronously sets the provided user as {@link Auth.currentUser} on the\r\n * {@link Auth} instance.\r\n *\r\n * @remarks\r\n * A new instance copy of the user provided will be made and set as currentUser.\r\n *\r\n * This will trigger {@link onAuthStateChanged} and {@link onIdTokenChanged} listeners\r\n * like other sign in methods.\r\n *\r\n * The operation fails with an error if the user to be updated belongs to a different Firebase\r\n * project.\r\n *\r\n * This method is not supported by {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param user - The new {@link User}.\r\n *\r\n * @public\r\n */\r\nfunction updateCurrentUser(auth, user) {\r\n return getModularInstance(auth).updateCurrentUser(user);\r\n}\r\n/**\r\n * Signs out the current user.\r\n *\r\n * @remarks\r\n * This method is not supported by {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nfunction signOut(auth) {\r\n return getModularInstance(auth).signOut();\r\n}\r\n/**\r\n * Revokes the given access token. Currently only supports Apple OAuth access tokens.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param token - The Apple OAuth access token.\r\n *\r\n * @public\r\n */\r\nfunction revokeAccessToken(auth, token) {\r\n const authInternal = _castAuth(auth);\r\n return authInternal.revokeAccessToken(token);\r\n}\r\n/**\r\n * Deletes and signs out the user.\r\n *\r\n * @remarks\r\n * Important: this is a security-sensitive operation that requires the user to have recently\r\n * signed in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nasync function deleteUser(user) {\r\n return getModularInstance(user).delete();\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorSessionImpl {\r\n constructor(type, credential, user) {\r\n this.type = type;\r\n this.credential = credential;\r\n this.user = user;\r\n }\r\n static _fromIdtoken(idToken, user) {\r\n return new MultiFactorSessionImpl(\"enroll\" /* MultiFactorSessionType.ENROLL */, idToken, user);\r\n }\r\n static _fromMfaPendingCredential(mfaPendingCredential) {\r\n return new MultiFactorSessionImpl(\"signin\" /* MultiFactorSessionType.SIGN_IN */, mfaPendingCredential);\r\n }\r\n toJSON() {\r\n const key = this.type === \"enroll\" /* MultiFactorSessionType.ENROLL */\r\n ? 'idToken'\r\n : 'pendingCredential';\r\n return {\r\n multiFactorSession: {\r\n [key]: this.credential\r\n }\r\n };\r\n }\r\n static fromJSON(obj) {\r\n var _a, _b;\r\n if (obj === null || obj === void 0 ? void 0 : obj.multiFactorSession) {\r\n if ((_a = obj.multiFactorSession) === null || _a === void 0 ? void 0 : _a.pendingCredential) {\r\n return MultiFactorSessionImpl._fromMfaPendingCredential(obj.multiFactorSession.pendingCredential);\r\n }\r\n else if ((_b = obj.multiFactorSession) === null || _b === void 0 ? void 0 : _b.idToken) {\r\n return MultiFactorSessionImpl._fromIdtoken(obj.multiFactorSession.idToken);\r\n }\r\n }\r\n return null;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorResolverImpl {\r\n constructor(session, hints, signInResolver) {\r\n this.session = session;\r\n this.hints = hints;\r\n this.signInResolver = signInResolver;\r\n }\r\n /** @internal */\r\n static _fromError(authExtern, error) {\r\n const auth = _castAuth(authExtern);\r\n const serverResponse = error.customData._serverResponse;\r\n const hints = (serverResponse.mfaInfo || []).map(enrollment => MultiFactorInfoImpl._fromServerResponse(auth, enrollment));\r\n _assert(serverResponse.mfaPendingCredential, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const session = MultiFactorSessionImpl._fromMfaPendingCredential(serverResponse.mfaPendingCredential);\r\n return new MultiFactorResolverImpl(session, hints, async (assertion) => {\r\n const mfaResponse = await assertion._process(auth, session);\r\n // Clear out the unneeded fields from the old login response\r\n delete serverResponse.mfaInfo;\r\n delete serverResponse.mfaPendingCredential;\r\n // Use in the new token & refresh token in the old response\r\n const idTokenResponse = Object.assign(Object.assign({}, serverResponse), { idToken: mfaResponse.idToken, refreshToken: mfaResponse.refreshToken });\r\n // TODO: we should collapse this switch statement into UserCredentialImpl._forOperation and have it support the SIGN_IN case\r\n switch (error.operationType) {\r\n case \"signIn\" /* OperationType.SIGN_IN */:\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(auth, error.operationType, idTokenResponse);\r\n await auth._updateCurrentUser(userCredential.user);\r\n return userCredential;\r\n case \"reauthenticate\" /* OperationType.REAUTHENTICATE */:\r\n _assert(error.user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return UserCredentialImpl._forOperation(error.user, error.operationType, idTokenResponse);\r\n default:\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n });\r\n }\r\n async resolveSignIn(assertionExtern) {\r\n const assertion = assertionExtern;\r\n return this.signInResolver(assertion);\r\n }\r\n}\r\n/**\r\n * Provides a {@link MultiFactorResolver} suitable for completion of a\r\n * multi-factor flow.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param error - The {@link MultiFactorError} raised during a sign-in, or\r\n * reauthentication operation.\r\n *\r\n * @public\r\n */\r\nfunction getMultiFactorResolver(auth, error) {\r\n var _a;\r\n const authModular = getModularInstance(auth);\r\n const errorInternal = error;\r\n _assert(error.customData.operationType, authModular, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert((_a = errorInternal.customData._serverResponse) === null || _a === void 0 ? void 0 : _a.mfaPendingCredential, authModular, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return MultiFactorResolverImpl._fromError(authModular, errorInternal);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction startEnrollPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:start\" /* Endpoint.START_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeEnrollPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:finalize\" /* Endpoint.FINALIZE_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction startEnrollTotpMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:start\" /* Endpoint.START_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeEnrollTotpMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:finalize\" /* Endpoint.FINALIZE_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction withdrawMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:withdraw\" /* Endpoint.WITHDRAW_MFA */, _addTidIfNecessary(auth, request));\r\n}\n\nclass MultiFactorUserImpl {\r\n constructor(user) {\r\n this.user = user;\r\n this.enrolledFactors = [];\r\n user._onReload(userInfo => {\r\n if (userInfo.mfaInfo) {\r\n this.enrolledFactors = userInfo.mfaInfo.map(enrollment => MultiFactorInfoImpl._fromServerResponse(user.auth, enrollment));\r\n }\r\n });\r\n }\r\n static _fromUser(user) {\r\n return new MultiFactorUserImpl(user);\r\n }\r\n async getSession() {\r\n return MultiFactorSessionImpl._fromIdtoken(await this.user.getIdToken(), this.user);\r\n }\r\n async enroll(assertionExtern, displayName) {\r\n const assertion = assertionExtern;\r\n const session = (await this.getSession());\r\n const finalizeMfaResponse = await _logoutIfInvalidated(this.user, assertion._process(this.user.auth, session, displayName));\r\n // New tokens will be issued after enrollment of the new second factors.\r\n // They need to be updated on the user.\r\n await this.user._updateTokensIfNecessary(finalizeMfaResponse);\r\n // The user needs to be reloaded to get the new multi-factor information\r\n // from server. USER_RELOADED event will be triggered and `enrolledFactors`\r\n // will be updated.\r\n return this.user.reload();\r\n }\r\n async unenroll(infoOrUid) {\r\n const mfaEnrollmentId = typeof infoOrUid === 'string' ? infoOrUid : infoOrUid.uid;\r\n const idToken = await this.user.getIdToken();\r\n try {\r\n const idTokenResponse = await _logoutIfInvalidated(this.user, withdrawMfa(this.user.auth, {\r\n idToken,\r\n mfaEnrollmentId\r\n }));\r\n // Remove the second factor from the user's list.\r\n this.enrolledFactors = this.enrolledFactors.filter(({ uid }) => uid !== mfaEnrollmentId);\r\n // Depending on whether the backend decided to revoke the user's session,\r\n // the tokenResponse may be empty. If the tokens were not updated (and they\r\n // are now invalid), reloading the user will discover this and invalidate\r\n // the user's state accordingly.\r\n await this.user._updateTokensIfNecessary(idTokenResponse);\r\n await this.user.reload();\r\n }\r\n catch (e) {\r\n throw e;\r\n }\r\n }\r\n}\r\nconst multiFactorUserCache = new WeakMap();\r\n/**\r\n * The {@link MultiFactorUser} corresponding to the user.\r\n *\r\n * @remarks\r\n * This is used to access all multi-factor properties and operations related to the user.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nfunction multiFactor(user) {\r\n const userModular = getModularInstance(user);\r\n if (!multiFactorUserCache.has(userModular)) {\r\n multiFactorUserCache.set(userModular, MultiFactorUserImpl._fromUser(userModular));\r\n }\r\n return multiFactorUserCache.get(userModular);\r\n}\n\nconst STORAGE_AVAILABLE_KEY = '__sak';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// There are two different browser persistence types: local and session.\r\n// Both have the same implementation but use a different underlying storage\r\n// object.\r\nclass BrowserPersistenceClass {\r\n constructor(storageRetriever, type) {\r\n this.storageRetriever = storageRetriever;\r\n this.type = type;\r\n }\r\n _isAvailable() {\r\n try {\r\n if (!this.storage) {\r\n return Promise.resolve(false);\r\n }\r\n this.storage.setItem(STORAGE_AVAILABLE_KEY, '1');\r\n this.storage.removeItem(STORAGE_AVAILABLE_KEY);\r\n return Promise.resolve(true);\r\n }\r\n catch (_a) {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n _set(key, value) {\r\n this.storage.setItem(key, JSON.stringify(value));\r\n return Promise.resolve();\r\n }\r\n _get(key) {\r\n const json = this.storage.getItem(key);\r\n return Promise.resolve(json ? JSON.parse(json) : null);\r\n }\r\n _remove(key) {\r\n this.storage.removeItem(key);\r\n return Promise.resolve();\r\n }\r\n get storage() {\r\n return this.storageRetriever();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _iframeCannotSyncWebStorage() {\r\n const ua = getUA();\r\n return _isSafari(ua) || _isIOS(ua);\r\n}\r\n// The polling period in case events are not supported\r\nconst _POLLING_INTERVAL_MS$1 = 1000;\r\n// The IE 10 localStorage cross tab synchronization delay in milliseconds\r\nconst IE10_LOCAL_STORAGE_SYNC_DELAY = 10;\r\nclass BrowserLocalPersistence extends BrowserPersistenceClass {\r\n constructor() {\r\n super(() => window.localStorage, \"LOCAL\" /* PersistenceType.LOCAL */);\r\n this.boundEventHandler = (event, poll) => this.onStorageEvent(event, poll);\r\n this.listeners = {};\r\n this.localCache = {};\r\n // setTimeout return value is platform specific\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.pollTimer = null;\r\n // Safari or iOS browser and embedded in an iframe.\r\n this.safariLocalStorageNotSynced = _iframeCannotSyncWebStorage() && _isIframe();\r\n // Whether to use polling instead of depending on window events\r\n this.fallbackToPolling = _isMobileBrowser();\r\n this._shouldAllowMigration = true;\r\n }\r\n forAllChangedKeys(cb) {\r\n // Check all keys with listeners on them.\r\n for (const key of Object.keys(this.listeners)) {\r\n // Get value from localStorage.\r\n const newValue = this.storage.getItem(key);\r\n const oldValue = this.localCache[key];\r\n // If local map value does not match, trigger listener with storage event.\r\n // Differentiate this simulated event from the real storage event.\r\n if (newValue !== oldValue) {\r\n cb(key, oldValue, newValue);\r\n }\r\n }\r\n }\r\n onStorageEvent(event, poll = false) {\r\n // Key would be null in some situations, like when localStorage is cleared\r\n if (!event.key) {\r\n this.forAllChangedKeys((key, _oldValue, newValue) => {\r\n this.notifyListeners(key, newValue);\r\n });\r\n return;\r\n }\r\n const key = event.key;\r\n // Check the mechanism how this event was detected.\r\n // The first event will dictate the mechanism to be used.\r\n if (poll) {\r\n // Environment detects storage changes via polling.\r\n // Remove storage event listener to prevent possible event duplication.\r\n this.detachListener();\r\n }\r\n else {\r\n // Environment detects storage changes via storage event listener.\r\n // Remove polling listener to prevent possible event duplication.\r\n this.stopPolling();\r\n }\r\n // Safari embedded iframe. Storage event will trigger with the delta\r\n // changes but no changes will be applied to the iframe localStorage.\r\n if (this.safariLocalStorageNotSynced) {\r\n // Get current iframe page value.\r\n const storedValue = this.storage.getItem(key);\r\n // Value not synchronized, synchronize manually.\r\n if (event.newValue !== storedValue) {\r\n if (event.newValue !== null) {\r\n // Value changed from current value.\r\n this.storage.setItem(key, event.newValue);\r\n }\r\n else {\r\n // Current value deleted.\r\n this.storage.removeItem(key);\r\n }\r\n }\r\n else if (this.localCache[key] === event.newValue && !poll) {\r\n // Already detected and processed, do not trigger listeners again.\r\n return;\r\n }\r\n }\r\n const triggerListeners = () => {\r\n // Keep local map up to date in case storage event is triggered before\r\n // poll.\r\n const storedValue = this.storage.getItem(key);\r\n if (!poll && this.localCache[key] === storedValue) {\r\n // Real storage event which has already been detected, do nothing.\r\n // This seems to trigger in some IE browsers for some reason.\r\n return;\r\n }\r\n this.notifyListeners(key, storedValue);\r\n };\r\n const storedValue = this.storage.getItem(key);\r\n if (_isIE10() &&\r\n storedValue !== event.newValue &&\r\n event.newValue !== event.oldValue) {\r\n // IE 10 has this weird bug where a storage event would trigger with the\r\n // correct key, oldValue and newValue but localStorage.getItem(key) does\r\n // not yield the updated value until a few milliseconds. This ensures\r\n // this recovers from that situation.\r\n setTimeout(triggerListeners, IE10_LOCAL_STORAGE_SYNC_DELAY);\r\n }\r\n else {\r\n triggerListeners();\r\n }\r\n }\r\n notifyListeners(key, value) {\r\n this.localCache[key] = value;\r\n const listeners = this.listeners[key];\r\n if (listeners) {\r\n for (const listener of Array.from(listeners)) {\r\n listener(value ? JSON.parse(value) : value);\r\n }\r\n }\r\n }\r\n startPolling() {\r\n this.stopPolling();\r\n this.pollTimer = setInterval(() => {\r\n this.forAllChangedKeys((key, oldValue, newValue) => {\r\n this.onStorageEvent(new StorageEvent('storage', {\r\n key,\r\n oldValue,\r\n newValue\r\n }), \r\n /* poll */ true);\r\n });\r\n }, _POLLING_INTERVAL_MS$1);\r\n }\r\n stopPolling() {\r\n if (this.pollTimer) {\r\n clearInterval(this.pollTimer);\r\n this.pollTimer = null;\r\n }\r\n }\r\n attachListener() {\r\n window.addEventListener('storage', this.boundEventHandler);\r\n }\r\n detachListener() {\r\n window.removeEventListener('storage', this.boundEventHandler);\r\n }\r\n _addListener(key, listener) {\r\n if (Object.keys(this.listeners).length === 0) {\r\n // Whether browser can detect storage event when it had already been pushed to the background.\r\n // This may happen in some mobile browsers. A localStorage change in the foreground window\r\n // will not be detected in the background window via the storage event.\r\n // This was detected in iOS 7.x mobile browsers\r\n if (this.fallbackToPolling) {\r\n this.startPolling();\r\n }\r\n else {\r\n this.attachListener();\r\n }\r\n }\r\n if (!this.listeners[key]) {\r\n this.listeners[key] = new Set();\r\n // Populate the cache to avoid spuriously triggering on first poll.\r\n this.localCache[key] = this.storage.getItem(key);\r\n }\r\n this.listeners[key].add(listener);\r\n }\r\n _removeListener(key, listener) {\r\n if (this.listeners[key]) {\r\n this.listeners[key].delete(listener);\r\n if (this.listeners[key].size === 0) {\r\n delete this.listeners[key];\r\n }\r\n }\r\n if (Object.keys(this.listeners).length === 0) {\r\n this.detachListener();\r\n this.stopPolling();\r\n }\r\n }\r\n // Update local cache on base operations:\r\n async _set(key, value) {\r\n await super._set(key, value);\r\n this.localCache[key] = JSON.stringify(value);\r\n }\r\n async _get(key) {\r\n const value = await super._get(key);\r\n this.localCache[key] = JSON.stringify(value);\r\n return value;\r\n }\r\n async _remove(key) {\r\n await super._remove(key);\r\n delete this.localCache[key];\r\n }\r\n}\r\nBrowserLocalPersistence.type = 'LOCAL';\r\n/**\r\n * An implementation of {@link Persistence} of type `LOCAL` using `localStorage`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst browserLocalPersistence = BrowserLocalPersistence;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass BrowserSessionPersistence extends BrowserPersistenceClass {\r\n constructor() {\r\n super(() => window.sessionStorage, \"SESSION\" /* PersistenceType.SESSION */);\r\n }\r\n _addListener(_key, _listener) {\r\n // Listeners are not supported for session storage since it cannot be shared across windows\r\n return;\r\n }\r\n _removeListener(_key, _listener) {\r\n // Listeners are not supported for session storage since it cannot be shared across windows\r\n return;\r\n }\r\n}\r\nBrowserSessionPersistence.type = 'SESSION';\r\n/**\r\n * An implementation of {@link Persistence} of `SESSION` using `sessionStorage`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst browserSessionPersistence = BrowserSessionPersistence;\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Shim for Promise.allSettled, note the slightly different format of `fulfilled` vs `status`.\r\n *\r\n * @param promises - Array of promises to wait on.\r\n */\r\nfunction _allSettled(promises) {\r\n return Promise.all(promises.map(async (promise) => {\r\n try {\r\n const value = await promise;\r\n return {\r\n fulfilled: true,\r\n value\r\n };\r\n }\r\n catch (reason) {\r\n return {\r\n fulfilled: false,\r\n reason\r\n };\r\n }\r\n }));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface class for receiving messages.\r\n *\r\n */\r\nclass Receiver {\r\n constructor(eventTarget) {\r\n this.eventTarget = eventTarget;\r\n this.handlersMap = {};\r\n this.boundEventHandler = this.handleEvent.bind(this);\r\n }\r\n /**\r\n * Obtain an instance of a Receiver for a given event target, if none exists it will be created.\r\n *\r\n * @param eventTarget - An event target (such as window or self) through which the underlying\r\n * messages will be received.\r\n */\r\n static _getInstance(eventTarget) {\r\n // The results are stored in an array since objects can't be keys for other\r\n // objects. In addition, setting a unique property on an event target as a\r\n // hash map key may not be allowed due to CORS restrictions.\r\n const existingInstance = this.receivers.find(receiver => receiver.isListeningto(eventTarget));\r\n if (existingInstance) {\r\n return existingInstance;\r\n }\r\n const newInstance = new Receiver(eventTarget);\r\n this.receivers.push(newInstance);\r\n return newInstance;\r\n }\r\n isListeningto(eventTarget) {\r\n return this.eventTarget === eventTarget;\r\n }\r\n /**\r\n * Fans out a MessageEvent to the appropriate listeners.\r\n *\r\n * @remarks\r\n * Sends an {@link Status.ACK} upon receipt and a {@link Status.DONE} once all handlers have\r\n * finished processing.\r\n *\r\n * @param event - The MessageEvent.\r\n *\r\n */\r\n async handleEvent(event) {\r\n const messageEvent = event;\r\n const { eventId, eventType, data } = messageEvent.data;\r\n const handlers = this.handlersMap[eventType];\r\n if (!(handlers === null || handlers === void 0 ? void 0 : handlers.size)) {\r\n return;\r\n }\r\n messageEvent.ports[0].postMessage({\r\n status: \"ack\" /* _Status.ACK */,\r\n eventId,\r\n eventType\r\n });\r\n const promises = Array.from(handlers).map(async (handler) => handler(messageEvent.origin, data));\r\n const response = await _allSettled(promises);\r\n messageEvent.ports[0].postMessage({\r\n status: \"done\" /* _Status.DONE */,\r\n eventId,\r\n eventType,\r\n response\r\n });\r\n }\r\n /**\r\n * Subscribe an event handler for a particular event.\r\n *\r\n * @param eventType - Event name to subscribe to.\r\n * @param eventHandler - The event handler which should receive the events.\r\n *\r\n */\r\n _subscribe(eventType, eventHandler) {\r\n if (Object.keys(this.handlersMap).length === 0) {\r\n this.eventTarget.addEventListener('message', this.boundEventHandler);\r\n }\r\n if (!this.handlersMap[eventType]) {\r\n this.handlersMap[eventType] = new Set();\r\n }\r\n this.handlersMap[eventType].add(eventHandler);\r\n }\r\n /**\r\n * Unsubscribe an event handler from a particular event.\r\n *\r\n * @param eventType - Event name to unsubscribe from.\r\n * @param eventHandler - Optinoal event handler, if none provided, unsubscribe all handlers on this event.\r\n *\r\n */\r\n _unsubscribe(eventType, eventHandler) {\r\n if (this.handlersMap[eventType] && eventHandler) {\r\n this.handlersMap[eventType].delete(eventHandler);\r\n }\r\n if (!eventHandler || this.handlersMap[eventType].size === 0) {\r\n delete this.handlersMap[eventType];\r\n }\r\n if (Object.keys(this.handlersMap).length === 0) {\r\n this.eventTarget.removeEventListener('message', this.boundEventHandler);\r\n }\r\n }\r\n}\r\nReceiver.receivers = [];\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _generateEventId(prefix = '', digits = 10) {\r\n let random = '';\r\n for (let i = 0; i < digits; i++) {\r\n random += Math.floor(Math.random() * 10);\r\n }\r\n return prefix + random;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface for sending messages and waiting for a completion response.\r\n *\r\n */\r\nclass Sender {\r\n constructor(target) {\r\n this.target = target;\r\n this.handlers = new Set();\r\n }\r\n /**\r\n * Unsubscribe the handler and remove it from our tracking Set.\r\n *\r\n * @param handler - The handler to unsubscribe.\r\n */\r\n removeMessageHandler(handler) {\r\n if (handler.messageChannel) {\r\n handler.messageChannel.port1.removeEventListener('message', handler.onMessage);\r\n handler.messageChannel.port1.close();\r\n }\r\n this.handlers.delete(handler);\r\n }\r\n /**\r\n * Send a message to the Receiver located at {@link target}.\r\n *\r\n * @remarks\r\n * We'll first wait a bit for an ACK , if we get one we will wait significantly longer until the\r\n * receiver has had a chance to fully process the event.\r\n *\r\n * @param eventType - Type of event to send.\r\n * @param data - The payload of the event.\r\n * @param timeout - Timeout for waiting on an ACK from the receiver.\r\n *\r\n * @returns An array of settled promises from all the handlers that were listening on the receiver.\r\n */\r\n async _send(eventType, data, timeout = 50 /* _TimeoutDuration.ACK */) {\r\n const messageChannel = typeof MessageChannel !== 'undefined' ? new MessageChannel() : null;\r\n if (!messageChannel) {\r\n throw new Error(\"connection_unavailable\" /* _MessageError.CONNECTION_UNAVAILABLE */);\r\n }\r\n // Node timers and browser timers return fundamentally different types.\r\n // We don't actually care what the value is but TS won't accept unknown and\r\n // we can't cast properly in both environments.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let completionTimer;\r\n let handler;\r\n return new Promise((resolve, reject) => {\r\n const eventId = _generateEventId('', 20);\r\n messageChannel.port1.start();\r\n const ackTimer = setTimeout(() => {\r\n reject(new Error(\"unsupported_event\" /* _MessageError.UNSUPPORTED_EVENT */));\r\n }, timeout);\r\n handler = {\r\n messageChannel,\r\n onMessage(event) {\r\n const messageEvent = event;\r\n if (messageEvent.data.eventId !== eventId) {\r\n return;\r\n }\r\n switch (messageEvent.data.status) {\r\n case \"ack\" /* _Status.ACK */:\r\n // The receiver should ACK first.\r\n clearTimeout(ackTimer);\r\n completionTimer = setTimeout(() => {\r\n reject(new Error(\"timeout\" /* _MessageError.TIMEOUT */));\r\n }, 3000 /* _TimeoutDuration.COMPLETION */);\r\n break;\r\n case \"done\" /* _Status.DONE */:\r\n // Once the receiver's handlers are finished we will get the results.\r\n clearTimeout(completionTimer);\r\n resolve(messageEvent.data.response);\r\n break;\r\n default:\r\n clearTimeout(ackTimer);\r\n clearTimeout(completionTimer);\r\n reject(new Error(\"invalid_response\" /* _MessageError.INVALID_RESPONSE */));\r\n break;\r\n }\r\n }\r\n };\r\n this.handlers.add(handler);\r\n messageChannel.port1.addEventListener('message', handler.onMessage);\r\n this.target.postMessage({\r\n eventType,\r\n eventId,\r\n data\r\n }, [messageChannel.port2]);\r\n }).finally(() => {\r\n if (handler) {\r\n this.removeMessageHandler(handler);\r\n }\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Lazy accessor for window, since the compat layer won't tree shake this out,\r\n * we need to make sure not to mess with window unless we have to\r\n */\r\nfunction _window() {\r\n return window;\r\n}\r\nfunction _setWindowLocation(url) {\r\n _window().location.href = url;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _isWorker() {\r\n return (typeof _window()['WorkerGlobalScope'] !== 'undefined' &&\r\n typeof _window()['importScripts'] === 'function');\r\n}\r\nasync function _getActiveServiceWorker() {\r\n if (!(navigator === null || navigator === void 0 ? void 0 : navigator.serviceWorker)) {\r\n return null;\r\n }\r\n try {\r\n const registration = await navigator.serviceWorker.ready;\r\n return registration.active;\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n}\r\nfunction _getServiceWorkerController() {\r\n var _a;\r\n return ((_a = navigator === null || navigator === void 0 ? void 0 : navigator.serviceWorker) === null || _a === void 0 ? void 0 : _a.controller) || null;\r\n}\r\nfunction _getWorkerGlobalScope() {\r\n return _isWorker() ? self : null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DB_NAME = 'firebaseLocalStorageDb';\r\nconst DB_VERSION = 1;\r\nconst DB_OBJECTSTORE_NAME = 'firebaseLocalStorage';\r\nconst DB_DATA_KEYPATH = 'fbase_key';\r\n/**\r\n * Promise wrapper for IDBRequest\r\n *\r\n * Unfortunately we can't cleanly extend Promise since promises are not callable in ES6\r\n *\r\n */\r\nclass DBPromise {\r\n constructor(request) {\r\n this.request = request;\r\n }\r\n toPromise() {\r\n return new Promise((resolve, reject) => {\r\n this.request.addEventListener('success', () => {\r\n resolve(this.request.result);\r\n });\r\n this.request.addEventListener('error', () => {\r\n reject(this.request.error);\r\n });\r\n });\r\n }\r\n}\r\nfunction getObjectStore(db, isReadWrite) {\r\n return db\r\n .transaction([DB_OBJECTSTORE_NAME], isReadWrite ? 'readwrite' : 'readonly')\r\n .objectStore(DB_OBJECTSTORE_NAME);\r\n}\r\nfunction _deleteDatabase() {\r\n const request = indexedDB.deleteDatabase(DB_NAME);\r\n return new DBPromise(request).toPromise();\r\n}\r\nfunction _openDatabase() {\r\n const request = indexedDB.open(DB_NAME, DB_VERSION);\r\n return new Promise((resolve, reject) => {\r\n request.addEventListener('error', () => {\r\n reject(request.error);\r\n });\r\n request.addEventListener('upgradeneeded', () => {\r\n const db = request.result;\r\n try {\r\n db.createObjectStore(DB_OBJECTSTORE_NAME, { keyPath: DB_DATA_KEYPATH });\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n });\r\n request.addEventListener('success', async () => {\r\n const db = request.result;\r\n // Strange bug that occurs in Firefox when multiple tabs are opened at the\r\n // same time. The only way to recover seems to be deleting the database\r\n // and re-initializing it.\r\n // https://github.com/firebase/firebase-js-sdk/issues/634\r\n if (!db.objectStoreNames.contains(DB_OBJECTSTORE_NAME)) {\r\n // Need to close the database or else you get a `blocked` event\r\n db.close();\r\n await _deleteDatabase();\r\n resolve(await _openDatabase());\r\n }\r\n else {\r\n resolve(db);\r\n }\r\n });\r\n });\r\n}\r\nasync function _putObject(db, key, value) {\r\n const request = getObjectStore(db, true).put({\r\n [DB_DATA_KEYPATH]: key,\r\n value\r\n });\r\n return new DBPromise(request).toPromise();\r\n}\r\nasync function getObject(db, key) {\r\n const request = getObjectStore(db, false).get(key);\r\n const data = await new DBPromise(request).toPromise();\r\n return data === undefined ? null : data.value;\r\n}\r\nfunction _deleteObject(db, key) {\r\n const request = getObjectStore(db, true).delete(key);\r\n return new DBPromise(request).toPromise();\r\n}\r\nconst _POLLING_INTERVAL_MS = 800;\r\nconst _TRANSACTION_RETRY_COUNT = 3;\r\nclass IndexedDBLocalPersistence {\r\n constructor() {\r\n this.type = \"LOCAL\" /* PersistenceType.LOCAL */;\r\n this._shouldAllowMigration = true;\r\n this.listeners = {};\r\n this.localCache = {};\r\n // setTimeout return value is platform specific\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.pollTimer = null;\r\n this.pendingWrites = 0;\r\n this.receiver = null;\r\n this.sender = null;\r\n this.serviceWorkerReceiverAvailable = false;\r\n this.activeServiceWorker = null;\r\n // Fire & forget the service worker registration as it may never resolve\r\n this._workerInitializationPromise =\r\n this.initializeServiceWorkerMessaging().then(() => { }, () => { });\r\n }\r\n async _openDb() {\r\n if (this.db) {\r\n return this.db;\r\n }\r\n this.db = await _openDatabase();\r\n return this.db;\r\n }\r\n async _withRetries(op) {\r\n let numAttempts = 0;\r\n while (true) {\r\n try {\r\n const db = await this._openDb();\r\n return await op(db);\r\n }\r\n catch (e) {\r\n if (numAttempts++ > _TRANSACTION_RETRY_COUNT) {\r\n throw e;\r\n }\r\n if (this.db) {\r\n this.db.close();\r\n this.db = undefined;\r\n }\r\n // TODO: consider adding exponential backoff\r\n }\r\n }\r\n }\r\n /**\r\n * IndexedDB events do not propagate from the main window to the worker context. We rely on a\r\n * postMessage interface to send these events to the worker ourselves.\r\n */\r\n async initializeServiceWorkerMessaging() {\r\n return _isWorker() ? this.initializeReceiver() : this.initializeSender();\r\n }\r\n /**\r\n * As the worker we should listen to events from the main window.\r\n */\r\n async initializeReceiver() {\r\n this.receiver = Receiver._getInstance(_getWorkerGlobalScope());\r\n // Refresh from persistence if we receive a KeyChanged message.\r\n this.receiver._subscribe(\"keyChanged\" /* _EventType.KEY_CHANGED */, async (_origin, data) => {\r\n const keys = await this._poll();\r\n return {\r\n keyProcessed: keys.includes(data.key)\r\n };\r\n });\r\n // Let the sender know that we are listening so they give us more timeout.\r\n this.receiver._subscribe(\"ping\" /* _EventType.PING */, async (_origin, _data) => {\r\n return [\"keyChanged\" /* _EventType.KEY_CHANGED */];\r\n });\r\n }\r\n /**\r\n * As the main window, we should let the worker know when keys change (set and remove).\r\n *\r\n * @remarks\r\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/ready | ServiceWorkerContainer.ready}\r\n * may not resolve.\r\n */\r\n async initializeSender() {\r\n var _a, _b;\r\n // Check to see if there's an active service worker.\r\n this.activeServiceWorker = await _getActiveServiceWorker();\r\n if (!this.activeServiceWorker) {\r\n return;\r\n }\r\n this.sender = new Sender(this.activeServiceWorker);\r\n // Ping the service worker to check what events they can handle.\r\n const results = await this.sender._send(\"ping\" /* _EventType.PING */, {}, 800 /* _TimeoutDuration.LONG_ACK */);\r\n if (!results) {\r\n return;\r\n }\r\n if (((_a = results[0]) === null || _a === void 0 ? void 0 : _a.fulfilled) &&\r\n ((_b = results[0]) === null || _b === void 0 ? void 0 : _b.value.includes(\"keyChanged\" /* _EventType.KEY_CHANGED */))) {\r\n this.serviceWorkerReceiverAvailable = true;\r\n }\r\n }\r\n /**\r\n * Let the worker know about a changed key, the exact key doesn't technically matter since the\r\n * worker will just trigger a full sync anyway.\r\n *\r\n * @remarks\r\n * For now, we only support one service worker per page.\r\n *\r\n * @param key - Storage key which changed.\r\n */\r\n async notifyServiceWorker(key) {\r\n if (!this.sender ||\r\n !this.activeServiceWorker ||\r\n _getServiceWorkerController() !== this.activeServiceWorker) {\r\n return;\r\n }\r\n try {\r\n await this.sender._send(\"keyChanged\" /* _EventType.KEY_CHANGED */, { key }, \r\n // Use long timeout if receiver has previously responded to a ping from us.\r\n this.serviceWorkerReceiverAvailable\r\n ? 800 /* _TimeoutDuration.LONG_ACK */\r\n : 50 /* _TimeoutDuration.ACK */);\r\n }\r\n catch (_a) {\r\n // This is a best effort approach. Ignore errors.\r\n }\r\n }\r\n async _isAvailable() {\r\n try {\r\n if (!indexedDB) {\r\n return false;\r\n }\r\n const db = await _openDatabase();\r\n await _putObject(db, STORAGE_AVAILABLE_KEY, '1');\r\n await _deleteObject(db, STORAGE_AVAILABLE_KEY);\r\n return true;\r\n }\r\n catch (_a) { }\r\n return false;\r\n }\r\n async _withPendingWrite(write) {\r\n this.pendingWrites++;\r\n try {\r\n await write();\r\n }\r\n finally {\r\n this.pendingWrites--;\r\n }\r\n }\r\n async _set(key, value) {\r\n return this._withPendingWrite(async () => {\r\n await this._withRetries((db) => _putObject(db, key, value));\r\n this.localCache[key] = value;\r\n return this.notifyServiceWorker(key);\r\n });\r\n }\r\n async _get(key) {\r\n const obj = (await this._withRetries((db) => getObject(db, key)));\r\n this.localCache[key] = obj;\r\n return obj;\r\n }\r\n async _remove(key) {\r\n return this._withPendingWrite(async () => {\r\n await this._withRetries((db) => _deleteObject(db, key));\r\n delete this.localCache[key];\r\n return this.notifyServiceWorker(key);\r\n });\r\n }\r\n async _poll() {\r\n // TODO: check if we need to fallback if getAll is not supported\r\n const result = await this._withRetries((db) => {\r\n const getAllRequest = getObjectStore(db, false).getAll();\r\n return new DBPromise(getAllRequest).toPromise();\r\n });\r\n if (!result) {\r\n return [];\r\n }\r\n // If we have pending writes in progress abort, we'll get picked up on the next poll\r\n if (this.pendingWrites !== 0) {\r\n return [];\r\n }\r\n const keys = [];\r\n const keysInResult = new Set();\r\n if (result.length !== 0) {\r\n for (const { fbase_key: key, value } of result) {\r\n keysInResult.add(key);\r\n if (JSON.stringify(this.localCache[key]) !== JSON.stringify(value)) {\r\n this.notifyListeners(key, value);\r\n keys.push(key);\r\n }\r\n }\r\n }\r\n for (const localKey of Object.keys(this.localCache)) {\r\n if (this.localCache[localKey] && !keysInResult.has(localKey)) {\r\n // Deleted\r\n this.notifyListeners(localKey, null);\r\n keys.push(localKey);\r\n }\r\n }\r\n return keys;\r\n }\r\n notifyListeners(key, newValue) {\r\n this.localCache[key] = newValue;\r\n const listeners = this.listeners[key];\r\n if (listeners) {\r\n for (const listener of Array.from(listeners)) {\r\n listener(newValue);\r\n }\r\n }\r\n }\r\n startPolling() {\r\n this.stopPolling();\r\n this.pollTimer = setInterval(async () => this._poll(), _POLLING_INTERVAL_MS);\r\n }\r\n stopPolling() {\r\n if (this.pollTimer) {\r\n clearInterval(this.pollTimer);\r\n this.pollTimer = null;\r\n }\r\n }\r\n _addListener(key, listener) {\r\n if (Object.keys(this.listeners).length === 0) {\r\n this.startPolling();\r\n }\r\n if (!this.listeners[key]) {\r\n this.listeners[key] = new Set();\r\n // Populate the cache to avoid spuriously triggering on first poll.\r\n void this._get(key); // This can happen in the background async and we can return immediately.\r\n }\r\n this.listeners[key].add(listener);\r\n }\r\n _removeListener(key, listener) {\r\n if (this.listeners[key]) {\r\n this.listeners[key].delete(listener);\r\n if (this.listeners[key].size === 0) {\r\n delete this.listeners[key];\r\n }\r\n }\r\n if (Object.keys(this.listeners).length === 0) {\r\n this.stopPolling();\r\n }\r\n }\r\n}\r\nIndexedDBLocalPersistence.type = 'LOCAL';\r\n/**\r\n * An implementation of {@link Persistence} of type `LOCAL` using `indexedDB`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst indexedDBLocalPersistence = IndexedDBLocalPersistence;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction startSignInPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaSignIn:start\" /* Endpoint.START_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeSignInPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaSignIn:finalize\" /* Endpoint.FINALIZE_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeSignInTotpMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaSignIn:finalize\" /* Endpoint.FINALIZE_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _SOLVE_TIME_MS = 500;\r\nconst _EXPIRATION_TIME_MS = 60000;\r\nconst _WIDGET_ID_START = 1000000000000;\r\nclass MockReCaptcha {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.counter = _WIDGET_ID_START;\r\n this._widgets = new Map();\r\n }\r\n render(container, parameters) {\r\n const id = this.counter;\r\n this._widgets.set(id, new MockWidget(container, this.auth.name, parameters || {}));\r\n this.counter++;\r\n return id;\r\n }\r\n reset(optWidgetId) {\r\n var _a;\r\n const id = optWidgetId || _WIDGET_ID_START;\r\n void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.delete());\r\n this._widgets.delete(id);\r\n }\r\n getResponse(optWidgetId) {\r\n var _a;\r\n const id = optWidgetId || _WIDGET_ID_START;\r\n return ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.getResponse()) || '';\r\n }\r\n async execute(optWidgetId) {\r\n var _a;\r\n const id = optWidgetId || _WIDGET_ID_START;\r\n void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.execute());\r\n return '';\r\n }\r\n}\r\nclass MockWidget {\r\n constructor(containerOrId, appName, params) {\r\n this.params = params;\r\n this.timerId = null;\r\n this.deleted = false;\r\n this.responseToken = null;\r\n this.clickHandler = () => {\r\n this.execute();\r\n };\r\n const container = typeof containerOrId === 'string'\r\n ? document.getElementById(containerOrId)\r\n : containerOrId;\r\n _assert(container, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */, { appName });\r\n this.container = container;\r\n this.isVisible = this.params.size !== 'invisible';\r\n if (this.isVisible) {\r\n this.execute();\r\n }\r\n else {\r\n this.container.addEventListener('click', this.clickHandler);\r\n }\r\n }\r\n getResponse() {\r\n this.checkIfDeleted();\r\n return this.responseToken;\r\n }\r\n delete() {\r\n this.checkIfDeleted();\r\n this.deleted = true;\r\n if (this.timerId) {\r\n clearTimeout(this.timerId);\r\n this.timerId = null;\r\n }\r\n this.container.removeEventListener('click', this.clickHandler);\r\n }\r\n execute() {\r\n this.checkIfDeleted();\r\n if (this.timerId) {\r\n return;\r\n }\r\n this.timerId = window.setTimeout(() => {\r\n this.responseToken = generateRandomAlphaNumericString(50);\r\n const { callback, 'expired-callback': expiredCallback } = this.params;\r\n if (callback) {\r\n try {\r\n callback(this.responseToken);\r\n }\r\n catch (e) { }\r\n }\r\n this.timerId = window.setTimeout(() => {\r\n this.timerId = null;\r\n this.responseToken = null;\r\n if (expiredCallback) {\r\n try {\r\n expiredCallback();\r\n }\r\n catch (e) { }\r\n }\r\n if (this.isVisible) {\r\n this.execute();\r\n }\r\n }, _EXPIRATION_TIME_MS);\r\n }, _SOLVE_TIME_MS);\r\n }\r\n checkIfDeleted() {\r\n if (this.deleted) {\r\n throw new Error('reCAPTCHA mock was already deleted!');\r\n }\r\n }\r\n}\r\nfunction generateRandomAlphaNumericString(len) {\r\n const chars = [];\r\n const allowedChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n for (let i = 0; i < len; i++) {\r\n chars.push(allowedChars.charAt(Math.floor(Math.random() * allowedChars.length)));\r\n }\r\n return chars.join('');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// ReCaptcha will load using the same callback, so the callback function needs\r\n// to be kept around\r\nconst _JSLOAD_CALLBACK = _generateCallbackName('rcb');\r\nconst NETWORK_TIMEOUT_DELAY = new Delay(30000, 60000);\r\n/**\r\n * Loader for the GReCaptcha library. There should only ever be one of this.\r\n */\r\nclass ReCaptchaLoaderImpl {\r\n constructor() {\r\n var _a;\r\n this.hostLanguage = '';\r\n this.counter = 0;\r\n /**\r\n * Check for `render()` method. `window.grecaptcha` will exist if the Enterprise\r\n * version of the ReCAPTCHA script was loaded by someone else (e.g. App Check) but\r\n * `window.grecaptcha.render()` will not. Another load will add it.\r\n */\r\n this.librarySeparatelyLoaded = !!((_a = _window().grecaptcha) === null || _a === void 0 ? void 0 : _a.render);\r\n }\r\n load(auth, hl = '') {\r\n _assert(isHostLanguageValid(hl), auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n if (this.shouldResolveImmediately(hl) && isV2(_window().grecaptcha)) {\r\n return Promise.resolve(_window().grecaptcha);\r\n }\r\n return new Promise((resolve, reject) => {\r\n const networkTimeout = _window().setTimeout(() => {\r\n reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n }, NETWORK_TIMEOUT_DELAY.get());\r\n _window()[_JSLOAD_CALLBACK] = () => {\r\n _window().clearTimeout(networkTimeout);\r\n delete _window()[_JSLOAD_CALLBACK];\r\n const recaptcha = _window().grecaptcha;\r\n if (!recaptcha || !isV2(recaptcha)) {\r\n reject(_createError(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */));\r\n return;\r\n }\r\n // Wrap the greptcha render function so that we know if the developer has\r\n // called it separately\r\n const render = recaptcha.render;\r\n recaptcha.render = (container, params) => {\r\n const widgetId = render(container, params);\r\n this.counter++;\r\n return widgetId;\r\n };\r\n this.hostLanguage = hl;\r\n resolve(recaptcha);\r\n };\r\n const url = `${_recaptchaV2ScriptUrl()}?${querystring({\r\n onload: _JSLOAD_CALLBACK,\r\n render: 'explicit',\r\n hl\r\n })}`;\r\n _loadJS(url).catch(() => {\r\n clearTimeout(networkTimeout);\r\n reject(_createError(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */));\r\n });\r\n });\r\n }\r\n clearedOneInstance() {\r\n this.counter--;\r\n }\r\n shouldResolveImmediately(hl) {\r\n var _a;\r\n // We can resolve immediately if:\r\n // • grecaptcha is already defined AND (\r\n // 1. the requested language codes are the same OR\r\n // 2. there exists already a ReCaptcha on the page\r\n // 3. the library was already loaded by the app\r\n // In cases (2) and (3), we _can't_ reload as it would break the recaptchas\r\n // that are already in the page\r\n return (!!((_a = _window().grecaptcha) === null || _a === void 0 ? void 0 : _a.render) &&\r\n (hl === this.hostLanguage ||\r\n this.counter > 0 ||\r\n this.librarySeparatelyLoaded));\r\n }\r\n}\r\nfunction isHostLanguageValid(hl) {\r\n return hl.length <= 6 && /^\\s*[a-zA-Z0-9\\-]*\\s*$/.test(hl);\r\n}\r\nclass MockReCaptchaLoaderImpl {\r\n async load(auth) {\r\n return new MockReCaptcha(auth);\r\n }\r\n clearedOneInstance() { }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst RECAPTCHA_VERIFIER_TYPE = 'recaptcha';\r\nconst DEFAULT_PARAMS = {\r\n theme: 'light',\r\n type: 'image'\r\n};\r\n/**\r\n * An {@link https://www.google.com/recaptcha/ | reCAPTCHA}-based application verifier.\r\n *\r\n * @remarks\r\n * `RecaptchaVerifier` does not work in a Node.js environment.\r\n *\r\n * @public\r\n */\r\nclass RecaptchaVerifier {\r\n /**\r\n * @param authExtern - The corresponding Firebase {@link Auth} instance.\r\n *\r\n * @param containerOrId - The reCAPTCHA container parameter.\r\n *\r\n * @remarks\r\n * This has different meaning depending on whether the reCAPTCHA is hidden or visible. For a\r\n * visible reCAPTCHA the container must be empty. If a string is used, it has to correspond to\r\n * an element ID. The corresponding element must also must be in the DOM at the time of\r\n * initialization.\r\n *\r\n * @param parameters - The optional reCAPTCHA parameters.\r\n *\r\n * @remarks\r\n * Check the reCAPTCHA docs for a comprehensive list. All parameters are accepted except for\r\n * the sitekey. Firebase Auth backend provisions a reCAPTCHA for each project and will\r\n * configure this upon rendering. For an invisible reCAPTCHA, a size key must have the value\r\n * 'invisible'.\r\n */\r\n constructor(authExtern, containerOrId, parameters = Object.assign({}, DEFAULT_PARAMS)) {\r\n this.parameters = parameters;\r\n /**\r\n * The application verifier type.\r\n *\r\n * @remarks\r\n * For a reCAPTCHA verifier, this is 'recaptcha'.\r\n */\r\n this.type = RECAPTCHA_VERIFIER_TYPE;\r\n this.destroyed = false;\r\n this.widgetId = null;\r\n this.tokenChangeListeners = new Set();\r\n this.renderPromise = null;\r\n this.recaptcha = null;\r\n this.auth = _castAuth(authExtern);\r\n this.isInvisible = this.parameters.size === 'invisible';\r\n _assert(typeof document !== 'undefined', this.auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n const container = typeof containerOrId === 'string'\r\n ? document.getElementById(containerOrId)\r\n : containerOrId;\r\n _assert(container, this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n this.container = container;\r\n this.parameters.callback = this.makeTokenCallback(this.parameters.callback);\r\n this._recaptchaLoader = this.auth.settings.appVerificationDisabledForTesting\r\n ? new MockReCaptchaLoaderImpl()\r\n : new ReCaptchaLoaderImpl();\r\n this.validateStartingState();\r\n // TODO: Figure out if sdk version is needed\r\n }\r\n /**\r\n * Waits for the user to solve the reCAPTCHA and resolves with the reCAPTCHA token.\r\n *\r\n * @returns A Promise for the reCAPTCHA token.\r\n */\r\n async verify() {\r\n this.assertNotDestroyed();\r\n const id = await this.render();\r\n const recaptcha = this.getAssertedRecaptcha();\r\n const response = recaptcha.getResponse(id);\r\n if (response) {\r\n return response;\r\n }\r\n return new Promise(resolve => {\r\n const tokenChange = (token) => {\r\n if (!token) {\r\n return; // Ignore token expirations.\r\n }\r\n this.tokenChangeListeners.delete(tokenChange);\r\n resolve(token);\r\n };\r\n this.tokenChangeListeners.add(tokenChange);\r\n if (this.isInvisible) {\r\n recaptcha.execute(id);\r\n }\r\n });\r\n }\r\n /**\r\n * Renders the reCAPTCHA widget on the page.\r\n *\r\n * @returns A Promise that resolves with the reCAPTCHA widget ID.\r\n */\r\n render() {\r\n try {\r\n this.assertNotDestroyed();\r\n }\r\n catch (e) {\r\n // This method returns a promise. Since it's not async (we want to return the\r\n // _same_ promise if rendering is still occurring), the API surface should\r\n // reject with the error rather than just throw\r\n return Promise.reject(e);\r\n }\r\n if (this.renderPromise) {\r\n return this.renderPromise;\r\n }\r\n this.renderPromise = this.makeRenderPromise().catch(e => {\r\n this.renderPromise = null;\r\n throw e;\r\n });\r\n return this.renderPromise;\r\n }\r\n /** @internal */\r\n _reset() {\r\n this.assertNotDestroyed();\r\n if (this.widgetId !== null) {\r\n this.getAssertedRecaptcha().reset(this.widgetId);\r\n }\r\n }\r\n /**\r\n * Clears the reCAPTCHA widget from the page and destroys the instance.\r\n */\r\n clear() {\r\n this.assertNotDestroyed();\r\n this.destroyed = true;\r\n this._recaptchaLoader.clearedOneInstance();\r\n if (!this.isInvisible) {\r\n this.container.childNodes.forEach(node => {\r\n this.container.removeChild(node);\r\n });\r\n }\r\n }\r\n validateStartingState() {\r\n _assert(!this.parameters.sitekey, this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert(this.isInvisible || !this.container.hasChildNodes(), this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert(typeof document !== 'undefined', this.auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n }\r\n makeTokenCallback(existing) {\r\n return token => {\r\n this.tokenChangeListeners.forEach(listener => listener(token));\r\n if (typeof existing === 'function') {\r\n existing(token);\r\n }\r\n else if (typeof existing === 'string') {\r\n const globalFunc = _window()[existing];\r\n if (typeof globalFunc === 'function') {\r\n globalFunc(token);\r\n }\r\n }\r\n };\r\n }\r\n assertNotDestroyed() {\r\n _assert(!this.destroyed, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n async makeRenderPromise() {\r\n await this.init();\r\n if (!this.widgetId) {\r\n let container = this.container;\r\n if (!this.isInvisible) {\r\n const guaranteedEmpty = document.createElement('div');\r\n container.appendChild(guaranteedEmpty);\r\n container = guaranteedEmpty;\r\n }\r\n this.widgetId = this.getAssertedRecaptcha().render(container, this.parameters);\r\n }\r\n return this.widgetId;\r\n }\r\n async init() {\r\n _assert(_isHttpOrHttps() && !_isWorker(), this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n await domReady();\r\n this.recaptcha = await this._recaptchaLoader.load(this.auth, this.auth.languageCode || undefined);\r\n const siteKey = await getRecaptchaParams(this.auth);\r\n _assert(siteKey, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n this.parameters.sitekey = siteKey;\r\n }\r\n getAssertedRecaptcha() {\r\n _assert(this.recaptcha, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return this.recaptcha;\r\n }\r\n}\r\nfunction domReady() {\r\n let resolver = null;\r\n return new Promise(resolve => {\r\n if (document.readyState === 'complete') {\r\n resolve();\r\n return;\r\n }\r\n // Document not ready, wait for load before resolving.\r\n // Save resolver, so we can remove listener in case it was externally\r\n // cancelled.\r\n resolver = () => resolve();\r\n window.addEventListener('load', resolver);\r\n }).catch(e => {\r\n if (resolver) {\r\n window.removeEventListener('load', resolver);\r\n }\r\n throw e;\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ConfirmationResultImpl {\r\n constructor(verificationId, onConfirmation) {\r\n this.verificationId = verificationId;\r\n this.onConfirmation = onConfirmation;\r\n }\r\n confirm(verificationCode) {\r\n const authCredential = PhoneAuthCredential._fromVerification(this.verificationId, verificationCode);\r\n return this.onConfirmation(authCredential);\r\n }\r\n}\r\n/**\r\n * Asynchronously signs in using a phone number.\r\n *\r\n * @remarks\r\n * This method sends a code via SMS to the given\r\n * phone number, and returns a {@link ConfirmationResult}. After the user\r\n * provides the code sent to their phone, call {@link ConfirmationResult.confirm}\r\n * with the code to sign the user in.\r\n *\r\n * For abuse prevention, this method also requires a {@link ApplicationVerifier}.\r\n * This SDK includes a reCAPTCHA-based implementation, {@link RecaptchaVerifier}.\r\n * This function can work on other platforms that do not support the\r\n * {@link RecaptchaVerifier} (like React Native), but you need to use a\r\n * third-party {@link ApplicationVerifier} implementation.\r\n *\r\n * This method does not work in a Node.js environment or with {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container');\r\n * const confirmationResult = await signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n * // Obtain a verificationCode from the user.\r\n * const credential = await confirmationResult.confirm(verificationCode);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function signInWithPhoneNumber(auth, phoneNumber, appVerifier) {\r\n if (_isFirebaseServerApp(auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\r\n }\r\n const authInternal = _castAuth(auth);\r\n const verificationId = await _verifyPhoneNumber(authInternal, phoneNumber, getModularInstance(appVerifier));\r\n return new ConfirmationResultImpl(verificationId, cred => signInWithCredential(authInternal, cred));\r\n}\r\n/**\r\n * Links the user account with the given phone number.\r\n *\r\n * @remarks\r\n * This method does not work in a Node.js environment.\r\n *\r\n * @param user - The user.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function linkWithPhoneNumber(user, phoneNumber, appVerifier) {\r\n const userInternal = getModularInstance(user);\r\n await _assertLinkedStatus(false, userInternal, \"phone\" /* ProviderId.PHONE */);\r\n const verificationId = await _verifyPhoneNumber(userInternal.auth, phoneNumber, getModularInstance(appVerifier));\r\n return new ConfirmationResultImpl(verificationId, cred => linkWithCredential(userInternal, cred));\r\n}\r\n/**\r\n * Re-authenticates a user using a fresh phone credential.\r\n *\r\n * @remarks\r\n * Use before operations such as {@link updatePassword} that require tokens from recent sign-in attempts.\r\n *\r\n * This method does not work in a Node.js environment or on any {@link User} signed in by\r\n * {@link Auth} instances created with a {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @param user - The user.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithPhoneNumber(user, phoneNumber, appVerifier) {\r\n const userInternal = getModularInstance(user);\r\n if (_isFirebaseServerApp(userInternal.auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(userInternal.auth));\r\n }\r\n const verificationId = await _verifyPhoneNumber(userInternal.auth, phoneNumber, getModularInstance(appVerifier));\r\n return new ConfirmationResultImpl(verificationId, cred => reauthenticateWithCredential(userInternal, cred));\r\n}\r\n/**\r\n * Returns a verification ID to be used in conjunction with the SMS code that is sent.\r\n *\r\n */\r\nasync function _verifyPhoneNumber(auth, options, verifier) {\r\n var _a;\r\n const recaptchaToken = await verifier.verify();\r\n try {\r\n _assert(typeof recaptchaToken === 'string', auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert(verifier.type === RECAPTCHA_VERIFIER_TYPE, auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n let phoneInfoOptions;\r\n if (typeof options === 'string') {\r\n phoneInfoOptions = {\r\n phoneNumber: options\r\n };\r\n }\r\n else {\r\n phoneInfoOptions = options;\r\n }\r\n if ('session' in phoneInfoOptions) {\r\n const session = phoneInfoOptions.session;\r\n if ('phoneNumber' in phoneInfoOptions) {\r\n _assert(session.type === \"enroll\" /* MultiFactorSessionType.ENROLL */, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const response = await startEnrollPhoneMfa(auth, {\r\n idToken: session.credential,\r\n phoneEnrollmentInfo: {\r\n phoneNumber: phoneInfoOptions.phoneNumber,\r\n recaptchaToken\r\n }\r\n });\r\n return response.phoneSessionInfo.sessionInfo;\r\n }\r\n else {\r\n _assert(session.type === \"signin\" /* MultiFactorSessionType.SIGN_IN */, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const mfaEnrollmentId = ((_a = phoneInfoOptions.multiFactorHint) === null || _a === void 0 ? void 0 : _a.uid) ||\r\n phoneInfoOptions.multiFactorUid;\r\n _assert(mfaEnrollmentId, auth, \"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */);\r\n const response = await startSignInPhoneMfa(auth, {\r\n mfaPendingCredential: session.credential,\r\n mfaEnrollmentId,\r\n phoneSignInInfo: {\r\n recaptchaToken\r\n }\r\n });\r\n return response.phoneResponseInfo.sessionInfo;\r\n }\r\n }\r\n else {\r\n const { sessionInfo } = await sendPhoneVerificationCode(auth, {\r\n phoneNumber: phoneInfoOptions.phoneNumber,\r\n recaptchaToken\r\n });\r\n return sessionInfo;\r\n }\r\n }\r\n finally {\r\n verifier._reset();\r\n }\r\n}\r\n/**\r\n * Updates the user's phone number.\r\n *\r\n * @remarks\r\n * This method does not work in a Node.js environment or on any {@link User} signed in by\r\n * {@link Auth} instances created with a {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @example\r\n * ```\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new RecaptchaVerifier('recaptcha-container');\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber('+16505550101', applicationVerifier);\r\n * // Obtain the verificationCode from the user.\r\n * const phoneCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * await updatePhoneNumber(user, phoneCredential);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param credential - A credential authenticating the new phone number.\r\n *\r\n * @public\r\n */\r\nasync function updatePhoneNumber(user, credential) {\r\n const userInternal = getModularInstance(user);\r\n if (_isFirebaseServerApp(userInternal.auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(userInternal.auth));\r\n }\r\n await _link$1(userInternal, credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link PhoneAuthCredential}.\r\n *\r\n * @remarks\r\n * `PhoneAuthProvider` does not work in a Node.js environment.\r\n *\r\n * @example\r\n * ```javascript\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new RecaptchaVerifier('recaptcha-container');\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber('+16505550101', applicationVerifier);\r\n * // Obtain the verificationCode from the user.\r\n * const phoneCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * const userCredential = await signInWithCredential(auth, phoneCredential);\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass PhoneAuthProvider {\r\n /**\r\n * @param auth - The Firebase {@link Auth} instance in which sign-ins should occur.\r\n *\r\n */\r\n constructor(auth) {\r\n /** Always set to {@link ProviderId}.PHONE. */\r\n this.providerId = PhoneAuthProvider.PROVIDER_ID;\r\n this.auth = _castAuth(auth);\r\n }\r\n /**\r\n *\r\n * Starts a phone number authentication flow by sending a verification code to the given phone\r\n * number.\r\n *\r\n * @example\r\n * ```javascript\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber(phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const authCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * const userCredential = await signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * An alternative flow is provided using the `signInWithPhoneNumber` method.\r\n * ```javascript\r\n * const confirmationResult = signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const userCredential = confirmationResult.confirm(verificationCode);\r\n * ```\r\n *\r\n * @param phoneInfoOptions - The user's {@link PhoneInfoOptions}. The phone number should be in\r\n * E.164 format (e.g. +16505550101).\r\n * @param applicationVerifier - For abuse prevention, this method also requires a\r\n * {@link ApplicationVerifier}. This SDK includes a reCAPTCHA-based implementation,\r\n * {@link RecaptchaVerifier}.\r\n *\r\n * @returns A Promise for a verification ID that can be passed to\r\n * {@link PhoneAuthProvider.credential} to identify this flow..\r\n */\r\n verifyPhoneNumber(phoneOptions, applicationVerifier) {\r\n return _verifyPhoneNumber(this.auth, phoneOptions, getModularInstance(applicationVerifier));\r\n }\r\n /**\r\n * Creates a phone auth credential, given the verification ID from\r\n * {@link PhoneAuthProvider.verifyPhoneNumber} and the code that was sent to the user's\r\n * mobile device.\r\n *\r\n * @example\r\n * ```javascript\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = provider.verifyPhoneNumber(phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const authCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * const userCredential = signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * An alternative flow is provided using the `signInWithPhoneNumber` method.\r\n * ```javascript\r\n * const confirmationResult = await signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const userCredential = await confirmationResult.confirm(verificationCode);\r\n * ```\r\n *\r\n * @param verificationId - The verification ID returned from {@link PhoneAuthProvider.verifyPhoneNumber}.\r\n * @param verificationCode - The verification code sent to the user's mobile device.\r\n *\r\n * @returns The auth provider credential.\r\n */\r\n static credential(verificationId, verificationCode) {\r\n return PhoneAuthCredential._fromVerification(verificationId, verificationCode);\r\n }\r\n /**\r\n * Generates an {@link AuthCredential} from a {@link UserCredential}.\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n const credential = userCredential;\r\n return PhoneAuthProvider.credentialFromTaggedObject(credential);\r\n }\r\n /**\r\n * Returns an {@link AuthCredential} when passed an error.\r\n *\r\n * @remarks\r\n *\r\n * This method works for errors like\r\n * `auth/account-exists-with-different-credentials`. This is useful for\r\n * recovering when attempting to set a user's phone number but the number\r\n * in question is already tied to another account. For example, the following\r\n * code tries to update the current user's phone number, and if that\r\n * fails, links the user with the account associated with that number:\r\n *\r\n * ```js\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber(number, verifier);\r\n * try {\r\n * const code = ''; // Prompt the user for the verification code\r\n * await updatePhoneNumber(\r\n * auth.currentUser,\r\n * PhoneAuthProvider.credential(verificationId, code));\r\n * } catch (e) {\r\n * if ((e as FirebaseError)?.code === 'auth/account-exists-with-different-credential') {\r\n * const cred = PhoneAuthProvider.credentialFromError(e);\r\n * await linkWithCredential(auth.currentUser, cred);\r\n * }\r\n * }\r\n *\r\n * // At this point, auth.currentUser.phoneNumber === number.\r\n * ```\r\n *\r\n * @param error - The error to generate a credential from.\r\n */\r\n static credentialFromError(error) {\r\n return PhoneAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { phoneNumber, temporaryProof } = tokenResponse;\r\n if (phoneNumber && temporaryProof) {\r\n return PhoneAuthCredential._fromTokenResponse(phoneNumber, temporaryProof);\r\n }\r\n return null;\r\n }\r\n}\r\n/** Always set to {@link ProviderId}.PHONE. */\r\nPhoneAuthProvider.PROVIDER_ID = \"phone\" /* ProviderId.PHONE */;\r\n/** Always set to {@link SignInMethod}.PHONE. */\r\nPhoneAuthProvider.PHONE_SIGN_IN_METHOD = \"phone\" /* SignInMethod.PHONE */;\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Chooses a popup/redirect resolver to use. This prefers the override (which\r\n * is directly passed in), and falls back to the property set on the auth\r\n * object. If neither are available, this function errors w/ an argument error.\r\n */\r\nfunction _withDefaultResolver(auth, resolverOverride) {\r\n if (resolverOverride) {\r\n return _getInstance(resolverOverride);\r\n }\r\n _assert(auth._popupRedirectResolver, auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return auth._popupRedirectResolver;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass IdpCredential extends AuthCredential {\r\n constructor(params) {\r\n super(\"custom\" /* ProviderId.CUSTOM */, \"custom\" /* ProviderId.CUSTOM */);\r\n this.params = params;\r\n }\r\n _getIdTokenResponse(auth) {\r\n return signInWithIdp(auth, this._buildIdpRequest());\r\n }\r\n _linkToIdToken(auth, idToken) {\r\n return signInWithIdp(auth, this._buildIdpRequest(idToken));\r\n }\r\n _getReauthenticationResolver(auth) {\r\n return signInWithIdp(auth, this._buildIdpRequest());\r\n }\r\n _buildIdpRequest(idToken) {\r\n const request = {\r\n requestUri: this.params.requestUri,\r\n sessionId: this.params.sessionId,\r\n postBody: this.params.postBody,\r\n tenantId: this.params.tenantId,\r\n pendingToken: this.params.pendingToken,\r\n returnSecureToken: true,\r\n returnIdpCredential: true\r\n };\r\n if (idToken) {\r\n request.idToken = idToken;\r\n }\r\n return request;\r\n }\r\n}\r\nfunction _signIn(params) {\r\n return _signInWithCredential(params.auth, new IdpCredential(params), params.bypassAuthState);\r\n}\r\nfunction _reauth(params) {\r\n const { auth, user } = params;\r\n _assert(user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return _reauthenticate(user, new IdpCredential(params), params.bypassAuthState);\r\n}\r\nasync function _link(params) {\r\n const { auth, user } = params;\r\n _assert(user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return _link$1(user, new IdpCredential(params), params.bypassAuthState);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Popup event manager. Handles the popup's entire lifecycle; listens to auth\r\n * events\r\n */\r\nclass AbstractPopupRedirectOperation {\r\n constructor(auth, filter, resolver, user, bypassAuthState = false) {\r\n this.auth = auth;\r\n this.resolver = resolver;\r\n this.user = user;\r\n this.bypassAuthState = bypassAuthState;\r\n this.pendingPromise = null;\r\n this.eventManager = null;\r\n this.filter = Array.isArray(filter) ? filter : [filter];\r\n }\r\n execute() {\r\n return new Promise(async (resolve, reject) => {\r\n this.pendingPromise = { resolve, reject };\r\n try {\r\n this.eventManager = await this.resolver._initialize(this.auth);\r\n await this.onExecution();\r\n this.eventManager.registerConsumer(this);\r\n }\r\n catch (e) {\r\n this.reject(e);\r\n }\r\n });\r\n }\r\n async onAuthEvent(event) {\r\n const { urlResponse, sessionId, postBody, tenantId, error, type } = event;\r\n if (error) {\r\n this.reject(error);\r\n return;\r\n }\r\n const params = {\r\n auth: this.auth,\r\n requestUri: urlResponse,\r\n sessionId: sessionId,\r\n tenantId: tenantId || undefined,\r\n postBody: postBody || undefined,\r\n user: this.user,\r\n bypassAuthState: this.bypassAuthState\r\n };\r\n try {\r\n this.resolve(await this.getIdpTask(type)(params));\r\n }\r\n catch (e) {\r\n this.reject(e);\r\n }\r\n }\r\n onError(error) {\r\n this.reject(error);\r\n }\r\n getIdpTask(type) {\r\n switch (type) {\r\n case \"signInViaPopup\" /* AuthEventType.SIGN_IN_VIA_POPUP */:\r\n case \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */:\r\n return _signIn;\r\n case \"linkViaPopup\" /* AuthEventType.LINK_VIA_POPUP */:\r\n case \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */:\r\n return _link;\r\n case \"reauthViaPopup\" /* AuthEventType.REAUTH_VIA_POPUP */:\r\n case \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */:\r\n return _reauth;\r\n default:\r\n _fail(this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n }\r\n resolve(cred) {\r\n debugAssert(this.pendingPromise, 'Pending promise was never set');\r\n this.pendingPromise.resolve(cred);\r\n this.unregisterAndCleanUp();\r\n }\r\n reject(error) {\r\n debugAssert(this.pendingPromise, 'Pending promise was never set');\r\n this.pendingPromise.reject(error);\r\n this.unregisterAndCleanUp();\r\n }\r\n unregisterAndCleanUp() {\r\n if (this.eventManager) {\r\n this.eventManager.unregisterConsumer(this);\r\n }\r\n this.pendingPromise = null;\r\n this.cleanUp();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _POLL_WINDOW_CLOSE_TIMEOUT = new Delay(2000, 10000);\r\n/**\r\n * Authenticates a Firebase client using a popup-based OAuth authentication flow.\r\n *\r\n * @remarks\r\n * If succeeds, returns the signed in user along with the provider's credential. If sign in was\r\n * unsuccessful, returns an error object containing additional information about the error.\r\n *\r\n * This method does not work in a Node.js environment or with {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function signInWithPopup(auth, provider, resolver) {\r\n if (_isFirebaseServerApp(auth.app)) {\r\n return Promise.reject(_createError(auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */));\r\n }\r\n const authInternal = _castAuth(auth);\r\n _assertInstanceOf(auth, provider, FederatedAuthProvider);\r\n const resolverInternal = _withDefaultResolver(authInternal, resolver);\r\n const action = new PopupOperation(authInternal, \"signInViaPopup\" /* AuthEventType.SIGN_IN_VIA_POPUP */, provider, resolverInternal);\r\n return action.executeNotNull();\r\n}\r\n/**\r\n * Reauthenticates the current user with the specified {@link OAuthProvider} using a pop-up based\r\n * OAuth flow.\r\n *\r\n * @remarks\r\n * If the reauthentication is successful, the returned result will contain the user and the\r\n * provider's credential.\r\n *\r\n * This method does not work in a Node.js environment or on any {@link User} signed in by\r\n * {@link Auth} instances created with a {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n * // Reauthenticate using a popup.\r\n * await reauthenticateWithPopup(result.user, provider);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithPopup(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n if (_isFirebaseServerApp(userInternal.auth.app)) {\r\n return Promise.reject(_createError(userInternal.auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */));\r\n }\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n const action = new PopupOperation(userInternal.auth, \"reauthViaPopup\" /* AuthEventType.REAUTH_VIA_POPUP */, provider, resolverInternal, userInternal);\r\n return action.executeNotNull();\r\n}\r\n/**\r\n * Links the authenticated provider to the user account using a pop-up based OAuth flow.\r\n *\r\n * @remarks\r\n * If the linking is successful, the returned result will contain the user and the provider's credential.\r\n *\r\n * This method does not work in a Node.js environment.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using some other provider.\r\n * const result = await signInWithEmailAndPassword(auth, email, password);\r\n * // Link using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * await linkWithPopup(result.user, provider);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function linkWithPopup(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n const action = new PopupOperation(userInternal.auth, \"linkViaPopup\" /* AuthEventType.LINK_VIA_POPUP */, provider, resolverInternal, userInternal);\r\n return action.executeNotNull();\r\n}\r\n/**\r\n * Popup event manager. Handles the popup's entire lifecycle; listens to auth\r\n * events\r\n *\r\n */\r\nclass PopupOperation extends AbstractPopupRedirectOperation {\r\n constructor(auth, filter, provider, resolver, user) {\r\n super(auth, filter, resolver, user);\r\n this.provider = provider;\r\n this.authWindow = null;\r\n this.pollId = null;\r\n if (PopupOperation.currentPopupAction) {\r\n PopupOperation.currentPopupAction.cancel();\r\n }\r\n PopupOperation.currentPopupAction = this;\r\n }\r\n async executeNotNull() {\r\n const result = await this.execute();\r\n _assert(result, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return result;\r\n }\r\n async onExecution() {\r\n debugAssert(this.filter.length === 1, 'Popup operations only handle one event');\r\n const eventId = _generateEventId();\r\n this.authWindow = await this.resolver._openPopup(this.auth, this.provider, this.filter[0], // There's always one, see constructor\r\n eventId);\r\n this.authWindow.associatedEvent = eventId;\r\n // Check for web storage support and origin validation _after_ the popup is\r\n // loaded. These operations are slow (~1 second or so) Rather than\r\n // waiting on them before opening the window, optimistically open the popup\r\n // and check for storage support at the same time. If storage support is\r\n // not available, this will cause the whole thing to reject properly. It\r\n // will also close the popup, but since the promise has already rejected,\r\n // the popup closed by user poll will reject into the void.\r\n this.resolver._originValidation(this.auth).catch(e => {\r\n this.reject(e);\r\n });\r\n this.resolver._isIframeWebStorageSupported(this.auth, isSupported => {\r\n if (!isSupported) {\r\n this.reject(_createError(this.auth, \"web-storage-unsupported\" /* AuthErrorCode.WEB_STORAGE_UNSUPPORTED */));\r\n }\r\n });\r\n // Handle user closure. Notice this does *not* use await\r\n this.pollUserCancellation();\r\n }\r\n get eventId() {\r\n var _a;\r\n return ((_a = this.authWindow) === null || _a === void 0 ? void 0 : _a.associatedEvent) || null;\r\n }\r\n cancel() {\r\n this.reject(_createError(this.auth, \"cancelled-popup-request\" /* AuthErrorCode.EXPIRED_POPUP_REQUEST */));\r\n }\r\n cleanUp() {\r\n if (this.authWindow) {\r\n this.authWindow.close();\r\n }\r\n if (this.pollId) {\r\n window.clearTimeout(this.pollId);\r\n }\r\n this.authWindow = null;\r\n this.pollId = null;\r\n PopupOperation.currentPopupAction = null;\r\n }\r\n pollUserCancellation() {\r\n const poll = () => {\r\n var _a, _b;\r\n if ((_b = (_a = this.authWindow) === null || _a === void 0 ? void 0 : _a.window) === null || _b === void 0 ? void 0 : _b.closed) {\r\n // Make sure that there is sufficient time for whatever action to\r\n // complete. The window could have closed but the sign in network\r\n // call could still be in flight. This is specifically true for\r\n // Firefox or if the opener is in an iframe, in which case the oauth\r\n // helper closes the popup.\r\n this.pollId = window.setTimeout(() => {\r\n this.pollId = null;\r\n this.reject(_createError(this.auth, \"popup-closed-by-user\" /* AuthErrorCode.POPUP_CLOSED_BY_USER */));\r\n }, 8000 /* _Timeout.AUTH_EVENT */);\r\n return;\r\n }\r\n this.pollId = window.setTimeout(poll, _POLL_WINDOW_CLOSE_TIMEOUT.get());\r\n };\r\n poll();\r\n }\r\n}\r\n// Only one popup is ever shown at once. The lifecycle of the current popup\r\n// can be managed / cancelled by the constructor.\r\nPopupOperation.currentPopupAction = null;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PENDING_REDIRECT_KEY = 'pendingRedirect';\r\n// We only get one redirect outcome for any one auth, so just store it\r\n// in here.\r\nconst redirectOutcomeMap = new Map();\r\nclass RedirectAction extends AbstractPopupRedirectOperation {\r\n constructor(auth, resolver, bypassAuthState = false) {\r\n super(auth, [\r\n \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */,\r\n \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */,\r\n \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */,\r\n \"unknown\" /* AuthEventType.UNKNOWN */\r\n ], resolver, undefined, bypassAuthState);\r\n this.eventId = null;\r\n }\r\n /**\r\n * Override the execute function; if we already have a redirect result, then\r\n * just return it.\r\n */\r\n async execute() {\r\n let readyOutcome = redirectOutcomeMap.get(this.auth._key());\r\n if (!readyOutcome) {\r\n try {\r\n const hasPendingRedirect = await _getAndClearPendingRedirectStatus(this.resolver, this.auth);\r\n const result = hasPendingRedirect ? await super.execute() : null;\r\n readyOutcome = () => Promise.resolve(result);\r\n }\r\n catch (e) {\r\n readyOutcome = () => Promise.reject(e);\r\n }\r\n redirectOutcomeMap.set(this.auth._key(), readyOutcome);\r\n }\r\n // If we're not bypassing auth state, the ready outcome should be set to\r\n // null.\r\n if (!this.bypassAuthState) {\r\n redirectOutcomeMap.set(this.auth._key(), () => Promise.resolve(null));\r\n }\r\n return readyOutcome();\r\n }\r\n async onAuthEvent(event) {\r\n if (event.type === \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */) {\r\n return super.onAuthEvent(event);\r\n }\r\n else if (event.type === \"unknown\" /* AuthEventType.UNKNOWN */) {\r\n // This is a sentinel value indicating there's no pending redirect\r\n this.resolve(null);\r\n return;\r\n }\r\n if (event.eventId) {\r\n const user = await this.auth._redirectUserForId(event.eventId);\r\n if (user) {\r\n this.user = user;\r\n return super.onAuthEvent(event);\r\n }\r\n else {\r\n this.resolve(null);\r\n }\r\n }\r\n }\r\n async onExecution() { }\r\n cleanUp() { }\r\n}\r\nasync function _getAndClearPendingRedirectStatus(resolver, auth) {\r\n const key = pendingRedirectKey(auth);\r\n const persistence = resolverPersistence(resolver);\r\n if (!(await persistence._isAvailable())) {\r\n return false;\r\n }\r\n const hasPendingRedirect = (await persistence._get(key)) === 'true';\r\n await persistence._remove(key);\r\n return hasPendingRedirect;\r\n}\r\nasync function _setPendingRedirectStatus(resolver, auth) {\r\n return resolverPersistence(resolver)._set(pendingRedirectKey(auth), 'true');\r\n}\r\nfunction _clearRedirectOutcomes() {\r\n redirectOutcomeMap.clear();\r\n}\r\nfunction _overrideRedirectResult(auth, result) {\r\n redirectOutcomeMap.set(auth._key(), result);\r\n}\r\nfunction resolverPersistence(resolver) {\r\n return _getInstance(resolver._redirectPersistence);\r\n}\r\nfunction pendingRedirectKey(auth) {\r\n return _persistenceKeyName(PENDING_REDIRECT_KEY, auth.config.apiKey, auth.name);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Authenticates a Firebase client using a full-page redirect flow.\r\n *\r\n * @remarks\r\n * To handle the results and errors for this operation, refer to {@link getRedirectResult}.\r\n * Follow the {@link https://firebase.google.com/docs/auth/web/redirect-best-practices\r\n * | best practices} when using {@link signInWithRedirect}.\r\n *\r\n * This method does not work in a Node.js environment or with {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // You can add additional scopes to the provider:\r\n * provider.addScope('user_birthday');\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * }\r\n * // As this API can be used for sign-in, linking and reauthentication,\r\n * // check the operationType to determine what triggered this redirect\r\n * // operation.\r\n * const operationType = result.operationType;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nfunction signInWithRedirect(auth, provider, resolver) {\r\n return _signInWithRedirect(auth, provider, resolver);\r\n}\r\nasync function _signInWithRedirect(auth, provider, resolver) {\r\n if (_isFirebaseServerApp(auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\r\n }\r\n const authInternal = _castAuth(auth);\r\n _assertInstanceOf(auth, provider, FederatedAuthProvider);\r\n // Wait for auth initialization to complete, this will process pending redirects and clear the\r\n // PENDING_REDIRECT_KEY in persistence. This should be completed before starting a new\r\n // redirect and creating a PENDING_REDIRECT_KEY entry.\r\n await authInternal._initializationPromise;\r\n const resolverInternal = _withDefaultResolver(authInternal, resolver);\r\n await _setPendingRedirectStatus(resolverInternal, authInternal);\r\n return resolverInternal._openRedirect(authInternal, provider, \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */);\r\n}\r\n/**\r\n * Reauthenticates the current user with the specified {@link OAuthProvider} using a full-page redirect flow.\r\n * @remarks\r\n * To handle the results and errors for this operation, refer to {@link getRedirectResult}.\r\n * Follow the {@link https://firebase.google.com/docs/auth/web/redirect-best-practices\r\n * | best practices} when using {@link reauthenticateWithRedirect}.\r\n *\r\n * This method does not work in a Node.js environment or with {@link Auth} instances\r\n * created with a {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * // Reauthenticate using a redirect.\r\n * await reauthenticateWithRedirect(result.user, provider);\r\n * // This will again trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nfunction reauthenticateWithRedirect(user, provider, resolver) {\r\n return _reauthenticateWithRedirect(user, provider, resolver);\r\n}\r\nasync function _reauthenticateWithRedirect(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n if (_isFirebaseServerApp(userInternal.auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(userInternal.auth));\r\n }\r\n // Wait for auth initialization to complete, this will process pending redirects and clear the\r\n // PENDING_REDIRECT_KEY in persistence. This should be completed before starting a new\r\n // redirect and creating a PENDING_REDIRECT_KEY entry.\r\n await userInternal.auth._initializationPromise;\r\n // Allow the resolver to error before persisting the redirect user\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n await _setPendingRedirectStatus(resolverInternal, userInternal.auth);\r\n const eventId = await prepareUserForRedirect(userInternal);\r\n return resolverInternal._openRedirect(userInternal.auth, provider, \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */, eventId);\r\n}\r\n/**\r\n * Links the {@link OAuthProvider} to the user account using a full-page redirect flow.\r\n * @remarks\r\n * To handle the results and errors for this operation, refer to {@link getRedirectResult}.\r\n * Follow the {@link https://firebase.google.com/docs/auth/web/redirect-best-practices\r\n * | best practices} when using {@link linkWithRedirect}.\r\n *\r\n * This method does not work in a Node.js environment or with {@link Auth} instances\r\n * created with a {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using some other provider.\r\n * const result = await signInWithEmailAndPassword(auth, email, password);\r\n * // Link using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * await linkWithRedirect(result.user, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nfunction linkWithRedirect(user, provider, resolver) {\r\n return _linkWithRedirect(user, provider, resolver);\r\n}\r\nasync function _linkWithRedirect(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n // Wait for auth initialization to complete, this will process pending redirects and clear the\r\n // PENDING_REDIRECT_KEY in persistence. This should be completed before starting a new\r\n // redirect and creating a PENDING_REDIRECT_KEY entry.\r\n await userInternal.auth._initializationPromise;\r\n // Allow the resolver to error before persisting the redirect user\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n await _assertLinkedStatus(false, userInternal, provider.providerId);\r\n await _setPendingRedirectStatus(resolverInternal, userInternal.auth);\r\n const eventId = await prepareUserForRedirect(userInternal);\r\n return resolverInternal._openRedirect(userInternal.auth, provider, \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */, eventId);\r\n}\r\n/**\r\n * Returns a {@link UserCredential} from the redirect-based sign-in flow.\r\n *\r\n * @remarks\r\n * If sign-in succeeded, returns the signed in user. If sign-in was unsuccessful, fails with an\r\n * error. If no redirect operation was called, returns `null`.\r\n *\r\n * This method does not work in a Node.js environment or with {@link Auth} instances created with a\r\n * {@link @firebase/app#FirebaseServerApp}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // You can add additional scopes to the provider:\r\n * provider.addScope('user_birthday');\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * }\r\n * // As this API can be used for sign-in, linking and reauthentication,\r\n * // check the operationType to determine what triggered this redirect\r\n * // operation.\r\n * const operationType = result.operationType;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function getRedirectResult(auth, resolver) {\r\n await _castAuth(auth)._initializationPromise;\r\n return _getRedirectResult(auth, resolver, false);\r\n}\r\nasync function _getRedirectResult(auth, resolverExtern, bypassAuthState = false) {\r\n if (_isFirebaseServerApp(auth.app)) {\r\n return Promise.reject(_serverAppCurrentUserOperationNotSupportedError(auth));\r\n }\r\n const authInternal = _castAuth(auth);\r\n const resolver = _withDefaultResolver(authInternal, resolverExtern);\r\n const action = new RedirectAction(authInternal, resolver, bypassAuthState);\r\n const result = await action.execute();\r\n if (result && !bypassAuthState) {\r\n delete result.user._redirectEventId;\r\n await authInternal._persistUserIfCurrent(result.user);\r\n await authInternal._setRedirectUser(null, resolverExtern);\r\n }\r\n return result;\r\n}\r\nasync function prepareUserForRedirect(user) {\r\n const eventId = _generateEventId(`${user.uid}:::`);\r\n user._redirectEventId = eventId;\r\n await user.auth._setRedirectUser(user);\r\n await user.auth._persistUserIfCurrent(user);\r\n return eventId;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// The amount of time to store the UIDs of seen events; this is\r\n// set to 10 min by default\r\nconst EVENT_DUPLICATION_CACHE_DURATION_MS = 10 * 60 * 1000;\r\nclass AuthEventManager {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.cachedEventUids = new Set();\r\n this.consumers = new Set();\r\n this.queuedRedirectEvent = null;\r\n this.hasHandledPotentialRedirect = false;\r\n this.lastProcessedEventTime = Date.now();\r\n }\r\n registerConsumer(authEventConsumer) {\r\n this.consumers.add(authEventConsumer);\r\n if (this.queuedRedirectEvent &&\r\n this.isEventForConsumer(this.queuedRedirectEvent, authEventConsumer)) {\r\n this.sendToConsumer(this.queuedRedirectEvent, authEventConsumer);\r\n this.saveEventToCache(this.queuedRedirectEvent);\r\n this.queuedRedirectEvent = null;\r\n }\r\n }\r\n unregisterConsumer(authEventConsumer) {\r\n this.consumers.delete(authEventConsumer);\r\n }\r\n onEvent(event) {\r\n // Check if the event has already been handled\r\n if (this.hasEventBeenHandled(event)) {\r\n return false;\r\n }\r\n let handled = false;\r\n this.consumers.forEach(consumer => {\r\n if (this.isEventForConsumer(event, consumer)) {\r\n handled = true;\r\n this.sendToConsumer(event, consumer);\r\n this.saveEventToCache(event);\r\n }\r\n });\r\n if (this.hasHandledPotentialRedirect || !isRedirectEvent(event)) {\r\n // If we've already seen a redirect before, or this is a popup event,\r\n // bail now\r\n return handled;\r\n }\r\n this.hasHandledPotentialRedirect = true;\r\n // If the redirect wasn't handled, hang on to it\r\n if (!handled) {\r\n this.queuedRedirectEvent = event;\r\n handled = true;\r\n }\r\n return handled;\r\n }\r\n sendToConsumer(event, consumer) {\r\n var _a;\r\n if (event.error && !isNullRedirectEvent(event)) {\r\n const code = ((_a = event.error.code) === null || _a === void 0 ? void 0 : _a.split('auth/')[1]) ||\r\n \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */;\r\n consumer.onError(_createError(this.auth, code));\r\n }\r\n else {\r\n consumer.onAuthEvent(event);\r\n }\r\n }\r\n isEventForConsumer(event, consumer) {\r\n const eventIdMatches = consumer.eventId === null ||\r\n (!!event.eventId && event.eventId === consumer.eventId);\r\n return consumer.filter.includes(event.type) && eventIdMatches;\r\n }\r\n hasEventBeenHandled(event) {\r\n if (Date.now() - this.lastProcessedEventTime >=\r\n EVENT_DUPLICATION_CACHE_DURATION_MS) {\r\n this.cachedEventUids.clear();\r\n }\r\n return this.cachedEventUids.has(eventUid(event));\r\n }\r\n saveEventToCache(event) {\r\n this.cachedEventUids.add(eventUid(event));\r\n this.lastProcessedEventTime = Date.now();\r\n }\r\n}\r\nfunction eventUid(e) {\r\n return [e.type, e.eventId, e.sessionId, e.tenantId].filter(v => v).join('-');\r\n}\r\nfunction isNullRedirectEvent({ type, error }) {\r\n return (type === \"unknown\" /* AuthEventType.UNKNOWN */ &&\r\n (error === null || error === void 0 ? void 0 : error.code) === `auth/${\"no-auth-event\" /* AuthErrorCode.NO_AUTH_EVENT */}`);\r\n}\r\nfunction isRedirectEvent(event) {\r\n switch (event.type) {\r\n case \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */:\r\n case \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */:\r\n case \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */:\r\n return true;\r\n case \"unknown\" /* AuthEventType.UNKNOWN */:\r\n return isNullRedirectEvent(event);\r\n default:\r\n return false;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _getProjectConfig(auth, request = {}) {\r\n return _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v1/projects\" /* Endpoint.GET_PROJECT_CONFIG */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IP_ADDRESS_REGEX = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\r\nconst HTTP_REGEX = /^https?/;\r\nasync function _validateOrigin(auth) {\r\n // Skip origin validation if we are in an emulated environment\r\n if (auth.config.emulator) {\r\n return;\r\n }\r\n const { authorizedDomains } = await _getProjectConfig(auth);\r\n for (const domain of authorizedDomains) {\r\n try {\r\n if (matchDomain(domain)) {\r\n return;\r\n }\r\n }\r\n catch (_a) {\r\n // Do nothing if there's a URL error; just continue searching\r\n }\r\n }\r\n // In the old SDK, this error also provides helpful messages.\r\n _fail(auth, \"unauthorized-domain\" /* AuthErrorCode.INVALID_ORIGIN */);\r\n}\r\nfunction matchDomain(expected) {\r\n const currentUrl = _getCurrentUrl();\r\n const { protocol, hostname } = new URL(currentUrl);\r\n if (expected.startsWith('chrome-extension://')) {\r\n const ceUrl = new URL(expected);\r\n if (ceUrl.hostname === '' && hostname === '') {\r\n // For some reason we're not parsing chrome URLs properly\r\n return (protocol === 'chrome-extension:' &&\r\n expected.replace('chrome-extension://', '') ===\r\n currentUrl.replace('chrome-extension://', ''));\r\n }\r\n return protocol === 'chrome-extension:' && ceUrl.hostname === hostname;\r\n }\r\n if (!HTTP_REGEX.test(protocol)) {\r\n return false;\r\n }\r\n if (IP_ADDRESS_REGEX.test(expected)) {\r\n // The domain has to be exactly equal to the pattern, as an IP domain will\r\n // only contain the IP, no extra character.\r\n return hostname === expected;\r\n }\r\n // Dots in pattern should be escaped.\r\n const escapedDomainPattern = expected.replace(/\\./g, '\\\\.');\r\n // Non ip address domains.\r\n // domain.com = *.domain.com OR domain.com\r\n const re = new RegExp('^(.+\\\\.' + escapedDomainPattern + '|' + escapedDomainPattern + ')$', 'i');\r\n return re.test(hostname);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst NETWORK_TIMEOUT = new Delay(30000, 60000);\r\n/**\r\n * Reset unlaoded GApi modules. If gapi.load fails due to a network error,\r\n * it will stop working after a retrial. This is a hack to fix this issue.\r\n */\r\nfunction resetUnloadedGapiModules() {\r\n // Clear last failed gapi.load state to force next gapi.load to first\r\n // load the failed gapi.iframes module.\r\n // Get gapix.beacon context.\r\n const beacon = _window().___jsl;\r\n // Get current hint.\r\n if (beacon === null || beacon === void 0 ? void 0 : beacon.H) {\r\n // Get gapi hint.\r\n for (const hint of Object.keys(beacon.H)) {\r\n // Requested modules.\r\n beacon.H[hint].r = beacon.H[hint].r || [];\r\n // Loaded modules.\r\n beacon.H[hint].L = beacon.H[hint].L || [];\r\n // Set requested modules to a copy of the loaded modules.\r\n beacon.H[hint].r = [...beacon.H[hint].L];\r\n // Clear pending callbacks.\r\n if (beacon.CP) {\r\n for (let i = 0; i < beacon.CP.length; i++) {\r\n // Remove all failed pending callbacks.\r\n beacon.CP[i] = null;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction loadGapi(auth) {\r\n return new Promise((resolve, reject) => {\r\n var _a, _b, _c;\r\n // Function to run when gapi.load is ready.\r\n function loadGapiIframe() {\r\n // The developer may have tried to previously run gapi.load and failed.\r\n // Run this to fix that.\r\n resetUnloadedGapiModules();\r\n gapi.load('gapi.iframes', {\r\n callback: () => {\r\n resolve(gapi.iframes.getContext());\r\n },\r\n ontimeout: () => {\r\n // The above reset may be sufficient, but having this reset after\r\n // failure ensures that if the developer calls gapi.load after the\r\n // connection is re-established and before another attempt to embed\r\n // the iframe, it would work and would not be broken because of our\r\n // failed attempt.\r\n // Timeout when gapi.iframes.Iframe not loaded.\r\n resetUnloadedGapiModules();\r\n reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n },\r\n timeout: NETWORK_TIMEOUT.get()\r\n });\r\n }\r\n if ((_b = (_a = _window().gapi) === null || _a === void 0 ? void 0 : _a.iframes) === null || _b === void 0 ? void 0 : _b.Iframe) {\r\n // If gapi.iframes.Iframe available, resolve.\r\n resolve(gapi.iframes.getContext());\r\n }\r\n else if (!!((_c = _window().gapi) === null || _c === void 0 ? void 0 : _c.load)) {\r\n // Gapi loader ready, load gapi.iframes.\r\n loadGapiIframe();\r\n }\r\n else {\r\n // Create a new iframe callback when this is called so as not to overwrite\r\n // any previous defined callback. This happens if this method is called\r\n // multiple times in parallel and could result in the later callback\r\n // overwriting the previous one. This would end up with a iframe\r\n // timeout.\r\n const cbName = _generateCallbackName('iframefcb');\r\n // GApi loader not available, dynamically load platform.js.\r\n _window()[cbName] = () => {\r\n // GApi loader should be ready.\r\n if (!!gapi.load) {\r\n loadGapiIframe();\r\n }\r\n else {\r\n // Gapi loader failed, throw error.\r\n reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n }\r\n };\r\n // Load GApi loader.\r\n return _loadJS(`${_gapiScriptUrl()}?onload=${cbName}`)\r\n .catch(e => reject(e));\r\n }\r\n }).catch(error => {\r\n // Reset cached promise to allow for retrial.\r\n cachedGApiLoader = null;\r\n throw error;\r\n });\r\n}\r\nlet cachedGApiLoader = null;\r\nfunction _loadGapi(auth) {\r\n cachedGApiLoader = cachedGApiLoader || loadGapi(auth);\r\n return cachedGApiLoader;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PING_TIMEOUT = new Delay(5000, 15000);\r\nconst IFRAME_PATH = '__/auth/iframe';\r\nconst EMULATED_IFRAME_PATH = 'emulator/auth/iframe';\r\nconst IFRAME_ATTRIBUTES = {\r\n style: {\r\n position: 'absolute',\r\n top: '-100px',\r\n width: '1px',\r\n height: '1px'\r\n },\r\n 'aria-hidden': 'true',\r\n tabindex: '-1'\r\n};\r\n// Map from apiHost to endpoint ID for passing into iframe. In current SDK, apiHost can be set to\r\n// anything (not from a list of endpoints with IDs as in legacy), so this is the closest we can get.\r\nconst EID_FROM_APIHOST = new Map([\r\n [\"identitytoolkit.googleapis.com\" /* DefaultConfig.API_HOST */, 'p'],\r\n ['staging-identitytoolkit.sandbox.googleapis.com', 's'],\r\n ['test-identitytoolkit.sandbox.googleapis.com', 't'] // test\r\n]);\r\nfunction getIframeUrl(auth) {\r\n const config = auth.config;\r\n _assert(config.authDomain, auth, \"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */);\r\n const url = config.emulator\r\n ? _emulatorUrl(config, EMULATED_IFRAME_PATH)\r\n : `https://${auth.config.authDomain}/${IFRAME_PATH}`;\r\n const params = {\r\n apiKey: config.apiKey,\r\n appName: auth.name,\r\n v: SDK_VERSION\r\n };\r\n const eid = EID_FROM_APIHOST.get(auth.config.apiHost);\r\n if (eid) {\r\n params.eid = eid;\r\n }\r\n const frameworks = auth._getFrameworks();\r\n if (frameworks.length) {\r\n params.fw = frameworks.join(',');\r\n }\r\n return `${url}?${querystring(params).slice(1)}`;\r\n}\r\nasync function _openIframe(auth) {\r\n const context = await _loadGapi(auth);\r\n const gapi = _window().gapi;\r\n _assert(gapi, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return context.open({\r\n where: document.body,\r\n url: getIframeUrl(auth),\r\n messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER,\r\n attributes: IFRAME_ATTRIBUTES,\r\n dontclear: true\r\n }, (iframe) => new Promise(async (resolve, reject) => {\r\n await iframe.restyle({\r\n // Prevent iframe from closing on mouse out.\r\n setHideOnLeave: false\r\n });\r\n const networkError = _createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */);\r\n // Confirm iframe is correctly loaded.\r\n // To fallback on failure, set a timeout.\r\n const networkErrorTimer = _window().setTimeout(() => {\r\n reject(networkError);\r\n }, PING_TIMEOUT.get());\r\n // Clear timer and resolve pending iframe ready promise.\r\n function clearTimerAndResolve() {\r\n _window().clearTimeout(networkErrorTimer);\r\n resolve(iframe);\r\n }\r\n // This returns an IThenable. However the reject part does not call\r\n // when the iframe is not loaded.\r\n iframe.ping(clearTimerAndResolve).then(clearTimerAndResolve, () => {\r\n reject(networkError);\r\n });\r\n }));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst BASE_POPUP_OPTIONS = {\r\n location: 'yes',\r\n resizable: 'yes',\r\n statusbar: 'yes',\r\n toolbar: 'no'\r\n};\r\nconst DEFAULT_WIDTH = 500;\r\nconst DEFAULT_HEIGHT = 600;\r\nconst TARGET_BLANK = '_blank';\r\nconst FIREFOX_EMPTY_URL = 'http://localhost';\r\nclass AuthPopup {\r\n constructor(window) {\r\n this.window = window;\r\n this.associatedEvent = null;\r\n }\r\n close() {\r\n if (this.window) {\r\n try {\r\n this.window.close();\r\n }\r\n catch (e) { }\r\n }\r\n }\r\n}\r\nfunction _open(auth, url, name, width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT) {\r\n const top = Math.max((window.screen.availHeight - height) / 2, 0).toString();\r\n const left = Math.max((window.screen.availWidth - width) / 2, 0).toString();\r\n let target = '';\r\n const options = Object.assign(Object.assign({}, BASE_POPUP_OPTIONS), { width: width.toString(), height: height.toString(), top,\r\n left });\r\n // Chrome iOS 7 and 8 is returning an undefined popup win when target is\r\n // specified, even though the popup is not necessarily blocked.\r\n const ua = getUA().toLowerCase();\r\n if (name) {\r\n target = _isChromeIOS(ua) ? TARGET_BLANK : name;\r\n }\r\n if (_isFirefox(ua)) {\r\n // Firefox complains when invalid URLs are popped out. Hacky way to bypass.\r\n url = url || FIREFOX_EMPTY_URL;\r\n // Firefox disables by default scrolling on popup windows, which can create\r\n // issues when the user has many Google accounts, for instance.\r\n options.scrollbars = 'yes';\r\n }\r\n const optionsString = Object.entries(options).reduce((accum, [key, value]) => `${accum}${key}=${value},`, '');\r\n if (_isIOSStandalone(ua) && target !== '_self') {\r\n openAsNewWindowIOS(url || '', target);\r\n return new AuthPopup(null);\r\n }\r\n // about:blank getting sanitized causing browsers like IE/Edge to display\r\n // brief error message before redirecting to handler.\r\n const newWin = window.open(url || '', target, optionsString);\r\n _assert(newWin, auth, \"popup-blocked\" /* AuthErrorCode.POPUP_BLOCKED */);\r\n // Flaky on IE edge, encapsulate with a try and catch.\r\n try {\r\n newWin.focus();\r\n }\r\n catch (e) { }\r\n return new AuthPopup(newWin);\r\n}\r\nfunction openAsNewWindowIOS(url, target) {\r\n const el = document.createElement('a');\r\n el.href = url;\r\n el.target = target;\r\n const click = document.createEvent('MouseEvent');\r\n click.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 1, null);\r\n el.dispatchEvent(click);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * URL for Authentication widget which will initiate the OAuth handshake\r\n *\r\n * @internal\r\n */\r\nconst WIDGET_PATH = '__/auth/handler';\r\n/**\r\n * URL for emulated environment\r\n *\r\n * @internal\r\n */\r\nconst EMULATOR_WIDGET_PATH = 'emulator/auth/handler';\r\n/**\r\n * Fragment name for the App Check token that gets passed to the widget\r\n *\r\n * @internal\r\n */\r\nconst FIREBASE_APP_CHECK_FRAGMENT_ID = encodeURIComponent('fac');\r\nasync function _getRedirectUrl(auth, provider, authType, redirectUrl, eventId, additionalParams) {\r\n _assert(auth.config.authDomain, auth, \"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */);\r\n _assert(auth.config.apiKey, auth, \"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */);\r\n const params = {\r\n apiKey: auth.config.apiKey,\r\n appName: auth.name,\r\n authType,\r\n redirectUrl,\r\n v: SDK_VERSION,\r\n eventId\r\n };\r\n if (provider instanceof FederatedAuthProvider) {\r\n provider.setDefaultLanguage(auth.languageCode);\r\n params.providerId = provider.providerId || '';\r\n if (!isEmpty(provider.getCustomParameters())) {\r\n params.customParameters = JSON.stringify(provider.getCustomParameters());\r\n }\r\n // TODO set additionalParams from the provider as well?\r\n for (const [key, value] of Object.entries(additionalParams || {})) {\r\n params[key] = value;\r\n }\r\n }\r\n if (provider instanceof BaseOAuthProvider) {\r\n const scopes = provider.getScopes().filter(scope => scope !== '');\r\n if (scopes.length > 0) {\r\n params.scopes = scopes.join(',');\r\n }\r\n }\r\n if (auth.tenantId) {\r\n params.tid = auth.tenantId;\r\n }\r\n // TODO: maybe set eid as endipointId\r\n // TODO: maybe set fw as Frameworks.join(\",\")\r\n const paramsDict = params;\r\n for (const key of Object.keys(paramsDict)) {\r\n if (paramsDict[key] === undefined) {\r\n delete paramsDict[key];\r\n }\r\n }\r\n // Sets the App Check token to pass to the widget\r\n const appCheckToken = await auth._getAppCheckToken();\r\n const appCheckTokenFragment = appCheckToken\r\n ? `#${FIREBASE_APP_CHECK_FRAGMENT_ID}=${encodeURIComponent(appCheckToken)}`\r\n : '';\r\n // Start at index 1 to skip the leading '&' in the query string\r\n return `${getHandlerBase(auth)}?${querystring(paramsDict).slice(1)}${appCheckTokenFragment}`;\r\n}\r\nfunction getHandlerBase({ config }) {\r\n if (!config.emulator) {\r\n return `https://${config.authDomain}/${WIDGET_PATH}`;\r\n }\r\n return _emulatorUrl(config, EMULATOR_WIDGET_PATH);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The special web storage event\r\n *\r\n */\r\nconst WEB_STORAGE_SUPPORT_KEY = 'webStorageSupport';\r\nclass BrowserPopupRedirectResolver {\r\n constructor() {\r\n this.eventManagers = {};\r\n this.iframes = {};\r\n this.originValidationPromises = {};\r\n this._redirectPersistence = browserSessionPersistence;\r\n this._completeRedirectFn = _getRedirectResult;\r\n this._overrideRedirectResult = _overrideRedirectResult;\r\n }\r\n // Wrapping in async even though we don't await anywhere in order\r\n // to make sure errors are raised as promise rejections\r\n async _openPopup(auth, provider, authType, eventId) {\r\n var _a;\r\n debugAssert((_a = this.eventManagers[auth._key()]) === null || _a === void 0 ? void 0 : _a.manager, '_initialize() not called before _openPopup()');\r\n const url = await _getRedirectUrl(auth, provider, authType, _getCurrentUrl(), eventId);\r\n return _open(auth, url, _generateEventId());\r\n }\r\n async _openRedirect(auth, provider, authType, eventId) {\r\n await this._originValidation(auth);\r\n const url = await _getRedirectUrl(auth, provider, authType, _getCurrentUrl(), eventId);\r\n _setWindowLocation(url);\r\n return new Promise(() => { });\r\n }\r\n _initialize(auth) {\r\n const key = auth._key();\r\n if (this.eventManagers[key]) {\r\n const { manager, promise } = this.eventManagers[key];\r\n if (manager) {\r\n return Promise.resolve(manager);\r\n }\r\n else {\r\n debugAssert(promise, 'If manager is not set, promise should be');\r\n return promise;\r\n }\r\n }\r\n const promise = this.initAndGetManager(auth);\r\n this.eventManagers[key] = { promise };\r\n // If the promise is rejected, the key should be removed so that the\r\n // operation can be retried later.\r\n promise.catch(() => {\r\n delete this.eventManagers[key];\r\n });\r\n return promise;\r\n }\r\n async initAndGetManager(auth) {\r\n const iframe = await _openIframe(auth);\r\n const manager = new AuthEventManager(auth);\r\n iframe.register('authEvent', (iframeEvent) => {\r\n _assert(iframeEvent === null || iframeEvent === void 0 ? void 0 : iframeEvent.authEvent, auth, \"invalid-auth-event\" /* AuthErrorCode.INVALID_AUTH_EVENT */);\r\n // TODO: Consider splitting redirect and popup events earlier on\r\n const handled = manager.onEvent(iframeEvent.authEvent);\r\n return { status: handled ? \"ACK\" /* GapiOutcome.ACK */ : \"ERROR\" /* GapiOutcome.ERROR */ };\r\n }, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);\r\n this.eventManagers[auth._key()] = { manager };\r\n this.iframes[auth._key()] = iframe;\r\n return manager;\r\n }\r\n _isIframeWebStorageSupported(auth, cb) {\r\n const iframe = this.iframes[auth._key()];\r\n iframe.send(WEB_STORAGE_SUPPORT_KEY, { type: WEB_STORAGE_SUPPORT_KEY }, result => {\r\n var _a;\r\n const isSupported = (_a = result === null || result === void 0 ? void 0 : result[0]) === null || _a === void 0 ? void 0 : _a[WEB_STORAGE_SUPPORT_KEY];\r\n if (isSupported !== undefined) {\r\n cb(!!isSupported);\r\n }\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);\r\n }\r\n _originValidation(auth) {\r\n const key = auth._key();\r\n if (!this.originValidationPromises[key]) {\r\n this.originValidationPromises[key] = _validateOrigin(auth);\r\n }\r\n return this.originValidationPromises[key];\r\n }\r\n get _shouldInitProactively() {\r\n // Mobile browsers and Safari need to optimistically initialize\r\n return _isMobileBrowser() || _isSafari() || _isIOS();\r\n }\r\n}\r\n/**\r\n * An implementation of {@link PopupRedirectResolver} suitable for browser\r\n * based applications.\r\n *\r\n * @remarks\r\n * This method does not work in a Node.js environment.\r\n *\r\n * @public\r\n */\r\nconst browserPopupRedirectResolver = BrowserPopupRedirectResolver;\n\nclass MultiFactorAssertionImpl {\r\n constructor(factorId) {\r\n this.factorId = factorId;\r\n }\r\n _process(auth, session, displayName) {\r\n switch (session.type) {\r\n case \"enroll\" /* MultiFactorSessionType.ENROLL */:\r\n return this._finalizeEnroll(auth, session.credential, displayName);\r\n case \"signin\" /* MultiFactorSessionType.SIGN_IN */:\r\n return this._finalizeSignIn(auth, session.credential);\r\n default:\r\n return debugFail('unexpected MultiFactorSessionType');\r\n }\r\n }\r\n}\n\n/**\r\n * {@inheritdoc PhoneMultiFactorAssertion}\r\n *\r\n * @public\r\n */\r\nclass PhoneMultiFactorAssertionImpl extends MultiFactorAssertionImpl {\r\n constructor(credential) {\r\n super(\"phone\" /* FactorId.PHONE */);\r\n this.credential = credential;\r\n }\r\n /** @internal */\r\n static _fromCredential(credential) {\r\n return new PhoneMultiFactorAssertionImpl(credential);\r\n }\r\n /** @internal */\r\n _finalizeEnroll(auth, idToken, displayName) {\r\n return finalizeEnrollPhoneMfa(auth, {\r\n idToken,\r\n displayName,\r\n phoneVerificationInfo: this.credential._makeVerificationRequest()\r\n });\r\n }\r\n /** @internal */\r\n _finalizeSignIn(auth, mfaPendingCredential) {\r\n return finalizeSignInPhoneMfa(auth, {\r\n mfaPendingCredential,\r\n phoneVerificationInfo: this.credential._makeVerificationRequest()\r\n });\r\n }\r\n}\r\n/**\r\n * Provider for generating a {@link PhoneMultiFactorAssertion}.\r\n *\r\n * @public\r\n */\r\nclass PhoneMultiFactorGenerator {\r\n constructor() { }\r\n /**\r\n * Provides a {@link PhoneMultiFactorAssertion} to confirm ownership of the phone second factor.\r\n *\r\n * @remarks\r\n * This method does not work in a Node.js environment.\r\n *\r\n * @param phoneAuthCredential - A credential provided by {@link PhoneAuthProvider.credential}.\r\n * @returns A {@link PhoneMultiFactorAssertion} which can be used with\r\n * {@link MultiFactorResolver.resolveSignIn}\r\n */\r\n static assertion(credential) {\r\n return PhoneMultiFactorAssertionImpl._fromCredential(credential);\r\n }\r\n}\r\n/**\r\n * The identifier of the phone second factor: `phone`.\r\n */\r\nPhoneMultiFactorGenerator.FACTOR_ID = 'phone';\n\n/**\r\n * Provider for generating a {@link TotpMultiFactorAssertion}.\r\n *\r\n * @public\r\n */\r\nclass TotpMultiFactorGenerator {\r\n /**\r\n * Provides a {@link TotpMultiFactorAssertion} to confirm ownership of\r\n * the TOTP (time-based one-time password) second factor.\r\n * This assertion is used to complete enrollment in TOTP second factor.\r\n *\r\n * @param secret A {@link TotpSecret} containing the shared secret key and other TOTP parameters.\r\n * @param oneTimePassword One-time password from TOTP App.\r\n * @returns A {@link TotpMultiFactorAssertion} which can be used with\r\n * {@link MultiFactorUser.enroll}.\r\n */\r\n static assertionForEnrollment(secret, oneTimePassword) {\r\n return TotpMultiFactorAssertionImpl._fromSecret(secret, oneTimePassword);\r\n }\r\n /**\r\n * Provides a {@link TotpMultiFactorAssertion} to confirm ownership of the TOTP second factor.\r\n * This assertion is used to complete signIn with TOTP as the second factor.\r\n *\r\n * @param enrollmentId identifies the enrolled TOTP second factor.\r\n * @param oneTimePassword One-time password from TOTP App.\r\n * @returns A {@link TotpMultiFactorAssertion} which can be used with\r\n * {@link MultiFactorResolver.resolveSignIn}.\r\n */\r\n static assertionForSignIn(enrollmentId, oneTimePassword) {\r\n return TotpMultiFactorAssertionImpl._fromEnrollmentId(enrollmentId, oneTimePassword);\r\n }\r\n /**\r\n * Returns a promise to {@link TotpSecret} which contains the TOTP shared secret key and other parameters.\r\n * Creates a TOTP secret as part of enrolling a TOTP second factor.\r\n * Used for generating a QR code URL or inputting into a TOTP app.\r\n * This method uses the auth instance corresponding to the user in the multiFactorSession.\r\n *\r\n * @param session The {@link MultiFactorSession} that the user is part of.\r\n * @returns A promise to {@link TotpSecret}.\r\n */\r\n static async generateSecret(session) {\r\n var _a;\r\n const mfaSession = session;\r\n _assert(typeof ((_a = mfaSession.user) === null || _a === void 0 ? void 0 : _a.auth) !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const response = await startEnrollTotpMfa(mfaSession.user.auth, {\r\n idToken: mfaSession.credential,\r\n totpEnrollmentInfo: {}\r\n });\r\n return TotpSecret._fromStartTotpMfaEnrollmentResponse(response, mfaSession.user.auth);\r\n }\r\n}\r\n/**\r\n * The identifier of the TOTP second factor: `totp`.\r\n */\r\nTotpMultiFactorGenerator.FACTOR_ID = \"totp\" /* FactorId.TOTP */;\r\nclass TotpMultiFactorAssertionImpl extends MultiFactorAssertionImpl {\r\n constructor(otp, enrollmentId, secret) {\r\n super(\"totp\" /* FactorId.TOTP */);\r\n this.otp = otp;\r\n this.enrollmentId = enrollmentId;\r\n this.secret = secret;\r\n }\r\n /** @internal */\r\n static _fromSecret(secret, otp) {\r\n return new TotpMultiFactorAssertionImpl(otp, undefined, secret);\r\n }\r\n /** @internal */\r\n static _fromEnrollmentId(enrollmentId, otp) {\r\n return new TotpMultiFactorAssertionImpl(otp, enrollmentId);\r\n }\r\n /** @internal */\r\n async _finalizeEnroll(auth, idToken, displayName) {\r\n _assert(typeof this.secret !== 'undefined', auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return finalizeEnrollTotpMfa(auth, {\r\n idToken,\r\n displayName,\r\n totpVerificationInfo: this.secret._makeTotpVerificationInfo(this.otp)\r\n });\r\n }\r\n /** @internal */\r\n async _finalizeSignIn(auth, mfaPendingCredential) {\r\n _assert(this.enrollmentId !== undefined && this.otp !== undefined, auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n const totpVerificationInfo = { verificationCode: this.otp };\r\n return finalizeSignInTotpMfa(auth, {\r\n mfaPendingCredential,\r\n mfaEnrollmentId: this.enrollmentId,\r\n totpVerificationInfo\r\n });\r\n }\r\n}\r\n/**\r\n * Provider for generating a {@link TotpMultiFactorAssertion}.\r\n *\r\n * Stores the shared secret key and other parameters to generate time-based OTPs.\r\n * Implements methods to retrieve the shared secret key and generate a QR code URL.\r\n * @public\r\n */\r\nclass TotpSecret {\r\n // The public members are declared outside the constructor so the docs can be generated.\r\n constructor(secretKey, hashingAlgorithm, codeLength, codeIntervalSeconds, enrollmentCompletionDeadline, sessionInfo, auth) {\r\n this.sessionInfo = sessionInfo;\r\n this.auth = auth;\r\n this.secretKey = secretKey;\r\n this.hashingAlgorithm = hashingAlgorithm;\r\n this.codeLength = codeLength;\r\n this.codeIntervalSeconds = codeIntervalSeconds;\r\n this.enrollmentCompletionDeadline = enrollmentCompletionDeadline;\r\n }\r\n /** @internal */\r\n static _fromStartTotpMfaEnrollmentResponse(response, auth) {\r\n return new TotpSecret(response.totpSessionInfo.sharedSecretKey, response.totpSessionInfo.hashingAlgorithm, response.totpSessionInfo.verificationCodeLength, response.totpSessionInfo.periodSec, new Date(response.totpSessionInfo.finalizeEnrollmentTime).toUTCString(), response.totpSessionInfo.sessionInfo, auth);\r\n }\r\n /** @internal */\r\n _makeTotpVerificationInfo(otp) {\r\n return { sessionInfo: this.sessionInfo, verificationCode: otp };\r\n }\r\n /**\r\n * Returns a QR code URL as described in\r\n * https://github.com/google/google-authenticator/wiki/Key-Uri-Format\r\n * This can be displayed to the user as a QR code to be scanned into a TOTP app like Google Authenticator.\r\n * If the optional parameters are unspecified, an accountName of and issuer of are used.\r\n *\r\n * @param accountName the name of the account/app along with a user identifier.\r\n * @param issuer issuer of the TOTP (likely the app name).\r\n * @returns A QR code URL string.\r\n */\r\n generateQrCodeUrl(accountName, issuer) {\r\n var _a;\r\n let useDefaults = false;\r\n if (_isEmptyString(accountName) || _isEmptyString(issuer)) {\r\n useDefaults = true;\r\n }\r\n if (useDefaults) {\r\n if (_isEmptyString(accountName)) {\r\n accountName = ((_a = this.auth.currentUser) === null || _a === void 0 ? void 0 : _a.email) || 'unknownuser';\r\n }\r\n if (_isEmptyString(issuer)) {\r\n issuer = this.auth.name;\r\n }\r\n }\r\n return `otpauth://totp/${issuer}:${accountName}?secret=${this.secretKey}&issuer=${issuer}&algorithm=${this.hashingAlgorithm}&digits=${this.codeLength}`;\r\n }\r\n}\r\n/** @internal */\r\nfunction _isEmptyString(input) {\r\n return typeof input === 'undefined' || (input === null || input === void 0 ? void 0 : input.length) === 0;\r\n}\n\nvar name = \"@firebase/auth\";\nvar version = \"1.7.3\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthInterop {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.internalListeners = new Map();\r\n }\r\n getUid() {\r\n var _a;\r\n this.assertAuthConfigured();\r\n return ((_a = this.auth.currentUser) === null || _a === void 0 ? void 0 : _a.uid) || null;\r\n }\r\n async getToken(forceRefresh) {\r\n this.assertAuthConfigured();\r\n await this.auth._initializationPromise;\r\n if (!this.auth.currentUser) {\r\n return null;\r\n }\r\n const accessToken = await this.auth.currentUser.getIdToken(forceRefresh);\r\n return { accessToken };\r\n }\r\n addAuthTokenListener(listener) {\r\n this.assertAuthConfigured();\r\n if (this.internalListeners.has(listener)) {\r\n return;\r\n }\r\n const unsubscribe = this.auth.onIdTokenChanged(user => {\r\n listener((user === null || user === void 0 ? void 0 : user.stsTokenManager.accessToken) || null);\r\n });\r\n this.internalListeners.set(listener, unsubscribe);\r\n this.updateProactiveRefresh();\r\n }\r\n removeAuthTokenListener(listener) {\r\n this.assertAuthConfigured();\r\n const unsubscribe = this.internalListeners.get(listener);\r\n if (!unsubscribe) {\r\n return;\r\n }\r\n this.internalListeners.delete(listener);\r\n unsubscribe();\r\n this.updateProactiveRefresh();\r\n }\r\n assertAuthConfigured() {\r\n _assert(this.auth._initializationPromise, \"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */);\r\n }\r\n updateProactiveRefresh() {\r\n if (this.internalListeners.size > 0) {\r\n this.auth._startProactiveRefresh();\r\n }\r\n else {\r\n this.auth._stopProactiveRefresh();\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getVersionForPlatform(clientPlatform) {\r\n switch (clientPlatform) {\r\n case \"Node\" /* ClientPlatform.NODE */:\r\n return 'node';\r\n case \"ReactNative\" /* ClientPlatform.REACT_NATIVE */:\r\n return 'rn';\r\n case \"Worker\" /* ClientPlatform.WORKER */:\r\n return 'webworker';\r\n case \"Cordova\" /* ClientPlatform.CORDOVA */:\r\n return 'cordova';\r\n case \"WebExtension\" /* ClientPlatform.WEB_EXTENSION */:\r\n return 'web-extension';\r\n default:\r\n return undefined;\r\n }\r\n}\r\n/** @internal */\r\nfunction registerAuth(clientPlatform) {\r\n _registerComponent(new Component(\"auth\" /* _ComponentName.AUTH */, (container, { options: deps }) => {\r\n const app = container.getProvider('app').getImmediate();\r\n const heartbeatServiceProvider = container.getProvider('heartbeat');\r\n const appCheckServiceProvider = container.getProvider('app-check-internal');\r\n const { apiKey, authDomain } = app.options;\r\n _assert(apiKey && !apiKey.includes(':'), \"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */, { appName: app.name });\r\n const config = {\r\n apiKey,\r\n authDomain,\r\n clientPlatform,\r\n apiHost: \"identitytoolkit.googleapis.com\" /* DefaultConfig.API_HOST */,\r\n tokenApiHost: \"securetoken.googleapis.com\" /* DefaultConfig.TOKEN_API_HOST */,\r\n apiScheme: \"https\" /* DefaultConfig.API_SCHEME */,\r\n sdkClientVersion: _getClientVersion(clientPlatform)\r\n };\r\n const authInstance = new AuthImpl(app, heartbeatServiceProvider, appCheckServiceProvider, config);\r\n _initializeAuthInstance(authInstance, deps);\r\n return authInstance;\r\n }, \"PUBLIC\" /* ComponentType.PUBLIC */)\r\n /**\r\n * Auth can only be initialized by explicitly calling getAuth() or initializeAuth()\r\n * For why we do this, See go/firebase-next-auth-init\r\n */\r\n .setInstantiationMode(\"EXPLICIT\" /* InstantiationMode.EXPLICIT */)\r\n /**\r\n * Because all firebase products that depend on auth depend on auth-internal directly,\r\n * we need to initialize auth-internal after auth is initialized to make it available to other firebase products.\r\n */\r\n .setInstanceCreatedCallback((container, _instanceIdentifier, _instance) => {\r\n const authInternalProvider = container.getProvider(\"auth-internal\" /* _ComponentName.AUTH_INTERNAL */);\r\n authInternalProvider.initialize();\r\n }));\r\n _registerComponent(new Component(\"auth-internal\" /* _ComponentName.AUTH_INTERNAL */, container => {\r\n const auth = _castAuth(container.getProvider(\"auth\" /* _ComponentName.AUTH */).getImmediate());\r\n return (auth => new AuthInterop(auth))(auth);\r\n }, \"PRIVATE\" /* ComponentType.PRIVATE */).setInstantiationMode(\"EXPLICIT\" /* InstantiationMode.EXPLICIT */));\r\n registerVersion(name, version, getVersionForPlatform(clientPlatform));\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_ID_TOKEN_MAX_AGE = 5 * 60;\r\nconst authIdTokenMaxAge = getExperimentalSetting('authIdTokenMaxAge') || DEFAULT_ID_TOKEN_MAX_AGE;\r\nlet lastPostedIdToken = null;\r\nconst mintCookieFactory = (url) => async (user) => {\r\n const idTokenResult = user && (await user.getIdTokenResult());\r\n const idTokenAge = idTokenResult &&\r\n (new Date().getTime() - Date.parse(idTokenResult.issuedAtTime)) / 1000;\r\n if (idTokenAge && idTokenAge > authIdTokenMaxAge) {\r\n return;\r\n }\r\n // Specifically trip null => undefined when logged out, to delete any existing cookie\r\n const idToken = idTokenResult === null || idTokenResult === void 0 ? void 0 : idTokenResult.token;\r\n if (lastPostedIdToken === idToken) {\r\n return;\r\n }\r\n lastPostedIdToken = idToken;\r\n await fetch(url, {\r\n method: idToken ? 'POST' : 'DELETE',\r\n headers: idToken\r\n ? {\r\n 'Authorization': `Bearer ${idToken}`\r\n }\r\n : {}\r\n });\r\n};\r\n/**\r\n * Returns the Auth instance associated with the provided {@link @firebase/app#FirebaseApp}.\r\n * If no instance exists, initializes an Auth instance with platform-specific default dependencies.\r\n *\r\n * @param app - The Firebase App.\r\n *\r\n * @public\r\n */\r\nfunction getAuth(app = getApp()) {\r\n const provider = _getProvider(app, 'auth');\r\n if (provider.isInitialized()) {\r\n return provider.getImmediate();\r\n }\r\n const auth = initializeAuth(app, {\r\n popupRedirectResolver: browserPopupRedirectResolver,\r\n persistence: [\r\n indexedDBLocalPersistence,\r\n browserLocalPersistence,\r\n browserSessionPersistence\r\n ]\r\n });\r\n const authTokenSyncPath = getExperimentalSetting('authTokenSyncURL');\r\n // Only do the Cookie exchange in a secure context\r\n if (authTokenSyncPath &&\r\n typeof isSecureContext === 'boolean' &&\r\n isSecureContext) {\r\n // Don't allow urls (XSS possibility), only paths on the same domain\r\n const authTokenSyncUrl = new URL(authTokenSyncPath, location.origin);\r\n if (location.origin === authTokenSyncUrl.origin) {\r\n const mintCookie = mintCookieFactory(authTokenSyncUrl.toString());\r\n beforeAuthStateChanged(auth, mintCookie, () => mintCookie(auth.currentUser));\r\n onIdTokenChanged(auth, user => mintCookie(user));\r\n }\r\n }\r\n const authEmulatorHost = getDefaultEmulatorHost('auth');\r\n if (authEmulatorHost) {\r\n connectAuthEmulator(auth, `http://${authEmulatorHost}`);\r\n }\r\n return auth;\r\n}\r\nfunction getScriptParentElement() {\r\n var _a, _b;\r\n return (_b = (_a = document.getElementsByTagName('head')) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : document;\r\n}\r\n_setExternalJSProvider({\r\n loadJS(url) {\r\n // TODO: consider adding timeout support & cancellation\r\n return new Promise((resolve, reject) => {\r\n const el = document.createElement('script');\r\n el.setAttribute('src', url);\r\n el.onload = resolve;\r\n el.onerror = e => {\r\n const error = _createError(\"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n error.customData = e;\r\n reject(error);\r\n };\r\n el.type = 'text/javascript';\r\n el.charset = 'UTF-8';\r\n getScriptParentElement().appendChild(el);\r\n });\r\n },\r\n gapiScript: 'https://apis.google.com/js/api.js',\r\n recaptchaV2Script: 'https://www.google.com/recaptcha/api.js',\r\n recaptchaEnterpriseScript: 'https://www.google.com/recaptcha/enterprise.js?render='\r\n});\r\nregisterAuth(\"Browser\" /* ClientPlatform.BROWSER */);\n\nexport { TwitterAuthProvider as $, ActionCodeOperation as A, updateCurrentUser as B, signOut as C, revokeAccessToken as D, deleteUser as E, FactorId as F, debugErrorMap as G, prodErrorMap as H, AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY as I, initializeAuth as J, connectAuthEmulator as K, AuthCredential as L, EmailAuthCredential as M, OAuthCredential as N, OperationType as O, PhoneAuthProvider as P, PhoneAuthCredential as Q, RecaptchaVerifier as R, SignInMethod as S, TotpMultiFactorGenerator as T, inMemoryPersistence as U, EmailAuthProvider as V, FacebookAuthProvider as W, GoogleAuthProvider as X, GithubAuthProvider as Y, OAuthProvider as Z, SAMLAuthProvider as _, browserSessionPersistence as a, signInAnonymously as a0, signInWithCredential as a1, linkWithCredential as a2, reauthenticateWithCredential as a3, signInWithCustomToken as a4, sendPasswordResetEmail as a5, confirmPasswordReset as a6, applyActionCode as a7, checkActionCode as a8, verifyPasswordResetCode as a9, _isIOS7Or8 as aA, _createError as aB, _assert as aC, AuthEventManager as aD, _getInstance as aE, _persistenceKeyName as aF, _getRedirectResult as aG, _overrideRedirectResult as aH, _clearRedirectOutcomes as aI, _castAuth as aJ, UserImpl as aK, AuthImpl as aL, _getClientVersion as aM, _generateEventId as aN, AuthPopup as aO, FetchProvider as aP, SAMLAuthCredential as aQ, createUserWithEmailAndPassword as aa, signInWithEmailAndPassword as ab, sendSignInLinkToEmail as ac, isSignInWithEmailLink as ad, signInWithEmailLink as ae, fetchSignInMethodsForEmail as af, sendEmailVerification as ag, verifyBeforeUpdateEmail as ah, ActionCodeURL as ai, parseActionCodeURL as aj, updateProfile as ak, updateEmail as al, updatePassword as am, getIdToken as an, getIdTokenResult as ao, unlink as ap, getAdditionalUserInfo as aq, reload as ar, getMultiFactorResolver as as, multiFactor as at, debugAssert as au, _isIOS as av, _isAndroid as aw, _fail as ax, _getRedirectUrl as ay, _getProjectConfig as az, browserLocalPersistence as b, signInWithPopup as c, linkWithPopup as d, reauthenticateWithPopup as e, signInWithRedirect as f, linkWithRedirect as g, reauthenticateWithRedirect as h, indexedDBLocalPersistence as i, getRedirectResult as j, browserPopupRedirectResolver as k, linkWithPhoneNumber as l, PhoneMultiFactorGenerator as m, TotpSecret as n, getAuth as o, ProviderId as p, setPersistence as q, reauthenticateWithPhoneNumber as r, signInWithPhoneNumber as s, initializeRecaptchaConfig as t, updatePhoneNumber as u, validatePassword as v, onIdTokenChanged as w, beforeAuthStateChanged as x, onAuthStateChanged as y, useDeviceLanguage as z };\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\r\n */\r\nconst CONSTANTS = {\r\n /**\r\n * @define {boolean} Whether this is the client Node.js SDK.\r\n */\r\n NODE_CLIENT: false,\r\n /**\r\n * @define {boolean} Whether this is the Admin Node.js SDK.\r\n */\r\n NODE_ADMIN: false,\r\n /**\r\n * Firebase SDK Version\r\n */\r\n SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws an error if the provided assertion is falsy\r\n */\r\nconst assert = function (assertion, message) {\r\n if (!assertion) {\r\n throw assertionError(message);\r\n }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n */\r\nconst assertionError = function (message) {\r\n return new Error('Firebase Database (' +\r\n CONSTANTS.SDK_VERSION +\r\n ') INTERNAL ASSERT FAILED: ' +\r\n message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst stringToByteArray$1 = function (str) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if ((c & 0xfc00) === 0xd800 &&\r\n i + 1 < str.length &&\r\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\r\n // Surrogate Pair\r\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param bytes Array of numbers representing characters.\r\n * @return Stringification of the array.\r\n */\r\nconst byteArrayToString = function (bytes) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let pos = 0, c = 0;\r\n while (pos < bytes.length) {\r\n const c1 = bytes[pos++];\r\n if (c1 < 128) {\r\n out[c++] = String.fromCharCode(c1);\r\n }\r\n else if (c1 > 191 && c1 < 224) {\r\n const c2 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n }\r\n else if (c1 > 239 && c1 < 365) {\r\n // Surrogate Pair\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n const c4 = bytes[pos++];\r\n const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n 0x10000;\r\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n }\r\n else {\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n }\r\n }\r\n return out.join('');\r\n};\r\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\r\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\r\n// Static lookup maps, lazily populated by init_()\r\nconst base64 = {\r\n /**\r\n * Maps bytes to characters.\r\n */\r\n byteToCharMap_: null,\r\n /**\r\n * Maps characters to bytes.\r\n */\r\n charToByteMap_: null,\r\n /**\r\n * Maps bytes to websafe characters.\r\n * @private\r\n */\r\n byteToCharMapWebSafe_: null,\r\n /**\r\n * Maps websafe characters to bytes.\r\n * @private\r\n */\r\n charToByteMapWebSafe_: null,\r\n /**\r\n * Our default alphabet, shared between\r\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n */\r\n ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n /**\r\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n */\r\n get ENCODED_VALS() {\r\n return this.ENCODED_VALS_BASE + '+/=';\r\n },\r\n /**\r\n * Our websafe alphabet.\r\n */\r\n get ENCODED_VALS_WEBSAFE() {\r\n return this.ENCODED_VALS_BASE + '-_.';\r\n },\r\n /**\r\n * Whether this browser supports the atob and btoa functions. This extension\r\n * started at Mozilla but is now implemented by many browsers. We use the\r\n * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n * but still allowing the standard per-browser compilations.\r\n *\r\n */\r\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n /**\r\n * Base64-encode an array of bytes.\r\n *\r\n * @param input An array of bytes (numbers with\r\n * value in [0, 255]) to encode.\r\n * @param webSafe Boolean indicating we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeByteArray(input, webSafe) {\r\n if (!Array.isArray(input)) {\r\n throw Error('encodeByteArray takes an array as a parameter');\r\n }\r\n this.init_();\r\n const byteToCharMap = webSafe\r\n ? this.byteToCharMapWebSafe_\r\n : this.byteToCharMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length; i += 3) {\r\n const byte1 = input[i];\r\n const haveByte2 = i + 1 < input.length;\r\n const byte2 = haveByte2 ? input[i + 1] : 0;\r\n const haveByte3 = i + 2 < input.length;\r\n const byte3 = haveByte3 ? input[i + 2] : 0;\r\n const outByte1 = byte1 >> 2;\r\n const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n let outByte4 = byte3 & 0x3f;\r\n if (!haveByte3) {\r\n outByte4 = 64;\r\n if (!haveByte2) {\r\n outByte3 = 64;\r\n }\r\n }\r\n output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n }\r\n return output.join('');\r\n },\r\n /**\r\n * Base64-encode a string.\r\n *\r\n * @param input A string to encode.\r\n * @param webSafe If true, we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return btoa(input);\r\n }\r\n return this.encodeByteArray(stringToByteArray$1(input), webSafe);\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * @param input to decode.\r\n * @param webSafe True if we should use the\r\n * alternative alphabet.\r\n * @return string representing the decoded value.\r\n */\r\n decodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return atob(input);\r\n }\r\n return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * In base-64 decoding, groups of four characters are converted into three\r\n * bytes. If the encoder did not apply padding, the input length may not\r\n * be a multiple of 4.\r\n *\r\n * In this case, the last group will have fewer than 4 characters, and\r\n * padding will be inferred. If the group has one or two characters, it decodes\r\n * to one byte. If the group has three characters, it decodes to two bytes.\r\n *\r\n * @param input Input to decode.\r\n * @param webSafe True if we should use the web-safe alphabet.\r\n * @return bytes representing the decoded value.\r\n */\r\n decodeStringToByteArray(input, webSafe) {\r\n this.init_();\r\n const charToByteMap = webSafe\r\n ? this.charToByteMapWebSafe_\r\n : this.charToByteMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length;) {\r\n const byte1 = charToByteMap[input.charAt(i++)];\r\n const haveByte2 = i < input.length;\r\n const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n ++i;\r\n const haveByte3 = i < input.length;\r\n const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n const haveByte4 = i < input.length;\r\n const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n throw new DecodeBase64StringError();\r\n }\r\n const outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n output.push(outByte1);\r\n if (byte3 !== 64) {\r\n const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n output.push(outByte2);\r\n if (byte4 !== 64) {\r\n const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n output.push(outByte3);\r\n }\r\n }\r\n }\r\n return output;\r\n },\r\n /**\r\n * Lazy static initialization function. Called before\r\n * accessing any of the static map variables.\r\n * @private\r\n */\r\n init_() {\r\n if (!this.byteToCharMap_) {\r\n this.byteToCharMap_ = {};\r\n this.charToByteMap_ = {};\r\n this.byteToCharMapWebSafe_ = {};\r\n this.charToByteMapWebSafe_ = {};\r\n // We want quick mappings back and forth, so we precompute two maps.\r\n for (let i = 0; i < this.ENCODED_VALS.length; i++) {\r\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n // Be forgiving when decoding and correctly decode both encodings.\r\n if (i >= this.ENCODED_VALS_BASE.length) {\r\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n/**\r\n * An error encountered while decoding base64 string.\r\n */\r\nclass DecodeBase64StringError extends Error {\r\n constructor() {\r\n super(...arguments);\r\n this.name = 'DecodeBase64StringError';\r\n }\r\n}\r\n/**\r\n * URL-safe base64 encoding\r\n */\r\nconst base64Encode = function (str) {\r\n const utf8Bytes = stringToByteArray$1(str);\r\n return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 encoding (without \".\" padding in the end).\r\n * e.g. Used in JSON Web Token (JWT) parts.\r\n */\r\nconst base64urlEncodeWithoutPadding = function (str) {\r\n // Use base64url encoding and remove padding in the end (dot characters).\r\n return base64Encode(str).replace(/\\./g, '');\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param str To be decoded\r\n * @return Decoded result, if possible\r\n */\r\nconst base64Decode = function (str) {\r\n try {\r\n return base64.decodeString(str, true);\r\n }\r\n catch (e) {\r\n console.error('base64Decode failed: ', e);\r\n }\r\n return null;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays). Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n *\r\n * Note: we don't merge __proto__ to prevent prototype pollution\r\n */\r\nfunction deepExtend(target, source) {\r\n if (!(source instanceof Object)) {\r\n return source;\r\n }\r\n switch (source.constructor) {\r\n case Date:\r\n // Treat Dates like scalars; if the target date object had any child\r\n // properties - they will be lost!\r\n const dateValue = source;\r\n return new Date(dateValue.getTime());\r\n case Object:\r\n if (target === undefined) {\r\n target = {};\r\n }\r\n break;\r\n case Array:\r\n // Always copy the array source and overwrite the target.\r\n target = [];\r\n break;\r\n default:\r\n // Not a plain Object - treat it as a scalar.\r\n return source;\r\n }\r\n for (const prop in source) {\r\n // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\r\n if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\r\n continue;\r\n }\r\n target[prop] = deepExtend(target[prop], source[prop]);\r\n }\r\n return target;\r\n}\r\nfunction isValidKey(key) {\r\n return key !== '__proto__';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Polyfill for `globalThis` object.\r\n * @returns the `globalThis` object for the given environment.\r\n * @public\r\n */\r\nfunction getGlobal() {\r\n if (typeof self !== 'undefined') {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined') {\r\n return window;\r\n }\r\n if (typeof global !== 'undefined') {\r\n return global;\r\n }\r\n throw new Error('Unable to locate global object.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;\r\n/**\r\n * Attempt to read defaults from a JSON string provided to\r\n * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in\r\n * process(.)env(.)__FIREBASE_DEFAULTS_PATH__\r\n * The dots are in parens because certain compilers (Vite?) cannot\r\n * handle seeing that variable in comments.\r\n * See https://github.com/firebase/firebase-js-sdk/issues/6838\r\n */\r\nconst getDefaultsFromEnvVariable = () => {\r\n if (typeof process === 'undefined' || typeof process.env === 'undefined') {\r\n return;\r\n }\r\n const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\r\n if (defaultsJsonString) {\r\n return JSON.parse(defaultsJsonString);\r\n }\r\n};\r\nconst getDefaultsFromCookie = () => {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n let match;\r\n try {\r\n match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\r\n }\r\n catch (e) {\r\n // Some environments such as Angular Universal SSR have a\r\n // `document` object but error on accessing `document.cookie`.\r\n return;\r\n }\r\n const decoded = match && base64Decode(match[1]);\r\n return decoded && JSON.parse(decoded);\r\n};\r\n/**\r\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\r\n * (1) if such an object exists as a property of `globalThis`\r\n * (2) if such an object was provided on a shell environment variable\r\n * (3) if such an object exists in a cookie\r\n * @public\r\n */\r\nconst getDefaults = () => {\r\n try {\r\n return (getDefaultsFromGlobal() ||\r\n getDefaultsFromEnvVariable() ||\r\n getDefaultsFromCookie());\r\n }\r\n catch (e) {\r\n /**\r\n * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\r\n * to any environment case we have not accounted for. Log to\r\n * info instead of swallowing so we can find these unknown cases\r\n * and add paths for them if needed.\r\n */\r\n console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\r\n return;\r\n }\r\n};\r\n/**\r\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };\r\n/**\r\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHostnameAndPort = (productName) => {\r\n const host = getDefaultEmulatorHost(productName);\r\n if (!host) {\r\n return undefined;\r\n }\r\n const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\r\n if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\r\n throw new Error(`Invalid host ${host} with no separate hostname and port!`);\r\n }\r\n // eslint-disable-next-line no-restricted-globals\r\n const port = parseInt(host.substring(separatorIndex + 1), 10);\r\n if (host[0] === '[') {\r\n // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\r\n return [host.substring(1, separatorIndex - 1), port];\r\n }\r\n else {\r\n return [host.substring(0, separatorIndex), port];\r\n }\r\n};\r\n/**\r\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\r\n * @public\r\n */\r\nconst getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };\r\n/**\r\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\r\n * prefixed by \"_\")\r\n * @public\r\n */\r\nconst getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Deferred {\r\n constructor() {\r\n this.reject = () => { };\r\n this.resolve = () => { };\r\n this.promise = new Promise((resolve, reject) => {\r\n this.resolve = resolve;\r\n this.reject = reject;\r\n });\r\n }\r\n /**\r\n * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n */\r\n wrapCallback(callback) {\r\n return (error, value) => {\r\n if (error) {\r\n this.reject(error);\r\n }\r\n else {\r\n this.resolve(value);\r\n }\r\n if (typeof callback === 'function') {\r\n // Attaching noop handler just in case developer wasn't expecting\r\n // promises\r\n this.promise.catch(() => { });\r\n // Some of our callbacks don't expect a value and our own tests\r\n // assert that the parameter length is 1\r\n if (callback.length === 1) {\r\n callback(error);\r\n }\r\n else {\r\n callback(error, value);\r\n }\r\n }\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction createMockUserToken(token, projectId) {\r\n if (token.uid) {\r\n throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\r\n }\r\n // Unsecured JWTs use \"none\" as the algorithm.\r\n const header = {\r\n alg: 'none',\r\n type: 'JWT'\r\n };\r\n const project = projectId || 'demo-project';\r\n const iat = token.iat || 0;\r\n const sub = token.sub || token.user_id;\r\n if (!sub) {\r\n throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\r\n }\r\n const payload = Object.assign({ \r\n // Set all required fields to decent defaults\r\n iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\r\n sign_in_provider: 'custom',\r\n identities: {}\r\n } }, token);\r\n // Unsecured JWTs use the empty string as a signature.\r\n const signature = '';\r\n return [\r\n base64urlEncodeWithoutPadding(JSON.stringify(header)),\r\n base64urlEncodeWithoutPadding(JSON.stringify(payload)),\r\n signature\r\n ].join('.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return user agent string\r\n */\r\nfunction getUA() {\r\n if (typeof navigator !== 'undefined' &&\r\n typeof navigator['userAgent'] === 'string') {\r\n return navigator['userAgent'];\r\n }\r\n else {\r\n return '';\r\n }\r\n}\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\r\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\r\n * wait for a callback.\r\n */\r\nfunction isMobileCordova() {\r\n return (typeof window !== 'undefined' &&\r\n // @ts-ignore Setting up an broadly applicable index signature for Window\r\n // just to deal with this case would probably be a bad idea.\r\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n}\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return true if Node.js environment is detected or specified.\r\n */\r\n// Node detection logic from: https://github.com/iliakan/detect-node/\r\nfunction isNode() {\r\n var _a;\r\n const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;\r\n if (forceEnvironment === 'node') {\r\n return true;\r\n }\r\n else if (forceEnvironment === 'browser') {\r\n return false;\r\n }\r\n try {\r\n return (Object.prototype.toString.call(global.process) === '[object process]');\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Detect Browser Environment\r\n */\r\nfunction isBrowser() {\r\n return typeof self === 'object' && self.self === self;\r\n}\r\nfunction isBrowserExtension() {\r\n const runtime = typeof chrome === 'object'\r\n ? chrome.runtime\r\n : typeof browser === 'object'\r\n ? browser.runtime\r\n : undefined;\r\n return typeof runtime === 'object' && runtime.id !== undefined;\r\n}\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return true if ReactNative environment is detected.\r\n */\r\nfunction isReactNative() {\r\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n}\r\n/** Detects Electron apps. */\r\nfunction isElectron() {\r\n return getUA().indexOf('Electron/') >= 0;\r\n}\r\n/** Detects Internet Explorer. */\r\nfunction isIE() {\r\n const ua = getUA();\r\n return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\r\n}\r\n/** Detects Universal Windows Platform apps. */\r\nfunction isUWP() {\r\n return getUA().indexOf('MSAppHost/') >= 0;\r\n}\r\n/**\r\n * Detect whether the current SDK build is the Node version.\r\n *\r\n * @return true if it's the Node SDK build.\r\n */\r\nfunction isNodeSdk() {\r\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n}\r\n/** Returns true if we are running in Safari. */\r\nfunction isSafari() {\r\n return (!isNode() &&\r\n !!navigator.userAgent &&\r\n navigator.userAgent.includes('Safari') &&\r\n !navigator.userAgent.includes('Chrome'));\r\n}\r\n/**\r\n * This method checks if indexedDB is supported by current browser/service worker context\r\n * @return true if indexedDB is supported by current browser/service worker context\r\n */\r\nfunction isIndexedDBAvailable() {\r\n try {\r\n return typeof indexedDB === 'object';\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\r\n * if errors occur during the database open operation.\r\n *\r\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\r\n * private browsing)\r\n */\r\nfunction validateIndexedDBOpenable() {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n let preExist = true;\r\n const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\r\n const request = self.indexedDB.open(DB_CHECK_NAME);\r\n request.onsuccess = () => {\r\n request.result.close();\r\n // delete database only when it doesn't pre-exist\r\n if (!preExist) {\r\n self.indexedDB.deleteDatabase(DB_CHECK_NAME);\r\n }\r\n resolve(true);\r\n };\r\n request.onupgradeneeded = () => {\r\n preExist = false;\r\n };\r\n request.onerror = () => {\r\n var _a;\r\n reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\r\n };\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n });\r\n}\r\n/**\r\n *\r\n * This method checks whether cookie is enabled within current browser\r\n * @return true if cookie is enabled within current browser\r\n */\r\nfunction areCookiesEnabled() {\r\n if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\r\n return false;\r\n }\r\n return true;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Standardized Firebase Error.\r\n *\r\n * Usage:\r\n *\r\n * // Typescript string literals for type-safe codes\r\n * type Err =\r\n * 'unknown' |\r\n * 'object-not-found'\r\n * ;\r\n *\r\n * // Closure enum for type-safe error codes\r\n * // at-enum {string}\r\n * var Err = {\r\n * UNKNOWN: 'unknown',\r\n * OBJECT_NOT_FOUND: 'object-not-found',\r\n * }\r\n *\r\n * let errors: Map = {\r\n * 'generic-error': \"Unknown error\",\r\n * 'file-not-found': \"Could not find file: {$file}\",\r\n * };\r\n *\r\n * // Type-safe function - must pass a valid error code as param.\r\n * let error = new ErrorFactory('service', 'Service', errors);\r\n *\r\n * ...\r\n * throw error.create(Err.GENERIC);\r\n * ...\r\n * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\r\n * ...\r\n * // Service: Could not file file: foo.txt (service/file-not-found).\r\n *\r\n * catch (e) {\r\n * assert(e.message === \"Could not find file: foo.txt.\");\r\n * if ((e as FirebaseError)?.code === 'service/file-not-found') {\r\n * console.log(\"Could not read file: \" + e['file']);\r\n * }\r\n * }\r\n */\r\nconst ERROR_NAME = 'FirebaseError';\r\n// Based on code from:\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\r\nclass FirebaseError extends Error {\r\n constructor(\r\n /** The error code for this error. */\r\n code, message, \r\n /** Custom data for this error. */\r\n customData) {\r\n super(message);\r\n this.code = code;\r\n this.customData = customData;\r\n /** The custom name for all FirebaseErrors. */\r\n this.name = ERROR_NAME;\r\n // Fix For ES5\r\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n Object.setPrototypeOf(this, FirebaseError.prototype);\r\n // Maintains proper stack trace for where our error was thrown.\r\n // Only available on V8.\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ErrorFactory.prototype.create);\r\n }\r\n }\r\n}\r\nclass ErrorFactory {\r\n constructor(service, serviceName, errors) {\r\n this.service = service;\r\n this.serviceName = serviceName;\r\n this.errors = errors;\r\n }\r\n create(code, ...data) {\r\n const customData = data[0] || {};\r\n const fullCode = `${this.service}/${code}`;\r\n const template = this.errors[code];\r\n const message = template ? replaceTemplate(template, customData) : 'Error';\r\n // Service Name: Error message (service/code).\r\n const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\r\n const error = new FirebaseError(fullCode, fullMessage, customData);\r\n return error;\r\n }\r\n}\r\nfunction replaceTemplate(template, data) {\r\n return template.replace(PATTERN, (_, key) => {\r\n const value = data[key];\r\n return value != null ? String(value) : `<${key}?>`;\r\n });\r\n}\r\nconst PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n return JSON.stringify(data);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst decode = function (token) {\r\n let header = {}, claims = {}, data = {}, signature = '';\r\n try {\r\n const parts = token.split('.');\r\n header = jsonEval(base64Decode(parts[0]) || '');\r\n claims = jsonEval(base64Decode(parts[1]) || '');\r\n signature = parts[2];\r\n data = claims['d'] || {};\r\n delete claims['d'];\r\n }\r\n catch (e) { }\r\n return {\r\n header,\r\n claims,\r\n data,\r\n signature\r\n };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidTimestamp = function (token) {\r\n const claims = decode(token).claims;\r\n const now = Math.floor(new Date().getTime() / 1000);\r\n let validSince = 0, validUntil = 0;\r\n if (typeof claims === 'object') {\r\n if (claims.hasOwnProperty('nbf')) {\r\n validSince = claims['nbf'];\r\n }\r\n else if (claims.hasOwnProperty('iat')) {\r\n validSince = claims['iat'];\r\n }\r\n if (claims.hasOwnProperty('exp')) {\r\n validUntil = claims['exp'];\r\n }\r\n else {\r\n // token will expire after 24h by default\r\n validUntil = validSince + 86400;\r\n }\r\n }\r\n return (!!now &&\r\n !!validSince &&\r\n !!validUntil &&\r\n now >= validSince &&\r\n now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst issuedAtTime = function (token) {\r\n const claims = decode(token).claims;\r\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n return claims['iat'];\r\n }\r\n return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidFormat = function (token) {\r\n const decoded = decode(token), claims = decoded.claims;\r\n return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isAdmin = function (token) {\r\n const claims = decode(token).claims;\r\n return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction contains(obj, key) {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n}\r\nfunction safeGet(obj, key) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return obj[key];\r\n }\r\n else {\r\n return undefined;\r\n }\r\n}\r\nfunction isEmpty(obj) {\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction map(obj, fn, contextObj) {\r\n const res = {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n res[key] = fn.call(contextObj, obj[key], key, obj);\r\n }\r\n }\r\n return res;\r\n}\r\n/**\r\n * Deep equal two objects. Support Arrays and Objects.\r\n */\r\nfunction deepEqual(a, b) {\r\n if (a === b) {\r\n return true;\r\n }\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n for (const k of aKeys) {\r\n if (!bKeys.includes(k)) {\r\n return false;\r\n }\r\n const aProp = a[k];\r\n const bProp = b[k];\r\n if (isObject(aProp) && isObject(bProp)) {\r\n if (!deepEqual(aProp, bProp)) {\r\n return false;\r\n }\r\n }\r\n else if (aProp !== bProp) {\r\n return false;\r\n }\r\n }\r\n for (const k of bKeys) {\r\n if (!aKeys.includes(k)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isObject(thing) {\r\n return thing !== null && typeof thing === 'object';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Rejects if the given promise doesn't resolve in timeInMS milliseconds.\r\n * @internal\r\n */\r\nfunction promiseWithTimeout(promise, timeInMS = 2000) {\r\n const deferredPromise = new Deferred();\r\n setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);\r\n promise.then(deferredPromise.resolve, deferredPromise.reject);\r\n return deferredPromise.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\r\n * params object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n */\r\nfunction querystring(querystringParams) {\r\n const params = [];\r\n for (const [key, value] of Object.entries(querystringParams)) {\r\n if (Array.isArray(value)) {\r\n value.forEach(arrayVal => {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n });\r\n }\r\n else {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n }\r\n }\r\n return params.length ? '&' + params.join('&') : '';\r\n}\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\r\n * (e.g. {arg: 'val', arg2: 'val2'})\r\n */\r\nfunction querystringDecode(querystring) {\r\n const obj = {};\r\n const tokens = querystring.replace(/^\\?/, '').split('&');\r\n tokens.forEach(token => {\r\n if (token) {\r\n const [key, value] = token.split('=');\r\n obj[decodeURIComponent(key)] = decodeURIComponent(value);\r\n }\r\n });\r\n return obj;\r\n}\r\n/**\r\n * Extract the query string part of a URL, including the leading question mark (if present).\r\n */\r\nfunction extractQuerystring(url) {\r\n const queryStart = url.indexOf('?');\r\n if (!queryStart) {\r\n return '';\r\n }\r\n const fragmentStart = url.indexOf('#', queryStart);\r\n return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n * var sha1 = new sha1();\r\n * sha1.update(bytes);\r\n * var hash = sha1.digest();\r\n *\r\n * Performance:\r\n * Chrome 23: ~400 Mbit/s\r\n * Firefox 16: ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @final\r\n * @struct\r\n */\r\nclass Sha1 {\r\n constructor() {\r\n /**\r\n * Holds the previous values of accumulated variables a-e in the compress_\r\n * function.\r\n * @private\r\n */\r\n this.chain_ = [];\r\n /**\r\n * A buffer holding the partially computed hash result.\r\n * @private\r\n */\r\n this.buf_ = [];\r\n /**\r\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\r\n * as the message schedule in the docs.\r\n * @private\r\n */\r\n this.W_ = [];\r\n /**\r\n * Contains data needed to pad messages less than 64 bytes.\r\n * @private\r\n */\r\n this.pad_ = [];\r\n /**\r\n * @private {number}\r\n */\r\n this.inbuf_ = 0;\r\n /**\r\n * @private {number}\r\n */\r\n this.total_ = 0;\r\n this.blockSize = 512 / 8;\r\n this.pad_[0] = 128;\r\n for (let i = 1; i < this.blockSize; ++i) {\r\n this.pad_[i] = 0;\r\n }\r\n this.reset();\r\n }\r\n reset() {\r\n this.chain_[0] = 0x67452301;\r\n this.chain_[1] = 0xefcdab89;\r\n this.chain_[2] = 0x98badcfe;\r\n this.chain_[3] = 0x10325476;\r\n this.chain_[4] = 0xc3d2e1f0;\r\n this.inbuf_ = 0;\r\n this.total_ = 0;\r\n }\r\n /**\r\n * Internal compress helper function.\r\n * @param buf Block to compress.\r\n * @param offset Offset of the block in the buffer.\r\n * @private\r\n */\r\n compress_(buf, offset) {\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n const W = this.W_;\r\n // get 16 big endian words\r\n if (typeof buf === 'string') {\r\n for (let i = 0; i < 16; i++) {\r\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n // have a bug that turns the post-increment ++ operator into pre-increment\r\n // during JIT compilation. We have code that depends heavily on SHA-1 for\r\n // correctness and which is affected by this bug, so I've removed all uses\r\n // of post-increment ++ in which the result value is used. We can revert\r\n // this change once the Safari bug\r\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n // most clients have been updated.\r\n W[i] =\r\n (buf.charCodeAt(offset) << 24) |\r\n (buf.charCodeAt(offset + 1) << 16) |\r\n (buf.charCodeAt(offset + 2) << 8) |\r\n buf.charCodeAt(offset + 3);\r\n offset += 4;\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < 16; i++) {\r\n W[i] =\r\n (buf[offset] << 24) |\r\n (buf[offset + 1] << 16) |\r\n (buf[offset + 2] << 8) |\r\n buf[offset + 3];\r\n offset += 4;\r\n }\r\n }\r\n // expand to 80 words\r\n for (let i = 16; i < 80; i++) {\r\n const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n }\r\n let a = this.chain_[0];\r\n let b = this.chain_[1];\r\n let c = this.chain_[2];\r\n let d = this.chain_[3];\r\n let e = this.chain_[4];\r\n let f, k;\r\n // TODO(user): Try to unroll this loop to speed up the computation.\r\n for (let i = 0; i < 80; i++) {\r\n if (i < 40) {\r\n if (i < 20) {\r\n f = d ^ (b & (c ^ d));\r\n k = 0x5a827999;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0x6ed9eba1;\r\n }\r\n }\r\n else {\r\n if (i < 60) {\r\n f = (b & c) | (d & (b | c));\r\n k = 0x8f1bbcdc;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0xca62c1d6;\r\n }\r\n }\r\n const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n e = d;\r\n d = c;\r\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n b = a;\r\n a = t;\r\n }\r\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n }\r\n update(bytes, length) {\r\n // TODO(johnlenz): tighten the function signature and remove this check\r\n if (bytes == null) {\r\n return;\r\n }\r\n if (length === undefined) {\r\n length = bytes.length;\r\n }\r\n const lengthMinusBlock = length - this.blockSize;\r\n let n = 0;\r\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n const buf = this.buf_;\r\n let inbuf = this.inbuf_;\r\n // The outer while loop should execute at most twice.\r\n while (n < length) {\r\n // When we have no data in the block to top up, we can directly process the\r\n // input buffer (assuming it contains sufficient data). This gives ~25%\r\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n // the data is provided in large chunks (or in multiples of 64 bytes).\r\n if (inbuf === 0) {\r\n while (n <= lengthMinusBlock) {\r\n this.compress_(bytes, n);\r\n n += this.blockSize;\r\n }\r\n }\r\n if (typeof bytes === 'string') {\r\n while (n < length) {\r\n buf[inbuf] = bytes.charCodeAt(n);\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n while (n < length) {\r\n buf[inbuf] = bytes[n];\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.inbuf_ = inbuf;\r\n this.total_ += length;\r\n }\r\n /** @override */\r\n digest() {\r\n const digest = [];\r\n let totalBits = this.total_ * 8;\r\n // Add pad 0x80 0x00*.\r\n if (this.inbuf_ < 56) {\r\n this.update(this.pad_, 56 - this.inbuf_);\r\n }\r\n else {\r\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n }\r\n // Add # bits.\r\n for (let i = this.blockSize - 1; i >= 56; i--) {\r\n this.buf_[i] = totalBits & 255;\r\n totalBits /= 256; // Don't use bit-shifting here!\r\n }\r\n this.compress_(this.buf_);\r\n let n = 0;\r\n for (let i = 0; i < 5; i++) {\r\n for (let j = 24; j >= 0; j -= 8) {\r\n digest[n] = (this.chain_[i] >> j) & 255;\r\n ++n;\r\n }\r\n }\r\n return digest;\r\n }\r\n}\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n const proxy = new ObserverProxy(executor, onNoObservers);\r\n return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nclass ObserverProxy {\r\n /**\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\n constructor(executor, onNoObservers) {\r\n this.observers = [];\r\n this.unsubscribes = [];\r\n this.observerCount = 0;\r\n // Micro-task scheduling by calling task.then().\r\n this.task = Promise.resolve();\r\n this.finalized = false;\r\n this.onNoObservers = onNoObservers;\r\n // Call the executor asynchronously so subscribers that are called\r\n // synchronously after the creation of the subscribe function\r\n // can still receive the very first value generated in the executor.\r\n this.task\r\n .then(() => {\r\n executor(this);\r\n })\r\n .catch(e => {\r\n this.error(e);\r\n });\r\n }\r\n next(value) {\r\n this.forEachObserver((observer) => {\r\n observer.next(value);\r\n });\r\n }\r\n error(error) {\r\n this.forEachObserver((observer) => {\r\n observer.error(error);\r\n });\r\n this.close(error);\r\n }\r\n complete() {\r\n this.forEachObserver((observer) => {\r\n observer.complete();\r\n });\r\n this.close();\r\n }\r\n /**\r\n * Subscribe function that can be used to add an Observer to the fan-out list.\r\n *\r\n * - We require that no event is sent to a subscriber sychronously to their\r\n * call to subscribe().\r\n */\r\n subscribe(nextOrObserver, error, complete) {\r\n let observer;\r\n if (nextOrObserver === undefined &&\r\n error === undefined &&\r\n complete === undefined) {\r\n throw new Error('Missing Observer.');\r\n }\r\n // Assemble an Observer object when passed as callback functions.\r\n if (implementsAnyMethods(nextOrObserver, [\r\n 'next',\r\n 'error',\r\n 'complete'\r\n ])) {\r\n observer = nextOrObserver;\r\n }\r\n else {\r\n observer = {\r\n next: nextOrObserver,\r\n error,\r\n complete\r\n };\r\n }\r\n if (observer.next === undefined) {\r\n observer.next = noop;\r\n }\r\n if (observer.error === undefined) {\r\n observer.error = noop;\r\n }\r\n if (observer.complete === undefined) {\r\n observer.complete = noop;\r\n }\r\n const unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n // Attempt to subscribe to a terminated Observable - we\r\n // just respond to the Observer with the final error or complete\r\n // event.\r\n if (this.finalized) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n try {\r\n if (this.finalError) {\r\n observer.error(this.finalError);\r\n }\r\n else {\r\n observer.complete();\r\n }\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n return;\r\n });\r\n }\r\n this.observers.push(observer);\r\n return unsub;\r\n }\r\n // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n // any unsubscribed Observer.\r\n unsubscribeOne(i) {\r\n if (this.observers === undefined || this.observers[i] === undefined) {\r\n return;\r\n }\r\n delete this.observers[i];\r\n this.observerCount -= 1;\r\n if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n this.onNoObservers(this);\r\n }\r\n }\r\n forEachObserver(fn) {\r\n if (this.finalized) {\r\n // Already closed by previous event....just eat the additional values.\r\n return;\r\n }\r\n // Since sendOne calls asynchronously - there is no chance that\r\n // this.observers will become undefined.\r\n for (let i = 0; i < this.observers.length; i++) {\r\n this.sendOne(i, fn);\r\n }\r\n }\r\n // Call the Observer via one of it's callback function. We are careful to\r\n // confirm that the observe has not been unsubscribed since this asynchronous\r\n // function had been queued.\r\n sendOne(i, fn) {\r\n // Execute the callback asynchronously\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n if (this.observers !== undefined && this.observers[i] !== undefined) {\r\n try {\r\n fn(this.observers[i]);\r\n }\r\n catch (e) {\r\n // Ignore exceptions raised in Observers or missing methods of an\r\n // Observer.\r\n // Log error to console. b/31404806\r\n if (typeof console !== 'undefined' && console.error) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n close(err) {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n if (err !== undefined) {\r\n this.finalError = err;\r\n }\r\n // Proxy is no longer needed - garbage collect references\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n this.observers = undefined;\r\n this.onNoObservers = undefined;\r\n });\r\n }\r\n}\r\n/** Turn synchronous function into one called asynchronously. */\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction async(fn, onError) {\r\n return (...args) => {\r\n Promise.resolve(true)\r\n .then(() => {\r\n fn(...args);\r\n })\r\n .catch((error) => {\r\n if (onError) {\r\n onError(error);\r\n }\r\n });\r\n };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n for (const method of methods) {\r\n if (method in obj && typeof obj[method] === 'function') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction noop() {\r\n // do nothing\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param fnName The function name\r\n * @param minCount The minimum number of arguments to allow for the function call\r\n * @param maxCount The maximum number of argument to allow for the function call\r\n * @param argCount The actual number of arguments provided.\r\n */\r\nconst validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n let argError;\r\n if (argCount < minCount) {\r\n argError = 'at least ' + minCount;\r\n }\r\n else if (argCount > maxCount) {\r\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n }\r\n if (argError) {\r\n const error = fnName +\r\n ' failed: Was called with ' +\r\n argCount +\r\n (argCount === 1 ? ' argument.' : ' arguments.') +\r\n ' Expects ' +\r\n argError +\r\n '.';\r\n throw new Error(error);\r\n }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param fnName The function name\r\n * @param argName The name of the argument\r\n * @return The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argName) {\r\n return `${fnName} failed: ${argName} argument `;\r\n}\r\n/**\r\n * @param fnName\r\n * @param argumentNumber\r\n * @param namespace\r\n * @param optional\r\n */\r\nfunction validateNamespace(fnName, namespace, optional) {\r\n if (optional && !namespace) {\r\n return;\r\n }\r\n if (typeof namespace !== 'string') {\r\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');\r\n }\r\n}\r\nfunction validateCallback(fnName, argumentName, \r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\ncallback, optional) {\r\n if (optional && !callback) {\r\n return;\r\n }\r\n if (typeof callback !== 'function') {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');\r\n }\r\n}\r\nfunction validateContextObject(fnName, argumentName, context, optional) {\r\n if (optional && !context) {\r\n return;\r\n }\r\n if (typeof context !== 'object' || context === null) {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript. All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nconst stringToByteArray = function (str) {\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n // Is this the lead surrogate in a surrogate pair?\r\n if (c >= 0xd800 && c <= 0xdbff) {\r\n const high = c - 0xd800; // the high 10 bits.\r\n i++;\r\n assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n c = 0x10000 + (high << 10) + low;\r\n }\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if (c < 65536) {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nconst stringLength = function (str) {\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const c = str.charCodeAt(i);\r\n if (c < 128) {\r\n p++;\r\n }\r\n else if (c < 2048) {\r\n p += 2;\r\n }\r\n else if (c >= 0xd800 && c <= 0xdbff) {\r\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\r\n p += 4;\r\n i++; // skip trail surrogate.\r\n }\r\n else {\r\n p += 3;\r\n }\r\n }\r\n return p;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Copied from https://stackoverflow.com/a/2117523\r\n * Generates a new uuid.\r\n * @public\r\n */\r\nconst uuidv4 = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The amount of milliseconds to exponentially increase.\r\n */\r\nconst DEFAULT_INTERVAL_MILLIS = 1000;\r\n/**\r\n * The factor to backoff by.\r\n * Should be a number greater than 1.\r\n */\r\nconst DEFAULT_BACKOFF_FACTOR = 2;\r\n/**\r\n * The maximum milliseconds to increase to.\r\n *\r\n *

Visible for testing\r\n */\r\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\r\n/**\r\n * The percentage of backoff time to randomize by.\r\n * See\r\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\r\n * for context.\r\n *\r\n *

Visible for testing\r\n */\r\nconst RANDOM_FACTOR = 0.5;\r\n/**\r\n * Based on the backoff method from\r\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\r\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\r\n */\r\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\r\n // Calculates an exponentially increasing value.\r\n // Deviation: calculates value from count and a constant interval, so we only need to save value\r\n // and count to restore state.\r\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\r\n // A random \"fuzz\" to avoid waves of retries.\r\n // Deviation: randomFactor is required.\r\n const randomWait = Math.round(\r\n // A fraction of the backoff value to add/subtract.\r\n // Deviation: changes multiplication order to improve readability.\r\n RANDOM_FACTOR *\r\n currBaseValue *\r\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\r\n // if we add or subtract.\r\n (Math.random() - 0.5) *\r\n 2);\r\n // Limits backoff to max to avoid effectively permanent backoff.\r\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provide English ordinal letters after a number\r\n */\r\nfunction ordinal(i) {\r\n if (!Number.isFinite(i)) {\r\n return `${i}`;\r\n }\r\n return i + indicator(i);\r\n}\r\nfunction indicator(i) {\r\n i = Math.abs(i);\r\n const cent = i % 100;\r\n if (cent >= 10 && cent <= 20) {\r\n return 'th';\r\n }\r\n const dec = i % 10;\r\n if (dec === 1) {\r\n return 'st';\r\n }\r\n if (dec === 2) {\r\n return 'nd';\r\n }\r\n if (dec === 3) {\r\n return 'rd';\r\n }\r\n return 'th';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getModularInstance(service) {\r\n if (service && service._delegate) {\r\n return service._delegate;\r\n }\r\n else {\r\n return service;\r\n }\r\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, uuidv4, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin \n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\n}\n","'use strict'\n\nmodule.exports = function encodeUtf8 (input) {\n var result = []\n var size = input.length\n\n for (var index = 0; index < size; index++) {\n var point = input.charCodeAt(index)\n\n if (point >= 0xD800 && point <= 0xDBFF && size > index + 1) {\n var second = input.charCodeAt(index + 1)\n\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n point = (point - 0xD800) * 0x400 + second - 0xDC00 + 0x10000\n index += 1\n }\n }\n\n // US-ASCII\n if (point < 0x80) {\n result.push(point)\n continue\n }\n\n // 2-byte UTF-8\n if (point < 0x800) {\n result.push((point >> 6) | 192)\n result.push((point & 63) | 128)\n continue\n }\n\n // 3-byte UTF-8\n if (point < 0xD800 || (point >= 0xE000 && point < 0x10000)) {\n result.push((point >> 12) | 224)\n result.push(((point >> 6) & 63) | 128)\n result.push((point & 63) | 128)\n continue\n }\n\n // 4-byte UTF-8\n if (point >= 0x10000 && point <= 0x10FFFF) {\n result.push((point >> 18) | 240)\n result.push(((point >> 12) & 63) | 128)\n result.push(((point >> 6) & 63) | 128)\n result.push((point & 63) | 128)\n continue\n }\n\n // Invalid character\n result.push(0xEF, 0xBF, 0xBD)\n }\n\n return new Uint8Array(result).buffer\n}\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '